web-dev-qa-db-ja.com

各鍵交換方式で必要な鍵の使用法は何ですか?

私は本当にRSA鍵だけに関心があるので、交換方法はRSA(鍵を生成して暗号化して送信する)と[EC] DHE_RSA(一時的な[EC] DH鍵を生成して署名して使用する)です。鍵合意について)。

RSAでの実際の操作は「鍵暗号化」であり、[EC]DHE_RSAデジタル署名ですが、どちらも主要な合意の形式です。それでは、各メソッドのキー使用法拡張で「キー暗号化」、「デジタル署名」、および「キー合意」のどれが必要ですか?私はこれがどこにも指定されていることを見つけることができず、おそらく実装によって異なるため、答えは実装ごとの表である可能性があります。

28
Ben Jencks

キー使用拡張機能は X.509 のセクション4.2.1.3で説明されており、以下のフラグが考えられます。

  KeyUsage ::= BIT STRING {
       digitalSignature        (0),
       nonRepudiation          (1), -- recent editions of X.509 have
                            -- renamed this bit to contentCommitment
       keyEncipherment         (2),
       dataEncipherment        (3),
       keyAgreement            (4),
       keyCertSign             (5),
       cRLSign                 (6),
       encipherOnly            (7),
       decipherOnly            (8) }

SSL/TLS の場合、サーバー証明書にRSAキーが含まれていると、次のようになります。

  • dHEまたはECDHE暗号スイートのいずれかが使用されます。この場合、RSA鍵が署名に使用されます(RFC 5246のセクション7.4.3:「サーバー鍵交換」メッセージを参照)。これにより、digitalSignatureキーの使用法が実行されます。

  • または「プレーンRSA」が使用され、ランダム値(48バイトのプリマスターシークレット)がクライアントによってサーバーの公開鍵で暗号化されます(RFC 5246のセクション7.4.7.1を参照)。これは、keyEncipherment鍵使用フラグの定義のとおりです。

dataEnciphermentは適用されません。暗号化されるものは直接意味のあるデータではなく、ほとんどがランダムに生成され、対称鍵を導出するために使用される値だからです。 keyAgreementも適用されません。これは、非対称暗号化(Diffie-Hellmanなど)の場合ではない鍵合意アルゴリズム用であるためです。 keyAgreement使用フラグは、RSAキーではなくDHキーを含む証明書に表示されます。 nonRepudiationは使用されません。これは、SSL/TLS鍵交換の一部として署名されたものは、第三者の証明として使用できないためです(SSL/TLSトンネルには何もありません)クライアントは記録してから、裁判官にサーバー自体を訴えるときに裁判官を説得するために使用できます。トンネル内で交換されるデータはサーバーによって署名されていません)。

要約すると:digitalSignature(EC)DHE暗号スイートの場合、keyEnciphermentプレーンRSA暗号スイート用。ただし、一部の実装では、keyEnciphermentの代わりにkeyAgreementも受け入れます。またはnonRepudiationdigitalSignatureが設定されていなくても;一部のユーザーは、(重要としてマークされている場合でも)キー使用拡張機能を完全に無視します。相互運用性を最大にするには、Key Usage拡張機能で4つすべてのフラグを指定します。

35
Thomas Pornin