Cipher Suite (暗号スイート) とは

SSL/TLSの種類

安全とされているのは、TLSv1.2とTLSv1.3の2種類になる。

SSLv3 … 脆弱性あり(2014年10月14日 SSL 3.0 の脆弱性「POODLE」が公表される)
TLSv1 … 脆弱性あり(2022/02/01 Chrome 98 よりTLS1.0/1.1 が無効化される)
TLSv1.2 … 安全
TLSv1.3 … 安全

参考:TLS暗号設定ガイドライン~安全なウェブサイトのために(暗号設定対策編)~https://www.ipa.go.jp/security/vuln/ssl_crypt_config.html

SSL/TLSハンドシェイク

TLS通信の際、以下のやり取りで、暗号スイートを決定する。
Client:アクセスするパソコンやスマートフォン等に相当
Server:ウェブサーバー

      Client(パソコン、スマートフォン等) Server(ウェブサーバー)

      ClientHello                  -------->
   クライアントが最初にサーバーに接続
   使用可能な暗号スイートをすべて提示
                                               ServerHello
                                               サーバーが暗号スイートを1つに決定
                                               Certificate*
                                               TLSサーバー証明書
                                               ServerKeyExchange*
                                               鍵交換パラメーター
                                               CertificateRequest*
                                               クライアント認証利用時は証明書要求
                                   <--------   ServerHelloDone
                                               サーバーからの送信完了
                                                      
      Certificate*
      クライアント認証時はクライアント認証証明書
      ClientKeyExchange
      鍵交換パラメーター
      CertificateVerify*
      クライアント認証証明書の検証
      [ChangeCipherSpec]
      この後に続くデータは保護されていると通知
      Finished                     -------->
      鍵交換と認証処理が成功したことを確認
                                               [ChangeCipherSpec]
                                               この後に続くデータは保護されていると通知       
                                   <--------   Finished
                                               鍵交換と認証処理が成功したことを確認
      Application Data             <------->   Application Data
      保護された通信のやりとり                 保護された通信のやりとり

             Fig. 1 - Message flow for a full handshake

* 常に送信されないオプション

参照:
Request for Comments: 5246 The Transport Layer Security (TLS) Protocol Version 1.2
7.3. Handshake Protocol overview
Fig. 1 – Message flow for a full handshake
Request for Comments: 2246 The TLS Protocol Version 1.0
7.3. Handshake Protocol overview
Fig. 1 – Message flow for a full handshake

TLS1.2 までの暗号スイート「鍵交換_認証_暗号化_ハッシュ関数」の見方

以下に、TLS1.2の例を2つ示す。
TLS_[鍵交換 (Kx)][認証 (Au)]_WITH[共通鍵暗号 (Enc)]_[ハッシュ (Hash/Mac)]

TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384
 鍵交換「DHE」
 認証「RSA」
 暗号化「鍵長 256 ビット GCM モードの Camellia(CAMELLIA_256_GCM)」
 ハッシュ関数「SHA-384」

TLS_RSA_WITH_AES_128_CBC_SHA
鍵交換と認証「RSA」
暗号化「鍵長 128 ビット CBC モードの AES(AES_128_CBC)」
ハッシュ関数「SHA-1」

要素安全な設定例
プロトコルTLSv1.2, TLSv1.3
鍵交換
Kx – Key Exchange
ECDHE, DHE
※最後にEの付くPFS(Perfect Forward Secrity) 特性をもつものが良い。通信の都度、秘密鍵が新たに生成されるので将来にわたり安全。
認証
Au – Authentication
ECDSA
RSASSA PKCS#1 v1.5(RSA)
RSASSA-PSS(TLS1.3のみ)
暗号化
Enc – Encryption
ブロック暗号:AES, Camellia(TLS1.2のみ)
暗号利用モード:GCM, CCM, CCM_8
ストリーム暗号:ChaCha20-Poly1305
ハッシュ関数
Mac – Message Authentication Code
SHA256, SHA384
参照:https://www.ipa.go.jp/security/ipg/documents/ipa-cryptrec-gl-3001-3.0.1.pdf

TLS1.3 の暗号スイート「暗号化_ハッシュ関数」の見方

