組み込み技術者向けTLS1.3基礎解説(前編):まずはSSL/TLSについて知ろうIoTセキュリティ基礎解説(3/3 ページ)

» 2018年09月18日 10時00分 公開
前のページへ 1|2|3       

4.TLSのプロトコル

 要素技術が理解できたところで、いよいよTLSのプロトコルについて見て行こう。TLSは通常TCP/IPの上位レイヤーとして動作する(※実際にはRecordプロトコルというレイヤーがあるが解説は省略する)。図3にクライアント−サーバ間のTLS通信における典型的なメッセージシーケンスの例を示した。

図3 図3 TLS1.2のメッセージシーケンス例(クリックで拡大)

 TLSの通信は主に、Handshake、ChangeCipherSpecなどのプロトコル、アプリケーションデータの通信に分けられる(Alertなどもあるがここでは省略する)。

 Handshakeプロトコルは、暗号通信のために必要な情報を合意/共有するためのプロトコルだ。通信相手の確認や決まりごとの話し合い、鍵情報の交換を行っていると理解しておくとよい。HandshakeはクライアントがClientHelloをサーバに送ることで開始する。ClientHelloでは、クライアントがどんな暗号化機能を使えるのかを「暗号スイート」という識別子でサーバに提示する。暗号スイートには通信を行うプロトコルや鍵共有、認証、暗号化、ハッシュに使用する具体的なアルゴリズムの組合せが表現されている(図4)。

 サーバが暗号スイートの中から利用可能で優先度の高いものを選択し、ServerHelloとしてクライアントに通知すると、その後の通信で使用する暗号が決まる。メッセージや暗号スイートは「Wireshark」などのフリーソフトでTLS通信を解析すれば簡単に確認できるのでぜひのぞいてみてほしい。

図4 図4 暗号スイートの見方(クリックで拡大)

 暗号スイートが決まったら、通信相手の認証と情報の共有を行う。サーバ認証モードでは、サーバがCertificateメッセージに公開鍵証明書を乗せてクライアントに送信し、クライアントは公開鍵証明書の署名を認証局の鍵で検証する。問題なければ、受け取った公開鍵はその後の鍵共有や署名検証に使用する。

 次に、ServerKeyExchangeとServerHelloDoneメッセージ、ClientKeyExchangeメッセージで鍵共有に必要な情報を交換する。クライアントとサーバは、それぞれ交換した情報に基づいて、鍵を作るための秘密の情報「master_secret」を共有し、そこから共通鍵を生成できるようになる。実際には、生成する鍵は1つではなく、乱数や鍵導出用アルゴリズムを利用して、データ暗号化用、MAC用、初期化ベクトル値(暗号化開始時に与える乱数値)というように複数生成している。鍵データを複数に分けるのは、攻撃の難易度を上げて安全性を高めるためだ。

 最後に、互いにChangeCipherSpecとFinishedというメッセージを送り合い、Handshakeの結果を以降の暗号通信に適用することを通知する。FinishedメッセージにはHandshakeの結果が暗号化されて含まれているので、受け取ったらまず内容が正しいことを確認しなければならない。もしFinishedの内容が間違っていたら、Handshakeが改ざんされている疑いがあるからだ。Finished以後はようやくアプリケーションデータとなり、決定したアルゴリズムで暗号化通信を行う。Finishedは、アプリケーションデータをやりとりする前に改ざんを検知する、いわば防波堤の役割もある。

 以上は新規セッションを開始する場合のシーケンスだが、同じ相手と同一セッションで通信を繰り返す場合に全てのHandshakeを実行するのは非効率なので、TLSではセッション再開時のシーケンスも用意されている。具体的には、セッション開始時のServerHelloで発行されたセッションIDを互いにキャッシュ領域に保持しておき、セッション再開時にClientHelloとセッションIDを一緒に送付する。サーバが受け取ったセッションIDがキャッシュと一致したら、保持していたmaster_secretを復帰してすぐに共有鍵を生成できるため、サーバ認証(Certificate)や鍵共有プロセス(ServerKeyExchange、ClientKeyExchange等)は省略することができる。

5.TLS1.3がやってきた

 ここまでは、現在最も広く利用されているTLS1.2をベースにしてTLSプロトコルの概要を説明した。TLS1.2は、暗号スイートに新しい暗号方式も追加されており、過去バージョンと比較すれば安全性が向上している。例えば、ハッシュアルゴリズムのSHA1は危殆化したため、TLS1.2ではSHA256/384が追加された。また、暗号化と同時に認証情報を付加する「認証付き暗号」も安全性が高いとされており暗号スイートに追加されている。ただ、一部の危殆化アルゴリズムは後から利用禁止となったので、実際に排除されているかは実装依存であり、管理を煩雑にしている。

 前述のセッション再開シーケンスは、認証や鍵共有の負荷を軽減し通信性能に寄与するものの、性能を実現するために秘匿性を一部犠牲にしているという指摘もある。トラフィック増大や組み込み機器の暗号化需要が拡大する中で、セキュリティと性能をどのように両立するかはますます重要な課題となっている。

 TLSの新バージョンであるTLS1.3では、こういった課題を改善することを目指して、仕様が大きく変更された。後編では、実質的に「TLS2.0」とも言われているTLS1.3で具体的に何が変わったのか、今後の活用の可能性について解説する。

プロフィール

photo

市原 創(いちはら はじめ)

国内電機メーカーで流通、金融等業務システムの基盤ソフトウェア開発や性能改善に携わり、その後キヤノングループでキヤノン製品の通信制御ソフトウェアの開発に従事。現在はキヤノンITソリューションズに勤務し、組み込みソフトウェアのセキュリティや暗号技術を中心に活動中

キヤノンITソリューションズ 組込みセキュリティ
https://www.canon-its.co.jp/products/embedded_security/

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.