iOS安全--APP代碼簽名機(jī)制

學(xué)習(xí)路線(內(nèi)部分享內(nèi)容)

  1. 加密解密(對稱加密、非對稱加密呀袱、混合加密)
  2. 單向散列函數(shù)
  3. 數(shù)字簽名
  4. 證書
  5. iOS簽名機(jī)制

參考資料與圖片來源:
《圖解密碼技術(shù)第三版》
iOS App 簽名的原理
Apple簽名機(jī)制官方指南
深入理解代碼簽名機(jī)制

1. 加密解密

為什么需要加密贸毕?
image.png
image.png
image.png
對稱加密
  • 什么是對稱加密?
    - 就是指加密和解密時(shí)使用的密鑰都是同一個(gè)夜赵,是“對稱”的明棍。


    image.png
  • 常見算法:
    • DES(數(shù)據(jù)加密標(biāo)準(zhǔn),Data Encryption Standard)<不安全>
    • 3DES(3次DES加密解密)<不安全寇僧,性能不好>
    • AES(高級加密標(biāo)準(zhǔn)摊腋,Advanced Encryption Standard)<安全、目前首選>
  • 存在密鑰配送問題:
    • 對稱加密看上去好像完美地實(shí)現(xiàn)了機(jī)密性嘁傀,但其中有一個(gè)很大的問題:如何把密鑰安全地傳遞給對方兴蒸,術(shù)語叫“密鑰交換”,因?yàn)橹型居锌赡鼙缓诳蛿r截细办,黑客知道了密鑰橙凳,那就能解密,也不安全笑撞。
  • 如何解決密鑰配送問題:
    • 事先共享密鑰(線下安全方式)
    • 密鑰分配中心
    • Diffie-Hellman密鑰交換算法
    • 非對稱加密(公鑰密碼)
非對稱加密 (也叫 公鑰密碼加密)

非對稱加密代表加密和解密使用不同的密鑰岛啸。具體的加解密過程就是,由發(fā)送方生成一對公鑰與私鑰娃殖,公鑰可以公開給所有發(fā)送方值戳,私鑰自己保存。發(fā)送方使用公鑰對信息進(jìn)行加密炉爆,接收方收到密文后,使用私鑰進(jìn)行解密即可

  • 加密密鑰,一般是公開的芬首,因此該密鑰稱為公鑰(public key)
  • 解密密鑰赴捞,由消息接收者自己保管的,不能公開郁稍,因此也稱為私鑰(private key)
  • 公鑰和私鑰是一 一對應(yīng)的赦政,是不能單獨(dú)生成的,一對公鑰和密鑰統(tǒng)稱為密鑰對(key pair)
  • 由公鑰加密的密文耀怜,必須使用與該公鑰對應(yīng)的私鑰才能解密
  • 由私鑰加密的密文恢着,必須使用與該私鑰對應(yīng)的公鑰才能解密


    image.png
  • 常用算法:
    • RSA(RSA 加密算法,RSA Algorithm)
      • RSA 的數(shù)學(xué)難題是:兩個(gè)大質(zhì)數(shù) p财破、q 相乘的結(jié)果 n 很容易計(jì)算掰派,但是根據(jù) n 去做質(zhì)因數(shù)分解得到 p、q左痢,則需要很大的計(jì)算量靡羡。RSA 是比較經(jīng)典的非對稱加密算法,它的主要優(yōu)勢就是性能比較快俊性,但想獲得較高的加密強(qiáng)度略步,需要使用很長的密鑰。
    • ECC(橢圓加密算法定页,Elliptic Curve Cryptography)
      • ECC 是基于橢圓曲線的一個(gè)數(shù)學(xué)難題設(shè)計(jì)的趟薄。目前學(xué)術(shù)界普遍認(rèn)為,橢圓曲線的難度高于大質(zhì)數(shù)難題典徊,160 位密鑰的 ECC 加密強(qiáng)度竟趾,相當(dāng)于 1088 位密鑰的 RSA,比 RSA 所需的密鑰長度短宫峦。ECC 是目前國際上加密強(qiáng)度最高的非對稱加密算法岔帽。
  • 存在問題:
    • 公鑰密碼雖然解決了密鑰配送的問題,但是存在以下問題:1导绷、性能問題犀勒,處理速度不到對稱加密的十分之一(使用混合加密的方式解決);2妥曲、公鑰認(rèn)證問題(證書技術(shù))
混合加密(HTTPS中SSL/TLS使用這種方式)
  • 加密步驟(發(fā)送消息)
  1. 首先贾费,消息發(fā)送者要擁有消息接收者的公鑰
  2. 生成會(huì)話密鑰,作為對稱密碼的密鑰檐盟,加密消息
  3. 用消息接收者的公鑰褂萧,加密會(huì)話密鑰
  4. 將前2步生成的加密結(jié)果,一并發(fā)給消息接收者

