re:annkara

日々学んだことを書き留めておく。

【読書メモ】食べる!SSL!

SSL/TLS周りのことをちゃんと理解したくて、積読してあった「食べる!SSL! ―HTTPS環境構築から始めるSSL入門」を読んだ。 セキュリティの考え方や、SSL/TLSの全体像を把握するには非常に良い入門書だったと思う。

以下メモ書き。

セキュリティの考え方に共通する3つの要素

  1. 機密性(Confidentiality)
     情報が意図した相手以外に漏れていないこと
  2. 完全性(Integrity)
     情報が誰にも改ざんされていないこと
  3. 可用性(Availability)
     使用可能であると想定されている状況において使用したいときに使用できること

セキュリティの脅威モデル

情報を何から守るべきか、攻撃者がどのような攻撃を仕掛けてくるかを理解しやすいようにモデル化する考え方。 各脅威の頭文字をとった "STRIDE" という脅威モデルがある。

  1. なりすまし(Spoofing)
  2. データの改ざん(Tempering)
  3. 否認(Repudiation)
  4. 情報漏洩(Information Disclosure)
  5. サービス不能(Denial of Service)
  6. 権限の昇格(Elevation of Privilege)

セキュアな通信を実現するために必要なこと

  1. 「盗聴」されてもデータを第三者に読めないようにする
  2. 「改ざん」されても検知できるようにする
  3. 「なりすまし」されても気づけるようにする
  4. 「否認」できないように、本人しか送付できない情報形式にする

各脅威への対応

  • 「盗聴」への対策
    共通鍵暗号化方式・公開鍵暗号化方式による暗号化により、情報を盗み見られても解読できないようにする。
  • 「改ざん」への対策
    メッセージ認証符号 MAC(Message Authentification Code)の利用し、情報が改ざんされていないか検証を行う。
  • 「なりすまし」や「否認」への対策
    秘密鍵を利用したデジタル署名によって「本人」を特定する。
    サーバ証明書は証明書内に含まれる公開鍵が被証明者のものであることを証明するものである。 この証明にはドメイン証明・法的な実在証明・物理的な実在証明というように証明の信頼度合いが異なる証明方法がある。

SSL/TLSによって保護されているとは

クライアントとサーバ間の通信が暗号化されており、相手のサーバが認証されていて、通信内容が改ざんされた際に、その内容が改ざんされた内容だと受け手が気づくことができるということ。

通信経路上の情報を安全に相手方のサーバへと送信することを目的としており、実際に相手方のアプリケーションが本当に「信頼できる」のか、サーバ側に到達し復号化された情報の安全性などは、SSL/TLSでは保護されない。

SSL/TLSの通信フロー

大きく分けて2段階のフローとなっている。
1. ハンドシェイクフェーズ
2. データ転送フェーズ

ハンドシェイクフェーズ

公開鍵暗号化方式を利用して実際の情報をやりとりするまでの準備を整えるフェーズ。

ハンドシェイクフェーズの目的としては以下の3つ。
1. 暗号化アルゴリズムの合意
2. 認証
3. 暗号化に利用する「鍵の確立」

以下のアルゴリズムについてクライアント側とサーバ側で合意をとる。

  1. SSL/TLSのバージョン
  2. サーバー認証アルゴリズム
  3. 鍵交換アルゴリズム
  4. データ転送で使用するデータ保護用の共通鍵暗号方式アルゴリズム
  5. データ転送で使用するデータの完全性を確認するためのMACアルゴリズム
  6. 圧縮アルゴリズム

アルゴリズムの合意形成後にクライアント側はサーバ側から送られてきたサーバ証明書の検証を行う。
信頼に足る証明書の場合にデータ転送時に利用する共通鍵・MAC鍵を生成し、クライアント・サーバの両方で生成した鍵の妥当性を検証しハンドシェイクフェーズを終了する。

SSL/TLSを構成するコンポーネント

  1. 証明書
  2. 公開鍵・秘密鍵
  3. 暗号化アルゴリズム
  4. SSL/TLSライブラリ

以上、ざっくりとしたメモ書きなので、個々の詳細に別途書くかも。

食べる!SSL! ―HTTPS環境構築から始めるSSL入門

食べる!SSL! ―HTTPS環境構築から始めるSSL入門