「Transport Layer Security」の版間の差分

提供: セキュリティ
移動: 案内検索
 
(同じ利用者による、間の27版が非表示)
行1: 行1:
<!--
+
[[TLS]]/[[SSL]]は、通信の暗号化で利用されます。ウェブサービスの安全性を高めるために良く利用されています。[[Transport Layer Security]] (TLS)は、セキュリティを必要とされる通信のためのプロトコルです。[[Secure Sockets Layer]] ( [[Secure Sockets Layer|SSL]] ) とも呼ばれます。
vim: filetype=mediawiki
+
-->
+
 
+
[[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)の元になったプロトコルは、[[Secure_Sockets_Layer|SSL]] です。
+
[[Transport Layer Security|TLS]]は、[[TCP]]をラッピングする形で利用されます。[[Hypertext Transfer Protocol|HTTP]]での利用意識されて設計されていますが、アプリケーション層のプロトコルには依存しません。[[HTTPS]]は、URIスキームの1つで、[[TLS]]を使った[[Hypertext Transfer Protocol|HTTP]]のことを表します。
  
[[Transport_Layer_Security|TLS]]は、[[TCP]]をラッピングする形で利用されます。[[Hypertext_Transfer_Protocol|HTTP]]での利用意識されて設計されていますが、アプリケーション層のプロトコルには依存しません。[[HTTPS]]は、[[URIスキーム]]の1つで、[[TLS]]を使った[[Hypertext_Transfer_Protocol|HTTP]]のことを表します。
+
SSLは、[[暗号化]][[認証]]、改竄検出の機能を提供します。
  
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暗号]]や[[Digital_Signature_Algorithm|DSA]]が利用されます。
+
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)を実装している。
  
* [[BEAST攻撃]]
+
== 使い方 ==
 +
== 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]]
* [[Hypertext Transfer Protocol]]
+
* [[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のことを表します。

SSLは、暗号化認証、改竄検出の機能を提供します。

開発元
開発元 正式名称 省略系
ネットスケープコミュニケーション Secure Socket Layer SSL
IETF Transport Layer Security TLS

TLS/SSLのバージョン

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のバージョンと脆弱性

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

  • DHE-RSA
  • DHE-DSS

ECDHE

  • ECDHE-RSA
  • ECDHE-ECDSA

暗号化

共通鍵暗号による暗号化を提供します。

SSL/TLSで利用可能な暗号
暗号方式 暗号アルゴリズム
共通鍵暗号 ブロック暗号 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では、データレコードを送信するときに、レコードのシーケンス番号、ハッシュ用共通鍵、データからハッシュ値を計算し、レコードに付加します。ハッシュ用共通鍵を知らない攻撃者によりデータが改竄されても、ハッシュ値で検出できます。

選択肢として、 MD5SHA-1SHA-256ハッシュ関数があります。


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

ハンドシェイクプロトコル
クライアント サーバ
ClientHello
Server Hello

ServerCertificate
ServerKeyExchnage(Option)
CertificateRequest(Option)
ServerHelloDone

ClientCertificate

ClientKeyExchange
CertificateVerify(Option)
ChangeCipherSpec
Begin new CipherSpec
Finished

ChangeCipherSpec

Begin new CipherSpec
Finished

Application Data ←→ Application Data

Change Cipher Specプロトコルとは

Change Cipher Specプロトコルは、通信に使用する暗号アルゴリズムを変更することを相手に通知するためのプロトコルです。 クライアントは、 ClientKeyExchangeメッセージ、または、 ClientVerifyメッセージの後に、ChangeCipherSpecメッセージを送信します。 サーバは、クライアントから受信した鍵交換メッセージの処理が正常に終了した後で、ChangeCipherSpecメッセージを送信します。

BEAST攻撃

BEAST攻撃対策としてRC4を利用すると言われてきましたが、必ずしも良いとはいえません。

使い方

SSLテストツール

SSL

証明書

プロトコル

関連項目

脆弱性