iOS代碼簽名機制分析(1)基礎(chǔ)

基礎(chǔ)知識介紹會結(jié)合OpenSSL命令行工具實踐,iMac環(huán)境可以使用brew或其它方式安裝OpenSSL工具。

一,整個互聯(lián)網(wǎng)世界的安全基石。

整個互聯(lián)網(wǎng)的安全基石目前來說,個人認為是“非對稱加密算法”+“信息摘要算法”+“數(shù)字證書機制”,對于開發(fā)并運行在iOS系統(tǒng)上的App程序來說,蘋果公司也是采取以上方式來保證iOS系統(tǒng)上運行的App的合法性。因此,第一章節(jié)會介紹以上三種技術(shù)。

1,非對稱加密算法。

一般傳統(tǒng)的加密方式,通信的雙發(fā)均需要知曉加密的方法和密鑰,在相同規(guī)則下,對明文進行加解密。典型案例就是常見的諜戰(zhàn)片里面,使用圣經(jīng)的單詞序加解密、數(shù)學運算規(guī)則加解密等。這樣的方式常見的問題就是通信雙方都必須掌握到密鑰,有可能存在密鑰在交換途中被截獲,或者被有明文和密文的破解。
因為數(shù)論理論而發(fā)明的非對稱加密算法很好的解決了對稱加密算法的問題。非對稱加密的密鑰有兩個,一個私鑰,一個公鑰。私鑰僅能發(fā)信者自己持有,公鑰可以四處傳播,任何想和你加密通信的人,都可以使用公鑰加密,將密文傳遞給你,你可以通過私鑰來解密讀取密文。
通過公鑰,是無法計算出私鑰的(或者說現(xiàn)有計算能力需要很長時間才能破解,配合一定的安全策略,如定期更換密鑰就可以規(guī)避)。RSA加密算法是目前廣泛使用的非對稱加密算法,一般RSA算法私鑰的二進制位數(shù)超過1024位,現(xiàn)有計算能力的計算機需要超過幾十年才能通過公鑰來找到私鑰。
openssl工具能夠幫助我們生成RSA的公鑰和私鑰,我們通過一個實驗來看看如何使用公鑰和私鑰加解密明文。在安裝了openssl命令行工具的shell下面,執(zhí)行下面的操作,對sign.txt文本明文進行加解密操作:
(1)首先,使用openssl生成RSA的1024位二進制私鑰apri.key

#openssl genrsa -out apri.key 1024

(2)然后,openssl使用私有代碼生成對應(yīng)的共鑰apub.key

#openssl rsa -in apri.key -pubout -out apub.key

(3)公鑰一般發(fā)送給別人,讓別人使用公鑰加密,這里使用公鑰加密sign.txt,密文sign.en。

#openssl rsautl -encrypt -in sign.txt -inkey apub.key -pubin -out sign.en

(4)密文sign.en可以通過私鑰解密,得到明文sign.de。

#openssl rsautl -decrypt-in sign.en -inkey apri.key -out sign.de

2,信息摘要算法。

根據(jù)百度百科的說明

“摘要算法是一種能產(chǎn)生特殊輸出格式的算法,這種算法的特點是:無論用戶輸入什么長度的原始數(shù)據(jù),經(jīng)過計算后輸出的密文都是固定長度的,這種算法的原理是根據(jù)一定的運算規(guī)則對原數(shù)據(jù)進行某種形式的提取,這種提取就是摘要,被摘要的數(shù)據(jù)內(nèi)容與原數(shù)據(jù)有密切聯(lián)系,只要原數(shù)據(jù)稍有改變,輸出的“摘要”便完全不同,因此,基于這種原理的算法便能對數(shù)據(jù)完整性提供較為健全的保障。但是,由于輸出的密文是提取原數(shù)據(jù)經(jīng)過處理的定長值,所以它已經(jīng)不能還原為原數(shù)據(jù),即消息摘要算法是不可逆的,理論上無法通過反向運算取得原數(shù)據(jù)內(nèi)容,因此它通常只能被用來做數(shù)據(jù)完整性驗證。”

你只用了解兩點
(1)輸入源的長短可以不同,輸出摘要信息長度相同。
(2)不同輸入源對應(yīng)不同的摘要信息。

因此,對于明文,摘要信息可以做為傳輸后的校驗使用。我們利用openssl工具,同樣來看看信息摘要算法:

//實際使用的sha1算法,從任何長度的文筆中,取得唯一的定長摘要信息sign.sha:
#openssl dgst -sha1 -out sign.sha sign.txt

如果我們修改了sign.txt的內(nèi)容,重復執(zhí)行以上命令,那么將得到不同的sign.sha。

