当消息短并且攻击者知道时,是否可以找到对称密钥?

时间:2009-09-25 08:01:27

标签: java security

我需要加密请求中的几个参数(使用Java,AES(cbc),128 BIT密钥):

String toencrypt = "name+birthdate+appid+userid"

我必须假设攻击者可以猜出所有值。这对于猜测/找到对称密钥有什么影响?即使已经加密的内容被攻击者知道,对称密钥仍然是安全的吗?什么是粗略估计的“因素”,这使得找到关键更容易? (例如,如果没有已知内容,找到密钥可能会快1000 ...)

(我的问题完全在于这个事实的影响,即被攻击者可以知道要加密的内容。由于篇幅限制,我不可能包含任何“随机”字符或盐等)。

另一个相关问题。如果我选择AES功能的“初始化向量”与用于初始化密钥的数据相同,会对安全性产生什么影响? 这对安全性有影响吗?

非常感谢! 马库斯

4 个答案:

答案 0 :(得分:2)

这称为known-plaintext attack。包括AES在内的所有体面的加密都不容易受到攻击。

根据定义,只有加密密钥是秘密的。假设初始向量,密钥导出算法等是已知的。因此,如果您对IV和密钥使用相同的数据,则可能会削弱您的安全性。您可以通过加密强哈希运行数据,以便从已知IV到密钥需要先反转哈希。但是,最好不要将任何与密钥生成相关的数据用于任何其他内容。

答案 1 :(得分:2)

此方案称为“plain text attack”:

  

经典密码通常容易受到已知明文攻击。

AES旨在抵御此类攻击。

工作原理:如果你运行一个程序,那么你也应该能够反过来运行它,对吗?例如,a + b = c。如果您知道c(结果)和a(纯文本),则可以导出b

但这并不适用于所有操作。以模a % b = c为模a = 0x41c = 1。在这种情况下,b可以是多个值。 AES使用了大量这些来确保您无法通过算法计算出从原始消息中获取密钥的方法。

答案 2 :(得分:1)

出现的前两个答案都以“这是一个明文攻击”开始,实际上似乎并非如此。 Markus表示“攻击者可以猜测所有值”,并且“要加密的内容可能为攻击者所知”。这与“攻击者确实知道内容”不同。明文攻击还要求攻击者知道哪个明文会产生哪个密文,这个问题在问题上有点模棱两可,但似乎是“不”。听起来好像攻击者可以访问加密的字符串,并且只能猜测明文中的字段可能是什么,而问题是这会对密钥的安全性产生什么影响。

好消息是,这两个答案是正确的,“所有体面的加密包括AES都不容易受到攻击。”并且“AES设计用于抵御此类攻击”。所以(再次引用问题)“即使已经加密的内容是攻击者已知的”,答案是否定的 - 即使明文是已知的,密钥也不一定是脆弱的。 / p>

在更高级别,似乎可以更多地了解使用加密的动机。 Bruce Schneier( Applied Cryptography 的作者)宁愿你想到它不是因为你的加密有多强,而是你如何管理你的风险。使用AES来加密某些字符串基本上是说“攻击者需要大量的计算能力才能使暴力破坏加密,而已知的明文攻击会将其减少一定数量,并且在超级计算机上的时间将花费数千美元“,所以基本上你通过考虑秘密的价值,以及更换/恢复这个秘密需要多少钱来管理风险。如果你的对手愿意花那么多钱,你最好确保加密是你系统中最弱的部分 - 例如,他们可以花一小部分来贿赂一个流氓系统管理员并做一个内部工作。洞察力的另一方面是要明白摩尔定律会使密码破坏更便宜,所以如果你使用强加密,你应该理解它的局限性 - 它随着时间的推移基本上会变弱。

答案 3 :(得分:0)

您可以通过向数据添加随机值来减少猜测因子。然后在再次解密该值后丢弃。