爲了方便咱們學習iOS的簽名機制,本文設置了4個虛擬人物,分別是算法
那麼如何防止信息被監聽呢?就須要對通訊信息進行加密操做。數據庫
首先將明文加密成密文發送給接收方安全
根據密鑰的使用方式,咱們能夠將密碼分爲兩種:對稱密碼和公鑰密碼。bash
對稱密碼就是加密和解密使用相同密鑰網絡
經常使用的對稱密碼算法有三種session
AES是用來取代DES稱爲新標準的一種對稱密碼算法,AES的密鑰長度有12八、19二、256bit三種。函數
什麼是密鑰配送問題?學習
使用對稱密碼時,必定會遇到密鑰配送問題,具體以下圖加密
假設Alice將使用對稱密碼加密後的消息發送給Bob,Bob想要查看明文信息,就須要拿到Alice加密的密鑰,因此Alice同時要將密鑰發送給Bob,在發送密鑰的過程當中,可能會被Eve竊聽,Eve拿到竊取的密鑰和密文,一樣能夠解析獲得明文消息。spa
公鑰密碼中,密鑰分爲加密密鑰和解密密鑰兩種,它們不是同一個密鑰,因此公鑰密碼又被稱爲非對稱密碼(Asymmetric Cryptography)
上面說到,密鑰配送問題能夠經過公鑰密碼來解決,具體解決流程以下:
RSA是目前使用最普遍的公鑰密碼算法。它的名字是由3位開發者Ron Rivest、Adi Shamir、Leonard Adleman的姓氏首字母組成。
發送的內容包括
收到==消息發送者==發過來的消息以後,須要進行解密操做,具體步驟以下:
使用Alice做爲==消息發送者==,Bob做爲消息接收者
1,Bob首先生成一對公鑰、私鑰 2,Bob將公鑰共享給Alice 3,Alice隨機生成一個會話密鑰(臨時密鑰) 4,Alice用會話密鑰加密須要發送的消息(對稱密碼加密) 5,Alice用Bob的公鑰加密會話密鑰(公鑰密碼加密、也稱爲非對稱密碼加密) 6,Alice將四、5步加密獲得的結果一塊兒發送給Bob
1,Bob利用本身的私鑰解密會話密鑰(公鑰密碼解密、也稱爲非對稱密碼解密) 2,Bob使用會話密鑰解密發送過來的消息(對稱密碼解密)
單向散列函數能夠根據消息內容計算出散列值。而且散列值的長度和消息的長度無關,不管是1bit、10M、100G的消息,單向散列函數都會計算出固定長度的散列值。
單向散列函數又稱爲消息摘要函數、哈希函數。輸出的散列值也被稱爲消息摘要、指紋。常見的幾種單向散列函數以下
產生128bit的散列值,MD就是Message Digest的縮寫,目前已經不安全
產生160bit的散列值,目前也不安全
SHA-25六、SHA-38四、SHA-512,散列值的長度分別爲256bit、384bit、512bit。散列值長度越大,安全性就越高
SHA3(Secure Hash Algorithm-3)是一種做爲新標準發佈的單向散列函數算法,用來替代在理論上已被找出攻擊方法的SHA-1算法。全世界企業和密碼學家提交了不少SHA-3的候選方案,通過長達5年的選拔,最終於2012年正式肯定將Keccak算法做爲SHA-3標準。
在App登陸時,通常都須要進行帳號和密碼的校驗,可是在數據庫中,保存的密碼通常都是進行SHA-2散列函數以後的散列值而不是明文密碼,因此在登陸時須要對用戶輸入的密碼進行散列算法,獲得散列值,再同數據庫保存的散列值進行比較,從而判斷密碼是否正確。 而且,因爲散列函數的不可逆,就算他人經過不正當手段獲取到數據庫中存放的密碼的散列值,也沒法獲取到用戶的真實密碼。這樣就大大增長了用戶數據的安全性
其實,不論是使用以前的對稱加密、非對稱加密仍是混合密碼系統,都沒法驗證消息的真實性。也就是說消息的接收者沒法判斷這條消息是不是消息發送者所發出的。也有多是他人假裝成消息發送者發出的消息。那麼怎麼來驗證消息的真實性呢?經過數字簽名的方式來驗證。
而在數字簽名中,任何人均可以使用公鑰來驗證簽名。
數字簽名其實就是將公鑰密碼反過來使用
可是這樣的簽名過程速度很慢,由於簽名信息是經過加密原有的消息得到,若是消息大小是1M,加密後的簽名大小也是1M,最後發送給消息接收者的消息就是2M
複製代碼
在以前數字簽名的過程上使用單向散列函數進行改進。
綜合以上幾點,能夠總結出數字簽名的做用:
要想正確的使用數字簽名,就必須驗證簽名的公鑰必須屬於真正的發送者。由於在消息發送者和消息接收者之間可能會遭遇中間人攻擊,具體攻擊步驟以下:
以上的消息傳遞過程當中,消息發送者和消息接收者沒法察覺到中間人的存在,可是消息已經被泄漏了。
複製代碼
上面的通訊過程遭遇到了中間人的攻擊,會致使
所以,在驗證簽名以前,首先得驗證公鑰的合法性。如何驗證公鑰的合法性呢?就須要經過證書。
看到證書,咱們會聯想到駕駛證、畢業證等等,這些證書都是由權威機構認證的。在密碼學中的證書,全稱叫作公鑰證書(Public-key Certificate,PKC)。和駕駛證、學生證相似。
證書的使用有如下幾個步驟:
1,消息接收者生成本身的密鑰對,消息接收者在認證機構註冊本身的公鑰 2,認證機構用本身的私鑰對消息接收者的公鑰施加數字簽名,而且生成證書 3,消息發送者從認證機構那獲得帶有認證機構數字簽名的消息接收者的公鑰(證書) 4,消息發送者使用認證機構的公鑰驗證數字簽名,確認消息接收者公鑰的合法性。 5,消息發送者使用消息接收者公鑰加密消息,而且發送給消息接收者。 6,消息接收者使用本身的私鑰解密密文獲得最終的消息
增長認證機構認證流程以後,消息發送者和消息接收者之間,就不存在公鑰的傳遞過程,消息發送者從認證機構獲取消息接收者的公鑰,這樣就杜絕了中間人攻擊致使公鑰僞造的問題
複製代碼
對稱加密,相同的密碼加解密(DES,3DES) 公鑰加密,公鑰加密私鑰解密(RSA)
使用對稱密碼加密信息,使用公鑰密碼加密會話密鑰。 如今網絡上密碼通訊所用到的SSL/TLS都是運用了混合密碼系統
1,根據任意長度的消息,計算出固定長度的散列值。消息不一樣,哪怕就相差1bit數據,散列值也不一樣。
2,經常使用的單向散列函數。MD4,MD5產生128bit的散列值,MD就是Message Digest(消息摘要)的縮寫,目前已經不安全。
3,SHA3(Secure Hash Algorithm-3)是一種做爲新標準發佈的單向散列函數算法
數字簽名爲了驗證此消息是從消息發送者發出的。(由於要本身發送密鑰,會被中間人攻擊)
增長認證機構認證流程以後,消息發送者和消息接收者之間,就不存在公鑰的傳遞過程,消息發送者從認證機構獲取消息接收者的公鑰,這樣就杜絕了中間人攻擊致使公鑰僞造的問題。