SSL/TLSについてまとめてみた
はじめに
最近以下の本を読みました。
SSL/TLSが整理できてよかったので、本テーマで、インプットした知識を記事にしていきたいと思います。
対象
・サーバやネットワーク関連の基礎知識を習得されている方
・暗号技術の基本について理解されている方
本記事で細かく説明しない内容
恐れ入りますが、以下の概念について詳細な説明は省かせていただきます。
機密性 (Confidentiality)
情報が許可されていない人や事に対して開示されないこと。暗号化によって実現される。
完全性 (Integrity)
情報が許可なく変更されていないこと。ハッシュ関数やMACによって検証される。
真正性 (Authenticity)
情報の出所や実体が本物であること。デジタル署名や認証プロトコルによって確認される。
共通鍵暗号化方式
暗号化と復号化に同じ鍵を使用する方式。高速だが、鍵の安全な共有が課題。主に機密性を提供。
公開鍵暗号化方式
暗号化には公開鍵、復号化には秘密鍵を使用する方式。鍵配送問題を解決するが、処理が遅い。機密性と真正性を提供可能。
ハイブリッド暗号化方式
共通鍵で本文を暗号化し、その共通鍵を公開鍵で暗号化する方式。両方の利点を組み合わせ、効率的に機密性を確保。
デジタル署名
メッセージのハッシュを送信者の秘密鍵で暗号化したもの。メッセージの完全性と送信者の真正性を保証。
デジタル証明書
信頼できる第三者(認証局)が発行する電子文書。公開鍵の所有者の身元を証明し、真正性を確立。
メッセージ認証コード (MAC)
共有秘密鍵とメッセージから生成される短いビット列。メッセージの完全性と認証(真正性の一部)を提供する。
SSL/TLSハンドシェイクについて
では早速本記事のメインテーマに踏み込んでいきます。
私たちがインターネットを利用する際、SSL/TLSハンドシェイクという技術によって、通信の完全性/機密性/真正性が保たれています。
図示すると、以下のようになります。
※こちらの図では以下暗号スイートを使用すると仮定しています。
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
図では、以下を実施しています。
・暗号化アルゴリズムの合意
・サーバーの認証(場合によってはクライアントの認証も)
・セッション鍵の確立
暗号スイートの見方ですが、以下のようになります。
例:TLS_①ECDHE_➁RSA_WITH_③AES_256_④GCM_⑤SHA384
①鍵交換アルゴリズム
➁認証アルゴリズム
③やり取りするデータを暗号化するアルゴリズム
④暗号利用モード
⑤メッセージ認証コード生成のハッシュ関数
つまり、この図で実施していることは
①Client Hello~Server Helloで使用する暗号を決定
➁クライアント側が、共有されたでデジタル証明書で、サーバを認証
※具体的な認証の仕組みは省略しますが、使用されるアルゴリズムはRSAとSHA384となります。
③ECDHEアルゴリズムで共通鍵の生成
ということになります。
実際のデータは、③で生成した鍵とAES_256アルゴリズムを用いて、暗号化されます。
おわりに
本当は、デジタル証明書を用いたサーバの検証方法なども深堀したかったのですが、
それについては別記事にします。
Discussion