マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

  • デジタル証明書を使用してエンドポイントを証明し通信の暗号化を行う。
  • エンドポイントには、クライアント、サーバなどがあり、
    対応する証明書にクライアント証明書、サーバ証明書がある。
  • しかし、ICカードなどに格納して、
    特定のマシンに限定しない使用方法もある。

経緯

歴史的経緯について。

SSL

  • Netscape Communications社が開発した。
  • 標準化はされていない。
  • 歴史的文書と言う形で後日、RFCが公開された。

TLS

  • SSL3.0を標準化したもの。
  • SSLを継承するものと言う位置付け。

脆弱性

  • SSLの全バージョンと
  • TLSの1.0と1.1の実装の一部には

脆弱性が発見され、TLS1.2以上への移行が促されている。

X over SSL/TLS

SSL/TLSはアプリケーション層とトランスポート層のプロトコルなので、
アプリケーション層プロトコルにポート・フォワーディングが適用されている。

HTTPS

  • HTTPS over SSL/TLS
  • SSL/TLSの最も多いユースケース
  • HTTPの下位スタックにSSL/TLSを使用する。

その他

  • SMTPS(SMTP)
  • LDAPS(LDAP)
  • FTPS(FTP)
  • IMAPS(IMAP)
  • POP3S(POP3)

機能

証明

サーバー証明書やクライアント証明書を用い、
サーバー認証やクライアント認証を行う。

暗号化

上記の証明書を使用して鍵の生成と交換を行い暗号化通信を行う。

メッセージ認証

MACによるメッセージ認証を行う。

詳細

プロトコル構造

スタック

アプリケーション層
Hand ShakeプロトコルChange Cipher SpecプロトコルAlertプロトコルApplication Dataプロトコル
Recordプロトコル
トランスポート層
...

プロトコル

  • Hand Shakeプロトコル
  • ネゴシエーションにより
    • 鍵交換を行い、
    • マスタシークレットを生成する。
  • セッション確立のハンド・シェイク
  • セッションの下位にコネクションがある。
  • Change Cipher Specプロトコル
    • 暗号化に関するパラメタの決定
    • 若しくは、パラメタの変更通知
  • Alertプロトコル
    通信中に発生したエラーを相手に通知する。
    • Warning
    • Fatal(即中断)
  • Application Dataプロトコル
    ネゴシエーションのパラメタに従い、透過的に送受信
  • Recordプロトコル
    • ブロック暗号化されたペイロード部分
    • 2^14バイト以下のブロックに分割される。
    • 圧縮、MACの生成、暗号化が行われる。

シーケンス

コネクション確立

  • プロトコル
    • Hand Shakeプロトコル
    • Change Cipher Specプロトコル
    • Alertプロトコル
    • Application Dataプロトコル
  • コネクション確立手順
    網掛けは、オプショナル。
#クライアント方向サーバ説明
1Hello RequestClient Helloをリクエスト
2Client HelloClient Helloをレスポンス(暗号化/圧縮アルゴリズムの一覧)
3Server HelloClient Helloに対するServer Hello(暗号化/圧縮アルゴリズムの選択)
4Server Certificateサーバ証明書を送信(証明書チェーンを含む)
5Server Key Exchange鍵交換メッセージその1(RSAかDHで)
6Certificate Requestクライアント証明書を要求
7Server Hello Doneサーバからの送信終了を示すエンドマーク
8Client Certificateクライアント証明書を送信
9Client Key Exchange鍵交換メッセージその2(その1の続き)
10Certificate Verifyクライアントが正しい秘密鍵を持っていることを
証明するための署名を送付(サーバの公開鍵で検証)
11Change Cipher Spec無暗号通信の終了を示すエンドマーク
(共通鍵から暗号化/復号化に使用するパラメタを生成)
12FinishedClient Hello からのメッセージを暗号化して送信
13Change Cipher Spec無暗号通信の終了を示すエンドマーク
(共通鍵から暗号化/復号化に使用するパラメタを生成)
14FinishedServer Helloからのメッセージを暗号化して送信
15Application DataApplication Data暗号通信

データ送受信

  • プロトコル
    • Recordプロトコル
  • データ送受信手順
  • 暗号化
    • データを2^14バイト以下のブロックに分割
    • 分割されたブロックを圧縮
    • HMAC(MACシークレット)によるMACの生成
    • 連結とパディング
    • 暗号化(暗号化キー+初期ベクタ(IV))が行われる。
    • 暗号化されたデータを送信する。
  • 復号化
    • 復号化
    • MAC認証
    • 圧縮の解凍
    • ブロックの連結
  • レコード・イメージ
    色付き部分が暗号化部分
    タイプバージョン情報データ長
    データ長
    通信データ
     
    HMAC
    パディングパディング長

用語解説

