Elliptic-Curves

驗證curve25519身份的安全且計算效率高的方法?

  • March 12, 2019

客戶端將自己標識為 curve25519 公鑰。伺服器想要驗證客戶端是否擁有相關的私鑰。有沒有一種安全且計算效率高的方法呢?從安全的角度來看,哪種方法可以被認為是“最值得推薦的”,同時保持計算效率?

社區似乎不確定curve25519 是否可用於ECDSA。使用 ECDH 同意的密鑰來驗證 nonce 應該是安全的,但是 ECDH 本身還不夠嗎?伺服器發送一次性使用的公鑰,客戶端返回 ECDH 共享密鑰的雜湊值,伺服器進行比較。

是的,可以使用 ephemeral-static Diffie-Hellman 進行身份驗證。但是,您首先要信任靜態密鑰對的公鑰。一種方法是將其放入基於 DH 的證書中,並使用 CA 簽名。這並不常見,因為通常證書用於建立信任,並且證書通常使用用於身份驗證的公鑰生成。當然,您不能使用 ECDH 來簽署/驗證證書,因此如果您決定採用這種方式,您將不得不使用不同的算法來驗證證書。

在您信任收到的公鑰後,您可以執行正常的 DH 密鑰協議,然後使用從已建立的密鑰派生的生成的會話密鑰來執行 HMAC 身份驗證。在此身份驗證中,您需要確保使用 ID、隨機數是隨機的、包含公鑰等等。所以通常我們自己簡化並從現有的已知安全協議中解除握手過程,如評論中所示。

您可以使用 Schnorr 身份方案。

客戶擁有公鑰P,其中P = pG. 並且p是私鑰

  1. 客戶端生成 noncer並發送 Server Rwhere R = rG
  2. 伺服器向客戶端發送一個隨機數e
  3. 客戶端發送伺服器s = r + pe
  4. 伺服器接受以下情況:

sG = rG + epG = R + eP

只有當客戶擁有R並且P

引用自:https://crypto.stackexchange.com/questions/14458