Public-Key
計算 PGP ed25519 和 curve25519 按鍵?
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)處的程式碼的分析應該有助於建構ed25519和cv25519鍵柄的程式語言方法。