Elliptic-Curves
gnupg 2.x 的 pgpdump 替代品
我想看 gpg2 關鍵參數數據包。pgpdump v0.32 不支持 gpg2(尤其是橢圓曲線加密數據包)並且“gpg2 –list-packets”不顯示“秘密”關鍵參數。
有沒有辦法在 gpg2 導出的秘密子密鑰中查看橢圓曲線加密算法的(秘密)密鑰參數( d、q 和曲線)?
注意:我閱讀了OpenPGP 公鑰算法,但這不是我的答案。
當我
--verbose --list-packets
在導出密鑰時使用它時,它會顯示密鑰(子)數據包中的所有欄位。至少看起來它是完整的。它不打開密鑰加密,所以我必須使用空密碼導出密鑰(不幸的是,不再有導出選項,所以我不得不編輯密鑰)。
在這種情況下,它使用命名曲線,曲線參數是公開的,不會導出。
> gpg.exe --verbose --list-keys pub brainpoolP384r1 2017-12-09 [SC] 971D76C158AFD6D6AC53205327C195C6F0FB0EDA uid [ ultimativ ] Bernd Eckenfels (test) <ecki@zusammenkunft.net> sub brainpoolP384r1 2017-12-09 [E] > gpg.exe --export-secret-key > secret.pgp > gpg.exe" --verbose --list-packets secret.pgp ... # off=0 ctb=94 tag=5 hlen=2 plen=168 :secret key packet: version 4, algo 19, created 1512840291, expires 0 pkey[0]: 092B240303020801010B brainpoolP384r1 (1.3.36.3.3.2.8.1.1.11) pkey[1]: 042B9980A50F01AE91CA7B5A6ABDD350B3FE6BB8E7F44E561FDCB45354BA0D721DA4D9E3DB9B8CD96E248F2099E643E0073649E6D97DB9FCF67B1060F8F36EE0F12F3CEAC68F0D7DAC811DA290693F7620640F87A398901E6D2BDBEA6D4A7251E4 skey[2]: 40223083F5447B9C109A2F063EAF45FFA7D3DDC48AF71F061B4E95CA475775CF488095D4EDE4109B9539DFD036AE4DB7 checksum: 1872 keyid: 27C195C6F0FB0EDA ... # off=397 ctb=9c tag=7 hlen=2 plen=172 :secret sub key packet: version 4, algo 18, created 1512840291, expires 0 pkey[0]: 092B240303020801010B brainpoolP384r1 (1.3.36.3.3.2.8.1.1.11) pkey[1]: 0467F588651ACAB96B80CA052030B3337E8374586C86B3D4386D5569D6C548C0D76662EB112438300B73275FB81809CE6642D3B1878292729B1F3FD1AE2C246AE7064A7B9464446E7A4E0C16B25FD933556371271862C6EEFDFE01087BEEB3CFF9 pkey[2]: 03010909 skey[3]: 15FCB0053B11FD8E4E907E9E7ED937F0E226AE0DF4D79D333ED18BF396191628E8A82241BF26B1C1FBD9F5984636A495 checksum: 19cb keyid: 80C1909634D5FC1B
18 ECDH公鑰算法
$$ RFC6637 $$
19 ECDSA公鑰算法 $$ RFC6637 $$
pkey[0]
是曲線 OID。曲線的參數是公知的,不是密鑰格式的一部分。
pkey[1]
是公共點(未壓縮格式以 04 開頭,然後是兩個 384 位標量整數作為座標)。根據 RFC 6637,ECDH 和 ECDSA 密鑰只有一個秘密算法特定參數:MPI 標量。上面的範例將它們列為
skey[2]
ECDSA 主鍵。在我的例子中是一個 0x017f 位長的標量(48 字節)。順便說一句:如果使用受密碼保護的密鑰導出,它看起來像:
# off=0 ctb=94 tag=5 hlen=2 plen=214 :secret key packet: version 4, algo 19, created 1512840291, expires 0 pkey[0]: 092B240303020801010B brainpoolP384r1 (1.3.36.3.3.2.8.1.1.11) pkey[1]: 042B9980A50F01AE91CA7B5A6ABDD350B3FE6BB8E7F44E561FDCB45354BA0D721DA4D9E3DB9B8CD96E248F2099E643E0073649E6D97DB9FCF67B1060F8F36EE0F12F3CEAC68F0D7DAC811DA290693F7620640F87A398901E6D2BDBEA6D4A7251E4 iter+salt S2K, algo: 7, SHA1 protection, hash: 2, salt: 70B08AE0E115EFEE protect count: 1507328 (167) protect IV: 98 be 19 56 65 43 7c 32 0a ff 4f 21 5b eb 47 af skey[2]: [v4 protected] keyid: 27C195C6F0FB0EDA
這些範例是使用 win64 gpg 2.3.2 (libcrypt 1.8.1) 創建的。
這是測試密鑰:https ://gist.github.com/ecki/8adb287fa64347bfba218a6fd9e21d0f和詳細資訊。