會(huì)話密鑰(session key)
為本次通信隨機(jī)生成的臨時(shí)密鑰(偽隨機(jī)數(shù)生成器)
作為對稱密碼的密鑰葵萎,用于加密消息导犹,提高速度

  • 發(fā)送出去的內(nèi)容包括
  1. 用會(huì)話密鑰加密的消息(加密方法:對稱密碼)
  2. 用公鑰加密的會(huì)話密鑰(加密方法:公鑰密碼)


    image.png

  • 解密步驟(收到消息)
  1. 消息接收者用自己的私鑰解密出會(huì)話密鑰
  2. 再用第1步解密出來的會(huì)話密鑰唱凯,解密消息
    image.png

2. 單向散列函數(shù)(消息摘要函數(shù)、指紋谎痢、哈希函數(shù))

  • 單向函數(shù)(One-way Function)是正向計(jì)算容易磕昼,逆向運(yùn)算困難的函數(shù)。也就是說节猿,給定你一個(gè)輸入票从,你很容易計(jì)算出輸出;但是給定你一個(gè)輸出滨嘱,你卻很難計(jì)算出輸入是什么峰鄙。顧名思義,滿足“單向”和“散列”的特性


    image.png
  • 特點(diǎn)
    1. 正向計(jì)算容易太雨,逆向運(yùn)算困難
    2. 運(yùn)算結(jié)果均勻分布吟榴,構(gòu)造碰撞困難(已知源數(shù)據(jù)和散列值,想找到一個(gè)具有相同值得數(shù)據(jù)非常困難)
    3. 給定的數(shù)據(jù)散列值是確定的躺彬,長度是固定的
  • 常用算法
    • MD5(消息摘要算法煤墙,Message-Digest Algorithm 5)(不安全了)
    • SHA(安全散列算法,Secure Hash Algorithm)<目前流行SHA-256宪拥、SHA-384仿野、SHA-512>
  • 解決什么問題?(應(yīng)用場景)
    1. 防止數(shù)據(jù)被篡改(校驗(yàn)數(shù)據(jù)完整性)


      image.png
    2. 口令密碼(密碼為散列值存儲而非明文存儲)

3. 數(shù)字簽名

  • 基本概念

    • 數(shù)字簽名是解決如何能證明數(shù)據(jù)內(nèi)容沒有竄改她君,防止抵賴脚作。
  • 數(shù)字簽名的實(shí)現(xiàn)原理

    • 把公鑰私鑰的用法反過來,之前是公鑰加密缔刹、私鑰解密球涛,現(xiàn)在是私鑰加密、公鑰解密校镐。
    • 因?yàn)樗借€只有消息發(fā)送者擁有亿扁,公鑰任何人都有消息接收者也有。
    • 用公鑰解密后比對一致就沒有被篡改
  • 在數(shù)字簽名技術(shù)中鸟廓,有以下2種行為

    1. 生成簽名:由消息的發(fā)送者完成从祝,通過“簽名密鑰”生成
    2. 驗(yàn)證簽名:由消息的接收者完成,通過“驗(yàn)證密鑰”驗(yàn)證
  • 簽名過程圖


    image.png
  • 存在問題(無法解決的問題)

    • 要正確使用簽名引谜,前提是用于驗(yàn)證簽名的公鑰必須屬于真正的發(fā)送者

    • 如果遭遇了中間人攻擊牍陌,那么公鑰將是偽造的,數(shù)字簽名將失效


      image.png
    • 所以在驗(yàn)證簽名之前员咽,首先得先驗(yàn)證公鑰的合法性(真實(shí)性毒涧,沒被中間人攻擊)

      • 使用證書技術(shù)