TLS_AES_256_GCM_SHA384
TLS_[AEAD方式 (Enc/Mac)]_[ハッシュ (Hash)]
暗号化「鍵長256ビット GCM モードの AES(AES_256_GCM)」
ハッシュ関数「SHA-384」
※ TLS1.2で項目に含まれていた鍵交換、認証がTLS1.3よりなくなった。

Mozillaが推奨している暗号スイート

推奨構成

mozilla wiki Security/Server Side TLS
https://wiki.mozilla.org/Security/Server_Side_TLS

  • Modern(最新)下位互換を必要としない、TLS1.3をサポートする最新構成
  • Intermediate(中間)一般用途のサーバー推奨構成
  • Old(古い): Internet Explorer 8(Windows XP)、Java 6、OpenSSL 0.9.8などの非常に古いクライアントまたはライブラリによってアクセスされるサービスの構成

構成ごとにサポートするブラウザ等の一覧。

ConfigurationFirefoxAndroidChromeEdgeInternet ExplorerJavaOpenSSLOperaSafari
Modern6310.07075111.1.15712.1
Intermediate274.4.2311211 (Win7)8u311.0.1209
Old12.31128 (WinXP)60.9.851
引用:https://wiki.mozilla.org/Security/Server_Side_TLS

Intermediate(一般用途のサーバー推奨構成)に記載の暗号化スイート
各行は左から順に「CipherSuite名」「プロトコル」「鍵交換アルゴリズム(Kx)」「認証アルゴリズム(Au)」「暗号化方式(Enc)」「ハッシュ関数(Mac)」を示す。

0x13,0x01  -  TLS_AES_128_GCM_SHA256         TLSv1.3  Kx=any   Au=any    Enc=AESGCM(128)             Mac=AEAD
0x13,0x02  -  TLS_AES_256_GCM_SHA384         TLSv1.3  Kx=any   Au=any    Enc=AESGCM(256)             Mac=AEAD
0x13,0x03  -  TLS_CHACHA20_POLY1305_SHA256   TLSv1.3  Kx=any   Au=any    Enc=CHACHA20/POLY1305(256)  Mac=AEAD
0xC0,0x2B  -  ECDHE-ECDSA-AES128-GCM-SHA256  TLSv1.2  Kx=ECDH  Au=ECDSA  Enc=AESGCM(128)             Mac=AEAD
0xC0,0x2F  -  ECDHE-RSA-AES128-GCM-SHA256    TLSv1.2  Kx=ECDH  Au=RSA    Enc=AESGCM(128)             Mac=AEAD
0xC0,0x2C  -  ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2  Kx=ECDH  Au=ECDSA  Enc=AESGCM(256)             Mac=AEAD
0xC0,0x30  -  ECDHE-RSA-AES256-GCM-SHA384    TLSv1.2  Kx=ECDH  Au=RSA    Enc=AESGCM(256)             Mac=AEAD
0xCC,0xA9  -  ECDHE-ECDSA-CHACHA20-POLY1305  TLSv1.2  Kx=ECDH  Au=ECDSA  Enc=CHACHA20/POLY1305(256)  Mac=AEAD
0xCC,0xA8  -  ECDHE-RSA-CHACHA20-POLY1305    TLSv1.2  Kx=ECDH  Au=RSA    Enc=CHACHA20/POLY1305(256)  Mac=AEAD
0x00,0x9E  -  DHE-RSA-AES128-GCM-SHA256      TLSv1.2  Kx=DH    Au=RSA    Enc=AESGCM(128)             Mac=AEAD
0x00,0x9F  -  DHE-RSA-AES256-GCM-SHA384      TLSv1.2  Kx=DH    Au=RSA    Enc=AESGCM(256)             Mac=AEAD

mozilla SSL Configuration Generator

mozilla SSL Configuration Generator」では、暗号スイートを作成できる。
modern configは、最新の暗号スイートで、最新の端末では利用できるが、以前の端末では利用できない。
intermediate configは、一般用途のサーバー向けでmodern configより、利用可能な端末が多い。

apache 2.4.41, modern config, OpenSSL 1.1.1k

