2013-04-08 87 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