セッションとコネクション

  • セッション
    • 共通鍵生成までのネゴシエーションのこと(仮想的概念)。
    • 特に負荷が高いのは鍵交換処理(プリマスタシークレットの生成まで)
  • コネクション
    • 実際のTCP/IPコネクションで、セッションは共有する。
    • ただし、コネクション毎、別々に暗号化/復号化パラメタを生成する。

プリマスタシークレットとマスタシークレット

  • プリマスタシークレット
    • キー交換アルゴリズムで使用する値。
  • マスタシークレット
  • =共通鍵
  • 以下にPRF演算を施したもの。
    • プリマスタシークレット
    • サーバランダム
    • クライアントランダム
  • さらにPRFを行って暗号化/復号化に使用するパラメタを生成
    (生成したキー・ブロックから順次切り出す)
    (それぞれ、クライアント用とサーバ用がある)
    • MACシークレット
    • 暗号化キー
    • 初期ベクタ(IV)
  • ランダム
    Helloに含まれる
    • クライアントランダム(Client Hello)
    • サーバランダム(Server Hello)

脆弱性

中間者攻撃

基本的に、相互に信頼された認証局を使用することで、

(ルート証明書を信頼されたルート証明機関に追加し、
証明書証明書チェーンをチェックする仕組みを使用する)

サーバ / クライアントを認証できるので中間者攻撃から守られる。

HTTP化

WebサーバがHTTPSを強制していても、中間者攻撃が介入することで、
WebプラウザがHTTPで接続してしまい、そこをキャプチャされれば盗聴される。

リダイレクト

  • HTTPでアクセスされた場合、強制的にHTTPSにリダイレクトする。
  • ただ、このリダイレクトの前のHTTPアクセスにMITMの攻撃の可能性がある。

HSTS

HSTS : HTTP Strict Transport Security

  • RFC 6797 で規定されたセキュリティ機構
  • 最初にHTTPでアクセスした時点での攻撃を防ぐ。
    • Cookieを傍受し個人情情報を収集する。
    • フィッシングサイトへHTTPアクセスする。
  • WebサーバーがWebブラウザに対して、
    • 現在のドメイン(サブドメイン)に対するアクセスにおいて、
    • 次回以降、HTTPSの使用を強制する(max-ageの期間まで)。
    • この通知には、Strict Transport Securityヘッダを使用する。
  • だたし、HSTSでも、初回のHTTPアクセスにMITMの攻撃の可能性がある。

ダウングレード攻撃

バージョンロールバック攻撃

  • Snap Startで、低いバージョンでTLS/SSL接続を行うよう仕向ける。
  • Helloを改ざんし、より低い暗号強度のアルゴリズムを使用するよう仕向ける。

FREAK

  • FREAK : Factoring attack on RSA-EXPORT Keys
  • SSL/TLSの脆弱性を突いたセキュリティ・エクスプロイト
  • RSA公開鍵を素因数分解することが可能であれば中間者攻撃が成立する。
  • 「アメリカ合衆国からの暗号の輸出規制」により導入された
    弱い暗号(規制を回避するための512ビットのRSA鍵)
  • サーバ側・クライアント側の不適切な実装
    (512ビット以下のRSA鍵を受け入れてしまう)

Logjam

  • FREAKと同様に輸出用の512ビットの一時鍵を受け入れてしまう。
  • しかし、こちらは、FREAKと異なり、TLSプロトコル自体の脆弱性。

パディングオラクル攻撃

Lucky Thirteen

POODLE

  • POODLE : Padding Oracle On Downgraded Legacy Encryption
    • ブロック暗号をCBCモードで使用した際にパディング・オラクル攻撃が可能となるもの。
    • 平均してわずか256回のリクエストで暗号文の1バイトの解読が可能となる。
  • 対処法は、
    • クライアント、サーバのどちらかでSSL 3.0を無効化する。
    • クライアント側とサーバ側でTLS_FALLBACK_SCSV対応を行う(ダウングレードを抑止する)。

実装上の脆弱性

Heartbleed

  • OpenSSLライブラリのバージョン1.0.1 - 1.0.1f
    の間で発見された深刻なセキュリティ脆弱性
  • 保護されているはずの情報を盗むことが可能。

脆弱なソフトウェア

ガラケーやスマホ、タブレット、そのアプリケーションに
証明書のチェックが適切に行われていないものがあるらしい。

  • OS標準の証明書ストアの利用
  • 失効のチェック
  • 証明書チェーンのチェック
  • クライアントAPIの使用方法

参考

参考

Qiita

OpenSSL

SSTP

VPN

SSL-VPN


Tags: :IT国際標準, :インフラストラクチャ, :セキュリティ, :暗号化, :通信技術, :IIS


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-06-23 (水) 09:08:46 (1032d)