RSA、Elgamal、AES、SHAの背後にある数学はかなり理解していますが、実際の使用方法はわかりません。サブキーとマスターキーの違いは何ですか?さまざまなWebサイトからその目的を理解していますが、どうですか?内部で実装されていますか?それはどのようにマスターキーにバインドされていますか?それはOpenPGP用語ですか?
これは enigmailフォーラムの2008年からのユーザーrjhによる投稿 がうまく答えます:
元々はPGP 2.6で、90年代初頭には、キーペアは1つだけで、暗号化と署名の両方に使用されていました。追加のキーペアを持つ能力は、いくつかのエンジニアリング上の課題を提示しました。最終的には、追加のキーペアは「サブキー」とは呼ばれませんが、「サブキー」はありません。同様に、「キー」と呼んでいるものは、実際にはキーではありません。用語は、キーが実際にキーだった時代からの引き継ぎです。現在、キーは実際にはキーのコレクションであり、ユーザー識別子、署名などのメタデータも含まれています。
たとえば、私の「鍵」には、5B8709EB、D0C6AAE4、71E177DB、8DB02BBB3の4つの鍵ペアがあります。
GnuPGが「公開鍵」と呼んでいるものは、コレクションで最も古い署名鍵です。たとえば、5B8709EBが最初に作成されたため、GnuPGはキーとメタデータのセット全体を「5B8709EBキー」と呼びます。
それで、「暗号化と署名に使用されるキーをサブキーなしで持つことは可能ですか?」鍵のall鍵ペアはサブ鍵であるため、ここでは答えはノーです。そのうちの1つだけであっても。
サブキーパケットは RFC 4880、OpenPGP、5.5 Key Material Packet で定義されています。それらは別のパケットIDによってのみ区別され、実際に役立つためにはバインディング署名が必要です(以下を参照)。
公開サブキーパケット(タグ14)の形式は公開キーパケットとまったく同じですが、サブキーを示します。
OpenPGPサブキーはさまざまな目的で使用されます。
RFC 4880、OpenPGP、5.2.1署名タイプ にリストされている、サブキーを主キー(およびその逆)にバインドする特別な署名サブタイプがあります。
0x18:サブキーバインディング署名
この署名は、サブキーを所有していることを示す最上位の署名キーによるステートメントです。この署名は、主キーとサブキーで直接計算され、ユーザーIDや他のパケットでは計算されません。署名サブキーをバインドする署名は、主キーとサブキーの署名サブキーによって作成された0x19署名を含むこの署名署名に埋め込み署名サブパケットを持っている必要があります。
0x19:主キーバインディング署名
この署名は署名サブキーによるステートメントであり、主キーとサブキーによって所有されていることを示します。このシグネチャは、0x18シグネチャと同じ方法で計算されます。ユーザーIDや他のパケットではなく、主キーとサブキーで直接計算されます。