cryptography - 有多种加密标准吗?

标签 cryptography

我希望使用多种密码(即 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/

相关文章:

c# - 为什么我只有 5% 的时间收到错误数据异常?

java - 充气城堡 PKCS7 填充物

python - 使用 VBScript 和 Python 的 RC4

c# - 使用 RSACryptoServiceProvider 进行公钥加密

c# - "Padding is invalid and cannot be removed"使用Aes解密密文时出错

security - 使用超过 md5 的密码加密有什么意义吗?

ios - swift 中的 AES 加密

java - RSA 加密(模数/指数)给出 "Message is larger than modulus"

javax.crypto des sbox

python - 密码学:将 C 函数转换为 python