#mailerstudy 02 メールと暗号 - SSL/TLS -

47
メールサーバ勉強会 #mailerstudy 02 メールと暗号 - SSL/TLS - 株式会社ハートビーツ 滝澤 隆史

description

#mailerstudy 02 メールと暗号 - SSL/TLS -

Transcript of #mailerstudy 02 メールと暗号 - SSL/TLS -

Page 1: #mailerstudy 02 メールと暗号 - SSL/TLS -

メールサーバ勉強会 #mailerstudy 02

メールと暗号 - SSL/TLS -

株式会社ハートビーツ 滝澤 隆史

Page 2: #mailerstudy 02 メールと暗号 - SSL/TLS -

私は誰

• 氏名: 滝澤 隆史 @ttkzw • 所属: 株式会社ハートビーツ • 何やっている人

▫ メーラMuttの国際化や日本語対応パッチ作者 ▫ SpamAssassinの日本語対応パッチ作者

• メールシステムとの関わり ▫ システム管理者として1997年から2006年までメールサーバの管理

▫ 昔、qmail関連で色々やっていた。2006年にqmail捨て捨て。Postfix/Dovecot遣いにクラスチェンジ

▫ 現在は個人サーバでメールサーバを運用 Postfix + Dovecot + Sieve(dovecot-pigeonhole) +

ClamAV + SpamAssassin + spamass-milter + Roundcube

2

Page 3: #mailerstudy 02 メールと暗号 - SSL/TLS -

アジェンダ

• SSL/TLS

Page 4: #mailerstudy 02 メールと暗号 - SSL/TLS -

参考図書

• マスタリングTCP/IP SSL/TLS編 ▫ 著者: Eric Rescorla

▫ 出版社: オーム社

• 新版 暗号技術入門 秘密の国のアリス ▫ 著者: 結城 浩

▫ 出版社:ソフトバンククリエイティブ

• RFC

• WikiPedia

Page 5: #mailerstudy 02 メールと暗号 - SSL/TLS -
Page 6: #mailerstudy 02 メールと暗号 - SSL/TLS -

SSL/TLSとは

• インターネット上の安全な通信を提供するプロトコル ▫ 機密性(暗号化) 通信内容が漏洩しないこと

▫ 完全性 通信内容が改ざんされないこと

▫ 認証 通信相手が本人であること

Page 7: #mailerstudy 02 メールと暗号 - SSL/TLS -

SSL/TLSとは

• 透過性 ▫ TCPの通信を囲うトンネルのような役割

▫ HTTP以外にも利用できる SMTP, POP3, IMAP, LDAP, .....

Page 8: #mailerstudy 02 メールと暗号 - SSL/TLS -

SSL/TLSとは

• SSL ▫ Secure Socket Layerの略

• TLS ▫ Transport Layer Securityの略

Page 9: #mailerstudy 02 メールと暗号 - SSL/TLS -

SSL/TLSの歴史

• SSL 1.0 ▫ ネットスケープコミュニケーションズ社により開発 ▫ 設計中に問題が見つかりリリースされなかった。

• SSL 2.0 ▫ 1994年発表 ▫ 最初に実装されたバージョン Netscape Navigator 1.1

▫ 様々なセキュリティ上の問題が見つかっている。 • SSL 3.0 ▫ 1995年発表 Netscape Navigator 2.0

▫ 今でも使われている。

Page 10: #mailerstudy 02 メールと暗号 - SSL/TLS -

SSL/TLSの歴史

• TLS 1.0 ▫ SSL 3.0のベースにして、 IETFによりインターネット標準として開発された。

▫ 1999年、RFC 2246 "The TLS Protocol Version 1.0"が公開

▫ よく使われている。

▫ CBC攻撃のリスク

Page 11: #mailerstudy 02 メールと暗号 - SSL/TLS -

SSL/TLSの歴史

• TLS 1.1 ▫ 2006年、RFC 4346 "The Transport Layer

