BLOWFISH:从明文和哈希恢复密钥?

时间:2013-04-08 16:37:06

标签: cryptography blowfish

是否可以从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位随机密钥?

2 个答案:

答案 0 :(得分:5)

没有合适的密码(包括Blowfish)允许有效的密钥恢复,无论你知道多少(明文,密文)对。

剩下的是蛮力攻击,您猜测密钥然后检查它是否与已知对匹配。对于足够复杂的键,这变得非常昂贵。所以这只有在你的钥匙不好的情况下才有效。

答案 1 :(得分:1)

你提出的建议实际上是known-plaintext attack,正如维基文章指出的那样,自从Enigma时代以来,它们并不是一个成功的关键恢复机制。

为了接近现代密钥恢复系统,您需要使用选择的明文攻击,如Differential cryptanalysis,它会分析特别选择的明文对之间的密文差异,以获取有关钥匙。也就是说,Blowfish并不是特别容易受到这种攻击,因此无论如何它都无济于事。

如果你想恢复你的密钥,你应该考虑用于生成它的机制(它是从密码派生出来的,有多大,等等)然后想出一种强制它的方法,无论是通过字典攻击,遍历所有32位整数等,一个名为John the Ripper的程序可以帮助尽可能有效地应用这个强制执行。