※ 本記事では、応用情報技術者試験に向けて私が勉強したことを備忘録的にまとめておきたいと思います。基本情報技術者試験の内容と重複しているものもあります。なお、記事の投稿順に意味はないので、気にしないでもらえればと思います。
はじめに
今回は SSL/TLS についてまとめます。
個人的には他の用語と混ざって中々掴みきれない内容でした。
とはいえ確実に理解しておきたい内容です。
ちなみに私はこの参考書を使って勉強してました。
情報が豊富でがっつり勉強したい方向けかと思います。
SSL/TLS
SSLとはSecure Sokets Layerの略で、通信内容を暗号化して盗聴・なりすまし・改ざんを防止する仕組みです。またTLSはTransport Layer Securityの略で、SSLの後継で現在の主流になっているそうです。SSLとTLSは異なるものであるものの、慣習的にTLSをSSLと言ったりすることもあるようです。この記事ではSSL/TLSと併記する形で進めようかと思います。
SSL/TLSには主に3つの目的があります。
① 暗号化…通信データを第3者に読まれないようにする
② なりすまし防止…送信者が本物であることを証明する
③ 認証…通信相手が本物かどうか証明する
SSL/TLSの仕組み
SSL/TLSの仕組みを紹介します。大きな流れはハンドシェイク → 暗号化通信です。
① ハンドシェイク
ハンドシェイクは日本語で握手という意味です。クライアント(例えば自分のブラウザ)とWebサーバの通信を開始する際の挨拶のようなものと思えば良いと思います。ハンドシェイクでは通信をするために必要な情報を送信します。以下に情報の中身を一覧で示します。
| 順番 | 送信元 → 送信先 | 送信情報 | 内容 | 内容(わかりやすく) | 備考 |
|---|---|---|---|---|---|
| ① | クライアント → サーバ | ClientHello | 対応TLSバージョン、対応暗号方式など | 「私はこんな暗号が使えます」 | 通信条件の提案 |
| ② | クライアント → サーバ | クライアントランダム | 鍵の32バイト乱数 | 「今回だけ使うランダムな数字です」 | 鍵を毎回変える |
| ③ | クライアント → サーバ | SNI | Server Name IndicationでSNI | 「このサイトに接続したいです」 | ドメイン指定 |
| ④ | サーバ → クライアント | ServerHello | 選択したTLSバージョン・暗号方式を確定 | 「この暗号で通信しましょう」 | 条件の確定 |
| ⑤ | サーバ → クライアント | サーバランダム | 鍵導出用の32バイト乱数 | 「こちらのランダムな数字です」 | 鍵生成に使用 |
| ⑥ | サーバ → クライアント | サーバ証明書 | 公開鍵・署名など | 「私は本物のサーバです」 | 身元証明 |
| ⑦ | サーバ → クライアント | 鍵交換情報 | (EC)DHEの公開値、署名付きパラメータ | 「鍵の材料を渡します」「改ざんされていません」 | 鍵共有準備 |
| ⑧ | クライアント → サーバ | 鍵交換情報 | (EC)DHE公開値送信 | 「鍵の材料を送ります」 | 共通鍵の元 |
| ⑨ | クライアント → サーバ | Finished | ハンドシェイクトランスクリプト(ここまでの履歴)のハッシュ値 | 「ここまで改ざんされていません」 | 整合性検証 |
| ⑩ | サーバ → クライアント | Finished | 同上 | 「こちらも問題ありません」 | 最終確認 |
② 暗号化通信
TLSの暗号化通信では、送信するデータを共通鍵で暗号化します。できる限り速い通信を行いたいので、公開鍵ではなく共通鍵を使います。さらに送信するデータに認証コードを付加することでデータの改ざんのチェックができます。認証コードはMAC(Message Authentication Code)と呼ばれるもので、送信するデータと共通鍵からハッシュ関数で生成します。最近のTLSではMAC単体では使わず、暗号化と認証を一体化したAEADが主流のようです。
最後に
今回は、SSL/TLSについてまとめました。
様々なプロトコルと混同しないことが大切ですね。
それでは今回はここまでとします。
おすすめの記事
当ブログではいろいろな記事を書いています。今人気の記事をいくつかご紹介しますので、ぜひご覧ください。




コメント