Elliptic-Curves
驗證curve25519身份的安全且計算效率高的方法?
客戶端將自己標識為 curve25519 公鑰。伺服器想要驗證客戶端是否擁有相關的私鑰。有沒有一種安全且計算效率高的方法呢?從安全的角度來看,哪種方法可以被認為是“最值得推薦的”,同時保持計算效率?
社區似乎不確定curve25519 是否可用於ECDSA。使用 ECDH 同意的密鑰來驗證 nonce 應該是安全的,但是 ECDH 本身還不夠嗎?伺服器發送一次性使用的公鑰,客戶端返回 ECDH 共享密鑰的雜湊值,伺服器進行比較。
是的,可以使用 ephemeral-static Diffie-Hellman 進行身份驗證。但是,您首先要信任靜態密鑰對的公鑰。一種方法是將其放入基於 DH 的證書中,並使用 CA 簽名。這並不常見,因為通常證書用於建立信任,並且證書通常使用用於身份驗證的公鑰生成。當然,您不能使用 ECDH 來簽署/驗證證書,因此如果您決定採用這種方式,您將不得不使用不同的算法來驗證證書。
在您信任收到的公鑰後,您可以執行正常的 DH 密鑰協議,然後使用從已建立的密鑰派生的生成的會話密鑰來執行 HMAC 身份驗證。在此身份驗證中,您需要確保使用 ID、隨機數是隨機的、包含公鑰等等。所以通常我們自己簡化並從現有的已知安全協議中解除握手過程,如評論中所示。
您可以使用 Schnorr 身份方案。
客戶擁有公鑰
P
,其中P = pG
. 並且p
是私鑰
- 客戶端生成 nonce
r
並發送 ServerR
whereR = rG
。- 伺服器向客戶端發送一個隨機數
e
- 客戶端發送伺服器
s = r + pe
- 伺服器接受以下情況:
sG = rG + epG = R + eP
只有當客戶擁有
R
並且P