是否可以从blowfish加密的密文和明文对中恢复密钥?
我有几个加密和普通的字符串。但我不记得钥匙。
加密字符串24026B7101030657757D01
的示例
解密的字符串是AC C1312463
$key = '';
$plaintext = '';
$crypttext = '24026B7101030657757D01';
$cache = array();
while($plaintext != 'AC C1312463')
{
$key = random_string();
while(array_search($key,$cache) !== FALSE)
{
$key = random_string();
}
$cache[] = $key;
$bf = new Crypt_Blowfish($key);
$plaintext = $bf->decrypt($crypttext);
}
print_r($key);
die();
假设我有这样的算法。函数random_string应该如何获得32位随机密钥?
答案 0 :(得分:5)
没有合适的密码(包括Blowfish)允许有效的密钥恢复,无论你知道多少(明文,密文)对。
剩下的是蛮力攻击,您猜测密钥然后检查它是否与已知对匹配。对于足够复杂的键,这变得非常昂贵。所以这只有在你的钥匙不好的情况下才有效。
答案 1 :(得分:1)
你提出的建议实际上是known-plaintext attack,正如维基文章指出的那样,自从Enigma时代以来,它们并不是一个成功的关键恢复机制。
为了接近现代密钥恢复系统,您需要使用选择的明文攻击,如Differential cryptanalysis,它会分析特别选择的明文对之间的密文差异,以获取有关钥匙。也就是说,Blowfish并不是特别容易受到这种攻击,因此无论如何它都无济于事。
如果你想恢复你的密钥,你应该考虑用于生成它的机制(它是从密码派生出来的,有多大,等等)然后想出一种强制它的方法,无论是通过字典攻击,遍历所有32位整数等,一个名为John the Ripper的程序可以帮助尽可能有效地应用这个强制执行。