ビットコイン

ビットコインシステムでのデジタル署名の使われ方

前回、デジタル署名の仕組みについて書きました。今日はビットコインシステムでこのデジタル署名がどのような形で活用されているのかを書きたいと思います。

ビットコインシステムでは、ビットコインの送金者の本人確認にこのデジタル署名の機能を利用しています。

たとえば、銀行のATMでお金を送金する場合、相手先の情報(口座番号、名前など)と送金額、送金者の情報(口座番号、名前など)を入力すると、送金は完了します。

※送金者も相手先も銀行が保証してくれるので、本人確認を意識することはありません。

ビットコインの送金は、ざっくりいうと、相手先の情報、送金額、送金者の情報などをまとめたものにデジタル署名をつけたトランザクションといわれる取引情報を送付することで送金が完了します。

その仕組みを、CさんがDさんにビットコインを送金する場合を例にとって説明します。
*今回の説明では送金手数料は含めません。

トランザクションの内訳

最初にトランザクションの内訳を下記に示します。トランザクションは、入力情報と出力情報に分かれています。
*トランザクションの項目は他にもありますが、ここでは主なもののみ挙げています。

◎入力情報
(1)前回取引のトランザクション全体のハッシュ値
(2)Cさんの公開鍵
(3)デジタル署名(※)
◎出力情報
(4)CさんからDさんへの送金額
(5)Dさんの公開鍵のハッシュ値

※入力情報(3)デジタル署名の生成手順
(i)下記のデータを準備します。

・[入力情報(1)]=前回取引のトランザクション全体のハッシュ値
・[入力情報(2)]のCさんの公開鍵をハッシュ化したもの
・[出力情報(4)]=CさんからDさんへの送金額
・[出力情報(5)]=Dさんの公開鍵のハッシュ値

(ii)上記(i)をダブルハッシュ化します。
(iii)上記(ii)をCさん所有の秘密鍵で暗号化します。ここで、データにデジタル署名が付きました。[入力情報(3)]のデジタル署名の生成は完了です。

トランザクションの生成と送付

上記で示したトランザクションをCさんが生成し、ネットワークに送信します。その手順は以下の通りです。

1.Cさんが秘密鍵と公開鍵を生成します。

2.Cさんがトランザクションを生成
上記「トランザクションの内訳」で示したものです。

3.Cさんがトランザクションをネットワークに送付
このトランザクション情報は、ビットコインシステムに参加している全ノードに送信され、それぞれのコンピュータ内のメモリプールというところに一旦保管されます。

トランザクションの検証

メモリプールに保管されているデジタル署名付きのトランザクションの内容を、ブロックを生成するマイナーが検証します。内容に問題がなければ、そのトランザクションをブロックに組み込みます。

検証の手順は以下の通りです。

4.マイナーが、Cさんのトランザクションをメモリプールから選択

5.トランザクションの内訳にあるCさんの公開鍵を取り出す

6.デジタル署名をCさんの公開鍵で復号
復号すると、上記(i)をダブルハッシュ化したデータになります。

7.「6」のデータと比較するデータを生成します。トランザクション内から下記のデータを取り出して必要に応じて処理
・Cさんの公開鍵をハッシュ化
・前回取引のトランザクション全体のハッシュ値
・CさんからDさんへの送金額
・Dさんの公開鍵のハッシュ値

8.「7」のデータをまとめてダブルハッシュ化

9.「6」の内容と「8」の内容を比較

比較の結果、内容が同一であれば、

◎このトランザクションはCさん本人が送ったもの、
◎Cさん本人が送付しているので内容は改ざんされていない
◎デジタル署名をつけられる秘密鍵を持っているのはCさんだけなので、Cさんはこのトランザクションの生成と送付を否認できない

ことが証明されました。このトランザクションはブロックに組み込まれます。

同一でなければトランザクションは無効になります。

上記の説明を図にしました。それぞれの番号は、トランザクション生成・送付と検証の手順の番号と同じです。

参考資料
「ビットコイン: P2P電子通貨システム」 Satoshi Nakamoto  日本語版 英語版
「これでわかったビットコイン」 斉藤賢爾 太郎次郎社エディタス
「ビットコインにおけるトランザクション、その展性と影響」 斉藤賢爾 WIDE Project
「ビットコインの仕組みとセキュリティ技術」 漆嶌賢二 日本スマートフォンセキュリテ協会(JSSEC) フィンテックセミナー 資料