iOS簽名機(jī)制

如何選擇加密算法

摘要算法默認(rèn)就使用SHA1準(zhǔn)沒錯。

首先從加密的類型區(qū)分,AES——對稱加密;RSA——非對稱加密??梢岳斫鉃椋用芎徒饷芄幸粋€秘鑰的屬于對稱加密;加解密使用不同秘鑰的屬于非對稱加密。非對稱加密的出現(xiàn)是為了解決秘鑰傳輸?shù)膯栴},但相同秘鑰長度的前提下,對稱加密的強(qiáng)度要遠(yuǎn)遠(yuǎn)大于非對稱加密的強(qiáng)度(畢竟兩種加密算法設(shè)計時的目的就不相同)。

如果需要在設(shè)備與設(shè)備之間或者設(shè)備與服務(wù)端之間傳輸密文,可以考慮一下使用RSA,其他情況下不太建議使用RSA。RSA算法速度慢、沒有AES強(qiáng)度大。

一、密碼加密算法

根據(jù)密鑰的使用方法,可以將密碼分為2種

1.1. 對稱密碼

image.png

1.2. 公鑰密碼(非對稱密碼)

image.png

二、對稱密碼(Symmetric Cryptography)

在對稱密碼中,加密、解密時使用的是同一個密鑰。常見的對稱密碼算法有:DES、3DES、AES。

2.1. DES(Data Encryption Standard)

DES是一種將64bit明文加密成64bit密文的對稱密碼算法,密鑰長度是56bit。規(guī)格上來說,密鑰長度是64bit,但每隔7bit會設(shè)置一個用于錯誤檢查的bit,因此密鑰長度實質(zhì)上是56bit。

2.1.1. 劣勢:

由于DES每次只能加密64bit的數(shù)據(jù),遇到比較大的數(shù)據(jù),需要對DES加密進(jìn)行迭代(反復(fù))。目前已經(jīng)可以在短時間內(nèi)被破解,所以不建議使用。

2.2. 3DES

3DES,將DES重復(fù)3次所得到的一種密碼算法,也叫做3重DES。目前還被一些銀行等機(jī)構(gòu)使用,但處理速度不高,安全性逐漸暴露出問題。

2.2.1. 3個密鑰都是不同的,也稱為DES-EDE3

image.png

2.2.2. 如果密鑰1、密鑰3相同,密鑰2不同,稱為DES-EDE2

image.png

2.2.3. 如果所有密鑰都使用同一個,則結(jié)果與普通的DES是等價的

image.png

2.3. AES(Advanced Encryption Standard)

取代DES成為新標(biāo)準(zhǔn)的一種對稱密碼算法,AES的密鑰長度有128、192、256bit三種。

在2000年時選擇Rijindael算法作為AES的實現(xiàn),目前AES,已經(jīng)逐步取代DES、3DES,成為首選的對稱密碼算法。

2.4. 密鑰配送問題

在使用對稱密碼時,一定會遇到密鑰配送問題。

假設(shè),Alice將使用對稱密碼加密過的消息發(fā)給了Bob,只有將密鑰發(fā)送給Bob,Bob才能完成解密,在發(fā)送密鑰過程中,可能會被中間人竊取密鑰,最后中間人也能完成解密。

三、公鑰密碼(Public-key Cryptography)

公鑰密碼中,密鑰分為加密密鑰、解密密鑰2種,它們并不是同一個密鑰。公鑰密碼也被稱為非對稱密碼(Asymmetric Cryptography)。

  • 加密密鑰,一般是公開的,因此該密鑰稱為公鑰(public key)

  • 解密密鑰,由消息接收者自己保管的,不能公開,因此也稱為私鑰(private key)

  • 公鑰和私鑰是一 一對應(yīng)的,是不能單獨生成的,一對公鑰和密鑰統(tǒng)稱為密鑰對(key pair)

  • 由公鑰加密的密文,必須使用與該公鑰對應(yīng)的私鑰才能解密

  • 由私鑰加密的密文,必須使用與該私鑰對應(yīng)的公鑰才能解密

3.1. 解決密鑰配送問題

