Public-Key
在非對稱加密通信中證明身份
讓我們假設這樣一個場景。A人將廣播他的公鑰,B人將廣播他的公鑰。他們現在可以交流了。但是假設突然另一個人C會寫信給人A冒充人B。B如何證明自己的身份。我們可以實現一個簽名系統。A人會生成一個特定的簽名並將其交給B人,以始終將其加入到消息中,以A人為目標並以這種方式證明身份,但仍然會出現同樣的問題。一個人B如何知道收到的簽名來自一個人A。有沒有辦法在這樣的系統中證明身份。
當您假設 C 充當對手、竊聽並能夠根據獲取的資訊構造消息時,您必須謹慎設計您的協議。這源於 C 可以潛在地中繼、重放和構造消息的事實。因此,您需要防止重放和中間人攻擊,此外還需要處理多個(同時)協議會話。您已經意識到靜態簽名可能還不夠。從本質上講,您的問題是身份驗證協議的動機,並且它們的設計並非微不足道:如果您查看 Needham-Schroeder 協議1或 Woo-Lam 協議2,您會發現不可預見的攻擊向量可能會破壞您的協議作為兩個範例在其原始版本中是不安全的。
基本上,安全協議設計的一些最佳實踐是:
- 做出最大悲觀假設
- 將發送者和接收者放入消息中(即,他們的公鑰)
- 使用加密確保只有正確的接收者才能讀取內容
- 使用隨機數/時間戳來獲得新鮮感
- 自己生成隨機數以防止重放攻擊
- 始終一起對組件進行簽名和加密
但是:有些協議被認為是安全的,但並不遵循所有要點和不安全的協議。在任何情況下,您都希望使案例如模型檢查或定理證明來(半)自動分析您的協議。
我得出的結論是,我用自己的問題回答了自己。如果 Persion A會為 Persion B生成一個簽名並使用Person B的公鑰加密它,那麼只有這兩個人會知道這個秘密。所以現在至關重要的是,人B總是加入他從人****A那裡收到的簽名。為了辨識消息的接收者,我們使用公鑰並使用生成的簽名來辨識我們收到消息的人。這樣,我們可以將公鑰與生成的簽名一一對應。感謝mikero的評論,我從不同的角度看待我的問題。另外,在創建密鑰交換系統時,我會考慮p-rathje建議的算法。