我應該發布哪些 GPG 公鑰?主項、子項,全部?

我應該發布哪些 GPG 公鑰?主項、子項,全部?

原問題

我一直在學習GPG和子金鑰的使用。我覺得我已經很好地理解了使用子密鑰和保持主密鑰離線的好處,但缺乏關於應該發布哪些密鑰的資訊。我的問題:

我應該發布哪些密鑰?
我應該發布我的主鍵、子鍵還是全部?各自的優點/缺點是什麼?

我的朋友應該簽署哪些金鑰?
如果我的朋友將我加入到他的密鑰環中,他會添加我的主密鑰、子密鑰還是所有密鑰?如果我設定了一個新的子項,他如何驗證它是否與我的主鍵相關聯?

子鍵到底如何與主鍵「關聯」?
有很多文章說它們有關聯,但沒有說明如何關聯。它們是否包含一些共同的數學屬性?

期待了解這一點,非常感謝您能提供的任何澄清。

更新

在做了一些進一步的研究之後,我發現了這篇關於GPG 金鑰剖析。從本文所包含的資訊來看,子金鑰似乎確實包含在主金鑰中,至少在查看公鑰時是如此。我最初不明白的是,PGP 金鑰包含大量元信息,而不僅僅是金鑰的實際數值。

我的理解是否正確,我只有公鑰?
看來我只有一個公鑰,這就是我發布的內容以及我朋友簽署的內容。這就是關聯我的子密鑰,並告訴每個人我的子密鑰實際上是我的?

如果我將子金鑰複製到另一台設備,我是否也會取得整個公鑰?
或者子密鑰有自己的子公鑰嗎?

答案1

從這個開始:

我的理解是否正確,我只有一個公鑰?

看來我只有一個公鑰,這就是我發布的內容以及我朋友簽署的內容。這就是關聯我的子密鑰,並告訴每個人我的子密鑰實際上是我的?

是和不是。這取決於哪一個「公鑰」的多種定義你想用。

你有一個公共鍵盤塊, 哪個大多數人稱為一般意義上的「PGP 公鑰」。 (它也可以稱為「憑證」。)正如您在連結的文章中所看到的,此公鑰區塊由多個資料包組成:

your "primary" public key parameters (the cryptographic values for RSA/DSA/etc)
├─ metadata for that public key (creation/expiry time, etc)
├─ a list of userids (name+email labels)
│  └─ each userid followed by a list of signatures (certifications)
└─ a list of "subkey" public key parameters (RSA numbers, etc)
   └─ each subkey followed by a list of self-signatures (self-certifications)

然而,它與密碼學意義上的「一個公鑰」不同,因為它具有多套實際的 RSA/DSA/等。公共參數在裡面。

子鍵到底如何與主鍵「關聯」?

有很多文章說它們有關聯,但沒有說明如何關聯。它們是否包含一些共同的數學屬性?

它們與主密鑰產生的簽名(自我認證)一起儲存。然而,從數學上來說,它們是完全獨立的,可以為不同的演算法產生。

我應該發布哪些密鑰?

我應該發布我的主鍵、子鍵還是全部?各自的優點/缺點是什麼?

所有這些,作為一個單元(鍵塊)。

每個單獨的金鑰都需要用於自己的任務- 主金鑰必須是公開的,因為需要它來驗證您在其他人的金鑰(使用者ID)以及您自己的子金鑰和使用者ID 上所做的簽名(認證)。加密子金鑰必須是公開的,以便其他人真正加密發送給它的訊息。等等。

我的朋友應該簽署哪些金鑰?

在使用者介面中,簽章過程首先指定您的主金鑰(透過 ID 或指紋)。然後軟體就會做正確的事。

從技術上講,沒有任何密鑰被簽署。其他人簽署你的用戶 ID,它們是與主鍵關聯的文字標籤(姓名+電子郵件)。簽署他人密鑰的目的是為了保證密鑰與姓名+電子郵件之間的綁定;僅簽署密鑰是沒有用的。

如果我的朋友將我加入到他的密鑰環中,他會添加我的主密鑰、子密鑰還是所有密鑰?

您的朋友添加整個密鑰塊 - 主密鑰、子密鑰、用戶 ID。

如果我設定了一個新的子項,他如何驗證它是否與我的主鍵相關聯?

您自己的子金鑰和使用者 ID 是“自我認證的”,一旦您建立它們,它們就會自動由您的主金鑰簽署。這就是為什麼分發主金鑰的指紋就足夠了——它充當驗證根。

相關內容