3,數(shù)字證書。

數(shù)字證書是一個經(jīng)證書授權(quán)中心數(shù)字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件。最簡單的證書包含一個公開密鑰、名稱以及證書授權(quán)中心的數(shù)字簽名。
簡單來說,證書就是證明非對稱算法里的公鑰的合法性,這一合法性,由發(fā)證機構(gòu)來保證(技術(shù)保證和管理保證)。我們只要使用合法數(shù)字證書上的公鑰,和證書里公鑰擁有者進行通信的話,就保證了這一通信通路的安全和可靠。關(guān)于數(shù)字證書的詳細技術(shù)細節(jié)這里不多做介紹,讀者可以根據(jù)非對稱加密,信息摘要算法的知識去學習了解證書的合法性技術(shù)保證過程。蘋果系統(tǒng)通過keychain應(yīng)用來管理數(shù)字證書。

二,iOS APP的代碼簽名機制。

這一章首先會介紹一下數(shù)字簽名機制,然后會介紹下iOS里面的代碼簽名機制。這里面會使用到第一章里面的知識和概念,請讀者先保證第一章熟練掌握的情況下,再進入這一章節(jié)的實踐和學習。

1,數(shù)字簽名機制。

數(shù)字簽名實際上由兩個過程組成,發(fā)送方簽名過程和接收方驗簽過程。這兩個過程使用了上面介紹的非對稱加密算法和信息摘要算法來實現(xiàn)。目的,就是保證發(fā)送方信息的完整性和真實性(沒有被中間者攻擊所偽造)。通過下圖數(shù)字簽名過程圖解,我們可以看看詳細的過程:

數(shù)字簽名的過程

(1)發(fā)送方對于發(fā)送的信息進行簽名的過程。圖中藍色框里的發(fā)送信息,我們首先做信息摘要算法,計算出一個固定長度的摘要信息,然后使用非對稱加密算法的持有的私鑰進行加密(注意,這里是私鑰加密,與信息傳遞過程私鑰解密是不一樣的),得到加密后的數(shù)字簽名信息。

(2)該數(shù)字簽名信息和發(fā)送信息一起發(fā)送給接收方進行數(shù)字驗證簽名過程。接收方使用非對稱加密的公鑰對數(shù)字簽名信息進行解密,得到D‘,然后對發(fā)送過來的信息進行信息摘要,得到D。比對D和D‘,如果一致,就證明簽名通過。

以上過程,保證了發(fā)送的信息在傳播過程中,沒有發(fā)生變化或者被替換。我們同樣可以使用openssl工具來模擬這一過程,我們繼續(xù)使用第一章介紹的RSA加密得到的公鑰和私鑰進行試驗:

// 1 首先,使用私鑰apri.key對信息摘要sign.sha進行簽名加密得到signature.bin。
#openssl rsautl -sign -inkey apri.key -in sign.sha -out signature.bin

// 2 然后,使用公鑰apub.key對加密后的密文進行驗簽,會解密出摘要sign2.sha。
#openssl rsautl -verify -pubin -inkey apub.key -in signature.bin -out sign2.sha

// 3 最后,使用diff工具,比對一下前后兩個摘要是否一致。
#diff sign.sha sign2.sha 

2,iOS的代碼簽名機制。

iOS系統(tǒng)使用數(shù)字簽名機制保證了運行在iOS系統(tǒng)中代碼的合法性和完整性。當使用XCode開發(fā)環(huán)境,編寫好APP后。所有的代碼或者圖片素材就是我們需要簽名的信息源,我們使用摘要算法對這些信息源進行摘要,然后使用私鑰對這些簽名進行簽名。這些程序和素材資源經(jīng)過簽名后會和公鑰一起打包成ipa包,在iOS系統(tǒng)載入運行的時候,使用公鑰對程序和素材驗簽,保證程序和信息的合法和完整,通過之后就能夠在iOS上運行了。這就是iOS的代碼簽名機制。
讀完以上的話,請稍微冷靜的思考一下,上面描述的這段過程所存在的問題。
(1)RSA的公鑰和私鑰從何而來?
(2)iOS設(shè)備如何保證該公鑰和私鑰有權(quán)限對代碼進行簽名和驗簽操作?

請結(jié)合蘋果的開發(fā)者證書獲取過程,來思考下iOS代碼簽名的過程,及以上兩個問題的答案,在本系列的第二篇文章會給出詳細解答和描述,這里考察下讀者的自學和專研能力。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,143評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,553評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,416評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,940評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,170評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,709評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,597評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,029評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,403評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,746評論 2 370

推薦閱讀更多精彩內(nèi)容