![見出し画像](https://assets.st-note.com/production/uploads/images/65121669/rectangle_large_type_2_d59db987b092d288a8ef8b0f32ca77f1.png?width=1200)
ビットコインに学ぶブロックチェーンの真髄#7 暗号技術編3 ECDSA
昨今話題のブロックチェーン技術について、その概要と詳細な仕組みを10 回くらいの連載を通じて詳しめに解説していくシリーズの第7回目になります。
第6回目はこちら
シリーズ全体はこちら
前回、前々回とブロックチェーンに使われる暗号技術の概要と仕組みについて説明しました。今回はより詳しく知りたい方のために楕円曲線暗号について解説したいと思います。
私は特に数学に精通した者ではないので、詳細な説明は期待しないでください。厳密に知りたい方は以下のようなブログを参考にしてみてください。
楕円曲線暗号
楕円曲線暗号とは、その名の通り楕円曲線を利用した暗号です。楕円曲線とは一般にa,b,c,dを係数として
という方程式で表される曲線です。とくにビットコインではsecp256k1という楕円曲線が使われています。
secp256k1:
楕円曲線上の演算
次に楕円曲線上での演算を定義します。
加算
曲線上の点Aと点Bをとり、その2点を結ぶ直線と曲線の交点をx軸に関して対称の位置に移動させた点をA+Bとします。
二倍算
AとAを足す場合には、点Aを通る曲線の接線を引き、接線と曲線の交点をx軸に関して対称移動させた点をA+A(=2A)とします。
以上の2つの定義を用いることで、曲線上の点Gと秘密鍵kの値から、公開鍵kGを求めることができます。(つまりGをk回足し算するということ。)
さらにsecp256k1は素数P(=2^256-2^32-2^9-2^8-2^7-2^6-2^4-1)で整数を割ったときの余りの集合で表されます。Pが大きければ大きいほど、計算結果からもとの値を求める作業(離散対数問題)は難しくなり、公開鍵から秘密鍵を求めることも難しくなります。
楕円曲線DSA(ECDSA)
ここからは楕円曲線を利用した暗号・復号の仕組みである暗号曲線DSA(Elliptic Curve Digital Signature Algorithm)について解説します。
簡単に説明すると、楕円曲線DSAでは、まず送信者がトランザクションのハッシュ値と楕円曲線上のある座標xを、秘密鍵を使って暗号化します(暗号化した文字列Sと座標xが署名)。そして検証者はこの暗号化された文字列Sを署名者の公開鍵を使って復号します。復号して出てきた数値がxと一致すれば検証成功です。
以下で詳しく署名の生成から検証の流れを追っていきます。
署名の生成
一時的な秘密鍵をa、aから得られる公開鍵aGのx座標をx、トランザクションのハッシュ値をh、送信者の秘密鍵をkとして以下のようにSを計算します。
この値Sとxが署名となりトランザクションデータと併せてブロックチェーンネットワークに送信します。実際はトランザクションデータにSもxも含まれています。
署名の検証
ブロックチェーンネットワーク上に送信された署名付きトランザクションは送信者アリスの公開鍵kG(=K)を用いて、「本当にアリスによる署名なのか」ということが検証できます。
まず受け取ったトランザクションデータからハッシュ値hを算出し、以下の計算を行います。Kは送信者の公開鍵(kG)です。
K=kGと、S値を代入して計算すると以下の座標が得られます。
したがって、秘密鍵kと公開鍵Kが対応していれば署名に含まれるxと検証によって出てきた座標aGのx座標が一致し、この署名はアリスによるものであると判断することができるのです。
おまけ:電子署名と公開鍵暗号
暗号技術について調べていると、電子署名に似た技術として公開鍵暗号というものをよく目にします。どちらも秘密鍵と公開鍵を使った暗号・復号の仕組みを指しますが、この2つの技術の役割の違いについて少し説明します。
まず公開鍵暗号はメッセージの機密性を保つための方法です。つまり、暗号文と公開鍵を誰かに見られたとしても元の文の内容が特定できないということを保証するための技術です。
一方で電子署名は認証の方法です。つまり、本当に送信者自身が送ったものか、途中で改ざんされていないかを確認するための技術です。そのためメッセージの機密性は考慮されていません。
ブロックチェーンで必要なことは、トランザクションの送信者と該当ビットコインの所有者が一致しているという証明です。トランザクションの情報を隠したいわけではありません。したがって、ブロックチェーンでは電子署名が利用されているのです。
しかし、電子署名を利用しているということは、逆に言えば「メッセージ(トランザクション)の情報がネットワークのノードに丸見え」ということになります。送金情報が筒抜けになっていると、いくら安全性が高いとはいえ、利用をためらう人も多いでしょう。
多くのブロックチェーンでは、電子署名の検証システムを維持しつつ、どのようにプライバシーを確保するかが議論されています。日々新しい技術が更新されているので、気になる方は調べてみてください。
おわりに
さて、ここまでの記事を通じて「頭の中でトラストレスなデジタル通貨システムを構築してみよう」という目的はかなり進んできました。
P2P通信によって分散型ネットワークを構築し、電子署名によって安全に資産のやり取りができるようになりました。次に必要になるのは「取引履歴を確実に記録するシステム」です。ビットコインにおいては「トランザクションの検証」と「マイニング」が重要な役割を果たします。
このシリーズは『あたらしい経済』で私が執筆した「ブロックチェーンは今までのシステムと違って何がすごいのか〜ノンプログラマーでも解るブロックチェーン入門」シリーズを大幅に加筆修正したものになっています。
この記事が気に入ったらサポートをしてみませんか?