【问题标题】:Are there any published extensions to PKCS#12?PKCS#12 是否有任何已发布的扩展?
【发布时间】:2012-03-09 21:52:08
【问题描述】:

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

【问题讨论】:

    标签: encryption cryptography openssl pki key-management


    【解决方案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。

    【讨论】:

    • 嗯,不完全是。 PKCS#12 使用附录 B.2 中指定的 PBKDF,在几个方面不同于 PKCS#5 的 PBKDF1 和 PBKDF2。例如,与 PKCS#5 PBKDF1 不同,它具有密钥拉伸功能,与 PKCS#5 PBKDF2 不同,它使用迭代哈希而不是 HMAC 输出的异或和,并且与两者不同,它以不寻常的方式格式化盐和密码。
    • 更具体地说:PKCS#12 附录 B.1 指定应将密码视为 BMPStrings 而不是简单的 OctetStrings。这意味着,如果在 PKCS#12 文件的加密算法标识符字段中遇到 PKCS#5 算法标识符,则无法确定密码是否应被视为 BMPString。因此,处理规则仍需在外部明确说明。
    • @Henrick Hellström:据我所知,附录 B.2 中的 PBKDF 仅用于向后兼容旧的 Microsoft 格式。如果您阅读第 13 页的注释,您会注意到建议使用 PKCS#5 机制。
    • @Henrick Hellström:附录 B.1 适用于所有 PBKDF。所以就我阅读标准而言,很明显应该将密码视为 BMPString。
    • @Henrick Hellström:我认为附录 B.1 是正确的。不适用于 PKCS#5。所以 OpenSSL 在 PBES2 中使用 ASCII 可能是正确的。
    猜你喜欢
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2011-08-22
    • 1970-01-01
    相关资源
    最近更新 更多