Cryptography 有多种加密标准吗?

Cryptography 有多种加密标准吗?,cryptography,Cryptography,我希望使用多个密码(即AES、Serpent、Twofish…)对一些数据进行加密,我希望用户能够选择使用哪些密码以及使用顺序。是否有任何标准可用于定义元数据?我的理解是,我不想做的是在每一层前面加上一个魔法数字,指示下一层中使用的密码类型和参数,因为这会使我暴露于明文攻击。我在PKCS#8 RFC上达到了顶峰,这里似乎只支持一层加密: EncryptedPrivateKeyInfo ::= SEQUENCE { encryptionAlgorithm EncryptionAlgo

我希望使用多个密码(即AES、Serpent、Twofish…)对一些数据进行加密,我希望用户能够选择使用哪些密码以及使用顺序。是否有任何标准可用于定义元数据?我的理解是,我不想做的是在每一层前面加上一个魔法数字,指示下一层中使用的密码类型和参数,因为这会使我暴露于明文攻击。我在PKCS#8 RFC上达到了顶峰,这里似乎只支持一层加密:

  EncryptedPrivateKeyInfo ::= SEQUENCE {
    encryptionAlgorithm  EncryptionAlgorithmIdentifier,
    encryptedData        EncryptedData }

我想我可以将encryptionAlgorithm定义为一个值数组,但我想确保在某些地方没有定义一个我没有定义的标准。

我不知道,因为这不是一个加密最佳实践。选择一个已知且经过同行评审的单一密码,然后使用该密码。构建您的代码,以便您(或者您的用户)可以在发现妥协的情况下轻松地将现有密码替换为新密码,但不要期望嵌套密码。

PKCS#7及其后续版本允许多层。EncryptedData包含一个EncryptedContentInfo,解密后可以包含另一个EncryptedData。这通常用于结合加密和签名,但没有理由不能用于多层加密(尽管其他实现中的支持可能有所不同)

是加密元数据的另一个通用标准。它不直接支持嵌套加密层,但由于它依赖于封闭模式的规范来指定加密数据的预期格式,因此没有理由不能指定多个层

这是我能想到的最终标准格式。与CMS一样,它支持嵌套的加密层(理论上,实现可能支持,也可能不支持)


这两种格式都不支持预先指定嵌套加密层:嵌套层的元数据将被加密,因此无法避免已知的明文弱点。但是,由于您始终应该选择一种能够安全抵御已知明文攻击的算法,因此我不认为这是一个大问题。

为什么您允许用户选择加密方案?@Mitch Wheat为什么不?用户可能有偏好和/或要求。当在不同的系统之间交谈时,不同的算法可能被支持,也可能不被支持——取决于用户的选择或策略。把SSH作为“让用户选择”的一个例子,因为我假设有些人会偏爱TouFHY或SopPoT(例如)。然而,这种灵活性也意味着我将来很容易更改加密(即,引入AES2或其他东西)senecaso:允许您更改加密和用户更改加密是两件完全不同的事情。我的意思是,我将要实现的客户端库(用户将使用该库)将来可以扩展以允许AES2的使用。计划是用户完全控制数据的加密方式。但是,元数据必须是通用的,以便其他客户端库能够对其进行解密。因此,如果客户机库A使用AES+蛇,而客户机库B仅使用AES,则它们需要能够对彼此加密的数据进行解密。对不起,我是加密新手。。你能详细解释一下为什么多重密码不是一种最佳做法吗?我的印象是,只要你不在每一层前加前缀/后缀来引入明文攻击就可以了。我应该补充一点,即使你引入了明文攻击,它只会使外层成为障碍,而不是障碍,但第一层将保持完整。不是这样吗?@senecaso系统复杂性的增加为实现中存在漏洞创造了更多机会。同时,在大多数威胁模型下,分层密码并不能提供明显的好处:您的数据应该有一个定义良好的生命周期,如果您使用的密码被泄露,您希望尽快用更好的密码替换该密码,而不管您使用的是什么其他密码。好的,我当然理解你关于日益复杂的观点。然而,我一直回到“如果XXX密码在几年内被破解会怎样”的场景,并认为拥有两个不同的层可以帮助您赢得一些时间来替换被破解的密码。也许复杂性的增加并没有被好处所抵消……我必须对此进行更多的思考。在不久的将来,我相信一层AES256足以保护数据。问题是,如果它失败了会发生什么,我想我是否关心它是否失败。在查找此信息后,AES似乎被认为对已知的明文攻击是安全的,但似乎有人发现了一条已知的明文攻击蛇,它有9个回合(以及巨大的内存需求)。现在看起来不像是现实的攻击。谢谢听起来我可以坚持PKCS#8定义,然后就没事了,因为我关心的是在加密数据中包含元数据。然而,我对你的PKCS#8/CMS声明有点困惑。CMS不是PKCS#7的继承人吗?@Senecao:对不起,是的,应该是PKCS#7/CMS。既然你在调查PKCS#8,你是在加密私钥吗?我明白了。我没有特别提到我加密私钥数据,所以你关于PKCS#7/CMS的说法是有道理的。再次感谢!