由消息的接收者,生成一對公鑰、私鑰,將公鑰發(fā)給消息的發(fā)送者,消息的發(fā)送者使用公鑰加密消息。

3.2. 主要的公鑰密碼算法:RSA

目前使用最廣泛的公鑰密碼算法是RSA。RSA的名字,由它的3位開發(fā)者,即Ron Rivest、Adi Shamir、Leonard Adleman的姓氏首字母組成。

3.3. 公鑰密碼的缺點

加密解密速度比較慢

四、混合密碼系統(tǒng)(Hybrid Cryptosystem)

混合密碼系統(tǒng),是將對稱密碼和公鑰密碼的優(yōu)勢相結(jié)合的方法。解決了公鑰密碼速度慢的問題,并通過公鑰密碼解決了對稱密碼的密鑰配送問題。網(wǎng)絡(luò)上的密碼通信所用的SSL/TLS都運用了混合密碼系統(tǒng)。

4.1. 混合密碼-加密

4.1.1. 會話密鑰(session key)

為本次通信隨機(jī)生成的臨時密鑰。作為對稱密碼的密鑰,用于加密消息,提高速度。

4.1.2. 加密步驟(發(fā)送消息)

  • 首先,消息發(fā)送者要擁有消息接收者的公鑰。

  • 生成會話密鑰,作為對稱密碼的密鑰,加密消息。

  • 用消息接收者的公鑰,加密會話密鑰

  • 將前2步生成的加密結(jié)果,一并發(fā)給消息接收者

4.1.3. 發(fā)送出去的內(nèi)容包括

用會話密鑰加密的消息(加密方法:對稱密碼)

用公鑰加密的會話密鑰(加密方法:公鑰密碼)

image.png

4.2. 混合密碼-解密

4.2.1. 解密步驟(收到消息)

消息接收者用自己的私鑰解密出會話密鑰,再用解密出來的會話密鑰,解密消息。

image.png

五、單向散列函數(shù)(One-way hash function)

單向散列函數(shù),可以根據(jù)根據(jù)消息內(nèi)容計算出散列值。散列值的長度和消息的長度無關(guān),無論消息是1bit、10M、100G,單向散列函數(shù)都會計算出固定長度的散列值。

單向散列函數(shù),又被稱為消息摘要函數(shù)(message digest function),哈希函數(shù)。

輸出的散列值,也被稱為消息摘要(message digest)、指紋(fingerprint)。

5.1. 單向散列函數(shù)的特點:

1.根據(jù)任意長度的消息,計算出固定長度的散列值

2.計算速度快,能快速計算出散列值

3.消息不同,散列值也不同

4.具備單向性

5.2. 常見的幾種單向散列函數(shù):

5.2.1. MD4、MD5

產(chǎn)生128bit的散列值,MD就是Message Digest的縮寫,目前已經(jīng)不安全。Mac終端上默認(rèn)可以使用md5命令。

5.2.2. SHA-1

產(chǎn)生160bit的散列值,目前已經(jīng)不安全。

5.2.3. SHA-2

SHA-256、SHA-384、SHA-512,散列值長度分別是256bit、384bit、512bit。

5.2.4. SHA-3

全新標(biāo)準(zhǔn)

image.png

5.3. 單向散列函數(shù)的應(yīng)用:

1.防止數(shù)據(jù)被篡改

2.口令加密

image.png

六、數(shù)字簽名

可以確定收到的消息的真實性,防止數(shù)據(jù)被篡改、偽裝、否認(rèn)。

在數(shù)字簽名技術(shù)中,有以下2種行為:

1.生成簽名:由消息的發(fā)送者完成,通過“簽名密鑰”生成。

2.驗證簽名:由消息的接收者完成,通過“驗證密鑰”驗證。

6.1. 思考

如何能保證這個簽名是消息發(fā)送者自己簽的?(用消息發(fā)送者的私鑰進(jìn)行簽名)

6.2. 數(shù)字簽名和公鑰密碼

數(shù)字簽名,其實就是將公鑰密碼反過來使用

image.png

6.3. 數(shù)字簽名的過程

image.png

