<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Certificate on Ingenboy.inc</title>
    <link>https://blog.ingenboy.com/tags/certificate/</link>
    <description>Recent content in Certificate on Ingenboy.inc</description>
    <image>
      <title>Ingenboy.inc</title>
      <url>https://blog.ingenboy.com/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://blog.ingenboy.com/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo -- 0.152.2</generator>
    <language>en</language>
    <lastBuildDate>Mon, 11 Nov 2024 11:13:57 +0900</lastBuildDate>
    <atom:link href="https://blog.ingenboy.com/tags/certificate/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>ECDH ECDSA EdDSAを理解するまでは死ねない</title>
      <link>https://blog.ingenboy.com/post/signature_algorithm/</link>
      <pubDate>Mon, 11 Nov 2024 11:13:57 +0900</pubDate>
      <guid>https://blog.ingenboy.com/post/signature_algorithm/</guid>
      <description>&lt;h1 id=&#34;ecdh完全理解した&#34;&gt;ECDH完全理解した。&lt;/h1&gt;
&lt;h1 id=&#34;参考&#34;&gt;参考&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?app=desktop&amp;amp;v=jxmN8LqyTR4&#34;&gt;ECDHを紹介するyoutube&lt;/a&gt;
&lt;a href=&#34;https://blog.cloudflare.com/ja-jp/a-relatively-easy-to-understand-primer-on-elliptic-curve-cryptography/&#34;&gt;楕円曲線暗号をビリヤードに例えている例&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;ecdhの説明&#34;&gt;ECDHの説明&lt;/h1&gt;
&lt;p&gt;かなり面白いね。ECDH。
まず、楕円曲線上で足し算というものを定義する。
これは、ビリヤードである。二点を決めて、その直線を引くと新たに楕円曲線と交わる点が生じる。それをx軸に対象に折り曲げた点、これを足し算の結果とする。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;a + b = c
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ここで、p + p = 2pというものを定義可能である。pというのは、接線となる。
で、ここで不思議なのが、以下の結合法則が成り立つこと。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;p + 2p = 3p
3p + p = 4p

2p + 2p = 4p
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;先に&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;p + 2p = 3p
3p + p = 4p
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;を計算して出した4pも&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;2p + 2p = 4p
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;で出した４pも同じ点になる。これは面白い。&lt;/p&gt;
&lt;p&gt;でだ、
こんな感じで最初の点Gを決めて、k倍した点Q&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Q = kP
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;を求めることは簡単である。（例えば、k = 128の時は、2p+2p, 4P+4p,,,, 64p+64pで計算関数は少なく済む。）
しかし、QとPからkを求めることは困難である。前から順番にやっていくしかないのである。
ということで、Qという値をサーバとクライアントで生成するんだよね。それぞれ、Q1,Q2.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Q1 = K1P
Q2 = k2P
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;そして、Q1とQ2を交換します。opensslではRSAなどで署名が施されて交換されるので、真正性も担保される。
で、プリマスターシークレットを、&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Q = K1K2P
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;として、鍵交換が完了。これを元に共通鍵を生成して暗号通信がスタートする、という感じだ。
素晴らしい。&lt;/p&gt;
&lt;p&gt;楕円曲線暗号のイメージは、以下のように説明されています。&lt;/p&gt;</description>
    </item>
    <item>
      <title>僕も、TLS Cipherマスターになりたい！</title>
      <link>https://blog.ingenboy.com/post/tls_crt_master/</link>
      <pubDate>Mon, 21 Oct 2024 10:10:44 +0900</pubDate>
      <guid>https://blog.ingenboy.com/post/tls_crt_master/</guid>
      <description>&lt;h1 id=&#34;前提知識&#34;&gt;前提知識&lt;/h1&gt;