Security (TLS) Protocol Version 1.1"が公開 ▫ CBC攻撃に対する耐性の強化 ▫ 実装があまり進んでいない。

• TLS 1.2 ▫ 2008年、RFC 5246 " The Transport Layer

Security (TLS) Protocol Version 1.2"が公開 ▫ SHA-256のサポート ▫ 実装があまり進んでいない。

Page 12: #mailerstudy 02 メールと暗号 - SSL/TLS -

SSL/TLSのバージョンのまとめ

• SSL 2.0 ▫ ダウングレード攻撃の影響を受けるため、無効にしないといけない。

• SSL 3.0, TLS 1.0 ▫ よく使われている。 ▫ CBC攻撃のリスク有り

• TLS 1.1, TLS 1.2 ▫ TLS 1.1以降の利用が望ましい ▫ 実装が進んでいない OpenSSL 1.0.1以降で対応 IE 8, IE 9(Windows 7, Windows 2008 R2)は対応 Opera 10は対応 Firefox, Chrome, Safariは非対応

Page 13: #mailerstudy 02 メールと暗号 - SSL/TLS -
Page 14: #mailerstudy 02 メールと暗号 - SSL/TLS -

TLSプロトコル

TLSレコード プロトコル

TLSハンドシェイク プロトコル

アプリケーション データ

プロトコル

ChangeCipherSpec プロトコル

Alert プロトコル

Handshake プロトコル

・上位プロトコルから受け取ったデータを暗号化してTLSレコードにする。 ・受け取ったTLSレコードを復号したデータを上位プロトコルに渡す。

暗号スペックの変更の通知

アラートの通知 暗号パラメータや乱数や公開鍵

の交換

アプリケーションデータをTLSレコードプロトコルに渡す

Page 15: #mailerstudy 02 メールと暗号 - SSL/TLS -

TLSレコード

• TLSにおいて実際に暗号化されたデータとそのヘッダ

暗号文 ヘッダ

コンテント タイプ

上位のプロトコルタイプ ・change_cipher_spec ・alert ・handshake ・application_data

プロトコル バージョン

データ長

SSL 3.0→3.0 TLS 1.0→3.1 TLS 1.1→3.2 TLS 1.2→3.3 歴史的経緯↑

Page 16: #mailerstudy 02 メールと暗号 - SSL/TLS -

TLSレコード ブロックデータ(平文)

フラグメント

圧縮 フラグメント

MAC値

暗号文

フラグメント

ブロックデータを214 (16384)バイト以下に分割する。

フラグメントを圧縮する。

MACシークレットを共通鍵として、シーケンス番号とヘッダと圧縮フラグメントからMAC値を計算する。

圧縮フラグメントとMAC値を共通鍵で暗号化する。

TLSレコード

ヘッダ

暗号化により 機密性が保たれる。

ヘッダ

MAC値により完全性の検証とメッセージ認証を行う。

上位層から渡されたデータ

Page 17: #mailerstudy 02 メールと暗号 - SSL/TLS -

TLSレコードが実現するもの

• 暗号化 ▫ 機密性

• メッセージ認証コード(MAC) ▫ 完全性(改ざんされていないことの確認)

▫ メッセージ認証

Page 18: #mailerstudy 02 メールと暗号 - SSL/TLS -

TLSレコードだけでは 実現できないもの • 共通鍵の交換(鍵配送問題)

• 公開鍵証明書の検証

• 利用する暗号スイートの合意

• →ハンドシェイクで行う

Page 19: #mailerstudy 02 メールと暗号 - SSL/TLS -

TLS通信の流れ

• 次の段階に分けられる ▫ ハンドシェイク

▫ アプリケーション データ

▫ コネクションの終了

• 通信の流れを見てみよう

▫ ただし、 サーバ認証

RSA認証

▫ の場合についてのみ説明

Page 20: #mailerstudy 02 メールと暗号 - SSL/TLS -

通信の流れ

ClientHello

ServerHello

Certificate

ServerHelloDone

ClientKeyExchange

ChangeCipherSpec

Finished

