Secure Channel (Schannel)

暗号化を通してID認証やセキュア通信、プライベート通信を実現する一連のセキュリティプロトコルを含んだSSP (Security Support Provider)のこと。HTTPSを要するインターネットアプリケーションで主に使用される。

セキュア通信ってなに?プライベート通信との違いは?

  • 機密性 (confidentiality)
  • 認証 (Authentication)
  • メッセージ完全性 (Message integrity)
  • 否認不可性 (Nonrepudiation)
  • 可用性 (Availability)
  • アクセス制御 (Access control)

Security Support Provider (SSP)

認証やメッセージの完全性と隠匿、あらゆるアプリケーションプロトコル(HTTP, SMTP, POP3, FTP, MIMEなど)に対する統合セキュリティサービスを提供するための共通APIのこと。

 ⇒ アプリケーションプロトコルの設計者がプロトコル自体を修正せずとも、異なるセキュリティサービスを利用できるようインターフェースを切っている。

インターフェースを切るのは大事。責任分界点を明確に。

メッセージ認証コード(MAC, Message Authentication Code)

メッセージの改竄や偽造を検知するために使用される。

  1. メッセージの送り手と受け手で共有されたセッションキーを用いて、メッセージ本文の一方向ハッシュ (不可逆ハッシュ) を暗号化し、MACを生成する。
  2. 生成したMACをメッセージに添えて受け手へ送付する。
  3. メッセージの受け手は共有されたセッションキーとメッセージ本文を用いて、MACを再生成する。
  4. 再生成されたMACと送り手から受け取ったMACを比較する。
  5. 両者が一致する場合、メッセージは送信中に改竄・偽造されていないと分かる。
Schannelプロトコルでは、MACを生成するために使用するアルゴリズムをメッセージの送り手・受け手が登録している暗号化スイートから決定している。
セッションキー

共通鍵をもとにクライアントとサーバ間で取り決められた、暗号解読されない程度に短命な暗号鍵。セッションキーが相手に渡ると、鍵交換キー(一般的に公開鍵)によって保護されるため、意図した相手だけがアクセスできる。セッションキーはCryptDeriveKey関数を呼ぶことでハッシュ値から引き出される。

TLS/SSLの暗号化スイート

暗号化アルゴリズムの集まりのこと。暗号化スイートからキーや暗号情報の作成に使用するアルゴリズムを選ぶ。

鍵交換

鍵交換アルゴリズム ( 公開鍵アルゴリズム。暗号化に使う共通鍵と復号化に使う秘密鍵の)は共有キーを生成するために必要な情報を保護する。比較的データ量の少ないやり取りで有効。鍵交換アルゴリズムには、Diffie-Hellman key exchange (DH) やKey Exchange Algorithm (KEA)

一括暗号化

クライアントとサーバ間で交換したメッセージを暗号化する。データ量の多いやり取りで有効。

メッセージ認証

メッセージのハッシュとデジタル署名を作成し、メッセージの完全性を高める。

https://i-msdn.sec.s-msft.com/dynimg/IC858360.png

開発者はこれらの要素をALG_IDを使って指定する。

Windows Server 2016に対応した暗号化スイート一覧

TLS Cipher Suites in Windows 10 v1607 (Windows)

Schannel クレデンシャル

Schannelプロトコルはサーバ/クライアントを認証するためにクレデンシャル ( = X.509証明書) を要求する。証明書から得られる公開鍵/秘密鍵の情報を用いてクライアントにサーバの身元証明を示す。公開鍵/秘密鍵はメッセージの整合性を担保するためにも用いられる。サーバ認証にはSchannelセキュリティプロトコルが必要となる。

本日の英単語

tampering:(許可なく、 勝手に)変更する。改竄。
forgery:偽造

参考文献

Secure Channel (Windows)