読者です 読者をやめる 読者になる 読者になる

i remember nothing

文章の練習も兼ねています

プロフェッショナルSSLTLS 第一章 SSL/TLSと暗号技術

クライアント通信ライブラリのデファクトで未だにTLS1.2対応していないものが活発に使われていたりする。大丈夫なのだろうか。

1.1 Transport Layer Security

セキュリティ以外の目標もある 含めると4つ

  1. 暗号学的なセキュリティ
  2. 相互運用性
  3. 拡張性
  4. 効率性

1.2 ネットワーク階層

  • IP/TCPがインターネットの仕組みを支えている。
  • データはパケットに格納され複数回のホップを通して送られる。

これらは覗かれる可能性があるもので、IP/TCP脆弱性がある。 TCP/IP以外にも、DNSやBGPなどの経路制御プロトコルにも脆弱性がある。 プロトコル自体を乗っ取られたら意図と異なる経路からデータが送られてくる可能性がある。

  • これらのなりすまし、改ざんに対しTLSではPublic Key Infrastructure(PKI)という技術を採用している。

TLSOSI参照モデルからもわかる通りTCPの上、HTTPの下に位置している。 そしてネットワークの階層構造上TLSトランスポート層より上の層に影響しない。

1.3 プロトコルの歴史

TSLの前身のSSLNetscapeで開発されていた。 SSL2がNetscape Navigator1.1で実装された。 SSL2には脆弱性があったためSSL3.0が開発され、これは2に対して設計が根本的に異なるものである。 これが現在のTLSプロトコルの基本設計となっている。 その後SSLIETFに移管された。その後数年たってRFC2246としてTLS1.0がリリースされる。 SSL3.0とTLS1.0の機能的な違いはほとんどないが互換性はなかった。 その後TLS1.1, 1.2がリリースされる。1.2ではAEADが対応され、またプロトコルも柔軟なものになった。

1.4 暗号技術

TLSでは暗号技術によって機密性、真証性(auth)、完全性が解決できる。

1.4.1 要素技術

暗号技術にはもちろんさまざまな要素技術が使われている。

  • 共通鍵暗号化方式 あの有名なアリスとボブのアレ。余談だが、暗号技術で出てくる盗聴してくるやつの名前の由来は盗聴者 (eavesdropper) からきているらしい。結城浩さんの本で読んだ。

暗号技術には、 Auguste Kerkhoffs の原則と呼ばれる以下のような洞察がある。

  • 暗号システムは鍵以外のすべてが攻撃者に掌握されたとしても安全でなければならない。

  • ストリーム暗号化方式

暗号アルゴリズムに1バイトの平文を流して1バイトの暗号にし受信側で逆の操作にする。 鍵ストリームの各バイトの位置を攻撃者に予測されなければ安全とみなせる。 同じ鍵を使いまわさないことが重要である。 この方式を取っている最も有名なものがRC4である。

  1. ブロック暗号化方式

データの一定の大きさの塊をまとめて暗号化する。 128bitがスタンダードだと言われる。 AESが有名。 ブロック暗号化方式は決定論的であるのでそれらに対処しなければあんまり役に立たない。 実際に使うときは暗号化利用モードと言われる暗号化スキームを利用する。 これにより認証機能もサポートできる。 MAC擬似乱数の生成の基盤として用いられている。

  1. パディング

ブロック長より短いデータに対して余分なデータを与え整形するやつ。 暗号化ブロックの末尾にパディングの長さを格納して受信者にパディングの長さを通知する。

  1. ハッシュ関数

