iOS中的App安全-應(yīng)用簽名和重簽名

探討iOS應(yīng)用簽名之前性含,首先我們需要了解一個(gè)東西,叫做數(shù)字簽名

數(shù)字簽名

名詞解釋:為什么用簽名這個(gè)詞墓塌,因?yàn)槔贤庀矚g用支票,支票上面的簽名能夠證明這玩意是你的建车。那么數(shù)字簽名顧名思義,就是用于鑒別數(shù)字信息的方法。

我們來思考一下瞒大,想要證明數(shù)字信息(二進(jìn)制數(shù)據(jù),或計(jì)算機(jī)里面的任意數(shù)據(jù))的有效性搪桂,那么使用什么方式最合適呢透敌?

可以想到有信息指紋之稱的HASH算法。在網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)倪^程中踢械,我們可以將明文數(shù)據(jù)酗电,和數(shù)據(jù)的HASH值一起傳輸給對(duì)方,對(duì)方可以拿出HASH值來進(jìn)行驗(yàn)證内列。

但是在這個(gè)過程中撵术,明文數(shù)據(jù)和HASH值如果直接傳輸就都有被篡改的風(fēng)險(xiǎn),所以我們需要對(duì)數(shù)據(jù)進(jìn)行加密话瞧。

明文數(shù)據(jù)有時(shí)會(huì)比較大荷荤,不適合使用RSA非對(duì)稱加密算法,但是數(shù)據(jù)的HASH值是比較小的移稳,用于校驗(yàn)的蕴纳,它完全可以使用RSA來加密。所以在數(shù)據(jù)傳輸時(shí)个粱,我們將明文數(shù)據(jù)加上通過RSA加密的校驗(yàn)數(shù)據(jù)一并傳輸給對(duì)方古毛。這個(gè)通過RSA加密的校驗(yàn)數(shù)據(jù),我們稱之為簽名都许。

數(shù)字簽名

數(shù)字簽名的驗(yàn)證過程

當(dāng)對(duì)方拿到數(shù)據(jù)之后稻薇,如何進(jìn)行驗(yàn)證呢?

首先傳輸數(shù)據(jù)時(shí)會(huì)將原始的數(shù)據(jù)和數(shù)字簽名一起發(fā)送胶征。

對(duì)方拿到數(shù)據(jù)后塞椎,先進(jìn)行校驗(yàn)。拿到原始數(shù)據(jù)睛低,通過同樣的HASH算法得到數(shù)據(jù)的HASH值案狠。然后通過非對(duì)稱加密,將數(shù)字簽名中校驗(yàn)HASH值解密出來钱雷。

最后對(duì)比兩個(gè)HASH值是否一致骂铁,這樣可以很好的判斷數(shù)據(jù)是否被篡改。

數(shù)字簽名驗(yàn)證

代碼簽名

名詞解釋:代碼簽名是對(duì)可執(zhí)行文件或腳本進(jìn)行數(shù)字簽名罩抗。用來確認(rèn)軟件在簽名后未被修改或損壞的措施拉庵,和數(shù)字簽名原理一樣,只不過簽名的數(shù)據(jù)是代碼而已套蒂。

簡(jiǎn)單的代碼簽名

在iOS出來之前钞支,以前的主流操作系統(tǒng)(Mac/Windows)軟件隨便從哪里下載都能運(yùn)行茫蛹,系統(tǒng)安全存在隱患,盜版軟件烁挟,病毒入侵婴洼,靜默安裝等等。蘋果希望解決這樣的問題信夫,保證每一個(gè)安裝到iOS上的App都是經(jīng)過蘋果官方允許的,怎樣保證呢卡啰?就是通過代碼簽名静稻。

如果要實(shí)現(xiàn)驗(yàn)證,最簡(jiǎn)單的方式就是通過蘋果官方生成非對(duì)稱加密的一對(duì)公私鑰匈辱。在iOS系統(tǒng)中內(nèi)置一個(gè)公鑰振湾,私鑰由蘋果后臺(tái)保存,我們傳App到App Store時(shí)亡脸,蘋果后臺(tái)用私鑰對(duì)App進(jìn)行簽名押搪,iOS系統(tǒng)下載這個(gè)App后,用公鑰驗(yàn)證這個(gè)簽名浅碾,若簽名正確大州,這個(gè)App肯定是由蘋果后臺(tái)認(rèn)證的,并且沒有被修改過垂谢,也就達(dá)到了蘋果的需求:保證安裝的每一個(gè)App都是經(jīng)過蘋果官方允許的厦画。

如果我們iOS設(shè)備安裝App只有App Store這一個(gè)入口,這件事就解決了滥朱。但是實(shí)際上iOS安裝App還有其他渠道根暑,比如對(duì)于iOS開發(fā)者而言,是需要在開發(fā)App時(shí)直接真機(jī)調(diào)試的徙邻。而且蘋果還開放了企業(yè)內(nèi)部分發(fā)的渠道排嫌,企業(yè)證書簽名的App也是需要順利安裝的。

蘋果需要開發(fā)這些方式安裝App缰犁,這些需求就無法通過簡(jiǎn)單的代碼簽名來做到了淳地。

