2011-10-28 76 views
3

我目前正在使用Diffie-Hellman進行密鑰交換的協議。 我收到一個數據包,它由一個aes-128加密部分和一個128位DH公鑰組成。用diffie-hellman共享密鑰繼續加密

在協議的最後一步,aes密鑰被髮送到網絡中的另一個對端。 這個aes-key應該使用128位強密鑰加密。

我計劃用河豚(也可以是其它密碼,其實並不重要的問題)

現在加密AES密鑰,用可以說河豚,我要建立一個與祕密密鑰加密一個名爲SecretKeySpec的類(我使用javax.crypto的東西),它在構造函數中需要一個byteArray來構建secretKey。

來自DH的共享密鑰是128位BigInteger。 好了,現在我可以解釋我的共享密鑰爲ByteArray(至極讓我在16字節[其中的數字將被解釋爲8個數據幀]還是128位)

所以我的問題是,如何強是我的關鍵真的嗎?

是否有任何影響,因爲我只使用數字作爲輸入的ByteArray(那麼,這是否限制密鑰空間以任何方式?)

我想,這是不是這樣的,但我不是100%確定。 也許有人可以做數學並證明我對或錯。

如果我錯了什麼密鑰的共享密鑰給我一塊心,最後得到128Bit SecretKey的加密?

+1

請注意,使用Blowfish加密AES密鑰會降低協議對AES或Blowfish的_weakest_的強度。雖然AES發佈後發現了一些針對AES的攻擊,但我仍然對Blowfish進行了賭注[AES更強大](http://en.wikipedia.org/wiki/Advanced_Encryption_Standard#Known_attacks)(以及更好的檢查)。 – sarnold

+0

@sarnold:謝謝你的提示,我知道這個問題。河豚只是一個例子,也許我也使用AES。我還不確定是否需要在這一步傳輸更多的信息,所以我計劃使用一個流式處理器來運行,以消除固定大小,迫使我使用(或填充我的數據)。我只限於一個以太網數據包,所以每個字節我都可以避免更好。 :) – evildead

回答

2

Crypto++網站建議使用3072位(或實現ECC的256位)的最少p來傳輸128位AES密鑰。

您可能希望研究在http://www.keylength.com/en/compare/上提供的參考資料,以獲取有關比較不同算法間密鑰長度的更多信息。

+0

這是一個非常棒的鏈接,非常感謝!我在等待是否有更多的建議,像這裏貼出來之前,我結束了這個問題 – evildead

+0

我錯過了,爲什麼3072 Bit傳輸128位AES密鑰被認爲是「安全」的?也許我還沒有找到合適的地方呢,希望有人能夠給我啓發。 – evildead

+0

這是一個「計算複雜性」的問題 - 你試圖比較[對AES的最有名的攻擊](http://en.wikipedia.org/wiki/Advanced_Encryption_Standard#Security)的複雜性(當前2^126或者128位AES的密鑰恢復)與最有名的針對[離散對數](http://en.wikipedia.org/wiki/Discrete_logarithm)問題的攻擊。正如你猜測的那樣,整數不是每個位都獨立於其他位--ECC通過減少位之間的相關性來改善這一點,但這些位仍然不是完全獨立的。 – sarnold

1

不是一個在DH專家在這裏,但對我來說似乎是DH的密鑰空間爲ň位表示共享密鑰2^ň略小。

+0

看起來好像是,sarnold發佈的鏈接告訴你至少應該使用3072 Bit p。但是爲什麼,我找不到:( – evildead