PKCS#12是一种将私钥及其相应的X.509证书组合成标准化单个文件格式的方便方法。然而,RSALabs于1999年发布了该规范,仅使用RC4、RC2和TripleDES进行对称加密。该方案是否有任何常见的半标准扩展,可以添加更多的加密算法或其他密钥推导功能?OpenSSL被记录为实现对AES和Camellia的支持,但搜索相应的标准却变成了空白,所以这似乎是OpenSSL特有的实现。有人记录过ASN.1模块和这些扩展的伪代码吗?
PKCS#12使用其他标准的构建块。
推荐的加密模式基于PKCS#5(PBES2)中基于密码的加密。PKCS#5 v.2.1中对SHA-2和AES的支持对此进行了扩展。
当OpenSSL使用AES时,它是这样做的:
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
: }
: }
: }
据我所知,当使用PKCS#5 PBES2时,OpenSSL将密码编码为ASCII,而不是以零结尾的UTF-16。