4. 數(shù)字證書和CA

  • 公鑰證書(Public-Key Certificate,PKC)記錄著個(gè)人信息(姓名贝室、組織契讲、郵箱地址等個(gè)人信息)和個(gè)人公鑰仿吞,并由認(rèn)證機(jī)構(gòu)(Certification Authority、Certifying Authority怀泊,CA)施加數(shù)字簽名茫藏。公鑰證書也簡稱為證書(certificate)误趴。


    image.png
  • CA 怎么證明自己呢霹琼?

    • 信任鏈的問題。小一點(diǎn)的 CA 可以讓大 CA 簽名認(rèn)證凉当,但鏈條的最后枣申,也就是 Root CA(操作系統(tǒng)內(nèi)置),就只能自己證明自己了看杭,這個(gè)就叫“自簽名證書”(Self-Signed Certificate)或者“根證書”(Root Certificate)


      image.png
  • 有了這個(gè)證書體系忠藤,操作系統(tǒng)和瀏覽器都內(nèi)置了各大 CA 的根證書,順著證書鏈(Certificate Chain)一層層地驗(yàn)證楼雹,直到找到根證書模孩,就能夠確定證書是可信的,從而里面的公鑰也是可信的

    5. iOS簽名機(jī)制

  • iOS簽名機(jī)制的作用

    • 保證安裝到用戶手機(jī)上的APP都是經(jīng)過Apple官方允許的
  • 不管是真機(jī)調(diào)試贮缅,還是發(fā)布APP榨咐,開發(fā)者都需要經(jīng)過一系列復(fù)雜的步驟

    1. 生成CertificateSigningRequest.certSigningRequest文件
    2. 獲得ios_development.cer\ios_distribution.cer證書文件
    3. 注冊device、添加App ID
      4.獲得*.mobileprovision文件
  • 真機(jī)調(diào)試驗(yàn)證流程


    image.png
  • 流程步驟:
    ①. Mac生成了一把公鑰和私鑰谴供;
    ②. Apple后臺存著私鑰块茁,每臺iOS設(shè)備內(nèi)置公鑰
    ⑤. 使用Mac的私鑰對APP進(jìn)行簽名,存放到APP包內(nèi)
    ③. 蘋果CA利用Apple的私鑰對Mac公鑰進(jìn)行認(rèn)證桂肌,并簽發(fā)證書 数焊,然后加上設(shè)備id...打包一起再使用Apple私鑰進(jìn)行一次簽名④,生成.mobileprovision文件
    驗(yàn)證操作:
    ⑥. 利用Apple公鑰驗(yàn)證③簽名崎场,驗(yàn)證通過證明Mac公鑰合法佩耳,就可以使用公鑰驗(yàn)證APP代碼沒被篡改。

  • 從AppStore下載的應(yīng)用簽名驗(yàn)證流程

    • 從合法渠道下載的谭跨,省去了很多其他步驟
    • App Store 已經(jīng)完成了對 App 的驗(yàn)證(類似于上述測試包的驗(yàn)證過程)干厚。當(dāng) App 通過驗(yàn)證后,Apple Store 會(huì)對 App 進(jìn)行重新簽名饺蚊。重新簽名的內(nèi)容將不再包含 Provisioning Profile萍诱,最終的 ipa 文件也不包含它
    • 當(dāng)設(shè)備從 App Store 下載 App 時(shí),會(huì)直接使用設(shè)備上的 CA 公鑰對 ipa 進(jìn)行簽名驗(yàn)證污呼。與上述測試包的簽名驗(yàn)證相比裕坊,正式包的簽名驗(yàn)證簡化了很多,因?yàn)橛幸徊糠烛?yàn)證工作已經(jīng)由 App Store 完成了


      image.png
  • CertificateSigningRequest.certSigningRequest文件

    • 包含了開發(fā)者信息和Mac設(shè)備的公鑰
  • ios_development.cer燕酷、ios_distribution.cer文件

    • 利用Apple后臺的私鑰籍凝,對Mac設(shè)備的公鑰進(jìn)行簽名后的 證書文件
  • .mobileprovision

    • 利用Apple私鑰周瞎,對【.cer證書+devices+AppID+entitlements】進(jìn)行數(shù)字簽名
  • P12文件:本地私鑰,可以導(dǎo)入到其他電腦(以前的在多臺電腦進(jìn)行真機(jī)調(diào)試)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饵蒂,一起剝皮案震驚了整個(gè)濱河市声诸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌退盯,老刑警劉巖彼乌,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異渊迁,居然都是意外死亡慰照,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門琉朽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毒租,“玉大人,你說我怎么就攤上這事箱叁∈澹” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵耕漱,是天一觀的道長算色。 經(jīng)常有香客問我,道長孤个,這世上最難降的妖魔是什么剃允? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮齐鲤,結(jié)果婚禮上斥废,老公的妹妹穿的比我還像新娘。我一直安慰自己给郊,他們只是感情好牡肉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著淆九,像睡著了一般统锤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炭庙,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天饲窿,我揣著相機(jī)與錄音,去河邊找鬼焕蹄。 笑死逾雄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鸦泳,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼银锻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了做鹰?” 一聲冷哼從身側(cè)響起击纬,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钾麸,沒想到半個(gè)月后更振,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡喂走,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年殃饿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谋作。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芋肠。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖遵蚜,靈堂內(nèi)的尸體忽然破棺而出帖池,到底是詐尸還是另有隱情,我是刑警寧澤吭净,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布睡汹,位于F島的核電站,受9級特大地震影響寂殉,放射性物質(zhì)發(fā)生泄漏囚巴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一友扰、第九天 我趴在偏房一處隱蔽的房頂上張望彤叉。 院中可真熱鬧,春花似錦村怪、人聲如沸秽浇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柬焕。三九已至,卻和暖如春梭域,著一層夾襖步出監(jiān)牢的瞬間斑举,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工病涨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留富玷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像凌彬,于是被迫代替她去往敵國和親沸柔。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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