2012-03-12 196 views
0

AES是對稱加密,所以如果我使用key1進行加密,我總是可以使用key1進行解密。如果我使用key2進行加密,我總是可以使用key2進行解密。多密鑰級聯加密

我想多次應用此加密與多個鍵來加強它。我想先使用key1加密我的密碼,然後使用key2加密結果,然後使用key3加密結果,依此類推。如下圖所示:

  • 密碼 - > ENC與KEY1 - > ENC與KEY2 - 與KEY3> ENC - >導致

爲了解密的結果,我在反向解密:

  • 結果 - >十二月與KEY3 - >十二月與鍵2 - >十二月與鍵1 - >密碼

我的問題是,是否存在表示關鍵key1,key2和key3的乘積,這樣它就能一次解密結果?意思是說,攻擊者能否簡單地找到一個會使我的方案短路的密鑰?

  • 結果 - >十二月與KEY4 - >密碼
+0

我記得我的網絡安全課程,用幾個密鑰加密文件並不能加強它。如果你想要更高的保護,你最好使用帶有256位密鑰的aes – 2012-03-12 14:40:46

+0

如果你想加強它,那麼只需使用你的密鑰作爲PBKDF2或bcrypt的輸入,有足夠的鹽和迭代次數。永遠不要直接使用密碼或字符串作爲密鑰。 – 2012-03-12 16:18:55

+1

我相信這是問AES是否是一個組合下不同的密鑰。這在[crypto](http://crypto.stackexchange。com /) – 2012-03-12 22:30:10

回答

1

目前,對於AES沒有這樣的事情,也不是可能會出現。這隻有在AES算法嚴重缺陷的情況下才有可能。

這並不意味着你不能找到一個具體的樣本,如果這樣的關鍵可能存在(仍然不太可能),但是沒有過程從多個關鍵字中提取組合關鍵字。

+0

感謝您的回答。我知道這個線程已經很老了,但是備份這個斷言的任何參考都是非常有用的。 – jackbean818 2013-02-05 22:37:25

1

CryptoLib(https://github.com/IcyApril/CryptoLib)支持使用不同加密密碼的級聯(分層)加密;它使用1個密鑰,但在每個加密級別進行PBKDF2散列(在Whirlpool和SHA512之間使用SOHA交替)。這將保護你的情況下,一個密碼被破壞,其餘仍站在它的位置,以調用它,你只需做到這一點(更換路徑/與你把CryptoLib):

<?php 
    require_once('path/to/cryptolib.php'); 
    $encryptedString = CryptoLib::encryptData("Test string.", "password"); 
    $decryptedString = CryptoLib::decryptData($encryptedString, 'password'); 
?> 

要直接回答最初的問題,建立在此基礎之上:爲了使用CryptoLib的三個單獨的密鑰(以級聯的方式),您只需調用加密函數三次。

<?php 
    require_once('path/to/cryptolib.php'); 
    $encryptedString = CryptoLib::encryptData("Test string.", "password1"); 
    $encryptedString = CryptoLib::encryptData($encryptedString, "password2"); 
    $encryptedString = CryptoLib::encryptData($encryptedString, "password3"); 
?> 

而且對字符串進行解密,調用解密函數3次反向:

<?php 
    require_once('path/to/cryptolib.php'); 
    $decryptedString = CryptoLib::decryptData($encryptedString, "password3"); 
    $decryptedString = CryptoLib::decryptData($decryptedString, "password2"); 
    $decryptedString = CryptoLib::decryptData($decryptedString, "password1"); 
?> 

CryptoLib源是在GitHub上的:https://cryptolib.ju.je/和文檔網站https://cryptolib.ju.je