web-dev-qa-db-ja.com

クライアントサーバー暗号化手法の説明(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、128ビットキー)

Httpsを使用してWebページを開きました。

ブラウザ(Firefox)から提供されたページ情報を見ると、次のことがわかりました。

暗号化された接続:高度な暗号化(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、128ビットキー)。

私は質問を受けました-この暗号化技術は何を意味しますか?それを理解するために、私はそれの各部分のデータを見つけることにしました:

TLS_ECDHEは、一時的な楕円曲線Diffie-Hellmanおよび Wikipediaによると それを意味します2つのパーティが安全でないチャネルを介して共有秘密を確立できるようにします。

[〜#〜] rsa [〜#〜]は、サーバーのIDを証明するために使用されます この記事

WITH _AES_128_GCM_SHA256:私が正しく理解している場合-AES_128_GCMは このページ で説明されているように認証された暗号化を提供する手法です。

SHA256はハッシュアルゴリズム-一方向関数です。

しかし今、私はこれらすべてのものを組み合わせる方法を理解しようとしています。全体としてどのように連携し、なぜこのようにセットアップされたのですか?

これで YouTubeビデオ アリスとボブは、Diffie-Helman鍵交換アルゴリズムを使用して、使用する秘密鍵に合意します(この場合はTLS_ECDHEです)。安全な接続を確立するのに十分ではありませんか(アリスとボブが行わなかったRSA部分のほかに)?なぜこの部分WITH_AES_128_GCM_SHA256も存在するのですか?

22
VL-80

非対称暗号

TLSセッションの作成には2つの異なる部分があります。 2つのポイント間で公開鍵を交換する 非対称暗号 の部分があります。これは、アリスとボブの例で見たものです。これは、非対称暗号化/復号化のための非対称鍵の交換のみを許可します。これは[〜#〜] ecdhe [〜#〜]の部分です。 [〜#〜] rsa [〜#〜]の部分は、キー交換の認証に使用される 署名アルゴリズム について説明しています。これは、非対称暗号化でも実行されます。秘密鍵でデータに署名すると、相手があなたの公開鍵で検証できるという考え方です。

対称暗号

対称暗号化/復号化キーを非対称キーで暗号化します。非対称暗号化は非常に低速です(比較的言えば)。常に暗号化する必要はありません。これが Symmetric Cryptography の目的です。これでAES_128_GCMになりました。

  • AESは対称アルゴリズムです
  • 128はビット単位のキーサイズを表します
  • GCMは 操作モード です。

では、非対称キーは正確に何を暗号化するのでしょうか。まあ、基本的には対称キー(この場合は128ビット、16バイト)を暗号化したいと思います。誰かが対称鍵を知っていれば、すべてのデータを復号化できます。 TLSの場合、対称鍵は直接送信されません。プレマスターシークレットと呼ばれるものが暗号化されて送信されます。この値から、クライアントとサーバーは、暗号化とデータの整合性に必要なすべてのキーとIVを生成できます。 TLSキー交換の詳細を確認

データの整合性

データの整合性 は、このプロセス全体と暗号化されたチャネルで必要です。 GCMを検索したときに見たように、操作の暗号化モード自体が、暗号化されるデータの整合性を提供します。ただし、公開鍵のハンドシェイク自体も確認する必要があります。途中で誰かが送信中にデータを変更した場合、何が改ざんされていないことをどのようにして知ることができますか?これは、ネゴシエートされたハッシュ関数が使用されるインスタンスですSHA256。ハンドシェイクのすべての部分が一緒にハッシュされ、最後のハッシュが暗号化されたプレマスターシークレットと共に送信されます。反対側はこのハッシュを検証して、送信されるはずのすべてのデータが受信されたことを確認します。

SHA256は、別のポスターで述べられているように、疑似ランダム関数(PRF)にも使用されます。これにより、2つのパーティ間で送信されるプリマスターシークレットが、暗号化に必要なセッションキーに拡張されます。

他の操作モードの場合、各メッセージはこの整合性アルゴリズムでハッシュされます。データが復号化されると、平文を使用する前にハッシュが検証されます。

これらの派生がさまざまなTLSバージョンでどのように発生するかについての素晴らしい説明があります。

これらすべてを組み合わせて、安全な通信モードを手に入れましょう!


OpenSSLがサポートするすべての可能な暗号を_openssl ciphers_でリストできます。さらに進んで、_-V_を使用してこれらの暗号スイートの詳細を印刷できます。

例えば:

_$ openssl ciphers -V ECDHE-RSA-AES256-GCM-SHA384
          0xC0,0x30 - ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
_
  • _0xC0,0x30_は、暗号スイートの2バイトの識別子を表します
  • _Kx=ECDH_は鍵交換アルゴリズムを表します
  • _Au=RSA_は認証アルゴリズムを表します
  • Enc=AESGCM(256)は、対称暗号化アルゴリズムを表します
  • _Mac=AEAD_は、使用されるメッセージ認証チェックアルゴリズムを表します
28
RoraΖ

ECDHEがキー交換に使用され、RSAがサーバーのIDの確認に使用されているのは、あなたの言うとおりです。しかし、あなたは交換された鍵をどうするつもりですか?その交換されたキーを使用して通信を暗号化/復号化するには、特定のアルゴリズムを使用する必要があります。

この場合、GCMモードでは128ビットのAESが使用されます。

通常、ハッシュベースのメッセージ認証コード(HMAC)には、ハッシュアルゴリズム(この場合はSHA256)が使用されます。これは、認証された暗号化を提供するためです。ただし、すでに述べたように、AES-GCMはすでに認証済みの暗号化を提供しているため、ここでは使用されません。

TLS1.2以降、暗号スイートの最後に記載されているハッシュアルゴリズムは、TLSの疑似ランダム関数(PRF)にも使用されます。

4
abaj