サポート対象:Supports Firefox 63, Android 10.0, Chrome 70, Edge 75, Java 11, OpenSSL 1.1.1, Opera 57, and Safari 12.1

# generated 2022-06-20, Mozilla Guideline v5.6, Apache 2.4.41, OpenSSL 1.1.1k, modern configuration
# https://ssl-config.mozilla.org/#server=apache&version=2.4.41&config=modern&openssl=1.1.1k&guideline=5.6

# this configuration requires mod_ssl, mod_socache_shmcb, mod_rewrite, and mod_headers
<VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
    RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile      /path/to/signed_cert_and_intermediate_certs
    SSLCertificateKeyFile   /path/to/private_key

    # enable HTTP/2, if available
    Protocols h2 http/1.1

    # HTTP Strict Transport Security (mod_headers is required) (63072000 seconds)
    Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>

# modern configuration
SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLHonorCipherOrder     off
SSLSessionTickets       off

SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"

apache 2.4.41, intermediate config, OpenSSL 1.1.1k

サポート対象:Supports Firefox 27, Android 4.4.2, Chrome 31, Edge, IE 11 on Windows 7, Java 8u31, OpenSSL 1.0.1, Opera 20, and Safari 9

# generated 2022-06-20, Mozilla Guideline v5.6, Apache 2.4.41, OpenSSL 1.1.1k, intermediate configuration
# https://ssl-config.mozilla.org/#server=apache&version=2.4.41&config=intermediate&openssl=1.1.1k&guideline=5.6

# this configuration requires mod_ssl, mod_socache_shmcb, mod_rewrite, and mod_headers
<VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
    RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

<VirtualHost *:443>
    SSLEngine on

    # curl https://ssl-config.mozilla.org/ffdhe2048.txt >> /path/to/signed_cert_and_intermediate_certs_and_dhparams
    SSLCertificateFile      /path/to/signed_cert_and_intermediate_certs_and_dhparams
    SSLCertificateKeyFile   /path/to/private_key

    # enable HTTP/2, if available
    Protocols h2 http/1.1

    # HTTP Strict Transport Security (mod_headers is required) (63072000 seconds)
    Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>

# intermediate configuration
SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off

SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"

OpenSSL 1.1.1k FIPS 25 Mar 2021で使用可能な暗号スイート

OpenSSLで使用可能な暗号スイートを以下に示す。
赤字は、TLSv1.2未満(TLS1.2を含まない)の使用しないことが望ましい暗号スイート。

