前提知識
TLSでは、 鍵交換アルゴリズムを使って共通鍵の材料となる値を交換し、共通鍵を生成し、その鍵を用いて通信が暗号化されるわけですね。 鍵共有に使われる暗号を、公開鍵暗号と言いますね。共通鍵は、共通鍵暗号です。
公開鍵暗号
- RSA
- DH
- ECDH
- DEH = DH ephemeral
- ECDHE = ECDH epemeral
DHとECDHは離散対数問題を使っています g^x mod p = y で、y,p,gが与えられたとき、xが求められないってことね
共通鍵暗号
- RC4 (危殆化)
- DES = (危殆化)
- 3DES きたいか
- ChaCha20
- AES = 最も使われていて安全
RC4 = ストリーム暗号 AES = ブロック暗号
ハッシュ関数
- MD5
- SHA-1
- SHA-2
- SHA-3
TLSの暗号スイートについて
はい、これすごく大事なこと言います。TLSを使って通信が暗号化されるまでの流れですね。
- TLSハンドシェイク
- 実際にTLSの通信が始まる
でですよ。TLSハンドシェイクで何を決めているか?なんですが、以下を決めているわけですね。
- 鍵交換アルゴリズム
- 署名アルゴリズム
- 暗号アルゴリズム
- 暗号利用モード
- ハッシュ関数
鍵交換アルゴリズムは上に書いた、RSA,ECDHE,DHEです。 署名アルゴリズムは、RSA/ECDHEを指定できますが、ここは、発行したサーバ証明書の鍵の種類に依存します。ここすごく大事。
実は、鍵交換アルゴリズムで生成されたあたいは、さらにサーバ証明書の秘密鍵で暗号化され、公開鍵で復号されるんですね。で、真正性を確かめるんですよね。 ここ、知らんかった。すごく大事。
ただ覚えておきたいのが、RSAを用いた鍵交換では、署名がなされないということ。証明書の公開鍵は、クライアントが生成したプリマスターシークレットを暗号化するために使われる。そして、秘密鍵で復号するんだよね。 ECDHEでは、毎回公開鍵が生成されるんだよね。で、その公開鍵の正当性を証明するために秘密鍵で署名し、公開鍵で検証するんだよね。 RSAを用いた鍵交換では毎回同じ公開鍵と秘密鍵のペアで通信がなされるんだよね。プリマスターシクレットも含めてね。 だから、スノーデン事件の時みたいに、暗号化されたものをずっと溜めておいて、後でどうにか秘密鍵を入手して、プリマスターシクレットを特定、 からの通信内容を特定、といったことができてしまうんだよね。これ、前方特秘性がないって言いますね。
これに対して、ECDHE、DHEは、一回一回秘密鍵と公開鍵を生成するんだよね。はいそうだね。 でも、公開鍵から秘密鍵は、頑張れば何年かかければ、推測可能だよね?だから前方特秘性は、ないと思うんだけど。
これをchatGPTに聞いてみたらこう帰ってきました。
Q. 離散対数問題は時間をかければ解読可能です。各セッションで使われる公開鍵から秘密鍵を割り出すことも、原理上は可能です。 そこで、各セッションの公開鍵と、暗号化された通信全てを保存している人がいたとしましょう。そうすると、時間さえかければ、暗号文を解読できると思うのですがいかがでしょう。
A. あなたの指摘は、理論的には正しいです。離散対数問題は計算的に困難であるとされていますが、これは「現実的いな時間ん愛で解くのが難しい」という意味です。つまり、十分な計算資源と時間があれば理論的には解くことが可能です。しかし、いくつかの要因がこの門ん台を現実的には解決困難にしています。
- 計算資源の制約 現在のコンピュータ技術では、十分に大きな素数(2048bit以上)を使った離散対数問題を解くには膨大な計算資源が必要です。これは、非常に強力なコンピュータやスーパーコンピュータが必要で、現実的には非常に困難です。
- 時間の制約 仮に、計算資源が無制限であっっても、解くのに必要な時間が非常に長くなるため、実用的ではありません。多くの暗号プロトコルは、解読にかかる時間が実用的な範囲を超えるように設計されています。
- 前方特秘性の効果 ECDHEやDHEを使用することで、各セッションで異なる一時的な鍵が生成されます。これにより、仮にあるセッションの鍵が怪ドックされたとしても、他のセッションには影響を与えません。したがって、攻撃者が全てのセッションを解読するには、各セッションごとに個別の離散たい対数問題を解く必要があります。
ということなので、1,2は別にRSA暗号でも同じことだね。なので、結局、前方特秘性の効果は、一つの秘密鍵が漏れたとしても、全ての通信が破られるわけではない。ということ。セッションと秘密鍵、公開鍵が一対一に対応しているので、仮に秘密鍵が漏れても影響が部分的になること、という話ですね。完全理解です。
逆に、RSA暗号を使った鍵交換では、秘密鍵を使い回すので、秘密鍵が漏洩すると、その秘密鍵を使った過去の通信すべてが解読可能になってしまう。スノーデン事件みたいなことが起こるわけですわね。
話を暗号スイートに戻しますね。
暗号アルゴリズムが、共通鍵の話ですね。AESが使われることが一般的です。 暗号利用モードは、これも結構大事な概念ですね。
openssl ciphersでopensslで使える暗号化一覧が見られる。
TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:RSA-PSK-AES256-GCM-SHA384:DHE-PSK-AES256-GCM-SHA384:RSA-PSK-CHACHA20-POLY1305:DHE-PSK-CHACHA20-POLY1305:ECDHE-PSK-CHACHA20-POLY1305:AES256-GCM-SHA384:PSK-AES256-GCM-SHA384:PSK-CHACHA20-POLY1305:RSA-PSK-AES128-GCM-SHA256:DHE-PSK-AES128-GCM-SHA256:AES128-GCM-SHA256:PSK-AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:ECDHE-PSK-AES256-CBC-SHA384:ECDHE-PSK-AES256-CBC-SHA:SRP-RSA-AES-256-CBC-SHA:SRP-AES-256-CBC-SHA:RSA-PSK-AES256-CBC-SHA384:DHE-PSK-AES256-CBC-SHA384:RSA-PSK-AES256-CBC-SHA:DHE-PSK-AES256-CBC-SHA:AES256-SHA:PSK-AES256-CBC-SHA384:PSK-AES256-CBC-SHA:ECDHE-PSK-AES128-CBC-SHA256:ECDHE-PSK-AES128-CBC-SHA:SRP-RSA-AES-128-CBC-SHA:SRP-AES-128-CBC-SHA:RSA-PSK-AES128-CBC-SHA256:DHE-PSK-AES128-CBC-SHA256:RSA-PSK-AES128-CBC-SHA:DHE-PSK-AES128-CBC-SHA:AES128-SHA:PSK-AES128-CBC-SHA256:PSK-AES128-CBC-SHA
これがなにを表しているかを教えましょう。 例えば、
ECDHE-RSA-AES128-GCM-SHA256
まず前提として、サーバ証明書にはRSA暗号の公開鍵がおいてある、ということ。 そして、ECDHEは、クライアントとサーバでそれぞれ値を公開して計算すると共通鍵が得られる、という話でした。 では、RSA暗号がどこで使われるのか?という話ですが、 「サーバは一時的なECDHE公開鍵を生成し、それに対して自分のRSA秘密鍵で署名を行います」 ということですね。一時的なECDHE公開鍵というのは、共通鍵を作るための材料だと思ってください。 で、その材料から、共通鍵であるAESを生成するわけですね。AESはブロック暗号です。そして?GCMは、
次はこれです。
ECDHE-ECDSA-AES256-GCM-SHA384
これは、ECDHEで一時的な公開鍵が生成され、前方特日性が提供される。 そして、一時的に生成された公開鍵をECDSAで署名することで、セキュアな鍵交換が行われます。 じつはこれ、サーバ証明書がECDSA公開鍵を持っている必要があります。なるほどね。 持っている公開鍵によっても変わってくるってことよ。
RSAとECDSAでは後者の方が性能がいいからね。ここはパフォーマンスチューニングできるところかもしれないね。
TLS1.2ではRSAで鍵交換することもあったのです。
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
しかし、openssl1.1.1以降は、RSAを使った鍵交換は無くなりました。
でもよく見ると、これもありますね。
RSA-PSK-AES128-GCM-SHA256
鍵交換から、実際に暗号通信が始まるまでの流れ
TLSハンドシェイク
実際に通信が始まる わけですが、1について、もう少し詳しく説明していきます。
クライアントからサーバに、ClientHelloがいく ここでは、利用できる暗号スイートを提示するわけですね。
サーバーからクライアントに、serverHelloがいく ここで、どの暗号スイートを使うか、決めるわけですね。
ここからRSAを用いた鍵交換とそれ以外で変わってくるわけですね。
RSA
鍵交換 (RSA) RSAを用いて鍵交換をする場合は、この時点でクライアントがサーバの公開鍵(証明書)を使ってプリマスターシークレットを暗号化、で、サーバに送ります。
共通鍵の生成 クライアントとサーバは、プリマスターシクレットを共有できました。 このプリマスターシクレットを使って、マスターシークレットが生成されます。このときPRFが使われます。 さらに、マスターシクレットから、共通鍵の生成には、PRF (Pseudo Random Function) が使われます。 AESなどが使われます。
ECDHE
鍵交換 (ECDHEやDHE) サーバとクライアントは、それぞれで秘密鍵と公開鍵を生成します。公開鍵を相手に渡します。
公開鍵(その他のパラメータも含む)への署名 ここで、サーバ証明書を使って、公開鍵へ署名するわけですね。ここでサーバ証明書が使われるわけです。面白い。すごく面白い。 で、相手の存在を確認できたら、プリマスターシクレットが交換されているわけですね。 そこから先は、おんなじです。プリマスターシクレットからマスターシークレットを生成して、共通鍵を生成します。 以上です。
—- ここまで、公開鍵暗号を完全に理解した —-
mTLSについて
mTLSについて、わからんですわね。名前は聞いたことあるんですけどね。
nginxのお話
nginxでも使える暗号スイートを指定できるんですね。ssl_cipersディレクティブでね。
ssl_cipers ECDHE-RSA-AES128-GCM-SHA256:hogehoge:hogehoge
みたいな感じでね。んでね、 ssl_cipersに書く順番は、適応される順番、つまり優先度を表す。 たとえば、クライアントがTLSハンドシェイクで使える暗号スイートを提示してきたとき、マッチするものが複数ある場合は、上から使うようになっている。 しかし、ここで気をつけないといけないのは、
ssl_prefer_server_cipers on
を入れることだね。これを入れないとダメっす。
nginxで最速の暗号スイート
cloud flareでおすすめされている暗号化スイートですが、
["ECDHE-ECDSA-AES128-GCM-SHA256", "ECDHE-ECDSA-CHACHA20-POLY1305", "ECDHE-RSA-AES128-GCM-SHA256", "ECDHE-RSA-CHACHA20-POLY1305", "ECDHE-ECDSA-AES256-GCM-SHA384", "ECDHE-RSA-AES256-GCM-SHA384"]
で見ている感じ、やっぱりRSAよりECDSAの方が早いみたいですね。
命令セットによっても速度変わってくるみたいで、例えばintelではopensslを高速化するための命令が入っているみたいですね。 自分のマシンで、opensslの書くアルゴリズムの速度を測定するには、以下のコマンドを叩きましょう
openssl speed
結果がこちらですね
OpenSSL 1.1.1f 31 Mar 2020
built on: Tue Jul 30 16:36:54 2024 UTC
options:bn(64,64) rc4(16x,int) des(int) aes(partial) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-lxGbY1/openssl-1.1.1f=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_TLS_SECURITY_LEVEL=2 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
md2 0.00 0.00 0.00 0.00 0.00 0.00
mdc2 0.00 0.00 0.00 0.00 0.00 0.00
md4 116129.49k 354112.32k 816006.91k 1219016.70k 1416904.70k 1439498.24k
md5 162132.15k 367120.81k 641528.15k 792616.75k 846902.61k 850591.74k
hmac(md5) 68729.23k 207016.51k 479238.23k 691244.37k 830324.74k 843879.77k
sha1 185103.12k 430425.17k 833822.72k 1096286.55k 1209862.83k 1218734.76k
rmd160 58183.05k 137318.55k 249643.52k 309193.73k 338045.61k 341828.32k
rc4 826542.07k 862292.65k 708667.31k 674752.17k 664160.94k 662847.49k
des cbc 94001.91k 96677.48k 97341.53k 97560.92k 97654.10k 97643.18k
des ede3 36579.34k 36980.69k 37068.97k 37081.77k 37115.22k 37115.22k
idea cbc 0.00 0.00 0.00 0.00 0.00 0.00
seed cbc 115900.26k 119858.54k 121019.22k 121255.94k 121391.79k 121350.83k
rc2 cbc 64480.87k 65677.08k 66106.20k 66185.22k 66196.82k 66229.59k
rc5-32/12 cbc 0.00 0.00 0.00 0.00 0.00 0.00
blowfish cbc 161046.31k 172144.70k 175203.50k 175904.09k 176160.77k 176689.66k
cast cbc 148286.79k 159644.12k 162712.92k 163485.35k 163698.01k 163698.01k
aes-128 cbc 284399.06k 296815.42k 297800.28k 299718.66k 300528.98k 302123.15k
aes-192 cbc 247041.75k 256280.83k 256838.40k 258574.34k 258908.16k 258916.35k
aes-256 cbc 219349.67k 224339.46k 225086.55k 226124.12k 226749.10k 226945.71k
camellia-128 cbc 143085.78k 217348.97k 246241.11k 254408.02k 257329.83k 257245.18k
camellia-192 cbc 123841.18k 168729.39k 184740.95k 190165.67k 191703.72k 191610.88k
camellia-256 cbc 123763.95k 168707.09k 184877.57k 190126.08k 191758.34k 191676.42k
sha256 101813.68k 222879.81k 408848.73k 511186.94k 550595.24k 552594.09k
sha512 68205.94k 272634.84k 466259.80k 697115.31k 817517.91k 827757.91k
whirlpool 48344.53k 103060.14k 172338.86k 206503.94k 219531.95k 220616.02k
aes-128 ige 268799.65k 291588.80k 297284.44k 299335.34k 299756.20k 298762.24k
aes-192 ige 234034.87k 250889.15k 255072.60k 256491.18k 256797.35k 256562.52k
aes-256 ige 207278.42k 220514.01k 223803.39k 224845.82k 225047.89k 224761.17k
ghash 1734721.93k 6699872.87k 10365307.90k 11463595.35k 11866690.10k 11843633.15k
rand 16129.97k 61088.32k 203126.35k 458513.41k 764544.52k 799957.05k
sign verify sign/s verify/s
rsa 512 bits 0.000033s 0.000002s 30480.0 512383.2
rsa 1024 bits 0.000070s 0.000005s 14210.6 217307.5
rsa 2048 bits 0.000470s 0.000014s 2126.5 71609.7
rsa 3072 bits 0.001421s 0.000029s 703.6 34630.7
rsa 4096 bits 0.003185s 0.000049s 314.0 20267.7
rsa 7680 bits 0.029412s 0.000165s 34.0 6043.4
rsa 15360 bits 0.148971s 0.000638s 6.7 1566.3
sign verify sign/s verify/s
dsa 512 bits 0.000047s 0.000030s 21284.0 33131.1
dsa 1024 bits 0.000081s 0.000065s 12385.9 15452.9
dsa 2048 bits 0.000211s 0.000171s 4748.9 5853.5
sign verify sign/s verify/s
160 bits ecdsa (secp160r1) 0.0002s 0.0002s 6049.2 6659.2
192 bits ecdsa (nistp192) 0.0002s 0.0002s 4927.2 5629.9
224 bits ecdsa (nistp224) 0.0000s 0.0001s 23855.1 10628.0
256 bits ecdsa (nistp256) 0.0000s 0.0001s 55055.1 18378.7
384 bits ecdsa (nistp384) 0.0008s 0.0006s 1249.0 1650.1
521 bits ecdsa (nistp521) 0.0002s 0.0005s 4180.4 2113.1
163 bits ecdsa (nistk163) 0.0002s 0.0004s 5367.6 2686.4
233 bits ecdsa (nistk233) 0.0003s 0.0005s 3892.3 1957.8
283 bits ecdsa (nistk283) 0.0004s 0.0009s 2277.7 1155.6
409 bits ecdsa (nistk409) 0.0007s 0.0014s 1357.0 690.2
571 bits ecdsa (nistk571) 0.0016s 0.0032s 611.3 311.0
163 bits ecdsa (nistb163) 0.0002s 0.0004s 5148.9 2573.2
233 bits ecdsa (nistb233) 0.0003s 0.0005s 3775.9 1893.6
283 bits ecdsa (nistb283) 0.0005s 0.0009s 2172.4 1100.7
409 bits ecdsa (nistb409) 0.0008s 0.0015s 1287.9 654.0
571 bits ecdsa (nistb571) 0.0018s 0.0034s 570.8 291.7
256 bits ecdsa (brainpoolP256r1) 0.0003s 0.0003s 3014.7 3407.0
256 bits ecdsa (brainpoolP256t1) 0.0003s 0.0003s 3012.0 3564.7
384 bits ecdsa (brainpoolP384r1) 0.0008s 0.0006s 1252.3 1569.6
384 bits ecdsa (brainpoolP384t1) 0.0008s 0.0006s 1262.7 1686.9
512 bits ecdsa (brainpoolP512r1) 0.0012s 0.0009s 868.6 1128.6
512 bits ecdsa (brainpoolP512t1) 0.0011s 0.0008s 881.5 1205.4
op op/s
160 bits ecdh (secp160r1) 0.0002s 6303.4
192 bits ecdh (nistp192) 0.0002s 5189.1
224 bits ecdh (nistp224) 0.0001s 17171.2
256 bits ecdh (nistp256) 0.0000s 24809.6
384 bits ecdh (nistp384) 0.0008s 1311.0
521 bits ecdh (nistp521) 0.0003s 3571.7
163 bits ecdh (nistk163) 0.0002s 5593.4
233 bits ecdh (nistk233) 0.0002s 4091.1
283 bits ecdh (nistk283) 0.0004s 2398.0
409 bits ecdh (nistk409) 0.0007s 1442.6
571 bits ecdh (nistk571) 0.0016s 644.6
163 bits ecdh (nistb163) 0.0002s 5361.5
233 bits ecdh (nistb233) 0.0003s 3958.1
283 bits ecdh (nistb283) 0.0004s 2275.9
409 bits ecdh (nistb409) 0.0007s 1366.4
571 bits ecdh (nistb571) 0.0017s 604.4
256 bits ecdh (brainpoolP256r1) 0.0003s 3162.1
256 bits ecdh (brainpoolP256t1) 0.0003s 3155.1
384 bits ecdh (brainpoolP384r1) 0.0008s 1301.1
384 bits ecdh (brainpoolP384t1) 0.0008s 1323.9
512 bits ecdh (brainpoolP512r1) 0.0011s 898.9
512 bits ecdh (brainpoolP512t1) 0.0011s 911.4
253 bits ecdh (X25519) 0.0000s 36489.1
448 bits ecdh (X448) 0.0004s 2426.8
sign verify sign/s verify/s
253 bits EdDSA (Ed25519) 0.0000s 0.0001s 29309.4 10714.2
456 bits EdDSA (Ed448) 0.0003s 0.0005s 3953.6 2205.1
ってことでね、
暗号スイート意外に気にしないといけないこと
OCSP stapling
Session resumption (tickets)
Session resumption (caching)
False Start (NPN needed)
HTTP/2
# 参考になる記事 yahooのsslのはなし
opensslを使って実際にサーバの証明書などをみてくる
証明書チェーンの取得方法
openssl s_client -connect blog.ingenboy.com:443 -showcerts
結果
openssl s_client -connect blog.ingenboy.com:443 -showcerts
CONNECTED(00000003)
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = E6
verify return:1
depth=0 CN = blog.ingenboy.com
verify return:1
---
Certificate chain
0 s:CN = blog.ingenboy.com
i:C = US, O = Let's Encrypt, CN = E6
a:PKEY: id-ecPublicKey, 256 (bit); sigalg: ecdsa-with-SHA384
v:NotBefore: Sep 17 06:55:36 2024 GMT; NotAfter: Dec 16 06:55:35 2024 GMT
-----BEGIN CERTIFICATE-----
MIIDgzCCAwmgAwIBAgISBO2zWoks7TKkAN3OVtkSxBjbMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NjAeFw0yNDA5MTcwNjU1MzZaFw0yNDEyMTYwNjU1MzVaMBwxGjAYBgNVBAMTEWJs
b2cuaW5nZW5ib3kuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEYVnAV5ke
Gl7kJRmvAHm9mYwU35SdJXN5AF5mQZ46EdVAUqgKWhdLMdc8x7j7SVxBBzfnPEXI
db1HdUFqD7aPW6OCAhMwggIPMA4GA1UdDwEB/wQEAwIHgDAdBgNVHSUEFjAUBggr
BgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUM7dYklVE
sLo0tI0ErI4dg0KfIW0wHwYDVR0jBBgwFoAUkydGmAOpUWiOmNbEQkjbI79YlNIw
VQYIKwYBBQUHAQEESTBHMCEGCCsGAQUFBzABhhVodHRwOi8vZTYuby5sZW5jci5v
cmcwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lNi5pLmxlbmNyLm9yZy8wHAYDVR0RBBUw
E4IRYmxvZy5pbmdlbmJveS5jb20wEwYDVR0gBAwwCjAIBgZngQwBAgEwggEEBgor
BgEEAdZ5AgQCBIH1BIHyAPAAdwDf4VbrqgWvtZwPhnGNqMAyTq5W2W6n9aVqAdHB
O75SXAAAAZH++XSRAAAEAwBIMEYCIQDr/Yv2U1FfnFfmADtT4nI7EOWJRTQ8zvmJ
O8HHn0SIogIhAKMZJ64xlCcwEVjrFGpjcd54+H9yGiUhsesiJmjbEIfDAHUA7s3Q
ZNXbGs7FXLedtM0TojKHRny87N7DUUhZRnEftZsAAAGR/vl0mgAABAMARjBEAiA+
FBy5NL5BcKZdUanzHmKLTYBoQjALxTj1Vg+L/0Av9wIgL5moUHT0tFVMt3eaok2f
aSyXMnXm3spOZdPse7M5YcMwCgYIKoZIzj0EAwMDaAAwZQIwZUC5APO9wc1hDdKK
ixcpZTBCIJiXUIVy9QdoJUD90/XrPw5fOfQyJ4/2aM7aXYCBAjEAxpv/cHCRmGNO
V4iJu/LJ1ogXy/A5fSxuEFcHvqEU7QQ5QkSe8SY06S87vaXsnHpC
-----END CERTIFICATE-----
1 s:C = US, O = Let's Encrypt, CN = E6
i:C = US, O = Internet Security Research Group, CN = ISRG Root X1
a:PKEY: id-ecPublicKey, 384 (bit); sigalg: RSA-SHA256
v:NotBefore: Mar 13 00:00:00 2024 GMT; NotAfter: Mar 12 23:59:59 2027 GMT
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G
h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV
6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj
v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc
MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL
pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp
eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH
pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7
s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu
h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv
YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8
ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0
LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+
EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY
Ig46v9mFmBvyH04=
-----END CERTIFICATE-----
---
Server certificate
subject=CN = blog.ingenboy.com
issuer=C = US, O = Let's Encrypt, CN = E6
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: ECDSA
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 2398 bytes and written 399 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 256 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
Protocol : TLSv1.3
Cipher : TLS_AES_256_GCM_SHA384
Session-ID: 91E923B97DC125751DBF34B42AF92DBFFFE377BAE8B7E5CA4558AFBB69C0D0A3
Session-ID-ctx:
Resumption PSK: 4C90C46829E58BB60E9E5E291F9FA49ABB736B48FB2FBC243EF96A208A43F1CEA54739EB6877BF97811207BB7F042DAB
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 300 (seconds)
TLS session ticket:
0000 - 7f 2a 61 68 9a d6 ca 93-4b 7a e3 53 5f a0 c4 51 .*ah....Kz.S_..Q
0010 - d6 14 ff f2 3e a1 b9 b1-82 93 7c 4e 87 44 92 22 ....>.....|N.D."
0020 - 32 59 8f 15 10 8d db 0b-31 d3 a7 d8 41 6b f0 ea 2Y......1...Ak..
0030 - 9f 92 a9 d9 67 6c 46 b4-4a 02 b3 e9 f4 62 c4 53 ....glF.J....b.S
0040 - 34 f5 be 5e c1 85 3a c0-92 b3 7c 96 09 4b d4 e2 4..^..:...|..K..
0050 - 8d 13 37 75 db ff aa 19-c4 a2 88 66 74 2c b6 f1 ..7u.......ft,..
0060 - 8b 57 55 69 c8 7e 7f 71-84 8d 9a 50 16 07 08 11 .WUi.~.q...P....
0070 - c1 ff 5d b4 4e 4c a9 b6-2b 15 93 73 99 9e a4 64 ..].NL..+..s...d
0080 - 8e 15 c9 1f 75 e5 30 47-f7 ee d7 d7 07 86 79 94 ....u.0G......y.
0090 - a5 9d 46 2a d6 1f aa ba-72 63 97 3b 86 df f8 22 ..F*....rc.;..."
00a0 - 74 b7 43 81 f3 df bc 9b-87 24 95 1c 83 de 23 ca t.C......$....#.
00b0 - 2e cb 26 df 48 5b 46 03-36 4f f9 ab 3c fb f3 e3 ..&.H[F.6O..<...
00c0 - ba 51 73 03 3f e4 26 3c-ca 3d 57 83 16 7e ca 47 .Qs.?.&<.=W..~.G
00d0 - ce 1d e0 c9 62 0b 13 42-41 64 8e eb a2 52 97 97 ....b..BAd...R..
00e0 - 10 54 ec e6 a8 5c 95 54-9b ef b9 a3 88 91 24 3a .T...\.T......$:
Start Time: 1729580884
Timeout : 7200 (sec)
Verify return code: 0 (ok)
Extended master secret: no
Max Early Data: 0
---
read R BLOCK
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
Protocol : TLSv1.3
Cipher : TLS_AES_256_GCM_SHA384
Session-ID: D1EB0D9FECC3113502EF3C1FC9E91D5AF715E817649EEBC767028DD4D45FF92A
Session-ID-ctx:
Resumption PSK: C1D0090E2F6433CE349BD9A3CA6ECF1A25335965ABF56012A7EB48187FB34161D3F38BCE1185BB016430A72270C116D9
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 300 (seconds)
TLS session ticket:
0000 - 7f 2a 61 68 9a d6 ca 93-4b 7a e3 53 5f a0 c4 51 .*ah....Kz.S_..Q
0010 - 0f 1d 85 40 d4 e3 ff cc-42 73 05 82 be f9 9c 49 ...@....Bs.....I
0020 - 47 2f 99 23 19 1d 4d 37-99 28 ea 84 fc 6c 2f 03 G/.#..M7.(...l/.
0030 - cd fb 1d c3 c1 1d fa 6c-b2 df fb fd 11 98 ec 9d .......l........
0040 - 19 cb 3a 43 da f7 b5 d6-21 16 a8 a2 84 f9 8a 7a ..:C....!......z
0050 - 24 77 a8 36 ba 0e 7c 56-0e 37 e3 f9 de a0 8d 92 $w.6..|V.7......
0060 - 7a 85 3e 77 34 75 3f 9e-46 c7 24 21 ea d3 65 58 z.>w4u?.F.$!..eX
0070 - ac 34 a2 c8 54 a0 4c ce-59 2e b3 5a 7a a9 61 a1 .4..T.L.Y..Zz.a.
0080 - 8d 60 80 86 a9 f5 b6 37-c0 a0 a8 ec 86 04 a4 68 .`.....7.......h
0090 - d4 75 f5 ed 01 d2 4a bc-5f 10 6d 6d 07 5f d3 b5 .u....J._.mm._..
00a0 - a5 dc 15 ed 8c 42 9e 08-64 ce c2 f7 ac 27 55 16 .....B..d....'U.
00b0 - ae 9f c3 0f 53 00 c5 38-7d a8 10 6d 17 92 71 87 ....S..8}..m..q.
00c0 - 11 6e ba d6 ec 15 94 40-6d c0 bf 05 f1 d4 34 c4 .n.....@m.....4.
00d0 - 9c cf 17 e6 f3 07 b5 a7-2d 1a f3 bc 7a a8 be 14 ........-...z...
00e0 - 60 e4 64 6f 46 59 71 00-e6 1e d5 1f 61 ec 17 94 `.doFYq.....a...
Start Time: 1729580884
Timeout : 7200 (sec)
Verify return code: 0 (ok)
Extended master secret: no
Max Early Data: 0
---
ルート証明書は送られないみたいですが、これは一般手らしい。 ルート証明書は、OSやブラウザにあらかじめインストールされているらいし。 毎回送らずに済むから、データ量が削減できるらしい。
クライアント側から、利用可能なcipher (暗号スイート)を通知する方法
openssl s_client -connect 183.79.48.248:443 -servername auctions.yahoo.co.jp -cipher `AES256-SHA`
ちなみにこれは、RSAを使ってプリマスターシークレットを交換する方法になりますね。公開鍵を使って暗号化して、秘密鍵でオープンする感じです。 前方特日性はないです。マジで危ないです、これ。
クライアント側から、複数の暗号スイートを提示することもできる
openssl s_client -connect 183.79.48.248:443 -servername auctions.yahoo.co.jp -cipher `RC4-SHA,AES256-SHA,ECDHE-RSA-AES256-GCM-SHA384`
その中でどの暗号スイートを使うかは、サーバ側が指定してくるって話ですね。
以下、ゴミ
HTTPのレスポンスヘッダが満たすべき要件について
- 攻撃の参考になるような情報はセキュリティヘッダから落とす
- ソフトウェアのバージョンなど
- クリックジャッキング攻撃への対応
- x-frame-optionsをつける
- クロスサイトスクリプティング攻撃の防止
- x-content-type-optioins “nosniff"をつける
TLSの要件について
- Crime攻撃に対策するための、TLSでの圧縮は無効化しなければいけない
疑問
hpkpヘッダーの役割 htstヘッダの役割