想象一下,我有这个:
$cdata = AES_256($data, $pass);
AES_256实现了AES algorithm。
如果我知道$cdata
的内容和$data
的内容,也有。{
AES_256()
代码,我可以进行逆向工程并找到$pass
吗?
答案 0 :(得分:15)
简单回答:不。
这已经过测试,并在Wiki链接中提及。
相关密钥攻击可以分解为9 一轮256位AES。一个 选择明文攻击可以打破8 一轮192和256位AES,以及7 一轮128位AES,虽然 2 128 的工作量是不切实际的 - 2 119
或者换句话说:在你赢得彩票的同一天,你有更好的机会被灯光击中......而不是打破它!
答案 1 :(得分:13)
这称为known-plaintext attack。正如其他人所解释的那样,像AES这样的好密码应该对它免疫。
答案 2 :(得分:4)
如果$pass
实际上是密码而不是256位密钥,那么您可能很幸运。
虽然执行起来远非微不足道,但对普通密码的暴力攻击要比强制执行256位密钥快得多。
因此,修改许多密码暴力破解工具中的一个,并且你有一个攻击(取决于密码的强度)可能需要数周到数年 - 但与3x10 ^ 51年相比,这是快速的。
答案 3 :(得分:2)
你可以蛮力,但这需要很长时间。如几十年甚至更长时间。这就是AES等加密算法的重点。
答案 4 :(得分:2)
来自Wikipedia的另一个引言:
AES允许使用256位密钥。 打破对称的256位密钥 蛮力需要2 ^ 128倍以上 计算能力比128位 键。可以检查的设备 每个亿亿(10 ^ 18)个AES密钥 第二个需要大约3 x 10 ^ 51年耗尽256位 关键空间。
当你知道原始文本可能会更快但是仍然是3 x 10 ^ 51年是很长时间。此外,还有一个问题,即可能没有能够检测到每秒十亿亿(10 ^ 18)键的设备。
简而言之:一切皆有可能,但这在我们现在生活的世界中是不可行的。
答案 5 :(得分:1)
换句话说,代码中没有“秘密”,因此您拥有代码对您无济于事。
已知明文是一个单独的问题,我不太了解,所以我会将其留给其他答案者。
答案 6 :(得分:0)
当然不是 - 唯一的方法是蛮力。 你真的认为NIST是如此愚蠢,以至于选择一个很容易破解新密码的密码吗?
答案 7 :(得分:0)
答案 8 :(得分:0)
2x2 ^ 256种可能的组合对于暴力来说非常重要。但是强制是唯一的方式。实际上需要大约30年。 AES是现在我说的最好的加密方式。但这只需要花费很多时间来使用CPU。因为GPU(图形处理单元)是严格基于数学的,所以人们制作的程序只使用GPU来破解基于数学的算法比CPU更快。换句话说,AES可能不会持续30年。如果只有永恒代码是可能的。看起来像动态加密可能是人们在不久的将来真正隐藏其信息的唯一方式。