Encryption

GPG:和和E子密鑰的公鑰和主密鑰的公鑰一樣嗎?

  • January 1, 2019

我進口

$$ E $$子密鑰從 ~/.gnupg 到不同的文件夾,並使用選項導出子密鑰的公鑰--homedir。 我可以看到子密鑰的公鑰的行數少於主公鑰的行數,使用差異結果表明它們的一些起始行相同,但是底部的行不同,所以最後它仍然是不同的公鑰。

我的問題:它們是不同的公鑰嗎?(我仍然需要在這裡雙重確認)。如果它們不同,那麼使用子密鑰的加密/解密是獨立的,並且與主密鑰和其他子密鑰無關?

在非對稱密碼學中,您總是處理密鑰對。每個密鑰都有一個對應的公鑰。所以回答你的第一個問題:是的,主密鑰對的公鑰與其從屬密鑰對的公鑰不同。

我試圖重現您的實驗並創建了一個帶有主鍵(ID 0xA6271DD4)和從屬鍵(ID 0x5336E1DC)的 GnuPG 測試鍵。然後我將從屬密鑰導出到一個文件並檢查它包含哪些數據包。

$ gpg --export-secret-subkey 5336E1DC! > subkey.gpg
$ gpg --list-packets subkey.gpg | grep "\(packet\|keyid\)"
:secret key packet:
   keyid: 877AA505A6271DD4
:user ID packet: "testtest <test@test>"
:signature packet: algo 1, keyid 877AA505A6271DD4
:secret sub key packet:
   keyid: B0389BEB5336E1DC
:signature packet: algo 1, keyid 877AA505A6271DD4
$

請注意,使用者 ID 和秘密從屬密鑰都由主密鑰簽名。乍一看,似乎主密鑰和從屬密鑰都被導出了。顯示有​​關第一個秘密數據包的更多資訊。

$ gpg --list-packets subkey.gpg | head 
# off=0 ctb=95 tag=5 hlen=3 plen=277
:secret key packet:
   version 4, algo 1, created 1546169910, expires 0
   pkey[0]: [2048 bits]
   pkey[1]: [17 bits]
   gnu-dummy S2K, algo: 0, simple checksum, hash: 0
   protect IV: 
   keyid: 877AA505A6271DD4
# off=280 ctb=b4 tag=13 hlen=2 plen=20
:user ID packet: "testtest <test@test>"
$ 

在 GnuPG 中導出密鑰時,始終會導出相應的公鑰。所以這個密鑰包包含一個 2048 位的公鑰加上可能的 17 位散列。但是密鑰本身失去了,只導出了一個存根:gnu-dummy S2K, algo: 0, simple checksum, hash: 0. 總結一下:當導出一個秘密子密鑰時,你總是用它導出公共子密鑰和公共主密鑰(驗證簽名所必需的)。

您寫道,您的公共子密鑰的行數少於公共主密鑰。我無法重現。使用 GnuPG,您可以導出沒有任何子密鑰的公鑰,在上面的範例中通過命令gpg --export A6271DD4! > pubkey.gpg(請注意驚嘆號)。另一方面,不能只導出一個公共子密鑰。但是如果將主密鑰與主密鑰加上它的子密鑰進行比較,後者自然會有更多的行。因此,為了更好地理解您的觀察,最好知道您使用的確切命令。

引用自:https://unix.stackexchange.com/questions/486084