5

PKCS#12是一种将私钥与其相应的 X.509 证书合并为标准化单一文件格式的便捷方式。然而,该规范于 1999 年由 RSALabs 发布,仅使用 RC4、RC2 和 TripleDES 进行对称加密。该方案是否有任何常见的半标准扩展来添加更多加密算法或其他密钥派生功能?OpenSSL被记录为实现对 AES 和 Camellia 的支持,但是搜索相应的标准却是空白,所以这似乎是特定于 OpenSSL 的实现。是否有人记录了这些扩展的 ASN.1 模块和伪代码?

4

1 回答 1

3

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。

于 2012-03-09T12:31:08.547 回答