6.4. 數(shù)字簽名的過程 – 改進(jìn)

image.png

6.5. 數(shù)字簽名的作用

數(shù)字簽名的作用不是為了保證機(jī)密性,僅僅是為了能夠識別內(nèi)容有沒有被篡改。

1.確認(rèn)消息的完整性

2.識別消息是否被篡改。如果有人篡改了文件內(nèi)容或者簽名內(nèi)容,簽名驗證失敗,證明內(nèi)容會篡改。

3.防止消息發(fā)送人否認(rèn)

6.6. 數(shù)字簽名無法解決的問題

要正確使用簽名,前提是用于驗證簽名的公鑰必須屬于真正的發(fā)送者。如果遭遇了中間人攻擊,那么公鑰將可以是被偽造的,數(shù)字簽名將失效。所以在驗證簽名之前,首先得先驗證公鑰的合法性。

6.7. 如何驗證公鑰的合法性?證書

image.png

七、證書(Certificate)

密碼學(xué)中的證書,全稱叫公鑰證書(Public-key Certificate,PKC)。里面有姓名、郵箱等個人信息,以及此人的公鑰,并由認(rèn)證機(jī)構(gòu)(Certificate Authority,CA)施加數(shù)字簽名。

CA就是能夠認(rèn)定“公鑰確實屬于此人”并能夠生成數(shù)字簽名的個人或者組織

  • 有國際性組織、政府設(shè)立的組織

  • 有通過提供認(rèn)證服務(wù)來盈利的企業(yè)

  • 個人也可以成立認(rèn)證機(jī)構(gòu)

7.1. 證書的作用

可以確認(rèn)公鑰的合法性,以保證獲取到的公鑰是沒有被別人篡改過的。

image.png

八、iOS簽名機(jī)制

8.1. 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)試,現(xiàn)在的Xcode已經(jīng)自動幫開發(fā)者做了以上操作

8.2. 思考

每一步的作用是什么?

.certSigningRequest、.cer、.mobileprovision文件究竟里面包含了什么?有何用處?

8.3. iOS簽名機(jī)制 – 流程圖

image.png

8.4. 生成Mac設(shè)備的公私鑰

CertificateSigningRequest.certSigningRequest文件,就是Mac設(shè)備的公鑰。

image.png

8.5. 獲得證書

ios_development.cer、ios_distribution.cer文件

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

image.png

8.6. 生成mobileprovision

image.png
image.png

8.7. 安全檢測

image.png

8.8. AppStore

如果APP是從AppStore下載安裝的,你會發(fā)現(xiàn)里面是沒有mobileprovision文件的。

它的驗證流程會簡單很多,大概如下所示:

image.png

九、p12文件

讓別人可以調(diào)試同一個App。也就是說別人也可以通過p12文件通過蘋果的簽名驗證。

所以該文件里包含了當(dāng)初你的Mac生成的私鑰、公鑰和證書等信息。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、預(yù)備知識 1、常見英文encrypt:加密decrypt:解密plaintext:明文ciphertext:密...
    迷心迷閱讀 2,486評論 2 4
  • iOS逆向開發(fā)(五)----iOS簽名機(jī)制 根據(jù)密鑰的使用方法,可以將密碼分為2種: 對稱密碼 公鑰密碼(非對稱密...
    會笑的Even閱讀 753評論 0 0
  • 一 加密解密 二 單項散列函數(shù) 三 數(shù)字簽名 四 證書 五 iOS簽名機(jī)制 一 加密解密 加密是將明文信息改變?yōu)殡y...
    當(dāng)前明月閱讀 1,115評論 0 2
  • 一、預(yù)備知識 1、常見英文encrypt:加密decrypt:解密plaintext:明文ciphertext:密...
    Silence_xl閱讀 1,554評論 0 0
  • 復(fù)習(xí)下杰哥的iOS簽名機(jī)制: 學(xué)習(xí)路線 常見英文 學(xué)前須知 為了便于學(xué)習(xí),設(shè)計4個虛擬人物Alice、Bob:互相...
    AlanGe閱讀 424評論 0 0

友情鏈接更多精彩內(nèi)容