數(shù)字簽名及證書

1. 加密:

對稱加密:
用對稱密鑰及算法進行加密。對稱密鑰,加解密使用相同的密鑰。

非對稱加密:
用非對稱密鑰及算法進行加密。非對稱密鑰,加解密使用不同的密鑰。

2. MD5:

(Message Digest Algorithm)消息摘要加密算法,即將原始數(shù)據(jù)運算為固定長度的值。

作用:確保信息傳輸過程中完整一致。

特點:壓縮性,任意長度的數(shù)據(jù),算出的MD5值長度都是固定的;容易計算,從原始數(shù)據(jù)計算出MD5值很容易;抗修改性,對原始數(shù)據(jù)做任何修改,計算的MD5值都是不一樣的;強抗碰撞,已知原始數(shù)據(jù)和MD5值,找出具有相同MD5值的數(shù)據(jù)是很困難的。

3. 數(shù)字簽名:

首先,生成一對非對稱密鑰(公私鑰),私鑰自己保留,公鑰公布出去;

計算出原始數(shù)據(jù)的MD5值(摘要),然后利用私鑰對MD5進行簽名(加密),然后將原始數(shù)據(jù)和簽名一起發(fā)送給用戶;

用戶用公鑰對簽名進行解密得到摘要,然后再計算原始數(shù)據(jù)MD5值并與解密得到的摘要進行比較,得到原始數(shù)據(jù)是否被修改;

sign0.png

4. iOS 數(shù)字簽名及證書:

主要有兩對非對稱密鑰,Mac本地一對(local),Apple自己有一對(apple);Mac本地一對是通過keychain.app "從證書頒發(fā)機構(gòu)獲取證書" 獲得的,私鑰保存在本地 keychain.app 中,公鑰為 certificateSigningRequest。

將certificateSigningRequest文件(公鑰local)上傳給apple后臺,會用apple私鑰對其進行簽名,簽名和公鑰local組成證書,下載到本地,就會與本地私鑰local關(guān)聯(lián)起來,在Xcode中選中證書,就會用私鑰local對App進行簽名。

Apple后臺會利用私鑰apple對上述生成的證書及device IDs、AppID、entitlement組成的數(shù)據(jù)進行簽名,然后與數(shù)據(jù)組成provisioning prpfile文件,下載到本地。

編譯完app,會用私鑰local對app進行簽名,然后將provisioning profile打包到app中,在iOS設(shè)備中安裝時,就會用iOS設(shè)備中的公鑰apple對provisioning profile文件中的兩個私鑰apple的簽名進行驗證,如果驗證通過就從provisioning profile取出AppID等信息進行驗證,如果都通過,就可以安裝了。

sign1.png

5. 涉及的相關(guān)概念:

證書:包含公鑰或者私鑰及其他機構(gòu)對其的簽名。

Entitlements:App的權(quán)限列表(推送、內(nèi)購、后臺運行等)。

CertificateSigningRequest:本地公鑰。

p12文件:本地私鑰??梢詫肫渌娔X對App進行簽名。

Provisioning profile:包含證書、Entitlements等數(shù)據(jù)及蘋果私鑰簽名的數(shù)據(jù)包。

6. iOS 生成證書、簽名整個流程:

  1. 在 Mac 上通過 keychain.app 生成一對公私鑰: Local_Public、Local_Private,保存的 CertificateSigningRequest 文件就是公鑰,私鑰自動保存在 keychain.app 中;
  2. 將 Local_Public 上傳到蘋果后臺,蘋果利用 Apple_Private 對其進行簽名,然后簽名和 Local_Public 組成證書 cer,下載到本地,雙擊安裝就會 cer 與 Local_Private 關(guān)聯(lián)起來;
  3. 創(chuàng)建 Provisioning Profile,在蘋果后臺利用 Apple_Private 私鑰對 AppId、DeviceIds、第2步創(chuàng)建的證書 cer 和 Entitlements(在 Apple 后臺創(chuàng)建 AppId 指定的)等信息進行數(shù)字簽名,然后簽名與上述信息組成 Provisioning Profile 文件,下載到本地,雙擊安裝,與證書進行關(guān)聯(lián);
  4. 在 Xcode 中設(shè)置打包證書,編譯完后,會用證書對應的 Local_Private 私鑰對 App 進行簽名,并將證書對應的 Provisioning Profile 一起打入包中;
  5. 在 iOS 設(shè)備中安裝 App,每一個 iOS 設(shè)備中都內(nèi)置了一個 Apple_Public 公鑰,使用 Apple_Public 公鑰進行驗證即可;

參考

最后編輯于
?著作權(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)容

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