如何選擇加密算法
摘要算法默認(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. 對稱密碼

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

二、對稱密碼(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

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

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

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)容包括
用會話密鑰加密的消息(加密方法:對稱密碼)
用公鑰加密的會話密鑰(加密方法:公鑰密碼)

4.2. 混合密碼-解密
4.2.1. 解密步驟(收到消息)
消息接收者用自己的私鑰解密出會話密鑰,再用解密出來的會話密鑰,解密消息。

五、單向散列函數(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)

5.3. 單向散列函數(shù)的應(yīng)用:
1.防止數(shù)據(jù)被篡改
2.口令加密

六、數(shù)字簽名
可以確定收到的消息的真實性,防止數(shù)據(jù)被篡改、偽裝、否認(rèn)。
在數(shù)字簽名技術(shù)中,有以下2種行為:
1.生成簽名:由消息的發(fā)送者完成,通過“簽名密鑰”生成。
2.驗證簽名:由消息的接收者完成,通過“驗證密鑰”驗證。
6.1. 思考
如何能保證這個簽名是消息發(fā)送者自己簽的?(用消息發(fā)送者的私鑰進(jìn)行簽名)
6.2. 數(shù)字簽名和公鑰密碼
數(shù)字簽名,其實就是將公鑰密碼反過來使用

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

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

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. 如何驗證公鑰的合法性?證書

七、證書(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)公鑰的合法性,以保證獲取到的公鑰是沒有被別人篡改過的。

八、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ī)制 – 流程圖

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

8.5. 獲得證書
ios_development.cer、ios_distribution.cer文件
利用Apple后臺的私鑰,對Mac設(shè)備的公鑰進(jìn)行簽名后的證書文件

8.6. 生成mobileprovision


8.7. 安全檢測

8.8. AppStore
如果APP是從AppStore下載安裝的,你會發(fā)現(xiàn)里面是沒有mobileprovision文件的。
它的驗證流程會簡單很多,大概如下所示:

九、p12文件
讓別人可以調(diào)試同一個App。也就是說別人也可以通過p12文件通過蘋果的簽名驗證。
所以該文件里包含了當(dāng)初你的Mac生成的私鑰、公鑰和證書等信息。