見出し画像

サトシ・ナカモトの論文を読む(概要)


おわび(2024/2/7)

肝心の論文へのリンクが切れておりました。
申し訳ありません。修正中です。

はじめに

ビットコインの始祖、サトシ・ナカモトのビットコインの論文は、bitcoin.orgのページから無償でダウンロードすることができる。

ビットコイン:P2P電子通貨システム
https://bitcoin.org/files/bitcoin-paper/bitcoin_jp

わずか13ページの論文に、今日流通している暗号通貨の仕組みがぎゅっと詰まって説明されている。
平易な言葉で、難しい数式を一切使わずに。
(後半で数式と短いCコードが出てくるが、攻撃者がビットコインを乗っ取る確率の計算、その困難さの証明であり、ビットコイン本体の議論ではない)

本論文を読み解くことで、ビットコインをはじめとする暗号通貨の仕組みにアプローチできると思う。
それでは早速、読み進めながら、自己理解のため余分な書き込みをする。

概要

以下、引用は「ビットコイン:P2P  電子通貨システム 」から抜粋。

完全な P2P 電子通貨の実現により、金融機関の介在無しに、利用者同士の直接的なオンライン決済が可能となるだろう。電子署名により、P2P 電子通貨の機能の一部は実現可能であるが、その機能の主な利点は、信用が置ける第三者機関が二重支払いを防ぐために必要とされる場合、失われることとなる。本論文では、P2P ネットワークの使用による、二重支払い問題の解決策を提案する。

ビットコイン:P2P  電子通貨システム

最初の行「金融機関の介在なしに、利用者同心の直接的なオンライン決済が可能である」ことがビットコイン(およびそれ以降の暗号通貨)の目的である。
そのために必要な条件として、以下2つがあげられている。

  1. 電子署名の利用

  2. 二重支払いの防止

1.の電子署名は送金者が確かに自分自身であることを証明する。銀行でいうと古くは銀行印入り通帳、今ではキャッシュカード+4桁の暗証番号、ネット上ではIDとパスワード(∔生体認証やトークン)など。
ビットコインでは、自分のウォレットから発行したビットコインアドレスを使用し取引するが、実はこの中に電子署名が暗号化されて埋め込まれている。

2.の二重支払いの防止は、銀行では時々システムのバグや入金者のミスにより起きてしまうが、ビットコインにおいては人が介在しないためシステムで排除している。

このネットワークでは各トランザクションを、ハッシュ関数に基づいた Proof-of-work の進行中のブロックチェーン上にハッシュ化することで、タ イムスタンプを行う。これにより、Proof-of-work の計算を再度行わなければ変更不可能な記録を生成するのである。

ビットコイン:P2P  電子通貨システム

上記「ネットワーク」はビットコインの実体そのもの。
いくつか用語がでてきたので整理する。

  • ハッシュ関数:詳しくは「暗号学的ハッシュ関数」

  • Proof of work:ブロックの検証を行うアルゴリズム計算。略してPoW  とも言う。計算を実施することをマイニングと言う。

  • ブロックチェーン:ビットコインのPoWによって生成された分散型台帳。

ハッシュ関数?君たちはプログラマーだからそのくらい知っているよね?という感じで論文は進む。ここでは暗号化関数ぐらいの理解にしておこう。
撤回します。後ろに基本のキ程度は分かるようにメモを残します。

ビットコインネットワーク上の各ノードは取引もする一方、マイニングを行うノードがいなければビットコインは維持できない。そのためにマイニング報酬というものがあり、今では6.25BTC/10minがPoW計算を一番早く終了したノードに与えられる。実際はグループを作って計算を分担し、計算量に応じて報酬を分配するマイニングプールが多い。

最長のブロックチェーンは、一連のトランザクション履歴を証明するだけでなく、それが最大の CPU パワーを保有するプールから生成されたものであることを証明する。善意のノードが過半数の CPU パワーをコントロールする限り、最長のチェ ーンを生成し続け、攻撃者を退けることが可能である。

ビットコイン:P2P  電子通貨システム 

一見分かりにくい文章だが、要は正当なビットコインのチェーンは1本だけ、と解釈できる。
ブロックチェーンの生成最中で枝分かれすることはあるが、最大勢力以外の枝は死んでいく。

例外として、暗号通貨の開発者がブロックを分岐させ検証アルゴリズムを変更してしまうことがある。成功すると新しい暗号通貨が生まれ、これをハードフォークという。ビットコインでは2017年のハードフォークによりビットコインキャッシュという新通貨が生まれている。

ネットワーク自体は必要最小限の構成で良い。メッセージはベストエフォート方式でブロードキャストすれば良く、各ノードは ネットワークにいつ離脱・再接続しても問題ない。これは、各ノードが再接続時に最長のブロックチェーンを受け入れることで、離脱している間に何が生じたか把握することができるためである。

各ノードがマイニングを始める前に、ビットコインのブロックチェーンの最新データを余さず取り込んでいることが必須である。

上記「メッセージ」とは送金者のトランザクション(取引履歴)で、各ノードに「ブロードキャスト」され、受け取ったノードたちはトランザクションの検証作業すなわちPoWによるマイニングを始める。

