查資料的時候發現不少人有疑惑,公鑰和私鑰到底哪一個是用來加密,哪一個是用來解密的,是否能夠公鑰加密私鑰解密,同時也能夠私鑰加密公鑰解密呢?針對這一問題,說下本身的理解。算法
首先要明確兩個問題:(1)既能夠公鑰加密私鑰解密,也能夠私鑰加密公鑰解密;(2)加密解密和簽名驗證是兩個不一樣的概念。安全
(一)先來講加密解密:須要同時使用公鑰和私鑰的加密算法是非對稱加密,最多見的即是RSA。
舉例說明非對稱加密:若是A想要給B祕密的發一條信息,只須要B建立一套公鑰(盒子)和私鑰(鑰匙),盒子能夠隨意分發,可是鑰匙只能B本身全部,當A想要給B發信息時,只須要把信息(紙條)經過B的公鑰加密(放入盒子裏鎖上),再由B用私鑰(鑰匙)進行解密(打開盒子),便可獲取A發送的信息。此時若是C想要截取信息,可是因爲沒有B的私鑰,C即便拿到了信息也沒法解密(只有盒子沒有鑰匙),從而保證了數據的安全性。
那麼B是否能夠經過私鑰加密信息,而後由A使用公鑰解密信息呢?從原理上講,是能夠的。 非對稱密鑰是能夠用於雙向加解密的。可是咱們爲何不這麼用呢,很好理解,由於所謂公鑰,是公開的,不僅A一我的擁有,所以雖然A可以正常讀取到信息,可是其餘人也能夠解密該條信息,從而沒法保證信息的安全性。可是簽名驗證就不一樣了。併發
(二)簽名驗證:用私鑰進行簽名,用公鑰進行驗證,從而保證信息來源是私鑰擁有者。
舉例說明:A想要讓B確認某條信息是由本身發出的,先將本身的公鑰發送給B,而後用本身的私鑰對信息進行簽名併發送給B(好比將字符串X用A的私鑰加密生成Y,將X和Y以及信息都發送給B),B收到信息後用A的公鑰對簽名進行驗證,用A的公鑰解密Y獲得Z,若是Z=X,則驗證成功,說明信息是由A發佈的。網站
(三)最後借用百度百科的例子來講明加密和簽名的結合應用:加密
假如如今 Alice 向 Bob 傳送數字信息,爲了保證信息傳送的保密性、真實性、完整性和不能否認性,須要對傳送的信息進行數字加密和簽名,其傳送過程爲:
1.Alice 準備好要傳送的數字信息(明文);
2.Alice 對數字信息進行哈希運算,獲得一個信息摘要;
3.Alice 用本身的私鑰對信息摘要進行加密獲得 Alice 的數字簽名,並將其附在數字信息上;
4.Alice 隨機產生一個加密密鑰,並用此密碼對要發送的信息進行加密,造成密文;
5.Alice 用 Bob 的公鑰對剛纔隨機產生的加密密鑰進行加密,將加密後的 DES 密鑰連同密文一塊兒傳送給Bob;
6.Bob 收到 Alice 傳送來的密文和加密過的 DES 密鑰,先用本身的私鑰對加密的 DES 密鑰進行解密,獲得 Alice隨機產生的加密密鑰;
7.Bob 而後用隨機密鑰對收到的密文進行解密,獲得明文的數字信息,而後將隨機密鑰拋棄;
8.Bob 用 Alice 的公鑰對 Alice 的數字簽名進行解密,獲得信息摘要;
9.Bob 用相同的哈希算法對收到的明文再進行一次哈希運算,獲得一個新的信息摘要;
10.Bob 將收到的信息摘要和新產生的信息摘要進行比較,若是一致,說明收到的信息沒有被修改過。開發
(四)蘋果開發者證書配置時非對稱加密算法的應用
咱們在進行IOS開發時,配置證書的過程其實也是使用了非對稱加密算法:
咱們在配置證書前,須要先在MAC上經過keychain生成CSR(Certificate Signing Requese)文件,該文件包含開發者身份信息和開發者電腦的公鑰,而私鑰始終保存在MAC中,用於簽名本機對外發布的APP
接下來將該CSR文件上傳至APPLE DEVELOPER網站,蘋果會用蘋果的私鑰對其進行簽名(受權),從而生成證書
咱們在進行APP打包時,會使用開發者的私鑰對應用進行簽名
同時被蘋果簽名的證書(通過蘋果私鑰簽名、並含有開發者公鑰)會包含在描述文件(Provisioning File)中,並在應用被安裝時拷貝到IOS設備中
IOS設備中含有蘋果的公鑰,能夠對證書進行驗證,證實該應用獲得了蘋果的受權
接下來IOS設備會經過證書中開發者的公鑰對APP的簽名進行驗證字符串
可是我認爲蘋果對於APP的簽名和驗證不止於此,由於咱們以前的APP存在着一臺電腦打包的IPA在另外一臺電腦使用一樣證書發佈過IPA後就不能使用的狀況。若是對簽名的驗證都是在IOS設備本地執行的,即便APPLE DEVELOPER上的證書發生了變化,也不該該影響到APP的使用。所以我認爲蘋果還會在打開APP時將本地的簽名使用網站證書中的公鑰進行驗證,若是失敗則會閃退。
文件上傳