Public-Key

計算 PGP ed25519 和 curve25519 按鍵?

  • April 16, 2022

PGP 計算指紋和密鑰的方式存在公鑰算法差異。對於 v4 協議,指紋不是專門從公鑰計算出來的,而 keygrips 是。RFC 4880 沒有提到按鍵。

在深入研究程式碼後 $ 10 $ 在libgcrypt中的不同位置,如何為 ed25519 和 curve25519 計算 PGP 密鑰仍然是一個謎。

幸運的是,keygrip.c 提供了兩個規範的範例測試向量:

1. ed25519: 
   publicKey = 773E72848C1FD5F9652B29E2E7AF79571A04990E96F2016BF4E0EC1890C2B7DB,
   keygrip   = 9DB6C64A38830F4960701789475520BE8C821F47

2. cv25519: 
   publicKey = 918C1733127F6BF2646FAE3D081A18AE77111C903B906310B077505EFFF12740,
   keygrip   = 0F89A565D3EA187CEA39332398F5D480677DF49C

有人可以在創建 keygrip 輸出的 sha1 雜湊之前提供對公鑰的操作嗎?(提前致謝。)

Keygrips根本不是 PGP的一部分,它們只是 GnuPG 密鑰儲存架構的具體實現細節(它使用 PGP、S/MIME 和 SSH 的公共密鑰儲存)。

如您所見,GnuPG 使用libgcrypt進行加密操作,並且可以在cipher/pubkey.c中找到 keygrip 計算,它只是公鑰參數的 SHA-1 散列。

需要遠離libgcrypt儲存庫,而是專注於更高級別的gnupg儲存庫,特別是gnupg/g10/keyid.c。keygrip_from_pk ()函式使公鑰算法特定呼叫以建構 S 表達式,該表達式提供較低級別的gcry_pk_get_keygrip()函式,用於計算二進制 keygrip數組,該數組由呼叫函式**hexkeygrip_from_pk()**轉換為十六進制 keygrip 。

對上面描述的程式碼以及keygrip_ed25519(vk)keygrip_curve25519(vk)處的程式碼的分析應該有助於建構ed25519cv25519鍵柄的程式語言方法。

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