蘋果的需求:
1.安裝包不需要上傳到App Store,可以直接安裝到手機(jī)上帅容。
2.蘋果為了保證系統(tǒng)的安全性薇芝,又必須對(duì)安裝的App有絕對(duì)的控制權(quán)。
3.經(jīng)過蘋果允許才可以安裝丰嘉。
4.不能被濫用導(dǎo)致非開發(fā)App也能被安裝夯到。

為了實(shí)現(xiàn)以上需求,iOS簽名的復(fù)雜度也就開始增加了饮亏,蘋果這里給出的方案是雙層代碼簽名耍贾。

雙層代碼簽名

iOS的雙層代碼簽名流程這里簡(jiǎn)單梳理一下阅爽,這也不是最終的iOS簽名原理。iOS的最終簽名原理在這個(gè)基礎(chǔ)上還要稍微加點(diǎn)東西荐开,文末會(huì)講付翁。

首先這里有兩個(gè)角色,一個(gè)是iOS系統(tǒng)晃听,還有一個(gè)就是我們的Mac系統(tǒng)百侧。因?yàn)閕OS的App開發(fā)環(huán)境在Mac系統(tǒng)下。所以這個(gè)依賴關(guān)系成為了蘋果雙層簽名的基礎(chǔ)能扒。

1.在Mac系統(tǒng)中生成非對(duì)稱加密算法的一對(duì)公鑰\私鑰(Xcode幫忙代辦了)佣渴,這里稱為公鑰M、私鑰M初斑。M=Mac

公鑰M私鑰M

2.蘋果自己有固定的一對(duì)公私鑰辛润,跟之前App Store原理一樣,私鑰在蘋果后臺(tái)见秤,公鑰在每個(gè)iOS系統(tǒng)中砂竖。這里稱之為公鑰A,私鑰A鹃答。A=Apple

image.png

3.把公鑰M以及一些你開發(fā)者的信息乎澄,傳到蘋果后臺(tái)(這個(gè)就是CSR文件),用蘋果后臺(tái)里的私鑰A去簽名公鑰M测摔。得到一份數(shù)據(jù)包含了公鑰M以及其簽名三圆,把這份數(shù)據(jù)稱為證書

申請(qǐng)證書

4.在開發(fā)時(shí)避咆,編譯完一個(gè)App后舟肉,用本地的私鑰M(今后你導(dǎo)出的P12)對(duì)這個(gè)App進(jìn)行簽名,同時(shí)把第三步得到的證書一起打包進(jìn)App里查库,安裝到手機(jī)上路媚。

image.png

5.在安裝時(shí),iOS系統(tǒng)取得證書樊销,通過系統(tǒng)內(nèi)置的公鑰A整慎,去驗(yàn)證證書的數(shù)字簽名是否正確。

6.驗(yàn)證證書后確保了公鑰M是蘋果認(rèn)證過的围苫,再用公鑰M去驗(yàn)證App的簽名裤园,這里就間接驗(yàn)證了這個(gè)App安裝行為是否經(jīng)過蘋果官方允許。(這里只驗(yàn)證安裝行為剂府,不驗(yàn)證App是否被改動(dòng)拧揽,因?yàn)殚_發(fā)階段App內(nèi)容總是不斷變化的,蘋果不需要管。)

image.png

有了上面的過程淤袜,已經(jīng)可以保證開發(fā)者的認(rèn)證痒谴,以及程序的安全性了。但是铡羡,你要知道iOS的程序积蔚,主要渠道是要通過App Store才能分發(fā)到用戶設(shè)備的,如果只有上述的過程烦周,那豈不是只要申請(qǐng)了一個(gè)證書尽爆,就可以安裝到所有的iOS設(shè)備了?所以為了防止濫用读慎,蘋果再加了幾個(gè)限制漱贱。這就是我們后面要講的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贪壳,一起剝皮案震驚了整個(gè)濱河市饱亿,隨后出現(xiàn)的幾起案子蚜退,更是在濱河造成了極大的恐慌闰靴,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钻注,死亡現(xiàn)場(chǎng)離奇詭異蚂且,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)幅恋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門杏死,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捆交,你說我怎么就攤上這事淑翼。” “怎么了品追?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵玄括,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我肉瓦,道長(zhǎng)遭京,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任泞莉,我火速辦了婚禮哪雕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鲫趁。我一直安慰自己斯嚎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著孝扛,像睡著了一般列吼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上苦始,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天寞钥,我揣著相機(jī)與錄音,去河邊找鬼陌选。 笑死理郑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的咨油。 我是一名探鬼主播您炉,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼役电!你這毒婦竟也來了赚爵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤法瑟,失蹤者是張志新(化名)和其女友劉穎冀膝,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霎挟,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窝剖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了酥夭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赐纱。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖熬北,靈堂內(nèi)的尸體忽然破棺而出疙描,到底是詐尸還是另有隱情,我是刑警寧澤讶隐,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布起胰,位于F島的核電站,受9級(jí)特大地震影響整份,放射性物質(zhì)發(fā)生泄漏待错。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一烈评、第九天 我趴在偏房一處隱蔽的房頂上張望火俄。 院中可真熱鬧,春花似錦讲冠、人聲如沸瓜客。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谱仪。三九已至玻熙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疯攒,已是汗流浹背嗦随。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敬尺,地道東北人枚尼。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像砂吞,于是被迫代替她去往敵國(guó)和親署恍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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