0

是否可以从河豚加密的密文和明文对中恢复密钥?

我有几个加密和纯字符串。但我不记得关键。

加密字符串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 位随机密钥?

4

2 回答 2

5

无论您知道多少对(明文、密文)对,都没有像样的密码(包括 Blowfish)可以有效地恢复密钥。

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

于 2013-04-08T16:52:22.247 回答
1

您所提议的本质上是一种已知明文攻击,也就是说,正如 wiki 文章所指出的那样,自 Enigma 时代以来,它们一直不是成功的密钥恢复机制。

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

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

于 2013-04-08T19:15:09.043 回答