2013-04-13 194 views
2

我在考慮使用公鑰加密的兩臺計算機之間的通信。公鑰加密

讓我們假設在一臺計算機端生成一個私鑰和一個公鑰。如果我將公鑰發送給另一臺計算機,它是否仍然可以被數據包嗅探器捕獲並用它來解密我的消息?如果是的話,可以做些什麼來防止這種情況發生,那麼公鑰加密的用途是什麼?

更新

是相當於SSL公共密鑰加密?我應該用它來代替嗎?

+0

公共手段......好吧......它是公開的,而不是祕密。你應該諮詢維基百科。 –

+0

SSL是否自行實施公鑰密碼學? – Matthew

回答

4

不。公鑰不用於解密,而是用於加密。你用你的私鑰解密。這樣,只有可以解密的消息。

通常情況下,私鑰 - 公鑰加密的價格太高,無法用數據加密。您可以使用私有/公共加密方案來交換共享密鑰(大型隨機數)以加密您的數據。

示例:Alice創建一個私鑰/公鑰對,將公鑰發送給Bob。 Bob創建一個大的隨機數並用Alice的公鑰對其進行加密。愛麗絲可以解密並找到大的隨機數。 Alice和Bob然後使用隨機數來加密他們的數據流。

作爲額外的安全性,您可以定期更換密鑰。

要更新您的SSL問題:它的工作原理與上面描述的完全相同。另請參閱http://en.wikipedia.org/wiki/Transport_Layer_Security

+0

你說得對。對這個錯誤感到抱歉。 – Matthew

+1

這是不對的,你也可以使用私鑰加密和公鑰解密。密鑰可以讓客戶知道它連接到「合法」服務器,但無法幫助服務器確保它是「合法」客戶端,因爲存儲在客戶端的密鑰或從服務器發送的密鑰都可能泄漏。更好的解決方案是實現自己的算法,以防止被黑客入侵。 –

+0

使用公鑰解密意味着**所有人**都可以解密您的郵件,並且它與加密無關,但是使用**驗證**,這是完全不同的。 –

1

答案是肯定的,它可以被嗅探器捕獲。

爲什麼RSA單獨不符合馬特的情況?

在Matt的情況下,他希望確保兩臺計算機都合法。我的觀點是RSA只能確保其中的一個合法,而不是兩個。

另一個重要的事情是破解者CAN也使用私鑰進行加密和公鑰解密。密鑰可以讓客戶知道它連接到「合法」服務器,但無法幫助服務器確保它是「合法」客戶端,因爲存儲在客戶端的密鑰或從服務器發送的密鑰都可能泄漏。更好的解決方案是實現自己的散列算法,以防止被黑客入侵。

這裏是關於RSA私鑰加密的文章:

http://www.codeproject.com/Articles/38739/RSA-Private-Key-Encryption

讓我們想想銀行網站,客戶端應該知道他是合法網站,但銀行服務器並不需要確保客戶端由於手機認證和其他方法可以做到這一點,因此是否合法。手機認證只是「哈希法」,所以,哈希法是必須的。單靠RSA不能確保安全。

如果沒有散列方法,如果黑客獲得密鑰存儲或通過互聯網傳輸,他可以毫無困難地輕鬆製作假客戶端。

那麼,你的解決方案是什麼?

由於我實現一個客戶端 - 服務器基於軟件的,我可以分享你我的解決方案:

  1. 我保存的私鑰到客戶端的源代碼。

  2. 當服務器發送一些響應或客戶端發送一些請求時,使用私鑰/公鑰對另一端進行加密和解密。

  3. 您需要一些保護措施,如代碼混淆以保護存儲在客戶端中的密鑰。

  4. 您需要設計一個散列算法以確保客戶端發送的數據是合法的。黑客最終可能得到你的密鑰,但很難知道你的算法是什麼,所以它仍然足夠安全。

  5. 散列算法表示算法結合添加鹽/ SHA-1/UUID /時間戳等。我不是說你應該發明一種新的加密算法。

例如,如果純文本是I'm so awesome

該算法可以是:

結果= SHA1(鹽+純文本+時間戳+任何您喜歡)

如果發現您的算法泄漏,只需更改一些關鍵值。

如果你的散列算法泄漏怎麼辦?

請記住,沒有算法不能被黑客入侵。 我們不需要建造一座不能被毀滅的城堡,我們只需要付出艱辛的努力就能讓敵人付出。

不過,如果出現任何問題,您還需要一個快速的「大紅色按鈕」。哈希算法可以很容易地扮演這個角色,一個小小的修改可能會讓破解者花費很多時間來破解它。那已經是足夠好了

UPDATE:

是SSL相當於公鑰加密?我應該用它來代替嗎?

是的,但你仍然需要將密鑰存儲在比通過網絡發送更好的地方。 HTTPS/TLS是另一個不錯的選擇。

+0

我明白。因此,您將密鑰存儲在其他應用程序中,而不通過Internet發送它? – Matthew

+0

請勿將私鑰放入代碼中。他們是**私人**,不應該分享。 –

+2

另外,不要設計你自己的散列算法。除非你有代數學博士學位,否則你將失敗。即使你這樣做,你仍然可以。密碼學規則1:不要自己推出。 –