Satoshi Nakamoto論文をタイムスタンプサーバーに着目して読む

Yusuke Egami
Aerial Partners
Published in
9 min readJan 24, 2019
Photo by André François McKenzie on Unsplash

こんにちは、Aerial Partnersでソフトウェアエンジニアをしている惠上(@egapool)です。

最近社内でも社外でもNakamoto論文についてあらめて議論する機会があって、これを機にこの論文の技術的な要点をまとめてみます。

ところでこの論文にはblockchainという言葉はでてきません。「え、そうなの?」と思われた方もいるかもしれませんが実はそうなんです。

では何ついて書かれているのかというと、↓について書かれています。

A solution to the double-spending problem using a peer-to-peer distributed timestamp server.

P2P分散タイムスタンプサーバーを用いた2重支払い問題の解決方法

ということで、まずはNakamoto論文ともBitcoinとも離れて、Distributed Timestamp Server(分散タイムスタンプサーバー)を理解するために、その対極の概念 であるTrusted Timestamp Serverについてみてみましょう。

Trusted Timestamp Server

  • 時間を売っている人達がいます(いやアルバイトがどうとかの話じゃないよ)
  • 「時刻認証局」と呼ばれています
  • タイムビジネス協議会 | JADAC https://www.dekyo.or.jp/tbf/index.html
  • データが存在した時刻と内容に偽りがないことを証明してあげることがビジネスになっています
  • 例えば↓こんな問題があります
  • 例1)2者間でバラバラに起こった事象の時間順序をどうするか
  • 例2)長期間保存するデータの正当性を確認しづらい
  • 総務省|電子署名・タイムスタンプ|タイムスタンプについて http://www.soumu.go.jp/main_sosiki/joho_tsusin/top/ninshou-law/timestamp.html
  • これらに対して時刻認証局が以下を保証しています
  • ①データが改ざんされていないこと
  • ②データが記録された時刻
  • どんな事業者タイムスタンピングしているのかhttps://www.dekyo.or.jp/touroku/contents/repository/index.html

ところで「タイム」スタンプと呼んでいますが本当に必要なのは時刻ではなく前後関係です。物事がどの順番で起こったかが重要です。打刻はしているけれど時間は前後関係を瞬時に判別するための便利な表現にすぎません。(「今」が◯時◯分◯秒というのは人間が勝手に決めたこと。「今」はxyz秒だと主張する宇宙人が現れたら時刻表記自体にほとんど意味がないことがわかります。)

ここまでで重要なポイント2つ

  • 信頼できる時刻認証者により時刻(前後関係)が保証される
  • 電子署名技術により内容の正しさが保証される

参考)電子署名についてわかりやすく簡単に説明されています https://www.itis.nssol.nssmc.com/blog/contracthub/hint07.html

参考)Trusted Timestamping https://en.wikipedia.org/wiki/Trusted_timestamping

特定の組織によらずデータの状態を管理するには?

内容の正しさは電子署名技術によって保証されるので、問題は前後関係の保証をどうやってみんなでやるかということになります。みんなで順番の保証さえできれば1組織が独善的に運用を変えたり、運営を続けられなくなった時に共倒れするというリスクを排除できます。

・・・ということで前置きはこれくらいにしておいて、Nakamoto論文を見ていきます。ここではBitcoinを理解する上で個人的に特に重要な概念と思われる2章から6章までをポイントを絞って扱います。

2. Transactions

  • 電子署名を使って送金を表現(トランザクションと呼ぶ)
  • 直前の取引(IN)と次の所有者の公開鍵(OUT)に署名することで送金を表現
  • 受け取り手は送金者の公開鍵を使って所有権や送金内容が正しいことを確認できる

3. Timestamp Server

トランザクションをブロックに詰めて全体をハッシュして次のブロックに含めるという構造を考えます。この仕組を利用すると単純な前後関係それ自体は以下2点で表現できます。

  • 取引(が詰まったブロック)をハッシュでつなげる
  • 過去の取引が公開されている

ということは1組織でも前後関係に不正がないこと自体は表明できそうです。

