SSL証明書(HTTPS)の背後にある暗号化アルゴリズム


以前、SSLの動作原理を紹介しましたが、ブラウザのアドレスバーにhttpの最初のウェブサイトを入力すると、ブラウザとサーバの間で次の数百ミリ秒以内に大量の通信が行われることがわかりました.これらの複雑なステップの最初のステップは、ブラウザとサーバとの間で、後続の通信で使用される鍵アルゴリズムを協議することです.このプロセスは簡単に言えば、
ブラウザは、自身がサポートする一連のCipher Suite(鍵アルゴリズムキット、後文ではCipherと略称する)[C 1,C 2,C 3,...]をサーバに送信する.
サーバはブラウザのすべてのCipherを受信した後、自分がサポートしているスイートと比較して、双方がサポートしているCipherを見つけたら、ブラウザに通知します.
ブラウザとサーバは、一致するCipherを使用して後続の通信を行います.サーバに一致するアルゴリズムが見つからない場合、ブラウザ(Firefox 30を例にとると、次の例で使用するブラウザはすべてこのバージョンのFirefox)にエラーメッセージが表示されます.
1.ブラウザ
ブラウザでサポートされているCipherはどれですか?これは、ブラウザでサポートされているSSL/TLSプロトコルのバージョンによって異なります.習慣的に、私たちは通常HTTPSとSSLプロトコルを一緒に置いています.実際、SSLプロトコルはNetcape社が1990年代半ばに提案したプロトコルであり、自身は3.0バージョンに発展した.1999年にITELが引き継ぎ、標準化されTLSと改名された.TLS 1.0はSSL 3.1バージョンと言える.
現在TLSの最新バージョンは1.2です.インターネット上では99%以上のサイトがTLS 1.0をサポートしているが、TLS 1.2をサポートしているサイトは40%未満だ.Firefoxブラウザを開き、アドレスバーにabout:configを入力し、tlsを検索します.バージョンでは、次のオプションが表示されます.
そのうちtls.version.minとsecurity.tls.version.maxの2つは、FirefoxがサポートするSSL/TLSバージョンを決定します.Firefoxドキュメントの説明によると、この2つのオプション値とその代表的なプロトコルは次のとおりです.
0 – SSL 3.0
1 – TLS 1.0
2 – TLS 1.1
3 – TLS 1.2
従って、上図の設定は、現在のブラウザサポートプロトコルの下限がSSL 3.0であり、上限がTLS 1.2であることを示している.今、security.tls.version.minが3に変更されると、ブラウザはTLS 1.2しかサポートされません.前述したように、現在、TLS 1.2をサポートしているサイトは40%未満で、例えばAmazonはこの40%の列にないので、この時点でアクセスします.https://amazon.comすると、図1に示すように、「Secure Connection Failed」というエラーメッセージが表示されます.
SSL/TLSプロトコルを理解した後、Wireshark(または同様のネットワークパケットをキャプチャできるツール)を使用して、ネットワークパケットの情報を分析することで、ブラウザがサーバに送信するすべてのCipherを表示できます.
ブラウザは、FirefoxでサポートされているCipherを見つけることができる「ClientHello」メッセージを最初に握手プロトコルを開始します.WiresharkでProtocolプロトコルに従ってソートし、TLS 1.2プロトコルのメッセージからInfoが「Client Hello」であることを見つけます.これを選択して、次のメッセージ情報ウィンドウでSecure Sockets Layer->TLSv 1を順に見つけます.2 Record Layer -> Handshake Protocal -> Cipher Suites.例の最初のCipherはTLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA 256、全部で23個あります.
Infoが「ServerHello」のメッセージを探し続けると、この例ではTLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:
鍵アルゴリズムという長い名前の意味については,後述する.次に、ブラウザはサーバが要求に応答するのを待つ.サーバ側が何をしたか見てみましょう.
2.サーバ
Windowsを例に挙げてみましょう.オペレーティングシステムがサポートする鍵アルゴリズムを表示するには、gpedit.を実行します.msc、「Computer Configuration」->「Administrative Templates」->「Network」->「SSL Configuration Settings」の順に入ると、ウィンドウの右側に「SSL Cipher Suite Order」の項目が表示されます.
クリックすると「SSL Cipher Suite Order」に入ります.オペレーティングシステムでサポートされているCipherのセットと、異なるCipherのソートが表示されます.
ここでソートを調整したり、弱いCipherを削除したりする必要がある場合は、左上の「Enabled」をクリックし、「Options」でCipherを編集するリストを書き換えることができます.コマンドラインが好きな場合は、次のPowershellコマンドでキーアルゴリズムスイートを変更できます.
Set-ItemProperty -path HKLM:\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\0001002 -name Functions -value "XXX,XXX,XXX"

では、Cipherのこの長い名前はどういう意味ですか.実は、それぞれのCipherの名前には4つの情報が含まれています.それぞれは
鍵交換アルゴリズムは、クライアントとサーバの間で握手の過程でどのように認証するかを決定するために使用され、RSA、Diffie-Hellman、ECDH、PSKなどを含む.
暗号化アルゴリズムは、メッセージ・ストリームを暗号化するために使用され、この名前の後に通常2つの数字が付き、それぞれDES 56/56、RC 2 56/128、RC 4 128/128、AES 128/128、AES 256/256などの鍵の長さと初期ベクトルの長さを表す.
メッセージの完全性(改ざんされていない)を確保するために、メッセージの要約を作成するメッセージ認証情報コード(MAC)アルゴリズムであって、MD 5、SHA等が含まれる.
PRF(疑似乱数関数)は、「master secret」を生成するために使用されます.
上の内容を完全に理解するには本の紹介が必要らしい(私はもう力不足だ).しかし、大体理解すると、前のサーバからクライアントに返されたCipherのようなCipherの名前を理解するのに役立ちます.
  TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
その名前から分かるように、それは
TLSプロトコルに基づく;
鍵交換アルゴリズムとしてECDHE、RSAを使用する.
暗号化アルゴリズムはAES(鍵と初期ベクトルの長さは256)である.
MACアルゴリズム(ここではハッシュアルゴリズム)はSHAである.
Cipherの名前の背後にある意味を熟知した後、IISのようなWebサーバが鍵アルゴリズムをどのように選択するかを見てみましょう.ブラウザから送信された鍵アルゴリズムキットが[C 1,C 2,C 3]、Windows Serverでサポートされているキットが[C 4,C 2,C 1,C 3]の場合、C 1とC 2は両方ともサポートされているアルゴリズムであり、IISはC 1を優先的に返すのか、それともC 2を優先するのか.答えはC 2です.IISはサーバの鍵アルゴリズムキットを遍歴し、最初のC 4を取り出し、ブラウザがサポートしていないことを発見した.次に2番目のC 2を取り、これはブラウザでサポートされています!そこで、IISはC 2アルゴリズムを選択し、「ServerHello」握手プロトコルに含めてクライアントに返信する.これにより、図5の結果が得られる.
3.選択
ブラウザの利用者として、TLS 1.2プロトコルをサポートするサイトにのみアクセスでき、より良いセキュリティとより悪い体験を得ることができます.サーバーのメンテナとしては、最強のCipherを前面に並べるのが正しいようです.SSL証明書の導入に成功した後、易維信技術はユーザーにサーバー側の暗号化スイートを検査するのに役立ちます.私たちのセキュリティ検査では、よく報告される問題の一つはサーバーのデフォルトのCipherが弱すぎる(RC 4-based)ことです.易維信技術サポートに連絡して修復してください.