我正在寻找使用多个密码加密一些数据(即AES,Serpent,Twofish ......),我希望用户能够选择使用哪些密码以及使用的顺序。是否有可用于定义元数据的标准?我的理解是,我不想做的是在每个图层前面加上一个幻数,表示下一层中使用的密码类型和参数,因为它会让我暴露于明文攻击。我在PKCS#8 RFC中达到了顶峰,看来这里只支持单层加密:
EncryptedPrivateKeyInfo ::= SEQUENCE {
encryptionAlgorithm EncryptionAlgorithmIdentifier,
encryptedData EncryptedData }
我想我可以将encryptionAlgorithm定义为值数组,但我想确保我已经错过了某个已经定义的标准。
答案 0 :(得分:2)
不是我知道的,因为这不是加密的最佳实践。选择一个众所周知且经过同行评审的密码,然后使用它。构建代码,以便您(或您的用户)可以轻松地将现有密码替换为新密码,如果发现折衷,但不要嵌套密码。
答案 1 :(得分:2)
PKCS#7及其后继者CMS允许多个图层。 EncryptedData包含EncryptedContentInfo,解密时可以包含另一个EncryptedData。这通常用于组合加密和签名,但没有理由不能将其用于多层加密(尽管其他实现中的支持可能会有所不同)。
XML Encryption是加密元数据的另一个常用标准。它没有直接支持嵌套加密层,但由于它依赖于封闭模式的规范来指定加密数据的预期格式,因此没有理由不能指定多个层。
OpenPGP Message Format是我能想到的最终标准化格式。与CMS一样,它支持嵌套的加密层(理论上 - 实现可能支持也可能不支持)。
这两种格式都不支持预先指定嵌套加密层:嵌套图层的元数据将被加密,因此您无法避免已知明文的弱点。但是,既然你应该总是选择一种对已知明文攻击是安全的算法,我不认为这是一个大问题。