0

* 澄清:我的問題涉及在現實世界中已經同意密鑰(讀取密碼短語)的雙方之間建立「安全」通信通道。只有使用RSA才能允許MITM攻擊(如果我沒有誤解),所以我在考慮在將AES發送給各方之前用AES(雙方同意的密鑰)對公鑰進行加密*在運輸過程中保護公共RSA密鑰

I'目前正試圖建立兩個應用程序,與彼此進行會談。爲了保護交換的消息,我正在考慮使用RSA,其中每個應用程序都有自己的一組密鑰。

在兩個應用程序之間開始通信之前,他們需要交換密鑰。這應該不是問題,但我想在使用AES加密公鑰之前通過互聯網發送它們。

我知道public(公鑰)這個詞是什麼意思,但我在想這樣會發現正確的應用程序/計算機獲得了密鑰而沒有其他人。

所以我想交換密鑰並保護它們免受MITM攻擊。

如果有人可以提供更好的建議(我正在使用LibCrypto庫btw),我全部都是耳朵。

謝謝。

問候 /托馬斯Gustavsson的

+0

如果你已經有了一個預先建立的對稱密鑰,你爲什麼要進行非對稱加密?您需要使用某種方式創建AES會話密鑰,最好是不易受MITM攻擊影響的密鑰,並且不會使主密鑰暴露於危險之中。但我認爲這是錯誤的論壇,請嘗試crypto.stackexchange.com – 2011-12-29 14:30:33

+0

哦,並且密碼不是關鍵。它可以被轉換成*鍵,例如使用像PBKDF2這樣的基於密碼的密鑰派生函數,但它不一樣。例如,使用密碼作爲密鑰可能會導致相關的密鑰攻擊。 – 2012-01-01 23:18:01

+0

OK,查看它,可能密碼仍然不能用作相關的密鑰攻擊,但是你肯定會將密碼限制爲密鑰大小,這意味着你也限制了密鑰空間(密鑰的數量例如在蠻力攻擊中搜索)。 – 2012-01-03 20:11:03

回答

1

這個問題表明你的一部分許多誤解。

我知道這個詞是什麼公衆(如公鑰)意思,但我是 心想這下看到正確的應用程序/計算機 得到鑰匙並沒有其他人。

我認爲這是你有問題的真正問題。
我的意思是:你怎麼知道你正在使用你實際想要與之通信的實體的公鑰,而不是聲稱是你想與之通信的惡意實體的公鑰?

該問題在典型安裝中由可信管理機構簽署的證書解決,並頒發給特定實體即IP或DNS名稱。

在你的情況下,你還沒有給出你的證書的任何細節。

您可以手動預先安裝並將它們用於安全連接。

如果您按照其他計劃,例如對稱加密,那麼你會開始提出其他問題,例如你如何安全地共享密鑰等

+0

網絡上沒有確定性,我知道。但是,如果雙方都同意AES密鑰(可能在酒吧,商場或其他現實生活中),他們會使用這個加密密鑰來加密和解密他們發送給彼此的其他公鑰。 如果攻擊者不知道AES密鑰,他可能無法發送給我一個我將接受的公鑰(因爲它不能被解密和驗證爲有效的公鑰)。這不正確嗎? – tomplast 2011-12-29 11:57:17

+0

@ tomplast:在這種情況下,他們可以輕鬆地交換他們的公鑰,並避免AES加密的開銷。請注意,您現在提到的示例屬於我的更通用的:在我的答案 – Cratylus 2011-12-29 11:59:58

+0

中提到的'manuall pre-installation'對不起,我想我需要更具體些。這兩個應用程序實際上是兩個人通過短信進行通信。他們不能相信第三方,他們唯一的信任手段是他們在現實世界中同意的AES密鑰。雙方之間開始的每個會話都應該每次都使用新生成的密鑰,並且包括他們同意的AES密鑰(可能是LaDo34MooMooTakida $或者更難猜測的密碼)。所以雙方應該能夠交流「安全」而不會冒MITM攻擊的風險。 – tomplast 2011-12-29 12:11:38