加密方式
- 公鑰加密私鑰解密
-
私鑰加密公鑰解密
-優點:安全
-缺點:速度慢
非對稱加密算法
- 找出兩個很大的質素P和Q
- N = P*Q
- M = (P-1)*(Q-1)
- 計算公鑰:找出整數E, E與M互質,即除了1以外沒有其它公約數(特點:公鑰簡單,通常可以公開)
- 私鑰:找出整數D,使得(E*D)%M=1(特點:私鑰複雜,通常私家珍藏)
- 加密:(X^E)%N = Y (X是明文,Y是密文)
- 解密:(Y^D)%N = X (X是明文,Y是密文)
公開秘鑰的好處?
- 簡單:就是一些乘除而已
- 可靠:
- 不論給出多少份明文和對應的密文,也無法根據已知的明文和密文的對應關系,破譯出下一份密文
- N和E可以公開給任何人加密使用,但是隻有掌握密鑰D的人才可以解密,即使加密者自己也無法解密
- 靈活:可以産生很多的公鑰E和私鑰D的組合給不同的加密者
數字簽名
- 發送方:
- “封包”->hash->“封包摘要”
- “封包摘要”用公鑰加密(數字簽名)+封包發送給接受方
- 接受方
- “封包”->hash->“封包摘要”
- "數字簽名"用私鑰解密,用解密後的摘要與自己生成摘要做對比
PCKS
簡介:Public-Key Cryptography Standards (PKCS)是由美國 RSA 資料安全公司及其合作夥伴制定的一組公鑰密碼學标準,其中包括證書申請、證書更新、證書廢棄表釋出、擴充證書内容以及數字簽名、數字信封的格式等方面的一系列相關協定
-
幾個重要的協定
PKCS#12: 描述個人資訊交換文法标準。描述了将使用者公鑰、私鑰、證書和其他相關資訊打包的文法 蘋果的開發者證書也俗稱 P12
PKCS#8 描述私有密鑰資訊格式,該資訊包括公開密鑰算法的私有密鑰以及可選的屬性集等 JAVA加密隻支援 PK 8
程式開發證書生成
程式開發證書生成
- 生成私鑰
檢視openssl req -new -key ca.key -out rsacert.csr
- 建立證書請求
openssl req -new -key ca.key -out rsacert.csr
- 生成證書并簽名,有效期10年
openssl x509 -req -days 3650 -in rsacert.csr -signkey ca.key -out rsacert.crt
- 轉換格式(将PEM格式轉化為DER格式)
openssl x509 -outform der -in rsacert.crt -out rsacert.der
- 導入P12檔案
在xcode檢視der檔案openssl pkcs12 -export -out p.p12 -inkey ca.key -in rsacert.crt
iOS中相關函數
使用公鑰對資料加密 SecKeyEncrypt
使用私鑰對資料解密 SecKeyDecrypt
使用公鑰對數字簽名進行驗證 SecKeyRawVerify
使用私鑰生成資料簽名 SecKeyRawSign
注意:
iOS中不能使用PEM格式的證書
OpenSSL預設生成的都是PEM格式的證書
附:iOS非對稱加密demogithub連結