我希望使用多种密码(即 AES、Serpent、Twofish...)来加密一些数据,并且我希望用户能够选择使用哪些密码以及按什么顺序使用。是否有可用于定义元数据的标准?我的理解是,我不想做的是在每一层前面加上一个魔数(Magic Number),指示下一层中使用的密码和参数的类型,因为它会让我遭受明文攻击。我在 PKCS #8 RFC 上看到了峰值,看来这里只支持单层加密:
EncryptedPrivateKeyInfo ::= SEQUENCE {
encryptionAlgorithm EncryptionAlgorithmIdentifier,
encryptedData EncryptedData }
我想我可以将加密算法定义为一个值数组,但我想确保在我错过的地方还没有定义标准。
最佳答案
PKCS#7 及其后继者 CMS允许多层。 EncryptedData 包含 EncryptedContentInfo,解密后可包含另一个 EncryptedData。这通常用于结合加密和签名,但没有理由不能将其用于多层加密(尽管其他实现中的支持可能有所不同)。
XML Encryption是加密元数据的另一个通用标准。它不直接支持嵌套加密层,但由于它依赖于封闭模式的规范来指定加密数据的预期格式,因此它没有理由不能指定多个层。
OpenPGP Message Format是我能想到的最终标准化格式。与 CMS 一样,它支持嵌套加密层(理论上 - 实现可能支持也可能不支持)。
这两种格式都不支持预先指定嵌套加密层:嵌套层的元数据将被加密,因此您无法避免已知明文的弱点。但是,由于无论如何您都应该选择一种能够安全抵御已知明文攻击的算法,因此我不认为这是一个大问题。
关于cryptography - 有多种加密标准吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6811984/