|
ウェッジ Rumor Crusherは数日前に「公共WiFiによるインターネット接続は銀行口座のセキュリティを脅かすのか?」を発表しました。 この記事はネットワーク暗号化送信におけるHTTPSの使用に関するいくつかの状況を紹介しており、回答から判断すると依然として議論があるようです。 インターネットの普及が進むにつれて、このアプリケーションはますます普及しており、ネットワークセキュリティの問題もネットユーザーの注目を集めるでしょう。ここではTLS/SSL(私たちがHTTPSと呼ぶもの)について、原理から実際のアプリケーションまで、HTTPSや関連するセキュリティ技術を使う際に注意すべき問題点について解読します。 サイバーセキュリティは、パーソナルコンピュータ、プロトコル、データ伝送、ソフトウェア開発会社やウェブサイトのセキュリティを含む包括的なイベントです。 将来的にセキュリティ関連の問題を少しずつ説明することで、より多くの人がネットワークセキュリティを理解し、より安全にネットワークを利用できるようになることを願っています。 この記事は長くなり、当面は三部構成に分ける予定です。 最初の部分は主にHTTPSの原理について説明しています。 第2部は主にSSL証明書の検証プロセスと使用に関する注意事項について説明しています。 第3部ではHTTPS攻撃のいくつかの例を示します。 1. HTTPSとは何ですか?HTTPSについて話す前に、HTTPとは何かについて話しましょう。HTTPとは、私たちがウェブを閲覧する際に通常使うプロトコルです。 HTTPプロトコルで送信されるデータは暗号化されていない、すなわち平文であるため、HTTPプロトコルを使ってプライベート情報を送信するのは非常に安全ではありません。 これらのプライベートデータを暗号化・送信できるようにするために、NetscapeはSSL(Secure Sockets Layer)プロトコルを設計し、HTTPプロトコルで送信されるデータを暗号化し、これがHTTPSの誕生のきっかけとなりました。 現在のSSLバージョンは3.0で、これはIETF(インターネット工学タスクフォース)によってRFC 6101で定義されており、その後IETFがSSL 3.0をアップグレードし、TLS(トランスポート層セキュリティ)1.0がRFC 2246で定義されました。 実際、現在のHTTPSはTLSプロトコルですが、SSLは比較的早く登場し、現在もブラウザでサポートされているため、SSLはHTTPSと同義です。ただし、TLSかSSLかは過去世紀の話であり、SSLの最終バージョンは3.0であり、TLSは今後も暗号化サービスを提供し続けるでしょう。 現在のTLSのバージョンはRFC 5246で定義された1.2で、まだ広く使われていません。 歴史に興味がある方は、TLS/SSLの詳細な説明が載っている http://en.wikipedia.org/wiki/Transport_Layer_Security を参照してください。
2. HTTPSは安全か?答えはイエス、安全です。 今後数週間で、Googleは世界中のすべてのローカルドメインでHTTPSを有効にし、ユーザーは検索前にGoogleアカウントでログインするだけで済み、すべての検索操作はTLSプロトコルで暗号化されます。詳細は以下の通りです。 http://thenextweb.com/google/2012/03/05/google-calls-for-a-more-secure-web-expands-ssl-encryption-to-local-domains/。
3. HTTPSの仕組みHTTPSはデータを送信する前にクライアント(ブラウザ)とサーバー(ウェブサイト)間でハンドシェイクが必要であり、両者のパスワード情報はハンドシェイクの過程で確立されます。 TLS/SSLプロトコルは単なる暗号化された伝送プロトコルのセットではなく、非対称暗号、対称暗号、ハッシュアルゴリズムを用いてアーティストによって慎重に設計された芸術作品でもあります。 握手の手順を簡単に説明すると、次の通りです。
- ブラウザはサポートする一連の暗号化ルールをウェブサイトに送信します。
- ウェブサイトはそこから一連の暗号化アルゴリズムとHASHアルゴリズムを選択し、証明書の形で識別情報をブラウザに返送します。 証明書にはウェブサイトアドレス、暗号化公開鍵、発行元などの情報が含まれています。
- ウェブサイト証明書を取得した後、ブラウザは以下の作業を行います。
- 証明書の正当性(証明書を発行する権威が正当かどうか、証明書に含まれるウェブサイトアドレスが訪問先のアドレスと同じかどうかなど)を確認し、証明書が信頼されている場合、ブラウザバーに小さなロックが表示されますが、そうでなければ証明書が信頼されていないというプロンプトが表示されます。
- 証明書が信頼されている場合、またはユーザーが信頼できない証明書を受け入れた場合、ブラウザはランダムな数のパスワードを生成し、証明書に記載された公開鍵で暗号化します。
- ハンドシェイクメッセージは合意されたHASHを用いて計算され、生成された乱数で暗号化され、最後にこれまでに生成されたすべての情報がウェブサイトに送信されます。
4. ブラウザからデータを受信した後、ウェブサイトは以下の行動を行います。 - 自分の秘密鍵を使ってパスワードを復号し、そのパスワードを使ってブラウザから送信されるハンドシェイクメッセージを復号し、HASHがブラウザから送られるものと同一か確認します。
- ハンドシェイクメッセージはパスワードで暗号化され、ブラウザに送信されます。
5. ブラウザはハンドシェイクメッセージのHASHを復号し計算します。サーバーから送信されたHASHと一致すれば、ハンドシェイク処理は終了し、すべての通信データは前のブラウザが生成したランダムなパスワードと対称暗号アルゴリズムで暗号化されます。
ここでは、ブラウザとウェブサイトが暗号化された握手メッセージを送り合い、両者が同じパスワードを取得し、通常の暗号化・復号が可能であることを確認し、その後の実際のデータ送信のテストを行います。 さらに、HTTPSで一般的に使われる暗号化およびHASHアルゴリズムは以下の通りです。 - 非対称暗号アルゴリズム:RSA、DSA/DSS
- 対称暗号アルゴリズム:AES、RC4、3DES
- ハッシュアルゴリズム:MD5、SHA1、SHA256
その中には、非対称暗号化アルゴリズムがハンドシェイク過程で生成されたパスワードを暗号化し、対称暗号化アルゴリズムが実際の送信データの暗号化に、HASHアルゴリズムがデータの整合性を検証します。 ブラウザが生成するパスワードがデータの暗号化鍵であるため、送信時には非対称暗号アルゴリズムで暗号化されます。 非対称暗号化アルゴリズムは公開鍵と秘密鍵を生成します。公開鍵はデータの暗号化にのみ使えるため、自由に送信できます。また、ウェブサイトの秘密鍵はデータの復号に使われるため、ウェブサイトは漏洩を防ぐために秘密鍵を非常に慎重に保管します。 TLSハンドシェアークプロセス中のエラーは暗号化接続を切断し、プライベート情報の送信を妨げる可能性があります。 HTTPSが非常に安全であるため、攻撃者はどこから出発点を見つけられず、偽の証明書を使ってクライアントを欺き平文情報を得ますが、これらの手法は特定可能です。これについては後の記事で詳しく説明します。 しかし2010年にセキュリティ専門家がTLS 1.0プロトコルの取り扱いに脆弱性を発見しました。http://www.theregister.co.uk/2011/09/19/beast_exploits_paypal_ssl/ 実際には、このBEASTと呼ばれる攻撃手法は2002年にはすでにセキュリティ専門家によって発見されましたが、公表されていませんでした。 MicrosoftとGoogleはこの脆弱性を修正しました。 参照:http://support.microsoft.com/kb/2643584/en-us https://src.chromium.org/viewvc/chrome?view=rev&revision=90643 HTTPSの簡略版は対称暗号と非対称暗号の両方で動作します。 |