ChangeCipherSpec

Finished

アプリケーション データ

close_notify

クライアント サーバ

ハンドシェイク

アプリケーション データ

終了

利用する暗号スイートを決めたり、鍵を生成するための乱数や証明書のやりとりを行う。

暗号化したデータのやりとりを行う。

Page 21: #mailerstudy 02 メールと暗号 - SSL/TLS -

Helloメッセージ

ClientHello

ServerHello

クライアント サーバ

クライアントとサーバ間で互いに利用可能なセキュリティ情報の交換を行う。

・プロトコル バージョン ・クライアントが生成した乱数 ・セッションID ・利用できる暗号スイートのリスト ・圧縮方法

・プロトコル バージョン ・サーバが生成した乱数 ・セッションID ・利用する暗号スイート ・圧縮方法

Page 22: #mailerstudy 02 メールと暗号 - SSL/TLS -

Helloメッセージ

Certificate

ServerHelloDone

クライアント サーバ

クライアントはServerHelloDoneを受け取った後に、サーバの証明書の検証を行う。

・公開鍵証明書のチェイン ・サーバの証明書 ・中間CAの証明書 ・ルートCAの証明書 クライアントがすでに持って いることを前提に省略可

ServerHelloの終了を知らせる。

Page 23: #mailerstudy 02 メールと暗号 - SSL/TLS -

復習)公開鍵基盤(PKI)

アリス

ボブ

ボブの証明書 ボブの証明書 ボブの 公開鍵

中間証明書

ルート証明書 中間認証局

ルート認証局

中間証明書

中間証明書

ルート証明書

署名の検証

署名の検証

公開鍵

公開鍵

署名

署名

公開鍵 一緒に配布 ボブが配布

OSやソフトウェアに バンドルして配布

証明書パス の検証

Page 24: #mailerstudy 02 メールと暗号 - SSL/TLS -

プレ マスター シークレットの送信

ClientKeyExchange

クライアント サーバ

・公開鍵で暗号化された プレ マスター シークレット

マスター シークレットを生成するのに利用するクライアントで生成した乱数

クライアントは公開鍵で暗号化して送り、サーバはプライベート鍵で復号する。 安全にプレ マスター シークレットを送信できる。

Page 25: #mailerstudy 02 メールと暗号 - SSL/TLS -

マスター シークレット クライアント

の乱数 サーバの 乱数

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

マスター シークレット

クライアント 書き込み MAC鍵

サーバ 書き込み MAC鍵

クライアント 書き込み 共通鍵

サーバ 書き込み 共通鍵

クライアント 書き込み

初期化ベクタIV

サーバ 書き込み

初期化ベクタIV

鍵を生成するための エントロピーソース

Page 26: #mailerstudy 02 メールと暗号 - SSL/TLS -

暗号通信の開始と ハンドシェイクの終了

ChangeCipherSpec

Finished

ChangeCipherSpec

Finished

クライアント サーバ

暗号スペックの変更を通知する。 これ以降の通信は暗号化される。

ハンドシェイクの終了 ・検証データ

暗号スペックの変更を通知する。 これ以降の通信は暗号化される。

暗号化 されている

暗号化 されている

Finishedを受け取ったら検証データを検証し、鍵交換と認証処理が成功したことを確認する。

ハンドシェイクの終了 ・検証データ

Page 27: #mailerstudy 02 メールと暗号 - SSL/TLS -

アプリケーション データ

アプリケーション データ

クライアント サーバ

・暗号化されたアプリケーション データ

アプリケーション データ

アプリケーション データ

アプリケーション データ

上位のアプリケーション(HTTP, IMAP, POP3など)を暗号化した通信はここで行われる。

Page 28: #mailerstudy 02 メールと暗号 - SSL/TLS -

コネクションの終了

close_notify

クライアント サーバ

・コネクションの終了を通知する終了アラート

Page 29: #mailerstudy 02 メールと暗号 - SSL/TLS -

ハンドシェイクが実現するもの

