ECDH ECDSA EdDSAを理解するまでは死ねない

ECDH完全理解した。 参考 ECDHを紹介するyoutube 楕円曲線暗号をビリヤードに例えている例 ECDHの説明 かなり面白いね。ECDH。 まず、楕円曲線上で足し算というものを定義する。 これは、ビリヤードである。二点を決めて、その直線を引くと新たに楕円曲線と交わる点が生じる。それをx軸に対象に折り曲げた点、これを足し算の結果とする。 a + b = c ここで、p + p = 2pというものを定義可能である。pというのは、接線となる。 で、ここで不思議なのが、以下の結合法則が成り立つこと。 p + 2p = 3p 3p + p = 4p 2p + 2p = 4p 先に p + 2p = 3p 3p + p = 4p を計算して出した4pも 2p + 2p = 4p で出した4pも同じ点になる。これは面白い。 でだ、 こんな感じで最初の点Gを決めて、k倍した点Q Q = kP を求めることは簡単である。(例えば、k = 128の時は、2p+2p, 4P+4p,,,, 64p+64pで計算関数は少なく済む。) しかし、QとPからkを求めることは困難である。前から順番にやっていくしかないのである。 ということで、Qという値をサーバとクライアントで生成するんだよね。それぞれ、Q1,Q2. Q1 = K1P Q2 = k2P そして、Q1とQ2を交換します。opensslではRSAなどで署名が施されて交換されるので、真正性も担保される。 で、プリマスターシークレットを、 Q = K1K2P として、鍵交換が完了。これを元に共通鍵を生成して暗号通信がスタートする、という感じだ。 素晴らしい。 楕円曲線暗号のイメージは、以下のように説明されています。 ...

November 11, 2024 · 1 min · 90 words · Me

MTLS_on_OVPN

公開鍵暗号の体系を完全に理解した はい、鍵交換アルゴリズム、署名アルゴリズム、暗号アルゴリズム、暗号モード、ハッシュ の5つのセット(暗号スイート)を指定して通信を暗号化する。それが、俺が知っている暗号体系の全てです。 でですね、openVPNでクライアントとサーバの通信を暗号化しますよね。 その時に色々と証明書を発行すると思うんですよ。ただ、俺はどの証明書がどのように用いられるのかが全くわかっていなかった。 だから、今回、改めてopenVPNでクライアントとサーバを構築する際の証明書の役割などを確認したいと思う。 過去の僕の記事 basic client site to site routeing いつも参考にしている記事 qiita では追っていきましょう 認証局 (CA) の設立 ここから始まっているっぽいんだよね。 $ ./easyrsa init-pki init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: path/to/easy-rsa/easyrsa3/pki CA証明書の生成 $ ./easyrsa build-ca パスフレーズが聞かれる。 ここで、秘密鍵と公開鍵がすでに生成されている。認証局のね サーバ証明書の生成 $ ./easyrsa build-server-full server nopass ここで、CA証明書を生成したときのパスフレーズを再び入力する。 これでおそらく、サーバの公開鍵に署名がされる。(CSRも済んでいる) DH鍵の生成 ここでDH鍵が生成されるのか。なぜだ??TLSでのDH鍵は毎回違うものが使われるのではないのか!? なるほど、chatGPTに聞いたのであっているかはわからんが、この段階で生成されるものは、DHパラメータ(素数と生成元)だね。 これは納得だね。 つまり、 y = g ^ (x) mod p の、pとgが生成される。で、サーバとクライアントはお互い適当にxを選ぶわけですわ。はい完全理解。 ちなみに、ecdhを使って鍵交換をすることもできます。 証明書失効リストの生成(こちら、参照しているページでは間違っているので注意が必要) $ ./easyrsa gen-crl こちらも、CAの秘密鍵で署名するわけですね。 クライアント用秘密鍵の生成 $ cd easy-rsa/easyrsa3 $ ./easyrsa build-client-full username はい、ここでクライアントの証明書と秘密鍵を生成するわけですね。 で、証明書はCAが認証する必要があるので、再びパスフレーズを入れる感じになります。 ...

October 22, 2024 · 1 min · 155 words · Me

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

October 21, 2024 · 9 min · 1889 words · Me