web-dev-qa-db-ja.com

OpenPGPキーとそのサブキーの関係は何ですか?

私はすべての非対称暗号化のニーズにOpenSSLでプレーンな古いRSAを使用することから来ています。これはかなりよく学んだことですが、OpenPGPプロトコルに頭を悩ませるのに少し苦労しています。そのため、これはいくつかの質問になります。

私のDebianボックスでは、GnuPGを使用して、現在のキーチェーンでマスターキーを作成すると、デフォルトでサブキーが作成されていることに気付きました。少し読んだ後、GnuPGがこの方法でキーを自動的に管理することを学びました。署名に厳密に使用されるマスターキーと暗号化に厳密に使用されるサブキー。これにより、秘密鍵と公開鍵の名前が異なるだけだと思いました。マスター鍵(秘密鍵など)は、サブキー(公開鍵)のみが復号化できるデータに署名するために使用されましたが、サブキー(公開鍵)はデータを暗号化することしかできず、データはマスター鍵(秘密鍵)によってのみ復号化できました。私はこの仮定で正しいですか、それともそれらは完全に2つの別々のキーペアですか?

それらが2つの別々のキーペアである場合、サブキーをマスターキーに数学的にバインドするものは何ですか?

この方法を使用するのはGnuPGだけで、暗号化のためにサブキーが自動的に作成されますか、それともOpenPGPプロトコルによって義務付けられていますか?

キーをキーサーバーにアップロードすると、アップロードされるキーはマスターキーですか、サブキーですか?または両方?

--export関数を使用する場合、UIDを指定するとどのOpenPGPキーがエクスポートされますか?

6
TheFuzzyFish

主キーとサブキーについて

マスターキー(秘密キーなど)は、サブキー(公開キー)のみが復号化できるデータに署名するために使用されましたが、サブキー(公開キー)はデータを暗号化することしかできず、マスターキー(公開キー)によってのみ復号化できました。秘密鍵)。私はこの仮定で正しいですか、それともそれらは完全に2つの別々のキーペアですか?

公開鍵/秘密鍵(非対称とも呼ばれる)暗号化の概念が正しくありません。公開鍵と秘密鍵の各セットは分割されます。公開鍵を公開して、他の人がそれを使用して秘密鍵を秘密に保つことができるようにします。秘密鍵によって発行された署名は公開鍵を介して検証でき、公開鍵を使用して暗号化されたメッセージは秘密鍵を使用して復号化できます。 OpenPGPでは、主キーとサブキーのペアの間に直接的な関係はありません。これらは完全に異なるキーのペアです。

この方法を使用するのはGnuPGだけで、暗号化のためにサブキーが自動的に作成されますか、それともOpenPGPプロトコルによって義務付けられていますか?

GnuPGのデフォルト設定では、認証と署名に使用される主キーペアがありますが、暗号化サブキーは暗号化にのみ使用されます。 RSAを使用すると、これらすべての操作をサポートする主キーを生成することもできます(GnuPGと--expertフラグを使用すると可能です!)。これは主に、DSAやElgamalのような他のアルゴリズムが原因で、必要な操作(DSAは署名専用、Elgamalは暗号化)の1つのみをサポートします異なるキーを持つ。

用途ごとに異なる鍵を使用することにもいくつかの利点があります。特定の条件下で署名から秘密鍵を計算できる欠陥が見つかったと考えてください。署名キーは標的にされますが、暗号化サブキーは別のものであり、この攻撃の標的にはなりません。主キーを認証のみに制限することを検討する人もいます。1つは署名用、もう1つは暗号化用の2つのサブキーペアを追加することがベストプラクティスです。

署名のバインド

それらが2つの別々のキーペアである場合、サブキーをマスターキーに数学的にバインドするものは何ですか?

OpenPGPでは、サブキーが作成されるときに特別な種類のバインディング署名が発行されます。署名可能なサブキーは、主キーに対してそのようなバインディング署名を発行することもできます。これらの特別な署名は RFC 4880、OpenPGP、5.2.1。署名の種類 で定義されています。

   0x18: Subkey Binding Signature
       This signature is a statement by the top-level signing key that
       indicates that it owns the subkey.  This signature is calculated
       directly on the primary key and subkey, and not on any User ID or
       other packets.  A signature that binds a signing subkey MUST have
       an Embedded Signature subpacket in this binding signature that
       contains a 0x19 signature made by the signing subkey on the
       primary key and subkey.

   0x19: Primary Key Binding Signature
       This signature is a statement by a signing subkey, indicating
       that it is owned by the primary key and subkey.  This signature
       is calculated the same way as a 0x18 signature: directly on the
       primary key and subkey, and not on any User ID or other packets.

GnuPGでのサブキーのアドレス指定

キーをキーサーバーにアップロードすると、アップロードされるキーはマスターキーですか、サブキーですか?または両方?

--export関数を使用する場合、UIDを指定するとどのOpenPGPキーがエクスポートされますか?

通常、GnuPGではキーIDとUIDは常に主キーに解決されます。すべてのエクスポート操作(およびキーサーバーへのアップロードもエクスポートと見なされます)では、キーのサブキー、ユーザーID、および証明書もエクスポートされます。署名や暗号化などの他の操作についても同様のことがあります。 本当に操作のサブキーを示したい場合は、サブキーの後ろに!を追加する必要があります(例:gpg --recipient 0xDEADBEEF! --encrypt) 。

7
Jens Erat

認証局(CA)とそれが署名して発行する証明書との関係のように、マスターキーとサブキーの関係について考えるのが好きです。証明書を証明しようとするサードパーティは、CAとの信頼を確立し、その公開鍵を使用して、発行した証明書の署名を検証します。同様に、他の人にPGPマスターキーを確認して署名してもらいます(つまり、分散型の信頼のウェブ全体)。次に、データの署名と暗号化のすべての実際的な作業にサブキーを使用します。他の人がサブキーの有効性を証明したい場合、マスターキーが(信頼されている他のキーによって署名されているため)信頼されているという事実を使用し、サブキーの署名を検証するために使用できます。これにより、サブキーが信頼できるものとして確立されます。

新しいサブキーに署名する場合を除いて、マスターキーはめったに使用しないでください。

1
Ashaman Kingpin