• 公開鍵証明書の検証 ▫ 公開鍵証明書によるサーバやクライアントの認証

• クライアント乱数、サーバ乱数、プレ マスター シークレットの生成 ▫ TLSレコードでの暗号化やMACで利用する共通鍵を生成するためのマスター シークレットを生成するための乱数の提供

Page 30: #mailerstudy 02 メールと暗号 - SSL/TLS -
Page 31: #mailerstudy 02 メールと暗号 - SSL/TLS -

復習)公開鍵基盤(PKI)

アリス

ボブ

ボブの証明書 ボブの証明書 ボブの 公開鍵

中間証明書

ルート証明書 中間認証局

ルート認証局

中間証明書

中間証明書

ルート証明書

署名の検証

署名の検証

公開鍵

公開鍵

署名

署名

公開鍵 一緒に配布 ボブが配布

OSやソフトウェアに バンドルして配布

証明書パス の検証

Page 32: #mailerstudy 02 メールと暗号 - SSL/TLS -

サーバの管理者が設定すること

• 公開鍵証明書 ▫ プライベート鍵 ▫ サーバ公開鍵証明書(証明書チェーン) ▫ 中間CAの証明書

• 利用するSSL/TLSのバージョン ▫ 例)SSLv3 TLSv1

• 利用する暗号スイート ▫ OpenSSLを利用しているソフトウェアの場合 HIGH, MEDIUM, LOW, EXPORT, aNULL 例)ALL:!LOW:!SSLv2:!EXP:!aNULL

Page 33: #mailerstudy 02 メールと暗号 - SSL/TLS -
Page 34: #mailerstudy 02 メールと暗号 - SSL/TLS -

SMTPS

• SMTPをSSL/TLSで暗号化するプロトコル

• TCP 465番ポート ▫ IANAに正式に登録された番号ではない!

▫ 一瞬登録されたけど失効された。

▫ 現在では慣習的に使っている。

Page 35: #mailerstudy 02 メールと暗号 - SSL/TLS -

SMTPS

• メーラーからSMTPサーバへのメールの送信時のみ利用されている。

• SMTPサーバ間の通信では利用されていない。 ▫ 25番ポート以外は利用しない。

▫ 相手がSSL/TLSに対応しているかわからないから違うポート番号465なんて使えない。

▫ 25番ポートで通信できるSTARTTLSを使え ということで465番ポートは削除されたのではないかと推測

Page 36: #mailerstudy 02 メールと暗号 - SSL/TLS -

STARTTLS

• SMTPセッション中にTLS通信に切り替えるコマンド

• RFC 3207 SMTP Service Extension for Secure SMTP over Transport Layer Security

Page 37: #mailerstudy 02 メールと暗号 - SSL/TLS -

S: 220 mail.example.jp C: EHLO client.example.jp S: 250-mail.example.jp S: 250-PIPELINING S: 250-SIZE 102400000 S: 250-VRFY S: 250-ETRN S: 250-STARTTLS S: 250-ENHANCEDSTATUSCODES S: 250-8BITMIME S: 250 DSN C: STARTTLS S: 220 2.0.0 Ready to start TLS C: Client Hello S: Server Hello S: Certificate S: Server Key Exchange S: Server Hello Done

C: Client Key Exchange C: Change Server Spec C: Finish S: Change Server Spec S: Finish C: EHLO client.example.jp S: 250-mail.example.jp S: 250-PIPELINING S: 250-SIZE 102400000 S: 250-VRFY S: 250-ETRN S: 250-AUTH PLAIN LOGIN S: 250-AUTH=PLAIN LOGIN S: 250-ENHANCEDSTATUSCODES S: 250-8BITMIME S: 250 DSN

暗号化されている

Page 38: #mailerstudy 02 メールと暗号 - SSL/TLS -

SMTPサーバとの接続確認

• SMTPSの場合 ▫ openssl s_client -connect localhost:465

• STARTTLSの場合 ▫ openssl s_client -connect localhost:587

-starttls smtp

