簡體   English   中英

在客戶端和服務器之間使用Crypto Api進行加密和解密的正確方法是什么?

[英]What is the correct way to use the Crypto Api for encryption and decryption between client and server?

經過許多頭痛和人們建議停止后,我終於設法讓我的服務器/客戶端應用程序使用此API並創建所需的密鑰,即會話和交換。

當我將公鑰發送到客戶端時,它成功導入密鑰,並且還將使用該密鑰加密消息,但是當我將其傳遞回服務器時; 它使用會話密鑰解密消息,但消息作為垃圾返回(需要嗯..私鑰!)。 現在這可能是因為我通過rpc傳遞加密的消息,但有些東西告訴我這是其他的東西。 理想情況下,我需要清楚明確地解釋我應該用所有這些鍵做什么,因為我目前獲得的信息非常混亂。

我是否將交換公鑰傳遞給客戶端,以便它可以加密消息並返回解密。

或者

我是否應該使用服務器公鑰加密客戶端會話密鑰然后返回? (這對我來說聽起來不對,但我全都耳朵!!!)

請遺漏評論以轉移到另一個API,或從MSDN復制餡餅(我已經閱讀了所有這些)。 我正在使用Crypto API,只需要清楚地解釋服務器應該傳遞給客戶端的密鑰,然后客戶端應該做什么並傳回去,這樣我才能最終繼續...

如果你真的決心堅持使用那個API,那么聽起來你是在正確的軌道上:)

密碼學中有兩種不同的加密算法系列。 1)使用對稱密鑰的那些和2)使用非對稱密鑰的那些。 對稱密鑰算法(例如AES,DES ......)速度非常快,只要有一種安全的方法可以確保客戶端和服務器具有相同的密鑰(即會話密鑰),並且沒有其他人可以訪問那把鑰匙。 另一方面,非對稱密鑰算法(例如RSA ...),其也是已知的私有/公共密鑰算法,在計算上更加昂貴。 它們只有一個密鑰,只能用於加密數據,第二個密鑰只能用於解密數據。 正如您所發現的,這些算法非常適合初始握手和會話密鑰交換。 服務器創建公鑰/私鑰對,並向客戶端發送公鑰。 任何人都可以攔截它,但是當客戶端對會話密鑰進行編碼並將其發回時,如果竊聽者想要查找會話密鑰,則pbulic密鑰是無用的。 只有服務器才能解碼消息,因為它是唯一持有私鑰的實體。 所以你最初的問題是當消息回來時,你沒有使用該對中的私鑰,而是使用了同步會話密鑰,因而得到了垃圾。

基本上你剛剛實現了SSL所做的基本握手(如果使用OpenSSL庫,你很容易用很少的代碼行完成)。

執行握手后,您現在可以在客戶端和服務器之間建立安全通道。 您可能遇到的唯一問題是,如果有人捎帶您的服務器的IP地址並開始假裝,就像他們是真正的服務器一樣? 您的客戶會認為他正在與真實服務器通信,它將進行密鑰交換並將開始發送安全信息,但如果攻擊者的PC恰好位於另一端,那么這些信息可能最終都會被惡意攻擊。

這是SSL使用證書的地方。證書是使用公鑰/私鑰的另一個例子。 受信任的機構使用私鑰來簽署證書哈希碼,任何人都可以通過使用它的附加公鑰來證明證書身份數據來驗證證書是否有效。 這樣,即使攻擊者接管了服務器的IP地址,它也無法欺騙您的服務器證書。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM