「Transport Layer Security」の版間の差分
(同じ利用者による、間の29版が非表示) | |||
行1: | 行1: | ||
− | + | [[TLS]]/[[SSL]]は、通信の暗号化で利用されます。ウェブサービスの安全性を高めるために良く利用されています。[[Transport Layer Security]] (TLS)は、セキュリティを必要とされる通信のためのプロトコルです。[[Secure Sockets Layer]] ( [[Secure Sockets Layer|SSL]] ) とも呼ばれます。 | |
− | + | ||
− | + | ||
− | + | ||
− | [[ | + | |
− | [[ | + | |
− | + | ||
− | + | ||
− | とらんすぽーと・れいやー・せきゅりてぃ | + | '''読み方''' |
− | てぃーえるえす | + | ;[[Transport Layer Security]]: とらんすぽーと・れいやー・せきゅりてぃ |
+ | ;[[TLS]]:てぃーえるえす | ||
+ | ;[[SSL]]::えすえすえる | ||
+ | ;[[Secure Sockets Layer]]: せきゅあ そけっつ れいやー | ||
__TOC__ | __TOC__ | ||
== 概要 == | == 概要 == | ||
+ | [[Transport Layer Security]] (TLS)の元になったプロトコルは、[[Secure Sockets Layer|SSL]] です。 | ||
− | [[ | + | [[Transport Layer Security|TLS]]は、[[TCP]]をラッピングする形で利用されます。[[Hypertext Transfer Protocol|HTTP]]での利用意識されて設計されていますが、アプリケーション層のプロトコルには依存しません。[[HTTPS]]は、URIスキームの1つで、[[TLS]]を使った[[Hypertext Transfer Protocol|HTTP]]のことを表します。 |
− | [[ | + | SSLは、[[暗号化]]、[[認証]]、改竄検出の機能を提供します。 |
− | + | {|class="wikitable" | |
+ | |+ 開発元 | ||
+ | ! 開発元 | ||
+ | ! 正式名称 | ||
+ | ! 省略系 | ||
+ | |- | ||
+ | | ネットスケープコミュニケーション | ||
+ | | Secure Socket Layer | ||
+ | | SSL | ||
+ | |- | ||
+ | | IETF | ||
+ | | Transport Layer Security | ||
+ | | TLS | ||
+ | |} | ||
+ | |||
+ | == TLS/SSLのバージョン == | ||
+ | {|class="wikitable" | ||
+ | |+ SSL/TLSのバージョン | ||
+ | ! バージョン | ||
+ | ! 安全性 | ||
+ | ! 説明 | ||
+ | |- | ||
+ | | SSLv1.0 | ||
+ | | x | ||
+ | | 設計レビューの時点でプロトコルに脆弱性が発見され破棄されました。 | ||
+ | |- | ||
+ | | SSLv2.0 | ||
+ | | x | ||
+ | | SSLv1.0の問題を修正して設計されました。1994にSSL2.0として発表されました。いくつかの脆弱性が発見され SSLv3.0が開発されます。 | ||
+ | |- | ||
+ | | SSLv3.0 | ||
+ | | △ | ||
+ | | SSLv2.0の問題を修正し、機能追加され1995年に発表されました。 | ||
+ | |- | ||
+ | | TLSv1.0 | ||
+ | | o | ||
+ | | SSLv3.0とTLSv1.0に正確な互換性はありませんが、だいたい同じです。 | ||
+ | |- | ||
+ | | TLSv1.1 | ||
+ | | o | ||
+ | | 発見された攻撃手法に対する耐性の強化が中心です。 | ||
+ | |- | ||
+ | | TLSv1.2 | ||
+ | | o | ||
+ | |ハッシュアルゴリズムにSHA-256が追加されました。ブロック暗号は、GCMとCCMの認証付き暗号が利用可能になりました。 | ||
+ | |} | ||
+ | |||
+ | == TLS/SSLのバージョンと脆弱性 == | ||
+ | |||
+ | {|class="wikitable" | ||
+ | |+ TLS/SSLのバージョンと脆弱性 | ||
+ | ! CVE | ||
+ | ! 脆弱性名 | ||
+ | ! SSLv1.0 | ||
+ | ! SSLv2.0 | ||
+ | ! SSLv3.0 | ||
+ | ! TLSv1.0 | ||
+ | ! TLSv1.1 | ||
+ | ! TLSv1.2 | ||
+ | |- | ||
+ | | CVE-2014-0160 | ||
+ | | [[CVE-2014-0160 OpenSSL Heartbleed|Heartbleed]] | ||
+ | | - | ||
+ | | - | ||
+ | | - | ||
+ | | - | ||
+ | | x | ||
+ | | - | ||
+ | |- | ||
+ | | CVE-2011-3389 | ||
+ | | [[BEAST攻撃]] | ||
+ | | x | ||
+ | | x | ||
+ | | x | ||
+ | | x | ||
+ | | - | ||
+ | | - | ||
+ | |- | ||
+ | | CVE-2012-4930 | ||
+ | | CRIME攻撃 | ||
+ | | x | ||
+ | | x | ||
+ | | x | ||
+ | | x | ||
+ | | x | ||
+ | | x | ||
+ | |- | ||
+ | | CVE- | ||
+ | | BREACH攻撃 | ||
+ | | x | ||
+ | | x | ||
+ | | x | ||
+ | | x | ||
+ | | x | ||
+ | | x | ||
+ | |- | ||
+ | | CVE- | ||
+ | | 攻撃 | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | |} | ||
+ | |||
+ | == Perfect Forward Secrecy == | ||
+ | Perfect Forward Secrecy(PFS)は、「暗号化された通信」と「秘密鍵」の両方が漏えいしても、復号化できない、という鍵交換の概念です。 | ||
+ | |||
+ | SSL/TLSでPerfect Forward Securityを実現するアルゴリズムには、以下のものがあります。 | ||
+ | * [[ディフィー・ヘルマン鍵交換]](DHE) | ||
+ | * 楕円曲線暗号を使用した楕円曲線ディフィー・ヘルマン鍵共有(DCDHE) | ||
+ | |||
+ | DHE | ||
+ | * DHE-RSA | ||
+ | * DHE-DSS | ||
+ | |||
+ | ECDHE | ||
+ | * ECDHE-RSA | ||
+ | * ECDHE-ECDSA | ||
== 暗号化 == | == 暗号化 == | ||
行25: | 行141: | ||
[[共通鍵暗号]]による[[暗号化]]を提供します。 | [[共通鍵暗号]]による[[暗号化]]を提供します。 | ||
− | = | + | {|class="wikitable" |
+ | |+ SSL/TLSで利用可能な暗号 | ||
+ | ! 暗号方式 | ||
+ | ! 暗号アルゴリズム | ||
+ | |- | ||
+ | | [[共通鍵暗号]] [[ブロック暗号]] | ||
+ | | RC2(40), [[DES暗号|DES]](40,56),Triple DES, IDEA,[[AES暗号|AES]], [[Camellia]], SEED | ||
+ | |- | ||
+ | | [[共通鍵暗号]] [[ストリーム暗号]] | ||
+ | | [[RC4]](40,128) | ||
+ | |- | ||
+ | | [[公開鍵暗号]] | ||
+ | | [[RSA暗号|RSA]], ECDH, DH | ||
+ | |- | ||
+ | | [[デジタル署名]] | ||
+ | | [[RSA暗号|RSA]], DSS, ECDSA | ||
+ | |- | ||
+ | | [[ハッシュ関数]] | ||
+ | | [[MD5]], [[SHA-1]], [[SHA-2|SHA-256]], SHA-384, SHA-512 | ||
+ | |} | ||
+ | == 認証 == | ||
SSL は、[[公開鍵証明書]]による認証を提供します。 | SSL は、[[公開鍵証明書]]による認証を提供します。 | ||
− | SSLでは、署名アルゴリズムとして [[RSA暗号]]や[[ | + | SSLでは、署名アルゴリズムとして [[RSA暗号]]や[[Digital Signature Algorithm|DSA]]が利用されます。 |
== 改竄検出 == | == 改竄検出 == | ||
行37: | 行173: | ||
選択肢として、 [[MD5]]、[[SHA-1]]、[[SHA-256]] の[[ハッシュ関数]]があります。 | 選択肢として、 [[MD5]]、[[SHA-1]]、[[SHA-256]] の[[ハッシュ関数]]があります。 | ||
− | |||
− | == | + | == SSL/TLS ハンドシェイクプロトコル == |
+ | {|class="wikitable" | ||
+ | |+ ハンドシェイクプロトコル | ||
+ | ! クライアント | ||
+ | ! | ||
+ | ! サーバ | ||
+ | |- | ||
+ | | ClientHello | ||
+ | | → | ||
+ | | | ||
+ | |- | ||
+ | | | ||
+ | | ← | ||
+ | | Server Hello<br> | ||
+ | ServerCertificate<br> | ||
+ | ServerKeyExchnage(Option)<br> | ||
+ | CertificateRequest(Option)<br> | ||
+ | ServerHelloDone | ||
+ | |- | ||
+ | |ClientCertificate<br> | ||
+ | ClientKeyExchange<br> | ||
+ | CertificateVerify(Option)<br> | ||
+ | ChangeCipherSpec<br> | ||
+ | Begin new CipherSpec<br> | ||
+ | Finished | ||
+ | | → | ||
+ | | | ||
+ | |- | ||
+ | | | ||
+ | | ← | ||
+ | | ChangeCipherSpec<br> | ||
+ | Begin new CipherSpec<br> | ||
+ | Finished | ||
+ | |- | ||
+ | | Application Data | ||
+ | | ←→ | ||
+ | | Application Data | ||
+ | |} | ||
+ | == Change Cipher Specプロトコルとは == | ||
+ | Change Cipher Specプロトコルは、通信に使用する[[暗号アルゴリズム]]を変更することを相手に通知するためのプロトコルです。 | ||
+ | クライアントは、 ClientKeyExchangeメッセージ、または、 ClientVerifyメッセージの後に、ChangeCipherSpecメッセージを送信します。 | ||
+ | サーバは、クライアントから受信した鍵交換メッセージの処理が正常に終了した後で、ChangeCipherSpecメッセージを送信します。 | ||
− | == | + | == BEAST攻撃 == |
+ | [[BEAST攻撃]]対策として[[RC4]]を利用すると言われてきましたが、必ずしも良いとはいえません。 | ||
+ | * [[電子政府における調達のために参照すべき暗号のリスト]]の電子政府推奨暗号リストに[[RC4]]はありません。 | ||
+ | * SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS オプションを無効にすることで対応できます。 | ||
+ | * [[BEAST攻撃]]の攻撃条件は非常に厳しいものです。 | ||
+ | ** パケットをすべて盗聴できること | ||
+ | ** 任意のリクエストをサーバーに送信できること | ||
+ | *** 最近のほとんどの[[ウェブブラウザ]]は、[[同一生成元ポリシー]](Same Origin Policy)を実装している。 | ||
− | * [[ | + | == 使い方 == |
+ | == SSLテストツール == | ||
+ | * [[testssl.sh]] | ||
+ | * [[nmap]] ssl-enum-ciphers | ||
+ | * [[nogotofail]] (Google) | ||
+ | * [[sslscan]] | ||
+ | == SSL == | ||
+ | * [[SSL TLSセッションチケット]] | ||
+ | * [[SSLセッションキャッシュ]] | ||
+ | * [[TLSセッションリサンプション]] | ||
+ | == 証明書 == | ||
+ | * [[SSLサーバ証明書]] | ||
+ | * [[Server Name Indication]] | ||
+ | == プロトコル == | ||
+ | * [[TLS 1.3]] | ||
+ | * [[STARTTLS]] | ||
+ | * [[DTLS]] | ||
* [[HTTPS]] | * [[HTTPS]] | ||
− | * [[HTTP]] | + | * [[Perfect Forward Secrecy]] |
+ | * [[SSL 3.0の廃止 RFC 7568]] | ||
+ | * [[SPDY]] | ||
+ | * [[HTTP/2]] | ||
+ | == 関連項目 == | ||
+ | * [[SSLオフロード]] | ||
+ | * [[OpenSSL]] | ||
+ | * [[OpenSSH]] | ||
+ | * [[curlでTLSバージョンを指定する方法]] | ||
+ | * [[メインページ]] | ||
+ | == 脆弱性 == | ||
+ | * [[BEAST攻撃]] | ||
+ | * [[FREAK]] | ||
+ | * [[Logjam]] | ||
+ | <!-- vim: filetype=mediawiki | ||
+ | --> |
2018年3月24日 (土) 18:19時点における最新版
TLS/SSLは、通信の暗号化で利用されます。ウェブサービスの安全性を高めるために良く利用されています。Transport Layer Security (TLS)は、セキュリティを必要とされる通信のためのプロトコルです。Secure Sockets Layer ( SSL ) とも呼ばれます。
読み方
- Transport Layer Security
- とらんすぽーと・れいやー・せきゅりてぃ
- TLS
- てぃーえるえす
- SSL
- :えすえすえる
- Secure Sockets Layer
- せきゅあ そけっつ れいやー
目次
概要
Transport Layer Security (TLS)の元になったプロトコルは、SSL です。
TLSは、TCPをラッピングする形で利用されます。HTTPでの利用意識されて設計されていますが、アプリケーション層のプロトコルには依存しません。HTTPSは、URIスキームの1つで、TLSを使ったHTTPのことを表します。
開発元 | 正式名称 | 省略系 |
---|---|---|
ネットスケープコミュニケーション | Secure Socket Layer | SSL |
IETF | Transport Layer Security | TLS |
TLS/SSLのバージョン
バージョン | 安全性 | 説明 |
---|---|---|
SSLv1.0 | x | 設計レビューの時点でプロトコルに脆弱性が発見され破棄されました。 |
SSLv2.0 | x | SSLv1.0の問題を修正して設計されました。1994にSSL2.0として発表されました。いくつかの脆弱性が発見され SSLv3.0が開発されます。 |
SSLv3.0 | △ | SSLv2.0の問題を修正し、機能追加され1995年に発表されました。 |
TLSv1.0 | o | SSLv3.0とTLSv1.0に正確な互換性はありませんが、だいたい同じです。 |
TLSv1.1 | o | 発見された攻撃手法に対する耐性の強化が中心です。 |
TLSv1.2 | o | ハッシュアルゴリズムにSHA-256が追加されました。ブロック暗号は、GCMとCCMの認証付き暗号が利用可能になりました。 |
TLS/SSLのバージョンと脆弱性
CVE | 脆弱性名 | SSLv1.0 | SSLv2.0 | SSLv3.0 | TLSv1.0 | TLSv1.1 | TLSv1.2 |
---|---|---|---|---|---|---|---|
CVE-2014-0160 | Heartbleed | - | - | - | - | x | - |
CVE-2011-3389 | BEAST攻撃 | x | x | x | x | - | - |
CVE-2012-4930 | CRIME攻撃 | x | x | x | x | x | x |
CVE- | BREACH攻撃 | x | x | x | x | x | x |
CVE- | 攻撃 |
Perfect Forward Secrecy
Perfect Forward Secrecy(PFS)は、「暗号化された通信」と「秘密鍵」の両方が漏えいしても、復号化できない、という鍵交換の概念です。
SSL/TLSでPerfect Forward Securityを実現するアルゴリズムには、以下のものがあります。
- ディフィー・ヘルマン鍵交換(DHE)
- 楕円曲線暗号を使用した楕円曲線ディフィー・ヘルマン鍵共有(DCDHE)
DHE
- DHE-RSA
- DHE-DSS
ECDHE
- ECDHE-RSA
- ECDHE-ECDSA
暗号化
暗号方式 | 暗号アルゴリズム |
---|---|
共通鍵暗号 ブロック暗号 | RC2(40), DES(40,56),Triple DES, IDEA,AES, Camellia, SEED |
共通鍵暗号 ストリーム暗号 | RC4(40,128) |
公開鍵暗号 | RSA, ECDH, DH |
デジタル署名 | RSA, DSS, ECDSA |
ハッシュ関数 | MD5, SHA-1, SHA-256, SHA-384, SHA-512 |
認証
SSL は、公開鍵証明書による認証を提供します。
SSLでは、署名アルゴリズムとして RSA暗号やDSAが利用されます。
改竄検出
SSLでは、データレコードを送信するときに、レコードのシーケンス番号、ハッシュ用共通鍵、データからハッシュ値を計算し、レコードに付加します。ハッシュ用共通鍵を知らない攻撃者によりデータが改竄されても、ハッシュ値で検出できます。
選択肢として、 MD5、SHA-1、SHA-256 のハッシュ関数があります。
SSL/TLS ハンドシェイクプロトコル
クライアント | サーバ | |
---|---|---|
ClientHello | → | |
← | Server Hello ServerCertificate | |
ClientCertificate ClientKeyExchange |
→ | |
← | ChangeCipherSpec Begin new CipherSpec | |
Application Data | ←→ | Application Data |
Change Cipher Specプロトコルとは
Change Cipher Specプロトコルは、通信に使用する暗号アルゴリズムを変更することを相手に通知するためのプロトコルです。 クライアントは、 ClientKeyExchangeメッセージ、または、 ClientVerifyメッセージの後に、ChangeCipherSpecメッセージを送信します。 サーバは、クライアントから受信した鍵交換メッセージの処理が正常に終了した後で、ChangeCipherSpecメッセージを送信します。
BEAST攻撃
BEAST攻撃対策としてRC4を利用すると言われてきましたが、必ずしも良いとはいえません。
- 電子政府における調達のために参照すべき暗号のリストの電子政府推奨暗号リストにRC4はありません。
- SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS オプションを無効にすることで対応できます。
- BEAST攻撃の攻撃条件は非常に厳しいものです。
使い方
SSLテストツール
- testssl.sh
- nmap ssl-enum-ciphers
- nogotofail (Google)
- sslscan