マイニングが中断してしまった場合は、再び最新のブロックチェーン余さずダウンロード後、再開する。(大変なように見えるが、数ブロック生成する手間が省け最新ブロックの検証ができるから、シンプルで理にかなっている)

追記1:サトシ・ナカモトって誰?

ビットコインの生みの親って事は認知されているが、その他の正体・生涯は謎に包まれている。
日本名を名乗っているが、日本人かどうかも分かっていない。
「サトシ・ナカモトとは私」と名乗っている人は何人か居るが、全く当てにならない。

だが、仮に日本人とした場合、このような論文を書ける人物が1人だけいた。(過去形であることが残念でならない)
論文名の「P2P電子通貨システム」というキーワードを見てピンと来る人物。彼こそがサトシ・ナカモトであるという説がある。私もその説を信じる1人である。

追記2. ハッシュ関数

上の方で端折ろうとしたが、ビットコインを語るために避けることは出来ない用語だと考えなおし、出来る限り簡潔にまとめる。

ハッシュ(hash)とは「細かく切り刻み、混ぜ合わせる」ことであり、料理好きの人は「ハッシュドポテト」を連想するだろう。「ハッシュタグ」の方が想像しやすいかもしれない。

ハッシュ関数は、日本語訳の「要約関数」の方がわかりやすい。一般につぎのようなものをいう。

ハッシュ関数 (英語: hash function) あるいは要約関数とは、任意のデータから、別の(多くの場合は短い固定長の)値を得るための操作、または、その様な値を得るための関数のこと。ハッシュ関数から得られた値のことを要約値ハッシュ値または単にハッシュという。

ハッシュ関数(Wikipedia)

ハッシュ関数が何もので、どのように使われるかの分かりやすい解説は以下記事をご参照下さい。

ビットコインのアドレスやブロックチェーン生成には、攻撃に耐えうるために暗号学的ハッシュ関数が使用される。

暗号学的ハッシュ関数に求められる性質は以下のようなものである(上記Wikipediaより引用)

1. ハッシュ値から、そのようなハッシュ値となるメッセージを得ることが(事実上)不可能であること(原像計算困難性、弱衝突耐性)。
2. 同じハッシュ値となる、異なる2つのメッセージのペアを求めることが(事実上)不可能であること(強衝突耐性)。
3. メッセージをほんの少し変えたとき、ハッシュ値は大幅に変わり、元のメッセージのハッシュ値とは相関がないように見えること。

暗号学的ハッシュ関数(Wikipedia)

以下入力メッセージを$${m}$$、ハッシュ関数$${f(m)}$$、得られる出力(ハッシュ値)$${y}$$とすると、

  • 性質1. 逆関数$${m=f^{-1}(y)}$$の値を求めること(現像攻撃)が(事実上)不可能。

  • 性質2. $${m_1 \ne m_2}$$ 尚且つ$${ f(m_1) = f(m_2)}$$となる$${m_1, m_2}$$を求めること(衝突攻撃)が(事実上)不可能。

  • 性質3. は数式で表現しずらいが、ここではハッシュ値の長さが十分大きく、かつ一様分布に近ければこの性質は満たせるだろうと推測する。

ところで、理想的な暗号学的ハッシュ関数$${f}$$をもってしても、性質2. を満たすことの方が難しい。逆に攻撃者にとっては衝突攻撃のほうが現像攻撃よりた易い。ハッシュ値$${y=f(m)}$$のビット数をNとした場合、以下の理論が成り立つからである。

ハッシュ値がNビットの理想的な暗号学的ハッシュ関数があるとする。このときあるハッシュ値となるメッセージを探し出す原像攻撃が成功する試行回数の期待値は2^(N)/2である。それと比べて、同一のハッシュ値となる2通の異なるメッセージを探し出す衝突攻撃(誕生日攻撃)が成功する試行回数の期待値は、誕生日のパラドックスによって2^(N/2)でありずっと小さい。このことは、暗号学的ハッシュ関数の使用目的にてらしあわせて、必要なハッシュ値の大きさに注意しなければならないことを意味している。

誕生日のパラドックス-誕生日攻撃(Wikipedia)

上記でいう誕生日のパラドックスとは以下のようなものである。

何人集まれば、その中に誕生日が同一の2人(以上)がいる確率が、50%を超えるか?

誕生日のパラドックス(Wikipedia)

答えは23人で、直観に反する結果であることがパラドックスと呼ばれる。

衝突攻撃の定義は以下の通りだった。

  • $${m_1 \ne m_2}$$ 尚且つ$${ f(m_1) = f(m_2)}$$となる$${m_1, m_2}$$を求める。

誕生日をハッシュ関数に見立てたら、確かに試行回数に関しても誕生日のパラドックスが当てはまる。そのため衝突攻撃は誕生日攻撃とも呼ばれる(この呼び名の方がポピュラーである)

誕生日攻撃を利用して、偽物の契約書に電子署名をさせることが可能になる。長くなるため誕生日攻撃-デジタル署名への攻撃(Wikipedia)を参照してください。
いや、こんな事よく思いつくよねハッカーって。

この記事が気に入ったらサポートをしてみませんか?