2017-02-18 168 views
1

首先我是密碼學的新手。 假設我使用AES 128位加密對簡單測試進行加密並傳遞給接收方。密鑰也傳遞給接收器。在接收端,如果沒有完全解密消息,我怎麼才能檢查KEY是否正確。 我的意思是,我們可以檢查這樣如何知道AES加密密鑰在接收端是否正確?

IF(KEY==something) 

     DECRYPT 

ELSE 

     NOT a correct key. 

有什麼關係IV? 我真的不明白IV是什麼。

+0

請注意,不直接涉及編程的密碼學特定問題最好在[crypto sister site](http://crypto.stackexchange.com) –

回答

4

首先,通過一個不安全的通道傳遞密文和密鑰,你可能會認爲是不安全的。將密文和密鑰保存在同一個地方與保持明文一樣,所以不要這樣做。

而不是確定給定的密鑰是否正確的密文,密碼系統,而不是確定密文在他們甚至解密之前是否合法。最常見的方法是使用MAC或消息認證碼。 HMAC是一種常見的方法,像GCM這樣的Authenticated block模式也是如此。

最後,使用IV來確保重複的明文塊不會導致重複的密文塊。例如。在不使用IV的ECB模式下,每個相同的明文塊將在給定的密鑰下加密成相同的密文。應用IV(像CBC這樣的模式)將確保由於從IV開始的鏈式異或操作,相同的明文塊看起來不同。

要解決您的問題,請使用GCM模式或使用KDF派生HMAC的對稱密鑰和密鑰。

+1

[Here's](http://stackoverflow.com/a/ 34157326/1816580)Java特有的答案。 –