2013-04-08 41 views
0

是否有可能从blowfish加密的密文和明文对中恢复密钥?BLOWFISH:从plainttext和hash恢复密钥?

我有几个加密和普通的字符串。但我不记得钥匙。加密的字符串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

河豚是一个封锁,而不是散列。 BCrypt是一种基于河豚的密码哈希,但它没有密钥。你在说哪一个? – CodesInChaos 2013-04-08 16:38:34

+0

只能通过猜测输入。就像恢复密钥只能通过猜测它是可能的。对于足够复杂的密钥,这是不可行的。但是除非你澄清你的问题,否则我们无法帮助你,因为Blowfish不是垃圾,因此你的问题含有矛盾。 – CodesInChaos 2013-04-08 16:41:21

+0

我的错误,哈希是不是正确的词,我应该说加密字符串,而不是我的问题 – 2013-04-08 16:49:30

回答

5

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

剩下的是一个蛮力攻击,您猜测密钥,然后检查它是否匹配已知对。对于足够复杂的按键,这变得非常昂贵。所以这只会在你的密钥不好时才起作用。

+0

是否有一个标准长度的键或其只受最大数量的字符限制? – 2013-04-08 16:54:23

+0

@PetrVelkýBlowfish支持从32位到448位的密钥。 32容易暴力破解,64位变得烦人,对于像NSA这样的强大攻击者来说,80位可能是可能的,在地球上没有人可以破解它。 – CodesInChaos 2013-04-08 16:55:42

+0

你将如何设置字符串发生器来破解32位密钥?让我们说在PHP或任何其他编程语言顺便说一句,感谢您的关注和帮助 – 2013-04-08 17:07:48

1

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

,甚至接近现代键恢复系统,您需要使用选择明文攻击像Differential cryptanalysis,其中分析了精心挑选明文对密文之间的差异,以获得有关的关键信息。也就是说,河豚不是特别容易受到这种攻击,所以它不会有太大的帮助。

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

+0

松井的线性密码分析工作对抗DES,只使用已知的明文,而DES比Enigma更新。 – 2013-04-08 23:32:30