# openssl ciphers -v
TLS_AES_256_GCM_SHA384  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(256) Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any      Au=any  Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_128_GCM_SHA256  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(128) Mac=AEAD
TLS_AES_128_CCM_SHA256  TLSv1.3 Kx=any      Au=any  Enc=AESCCM(128) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH     Au=RSA  Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-ECDSA-AES256-CCM  TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESCCM(256) Mac=AEAD
ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(128) Mac=AEAD
ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES128-CCM  TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESCCM(128) Mac=AEAD
ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA256
ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA256
ECDHE-ECDSA-AES256-SHA  TLSv1 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA1
ECDHE-RSA-AES256-SHA    TLSv1 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA1
ECDHE-ECDSA-AES128-SHA  TLSv1 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA1
ECDHE-RSA-AES128-SHA    TLSv1 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA1
AES256-GCM-SHA384       TLSv1.2 Kx=RSA      Au=RSA  Enc=AESGCM(256) Mac=AEAD
AES256-CCM              TLSv1.2 Kx=RSA      Au=RSA  Enc=AESCCM(256) Mac=AEAD
AES128-GCM-SHA256       TLSv1.2 Kx=RSA      Au=RSA  Enc=AESGCM(128) Mac=AEAD
AES128-CCM              TLSv1.2 Kx=RSA      Au=RSA  Enc=AESCCM(128) Mac=AEAD
AES256-SHA256           TLSv1.2 Kx=RSA      Au=RSA  Enc=AES(256)  Mac=SHA256
AES128-SHA256           TLSv1.2 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA256
AES256-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(256)  Mac=SHA1
AES128-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA1
DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(256) Mac=AEAD
DHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=DH       Au=RSA  Enc=CHACHA20/POLY1305(256) Mac=AEAD
DHE-RSA-AES256-CCM      TLSv1.2 Kx=DH       Au=RSA  Enc=AESCCM(256) Mac=AEAD
DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-CCM      TLSv1.2 Kx=DH       Au=RSA  Enc=AESCCM(128) Mac=AEAD
DHE-RSA-AES256-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA256
DHE-RSA-AES128-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA256
DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1
DHE-RSA-AES128-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA1
PSK-AES256-GCM-SHA384   TLSv1.2 Kx=PSK      Au=PSK  Enc=AESGCM(256) Mac=AEAD
PSK-CHACHA20-POLY1305   TLSv1.2 Kx=PSK      Au=PSK  Enc=CHACHA20/POLY1305(256) Mac=AEAD
PSK-AES256-CCM          TLSv1.2 Kx=PSK      Au=PSK  Enc=AESCCM(256) Mac=AEAD
PSK-AES128-GCM-SHA256   TLSv1.2 Kx=PSK      Au=PSK  Enc=AESGCM(128) Mac=AEAD
PSK-AES128-CCM          TLSv1.2 Kx=PSK      Au=PSK  Enc=AESCCM(128) Mac=AEAD
PSK-AES256-CBC-SHA      SSLv3 Kx=PSK      Au=PSK  Enc=AES(256)  Mac=SHA1
PSK-AES128-CBC-SHA256   TLSv1 Kx=PSK      Au=PSK  Enc=AES(128)  Mac=SHA256
PSK-AES128-CBC-SHA      SSLv3 Kx=PSK      Au=PSK  Enc=AES(128)  Mac=SHA1
DHE-PSK-AES256-GCM-SHA384 TLSv1.2 Kx=DHEPSK   Au=PSK  Enc=AESGCM(256) Mac=AEAD
DHE-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=DHEPSK   Au=PSK  Enc=CHACHA20/POLY1305(256) Mac=AEAD
DHE-PSK-AES256-CCM      TLSv1.2 Kx=DHEPSK   Au=PSK  Enc=AESCCM(256) Mac=AEAD
DHE-PSK-AES128-GCM-SHA256 TLSv1.2 Kx=DHEPSK   Au=PSK  Enc=AESGCM(128) Mac=AEAD
DHE-PSK-AES128-CCM      TLSv1.2 Kx=DHEPSK   Au=PSK  Enc=AESCCM(128) Mac=AEAD
DHE-PSK-AES256-CBC-SHA  SSLv3 Kx=DHEPSK   Au=PSK  Enc=AES(256)  Mac=SHA1
DHE-PSK-AES128-CBC-SHA256 TLSv1 Kx=DHEPSK   Au=PSK  Enc=AES(128)  Mac=SHA256
DHE-PSK-AES128-CBC-SHA  SSLv3 Kx=DHEPSK   Au=PSK  Enc=AES(128)  Mac=SHA1
ECDHE-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=ECDHEPSK Au=PSK  Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-PSK-AES256-CBC-SHA TLSv1 Kx=ECDHEPSK Au=PSK  Enc=AES(256)  Mac=SHA1
ECDHE-PSK-AES128-CBC-SHA256 TLSv1 Kx=ECDHEPSK Au=PSK  Enc=AES(128)  Mac=SHA256
ECDHE-PSK-AES128-CBC-SHA TLSv1 Kx=ECDHEPSK Au=PSK  Enc=AES(128)  Mac=SHA1

Windowsで使用可能な暗号スイート

Windowsで使用可能な暗号スイートは以下のサイトに記載されている。

TLS/SSL (Schannel SSP) の暗号スイート
https://docs.microsoft.com/ja-jp/windows/win32/secauthn/cipher-suites-in-schannel

Windows 10 v1607 の TLS 暗号スイート
https://docs.microsoft.com/ja-jp/windows/win32/secauthn/tls-cipher-suites-in-windows-10-v1607

SSL Labs

ウェブサーバーで使用されている証明書、使用可能な暗号スイートを確認できる。

SSL Server Test (Powered by Qualys SSL Labs)
A comprehensive free SSL test for your public web servers.
タイトルとURLをコピーしました