Page 39: #mailerstudy 02 メールと暗号 - SSL/TLS -
Page 40: #mailerstudy 02 メールと暗号 - SSL/TLS -

POP3SとIMAPS

• POP3S ▫ POP3をSSL/TLSで暗号化するプロトコル

▫ TCP 995番ポート

• IMAPS ▫ IMAPをSSL/TLSで暗号化するプロトコル

▫ TCP 993番ポート

Page 41: #mailerstudy 02 メールと暗号 - SSL/TLS -

STARTTLS

• POP3/IMAPセッション中にTLS通信に切り替えるコマンド ▫ POP3のコマンド名は短縮されて"STLS"である

• RFC 2595 Using TLS with IMAP, POP3 and ACAP

▫ 平文認証(PLAIN, LOGIN)を保護する。

▫ STARTTLSを実装しているクライアントとサーバは十分に強い暗号レイヤーがなければ、平文認証を拒否しなれればならない(MUST)

Using TLS with IMAP, POP3 and ACAP

Page 42: #mailerstudy 02 メールと暗号 - SSL/TLS -

STARTTLS

• 平文認証(PLAIN, LOGIN)の保護の背景 ▫ APOPはプロトコル的に脆弱性がある

▫ APOPとCRAM-MD5はMD5の強度の問題がある。

▫ 実質的にクライアントとサーバの両方が実装している認証メカニズムはPLAINとLOGINくらいしかない

▫ PLAINとLOGINは平文であるため、盗聴に弱い。

▫ では、TLSで暗号化しよう!

Using TLS with IMAP, POP3 and ACAP

Page 43: #mailerstudy 02 メールと暗号 - SSL/TLS -

POP3のSTARTTLS

S: +OK Dovecot ready C: CAPA S: +OK S: CAPA S: TOP S: UIDL S: RESP-CODES S: PIPELINING S: STLS S: SASL C: STLS S: +OK Begin TLS negotiation now C: Client Hello S: Server Hello S: Certificate S: Server Key Exchange

S: Server Hello Done C: Client Key Exchange C: Change Server Spec C: Finish S: Change Server Spec S: Finish C: CAPA S: +OK S: CAPA S: TOP S: UIDL S: RESP-CODES S: PIPELINING S: USER S: SASL PLAIN LOGIN C: USER foo

暗号化されている

Page 44: #mailerstudy 02 メールと暗号 - SSL/TLS -

IMAPとSTARTTLS

S: OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS LOGINDISABLED] Dovecot ready.¥r¥n C: 1 STARTTLS S: 1 OK Begin TLS negotiation now C: Client Hello S: Server Hello S: Certificate S: Server Key Exchange S: Server Hello Done C: Client Key Exchange C: Change Server Spec C: Finish S: Change Server Spec S: Finish C: 2 CAPABILITY S: * CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN S: 2 OK Pre-login capabilities listed, post-login capabilities have more.

暗号化されている

Page 45: #mailerstudy 02 メールと暗号 - SSL/TLS -

IMAPサーバとの接続確認

• IMAPSの場合 ▫ openssl s_client -connect ホスト名:993

• STARTTLSの場合 ▫ openssl s_client -connect ホスト名:143

-starttls imap

Page 46: #mailerstudy 02 メールと暗号 - SSL/TLS -

POP3サーバとの接続確認

• POP3Sの場合 ▫ openssl s_client -connect localhost:995

• STARTTLSを使う場合 ▫ openssl s_client -connect localhost:110

-starttls pop3

Page 47: #mailerstudy 02 メールと暗号 - SSL/TLS -

まとめ

• SSL/TLSにより以下のことが実現できる ▫ 機密性(暗号化) 通信内容が漏洩しないこと

▫ 完全性 通信内容が改ざんされないこと

▫ 認証 通信相手が本人であること

• SMTPS, POP3S, IMAPSはTLSにより透過的に暗号化できる。

• SMTP, POP3, IMAPのコネクション中にSTARTTLSコマンドを発行することにより、TLS通信に切り替えできる。