PKCS#12使用其他標準的構建塊。
推薦的加密模式基於來自PKCS#5(PBES2)的基於密碼的加密。在PKCS#5 v.2.1支持SHA-2和AES的情況下,這已經得到擴展。
當OpenSSL的使用AES它這樣的:
使用PKCS時
684 30 806: SEQUENCE {
688 30 802: SEQUENCE {
692 06 11: OBJECT IDENTIFIER
: pkcs-12-pkcs-8ShroudedKeyBag (1 2 840 113549 1 12 10 1 2)
705 A0 723: [0] {
709 30 719: SEQUENCE {
713 30 73: SEQUENCE {
715 06 9: OBJECT IDENTIFIER
: pkcs5PBES2 (1 2 840 113549 1 5 13)
726 30 60: SEQUENCE {
728 30 27: SEQUENCE {
730 06 9: OBJECT IDENTIFIER
: pkcs5PBKDF2 (1 2 840 113549 1
5 12)
741 30 14: SEQUENCE {
743 04 8: OCTET STRING
: BA 6B 5B B3 47 27 C9 73
753 02 2: INTEGER 2048
: }
: }
757 30 29: SEQUENCE {
759 06 9: OBJECT IDENTIFIER
: aes128-CBC (2 16 840 1 101 3 4 1 2)
770 04 16: OCTET STRING
: 0F 79 79 0A D3 EC C0 3E 20 B8 51 85 2F 2B 6C 29
: }
: }
: }
據我可以讀取源,OpenSSL的編碼密碼作爲ASCII而不是零封端的UTF-16#5 PBES2 。
嗯,不完全是。 PKCS#12使用附錄B.2中指定的PBKDF,並且在幾個方面與PKCS#5的PBKDF2的PBKDF1不同。例如,與PKCS#5 PBKDF1不同,它具有密鑰擴展功能,與PKCS#5 PBKDF2不同,它使用迭代哈希代替HMAC輸出的異或總數,不同之處在於它以不同尋常的方式格式化鹽和密碼。 – 2012-03-09 12:42:25
更具體地說:PKCS#12附錄B.1指定應將密碼視爲BMPStrings而不是簡單的OctetStrings。這意味着如果在PKCS#12文件的加密算法標識符字段中遇到PKCS#5算法標識符,則不能確定密碼是否應該被視爲BMPString。因此,處理規則仍然必須從外部指定爲明確的。 – 2012-03-09 12:55:33
@HenrickHellström:據我所知,附錄B.2中的PBKDF只是爲了向後兼容舊的Microsoft格式。如果您閱讀第13頁上的註釋,您會注意到建議使用PKCS#5機制。 – 2012-03-09 13:03:48