任意の長さの入力を固定長の出力に変換するアルゴリズム。 暗号化技術的には、 - 原像計算困難性 - 第二原像計算困難性 - 衝突耐性 などの性質を求められている。 ハッシュ値はMDとかフィンガープリントとか呼ばれているのがそれ。 SHA1 や SHA256 などのハッシュ関数がよく使われている。 SHA1 は最近衝突したことが騒がれていましたね。 ハッシュ関数の強さはハッシュ値の長さと同一ではない。

  1. MAC メッセージ認証コード。完全性を保証するために用いられる。ハッシュ関数を拡張して認証を可能にした関数。 鍵付きハッシュなどとも呼ばれる。

  2. 暗号化利用モード 任意の長さのデータを暗号化できるようにした処理のこと。 ECBとかCBCとかいろいろある。 TLSではCBCが使われているがGCMも使える。

  3. 公開鍵暗号化システム

  4. デジタル署名
  5. 乱数生成器

この辺はよく知られている技術だろう。

1.4.2 プロトコル

要素技術は複数組み合わせて用いられる。TLSもこれらの技術を複数組み合わせたものである。 認証と鍵交換->機密性と完全性を保障したデータ交換->シャットダウンという一連の流れがハンドシェイクである。

1.4.3 攻撃

  • 複雑なシステムには多様な攻撃がなされる。鍵の探索空間が小さければしらみつぶしにされる。 暗号技術そのものに脆弱性があればその穴を突かれる。
  • プロトコルの実装そのものに対する攻撃もある。暗号ライブラリの多くは低級言語で書かれており、 その分脆弱性がまぎれ込みやすくなる。プロトコルは慎重に実装する必要がある。
  • 暗号技術自体が強固でもソフトウェア構成がゆるいとそこを狙われる。 サーバに侵入されてそこに置いてある鍵が盗まれるなどしたらどうしようもない。 確立されたプロトコルを使い、高レベルのライブラリを用い、十分な鍵長でアルゴリズムを使う必要がある。

1.4.4 暗号強度

  • 128ビットの鍵に対しては2128回の総当たりで十分である。256になると指数関数的に総当たり回数が増えるので長期間にわたるセキュリティの確保がしたければ256がよい。

暗号強度は厳密に測ることはできない。が、ENISAなどのドキュメントは頼りになる。

1.4.5 MITM攻撃

中間者攻撃と呼ばれるもの。Man in the middle Attack の略。

  1. アクセスの奪取 ルータなどネットワークが経由するノードにアクセスし、パケットの中身を見たり妨害したりする。 認証なしの無線ネットワークなどでよくある。

  2. ARPスプーフィング 任意のIPアドレスMACアドレスに結びつけて経路を変えてしまう。

  3. WPADハイジャック プロキシを乗っ取ってWPADに対する攻撃を行う。

  4. DNSハイジャック レジストラと共謀してドメインを乗っ取ったりDNSの設定を変更しトラフィックを乗っ取る。

  5. DNSキャッシュポイゾニング DNSサーバのキャッシュの脆弱性を悪用する。不正なドメイン名の情報をキャッシュに入れ込むことで利用者は不正な情報を受け取ってしまう。

  6. BGP経路ハイジャック ルータが利用する経路制御プロトコルを乗っ取りIPアドレスのブロックの行き先を変えてしまう。

受動的な攻撃、能動的な攻撃

  • トラフィックが暗号化されていないとき受動的攻撃は有効に働く。

広範なモニタリングは可能な限り暗号化によって防御するべきとIETFは宣言している

  • 暗号化されたトラフィックであっても一度保存して置いて暗号を破れるまで保存できたりする。

今解けない暗号でも10年後には解かれているかもしれない!

  • TLS で攻撃者が受信者に対して有効な証明書を提示できてしまう場合、攻撃自体が検知されない。 ブラウザの検証機構を騙して有効に見える証明書を作ることもできる。

  • NSA QuantumInsert というプログラムの下で、インターネット上の任意のコンピュータに対する能動的攻撃が可能になったということが指摘されている。 特定の個人に対してブラウザの挙動を変えられるもので、パケットを生成するノードを通信インフラの重要起点に設置することで本来のサーバよりはやくNSAは応答を返し、トラフィックを制御してしまう。