Aes
使用 ECDSA 簽署 ECDiffieHellman 派生密鑰
假設 Alice 和 Bob 知道對方公鑰的雜湊值,採用這個方法:
- 每次使用帶有臨時私鑰的 ECDiffieHellman 生成每個會話共享的對稱密鑰
- 創建使用共享密鑰保護的 AES 連接(每條消息的唯一 IV,使用 HMAC 驗證)
- 通過加密連接發送他們的公鑰以及他們對該特定會話密鑰的簽名以相互驗證(通過驗證公鑰與儲存的散列匹配,並且簽名由公鑰簽名)。
這是創建安全且經過身份驗證的會話的安全方法嗎?有沒有更好的方法不需要預先存在的私鑰知識(或信任集中的證書頒發機構)。我知道您應該始終嘗試使用標準庫,但我有興趣了解更多關於密碼學的知識——這不會用於任何關鍵軟體。
非常感謝您的幫助。
當然,首先你建立了一個 1:1 的溝通,然後你建立了信任。這有點像 TLS 1.3,加密會盡快開始。當然,任何直到實體身份驗證和握手的東西都可以由對手生成,所以從這個意義上說它有點危險。
通常,您會嘗試驗證盡可能多的握手參數,而不僅僅是正在進行的通道。基本上,您嘗試並傾向於對盡可能多的數據進行保密和身份驗證。例如,您可以通過散列所有通信消息然後簽署單獨的散列來做到這一點。
至於對公鑰的信任:是的,當然。畢竟,這幾乎與證書鎖定相同,證書被明確信任,而不僅僅是公鑰。使用證書的好處當然是您可以稍後使用證書鏈,並且證書包含的資訊不僅僅是公鑰(有效期、標識資訊、CRL 等等)。所以一般來說,如果你想使用公鑰,為什麼不為其創建一個自簽名證書並將其固定。
所描述的方案當然可以是安全協議的一部分。協議是否真的安全取決於許多其他因素。即使對於提到的特定方案(參數驗證、側通道阻力、避免重放攻擊和鏡像或反射攻擊)等,這些細節也很重要。創建安全傳輸協議是最艱鉅的任務之一,尤其是對於初學者而言。