ただし、今後もそれが続くことは保証できないという問題は残ります。また、送金の順序の決め方が独善的になってしまいます。Aさんが同じコインをBさんとCさんに同時に送った場合、1組織だとどうやってどちらが正と判断するのでしょう(もちろん反抗的じゃない方ですよね?

つまりみんなでブロックをハッシュでつなげたものを生成・管理できればOKということになります。

ところが今度はみんながバラバラに作ったブロックの中でどれを正解(合意解)とするか?という問題が発生します。これの解決方法を次章以降で見ていきます。

4. Proof-of-Work

分散タイムスタンプサーバーを実現するためにProof-of-Workを用います。PoWはゼロから始まるあるハッシュ値が見つかるまでブロックに含まれるnonceを増やしてハッシュ計算し続ける作業です(→時間がかかる)。計算してブロックを生成するひとをマイナーと呼びます。

nonceを見つける競争をする目的は2つ

1)覆すコストを膨大にする

ブロックを生成するコストが小さいと、みんなチェーンの途中から好き好きにブロックを伸ばし始めて自分の送金をなかったことにできちゃいます。

2)合意解を導く

一番最初に出来たブロックが正当な次のブロックというルールにすれば、みんなが好き勝手に作っても全員の納得するものが定まります。

nonceを見つける競争をさせる」ことによって改竄耐性と分散システムでの合意を同時に実現しているのはエレガントと言わざるを得ません。これによって繋がったブロックの順番がみんなが納得する順番ということになります。

ちなみに2重支払い問題は、ブロック生成時に取り込むトランザクションをチェックして過去のブロックに使われた形跡がないことをマイナーが確認することで解決しています。

5. Network

最長のチェーンの先端にあるブロックを最新の正しいブロックとみなすルールにしています。チェーンの情報は各ノードが保持ていて、また常にネットワークを漂っているので中途離脱、途中参加してもチェーンの情報を取り寄せられます。

6. Incentive

ブロック生成者は特権として無から自分への送金を表現するトランザクションをブロックに含めることができます。これがこのシステムにおけるコインの新規発行でもあります。このインセンティブがマイナーがProof-of-Workを行う理由になります。

また攻撃者がコインを取り戻そうとしても、それによってコインの価値が下がってしまうので攻撃できるだけのCPUパワーが有るなら、正しくマイニングしてコインを得たほうが得というインセンティブになります。

このインセンティブがなければProof-of-Workを行う理由がないので、これによってシステムが維持されていると言えます。

まとめ

これまでネット上で価値を移転させようとすると必ず信頼できる管理者が必要でした。

bitcionはネット上で信頼する第三者を必要とせず送金できる初めての仕組みと言えます。

電子署名によって送金内容が正しく、改竄されていないことがわかり、Proof-of-Workとインセンティブの仕組みより送金の順番の決定と過去の履歴が改竄されていないことがネットワークの大多数の承認を得ていることがわかり、信頼してコインを送金することができます。

おわりに

Nakamoto論文の中で「6.Incentive」だけは特殊な章だと思っています。これまで紹介した暗号技術や順番を決める仕組みはそれぞれ内部に閉じて成立していますがインセンティブだけは技術的な仕組みだけでは成立せず外側に存在するbitcoinに対する価値観が必要です。

通貨(「価値の保存媒体」に訂正したい)として成立するとみなせるからそれを得るためのインセンティブが成立するし、そのインセンティブによってネットワークが維持されているから通貨(「価値の保存媒体」に訂正したい)として成立していると言えます。

つまりPoW型の分散タイムスタンプサーバーによるデジタル通貨が通貨として成立するには”ある程度(インセンティブが成長するまで)の初動”も必要不可欠な要素と思います。

Aerialのメンバーと一緒に話してみたい、ブロックチェーン技術の社会実装に興味がある、という方はぜひ一度私たちとお話しにオフィスまで遊びに来てください!

エンジニア募集

--

--

Yusuke Egami
Aerial Partners

Web & Blockchain Engineer @AerialPartners, PHP, Go, bitcoin, LightningNetwork, P2P