是否有一个好的对称加密算法,如果密码或明文发生变化,它会改变密文?

时间:2015-04-10 02:35:24

标签: algorithm encryption

我希望当原始数据或密码发生变化时(我的意思是,它们中的任何一个发生变化,或者两者都发生变化),加密数据将始终发生变化。换句话说,一旦加密数据确定,那么原始数据和密码都是确定的,尽管那些没有密码的人不知道。

是否有适合我特定需求的良好对称加密算法?

3 个答案:

答案 0 :(得分:1)

我假设你使用密码来获得密码的密钥。

更改密钥

当使用不同的密钥时,每种现代加密算法都会产生不同的密文。这就是加密通常如何运作。如果它没有这个属性,那么一切都会被打破。所有常见的嫌疑人,如AES,Blowfish,3DES都拥有此属性。

更改明文

另一个属性有点难做。这是在语义安全的保护下运行的。

以ECB模式中的任何现代对称密码为例。如果只有一个明文块发生变化,那么只有相同的块在密文中发生变化。因此,如果您加密许多类似的明文,那么观察密文的攻击者可以推断出这些明文之间的关系。 ECB模式非常糟糕。

好的,现在采用CBC模式的密码。如果您反复使用相同的IV,则攻击者可能会推断出与ECB模式类似的关系。如果明文的第10个块发生变化,那么前两个9个块在两个密文中都是相同的。因此,如果你为每次加密使用一个新的随机IV,那么攻击者除了长度之外没有任何东西可以推断,而不会破坏底层密码。

  

换句话说,一旦加密数据确定,那么原始数据和密码都将是确定的

前一段可能不完全是您想要的,因为现在如果您使用相同的密钥加密相同的明文两次,则由于随机IV而得到不同的结果(这是一个弱安全属性)。由于您从密码派生密钥,您也可以从相同的密码派生IV。如果使用例如PBKDF2,则可以将输出位数设置为键+ IV的大小。您需要使用静态盐值。


如果您不需要最后一个属性,那么我建议您使用经过身份验证的模式,如GCM或EAX。当您传输密文或向攻击者提供加密oracle时,如果不使用完整性检查,则可能存在攻击向量。经过身份验证的模式可以为您解决此问题,而无需使用加密 - 然后 - MAC方案。

答案 1 :(得分:0)

如果您关心的是检测数据或密码何时更改,请创建包含数据的文件,然后附加密码。然后在文件上使用SHA-2之类的加密哈希。如果数据或密码发生更改,则哈希值将更改。

加密算法通常用于保持数据私有或验证身份。哈希用于检测两个数据对象何时不同。

答案 2 :(得分:0)

加密数据的通常原因是它将被置于不安全的环境中。如果用户的加密数据处于不安全的环境中,则对手可以复制它并使用对手获得或写入的软件而不是您的软件来尝试解密它。这类似于在Adobe软件中放置在PDF上的一些控件,例如无法从文档中剪切和粘贴。其他品牌的软件可能不会强制执行禁止剪切和粘贴限制。

如果对手识别加密算法,但使用了错误的密码,则获得正确纯文本的机会非常小;对于流行的现代算法,与我们必须忍受的其他日常风险相比,机会足够小,可以忽略,例如地球上的生命被彗星摧毁。