私は本当にRSA鍵だけに関心があるので、交換方法はRSA(鍵を生成して暗号化して送信する)と[EC] DHE_RSA(一時的な[EC] DH鍵を生成して署名して使用する)です。鍵合意について)。
RSAでの実際の操作は「鍵暗号化」であり、[EC]DHE_RSA
デジタル署名ですが、どちらも主要な合意の形式です。それでは、各メソッドのキー使用法拡張で「キー暗号化」、「デジタル署名」、および「キー合意」のどれが必要ですか?私はこれがどこにも指定されていることを見つけることができず、おそらく実装によって異なるため、答えは実装ごとの表である可能性があります。
キー使用拡張機能は 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つすべてのフラグを指定します。