Public-Key
是否可以在不知道私鑰的情況下從另一個公鑰派生公鑰(Ed25519)?
我有以下案例:
使用者擁有他的主公鑰 (
pk
) - 私鑰 (sk
) 密鑰對 (Ed25519)。在數據庫中,我們儲存了一個公鑰。是否有任何派生機制D
,當知道派生參數時,x
我們可以使用它派生新的私鑰sk2 = D(sk, x)
和公鑰(只知道數據庫中的公鑰):pk2 = Dx(pk, x)
這樣我們就可以驗證sk2
使用完成的簽名pk2
?換句話說,我想有一個派生機制,我可以在使用者端和伺服器端使用,伺服器不知道私鑰。最好與 Ed25519 鍵一起使用。
是的!您可以使案例如在 Monero 中使用的臨時密鑰派生機制(他們在那裡稱其為隱形密鑰)。
考慮公鑰 $ A=aG $ , 帶私鑰 $ a $ . 然後,可以生成一個派生密鑰,由隨機標量參數化 $ r $ :
$$ A’=H_s(rA)G+A $$
和知道的一方 $ a $ 可以使用公共參數 $ R=rG $ 計算他們的臨時私鑰 $ a’=H_s(aR)+a $ . 例如,您可以儲存 $ R $ 有你的簽名。
注1:我們添加 $ A $ 分別 $ a $ 對公眾 私鑰,以確保派生密鑰的一方無法計算私鑰。
注 2:這個推導基本上是一個帶有隨機臨時密鑰的 Diffie-Hellman 密鑰交換 $ R $ .
注3: $ R $ 也可用於“檢查”使用者是否有權訪問此特定密鑰。他只需要檢查是否 $ A’=H_s(aR)+A $ 持有。