僕も、TLS Cipherマスターになりたい!
前提知識 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. 離散対数問題は時間をかければ解読可能です。各セッションで使われる公開鍵から秘密鍵を割り出すことも、原理上は可能です。 そこで、各セッションの公開鍵と、暗号化された通信全てを保存している人がいたとしましょう。そうすると、時間さえかければ、暗号文を解読できると思うのですがいかがでしょう。 ...