2012-03-09 47 views
5

PKCS#12是一種方便的方法,將私鑰與其對應的X.509證書結合成標準化的單一文件格式。然而,該規範於1999年由RSALabs發佈,並且僅使用RC4,RC2和TripleDES進行對稱加密。是否有任何常見的半標準擴展來添加更多的加密算法或其他密鑰派生函數?記錄爲OpenSSL以實現對AES和Camellia的支持,但對相應標準的搜索變爲空白,所以這似乎是OpenSSL特定的實現。有沒有人記錄這些擴展的ASN.1模塊和僞代碼?是否有發佈的PKCS#12擴展?

回答

3

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 。

+0

嗯,不完全是。 PKCS#12使用附錄B.2中指定的PBKDF,並且在幾個方面與PKCS#5的PBKDF2的PBKDF1不同。例如,與PKCS#5 PBKDF1不同,它具有密鑰擴展功能,與PKCS#5 PBKDF2不同,它使用迭代哈希代替HMAC輸出的異或總數,不同之處在於它以不同尋常的方式格式化鹽和密碼。 – 2012-03-09 12:42:25

+0

更具體地說:PKCS#12附錄B.1指定應將密碼視爲BMPStrings而不是簡單的OctetStrings。這意味着如果在PKCS#12文件的加密算法標識符字段中遇到PKCS#5算法標識符,則不能確定密碼是否應該被視爲BMPString。因此,處理規則仍然必須從外部指定爲明確的。 – 2012-03-09 12:55:33

+1

@HenrickHellström:據我所知,附錄B.2中的PBKDF只是爲了向後兼容舊的Microsoft格式。如果您閱讀第13頁上的註釋,您會注意到建議使用PKCS#5機制。 – 2012-03-09 13:03:48