はじめに
ECDSAについて、自分が調べたり理解したことをまとめていきます。
まとめようと思ったきっかけは以下の通りです。
・暗号分野は完全に初心者で「ECDSA」で調べても書いている内容が分からない
・ECDSAの解説サイトを見ると、みなさん同じような内容で解説してらっしゃるのですが、もう一段落とした内容じゃないと理解できない(解説してる方々の前提知識が高すぎる!)
・普段ECDSAを使ったり意識したりしないので、ある程度落とした内容をまとめておかないと忘れる
ECDSAとは
Elliptic Curve Digital Signature Algorithmの略です。
Elliptic Curve = 楕円曲線
Digital Signature Algorithm= デジタル署名アルゴリズム
つまり、楕円曲線を使ってデジタル署名を行うものらしいです。
ちな、暗号としてRSAって用語もあります。
RSAは共同で発明した人が3人いて頭文字を取っただけなので、末尾にSAって付いてるんですが何も関係ないみたいです。
じゃ楕円曲線ってどんなんや?ってなると、以下の式であらわされる楕円曲線のようです。
y^2 = x^3 + ax + b
まとめると、ECDSAはこの曲線を使って、データを暗号化しデジタル署名を行うものです。
どうやってデジタル署名するの?
例として今回はビットコインの公開鍵暗号方式でトランザクションを署名する際にECDSAの使われ方を想定します。
(今の私の知識では、ECDSAが他にどういう使われ方するのか等は知りません!)
まずは公開鍵暗号なので、公開鍵と秘密鍵が必要です。
公開鍵と秘密鍵の式は以下の通りです。
K(公開鍵) = k(秘密鍵) × G(楕円曲線上の座標) ・・・①
kはランダムな数字です。
Gは公開鍵生成のための座標、Generating point でGです。
トランザクションにデジタル署名をして署名データを作る流れは以下の通りです。
署名データを作る際に、一時的な公開鍵を作ります。
一時的な公開鍵R = 一時的な秘密鍵q × G ・・・②
そして、一時的な公開鍵Rのx座標を署名に使います。
署名データ = \frac{Txデータのハッシュ +秘密鍵k × 一時的な公開鍵Rのx座標}{一時的な秘密鍵q} ・・・③
そして、この署名データと一時的な公開鍵Rのx座標をトランザクションとして送ります。
どうやって署名を検証するの?
署名データの受信者は、デジタル署名が正しいか検証します。
受信者は、署名データと公開鍵Kのx座標を受け取った後、以下の計算をして検証Qを求めます。
検証Q = \frac{Txデータのハッシュ}{署名データ}G + \frac{一時的な公開鍵Rのx座標}{署名データ}送信者の公開鍵K
検証Qを計算した上で何をもって検証OKとするかというと、検証Qと受信した一時的な公開鍵Rのx座標が一致したらOKと判断します。
検証を計算していくと、
検証Q = \frac{(TXデータのハッシュ)G + 一時的な公開鍵Rのx座標 × 送信者の公開鍵K}{署名データ}
↑単純に分数の足し算しただけです。
となって、送信者の公開鍵Kっていうのは①の通り、K=秘密鍵k × Gなので、
検証 = \frac{(TXデータのハッシュ)G + (一時的な公開鍵Rのx座標)(送信者の秘密鍵 × G)}{署名データ}
となります。
そこから、Gを抜き出すと、
\frac{TXデータのハッシュ + (一時的な公開鍵Kのx座標)(送信者の秘密鍵)}{署名データ}G ・・・④
となり、④の「署名データ」に、③を代入して、「Txデータのハッシュ + 一時的な公開鍵Rのx座標 × 送信者の秘密鍵k」で約分すると残るのは、
一時的な秘密鍵q × G
となります。
これは、送られてきたデータ一時的な公開鍵Rのx座標と同じ意味ですね。(②を見てね!)
なので、送信者がちゃんと秘密鍵で署名したデータで、中身も改ざんされていないことが検証できました。
トランザクションのハッシュと送信者の公開鍵を、署名データで約分できたからOK!と考えるとイメージしやすいのではないでしょうか。
最後に
なんかECDSAのまとめじゃなく、デジタル署名と検証の仕組みになった感が否めなくなりました。
今回、あくまでECDSAの署名ということで、公開鍵と秘密鍵を作るGについての説明は書きませんでしたが時間があったらまとめようかと思います。
間違っている箇所があったら指摘してもらえると、私が物凄い喜びます。勉強になるので。
なーんかまだ検証の章の最後が甘い気がするんですよね…
参考にさせていただいたURL
https://www.youtube.com/watch?v=RC_UupaAjSc
https://www.etarou.work/posts/4968764/
↑エグい分かりやすかったです。是非見て・読んでください。
その他ECDSAで検索すると出てくる記事・ブログの方々