&lt;p&gt;TLSでは、
鍵交換アルゴリズムを使って共通鍵の材料となる値を交換し、共通鍵を生成し、その鍵を用いて通信が暗号化されるわけですね。
鍵共有に使われる暗号を、公開鍵暗号と言いますね。共通鍵は、共通鍵暗号です。&lt;/p&gt;
&lt;h2 id=&#34;公開鍵暗号&#34;&gt;公開鍵暗号&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;RSA&lt;/li&gt;
&lt;li&gt;DH&lt;/li&gt;
&lt;li&gt;ECDH&lt;/li&gt;
&lt;li&gt;DEH = DH ephemeral&lt;/li&gt;
&lt;li&gt;ECDHE = ECDH epemeral&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;DHとECDHは離散対数問題を使っています
g^x mod p = y
で、y,p,gが与えられたとき、xが求められないってことね&lt;/p&gt;
&lt;h2 id=&#34;共通鍵暗号&#34;&gt;共通鍵暗号&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;RC4 (危殆化)&lt;/li&gt;
&lt;li&gt;DES = (危殆化)&lt;/li&gt;
&lt;li&gt;3DES きたいか&lt;/li&gt;
&lt;li&gt;ChaCha20&lt;/li&gt;
&lt;li&gt;AES = 最も使われていて安全&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;RC4 = ストリーム暗号
AES = ブロック暗号&lt;/p&gt;
&lt;h2 id=&#34;ハッシュ関数&#34;&gt;ハッシュ関数&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;MD5&lt;/li&gt;
&lt;li&gt;SHA-1&lt;/li&gt;
&lt;li&gt;SHA-2&lt;/li&gt;
&lt;li&gt;SHA-3&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;tlsの暗号スイートについて&#34;&gt;TLSの暗号スイートについて&lt;/h1&gt;
&lt;p&gt;はい、これすごく大事なこと言います。TLSを使って通信が暗号化されるまでの流れですね。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;TLSハンドシェイク&lt;/li&gt;
&lt;li&gt;実際にTLSの通信が始まる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;でですよ。TLSハンドシェイクで何を決めているか？なんですが、以下を決めているわけですね。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;鍵交換アルゴリズム&lt;/li&gt;
&lt;li&gt;署名アルゴリズム&lt;/li&gt;
&lt;li&gt;暗号アルゴリズム&lt;/li&gt;
&lt;li&gt;暗号利用モード&lt;/li&gt;
&lt;li&gt;ハッシュ関数&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;鍵交換アルゴリズムは上に書いた、RSA,ECDHE,DHEです。
署名アルゴリズムは、RSA/ECDHEを指定できますが、ここは、発行したサーバ証明書の鍵の種類に依存します。ここすごく大事。&lt;/p&gt;
&lt;p&gt;実は、鍵交換アルゴリズムで生成されたあたいは、さらにサーバ証明書の秘密鍵で暗号化され、公開鍵で復号されるんですね。で、真正性を確かめるんですよね。
ここ、知らんかった。すごく大事。&lt;/p&gt;
&lt;p&gt;ただ覚えておきたいのが、RSAを用いた鍵交換では、署名がなされないということ。証明書の公開鍵は、クライアントが生成したプリマスターシークレットを暗号化するために使われる。そして、秘密鍵で復号するんだよね。
ECDHEでは、毎回公開鍵が生成されるんだよね。で、その公開鍵の正当性を証明するために秘密鍵で署名し、公開鍵で検証するんだよね。
RSAを用いた鍵交換では毎回同じ公開鍵と秘密鍵のペアで通信がなされるんだよね。プリマスターシクレットも含めてね。
だから、スノーデン事件の時みたいに、暗号化されたものをずっと溜めておいて、後でどうにか秘密鍵を入手して、プリマスターシクレットを特定、
からの通信内容を特定、といったことができてしまうんだよね。これ、前方特秘性がないって言いますね。&lt;/p&gt;
&lt;p&gt;これに対して、ECDHE、DHEは、一回一回秘密鍵と公開鍵を生成するんだよね。はいそうだね。
でも、公開鍵から秘密鍵は、頑張れば何年かかければ、推測可能だよね？だから前方特秘性は、ないと思うんだけど。&lt;/p&gt;
&lt;p&gt;これをchatGPTに聞いてみたらこう帰ってきました。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Q. 離散対数問題は時間をかければ解読可能です。各セッションで使われる公開鍵から秘密鍵を割り出すことも、原理上は可能です。
そこで、各セッションの公開鍵と、暗号化された通信全てを保存している人がいたとしましょう。そうすると、時間さえかければ、暗号文を解読できると思うのですがいかがでしょう。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
