Reusable Proofs of Work、略してRPOWは、ハル・フィニーが開発した実験システムです。Hashcashによる計算作業の証明を、他の人へ渡せるデジタルトークンに変換しました。サーバーは利用者からの要求を処理するサービスです。各トークンを指定サーバーで交換できるのは一度だけですが、受け手は同じ計算上の価値を持つ新しいトークンを得ます。交換の正しさを守るためにIBM 4758カードと実行プログラムの遠隔検証を用いました。分散型ネットワークでも、ビットコインでもありません。
2004年8月15日、ハル・フィニーは暗号技術のメーリングリストで、新しい実験への参加を呼びかけました。土台になったのはアダム・バックのHashcashです。コンピューターが入力を変えながら試行を繰り返し、決められた条件を満たす結果を探します。探すには計算時間がかかりますが、見つかった結果の確認はすぐできます。このような証明をProof of Work、作業の証明と呼びます。迷惑メール対策では、計算で支払う切手のように使えます。フィニーが考えたのは、一度使って役目を終えるのではなく、その証明を人から人へ渡せないかということでした。RPOWという名前は、まさに再利用できる作業証明という意味です。 [1] [2] [4]
アンナが有効なデジタルトークンをピーターへ送るとします。ファイルを送っただけなら、アンナはコピーを残せます。そこでピーターはトークンをRPOWサーバーへ提出し、交換を求めます。サーバーは未使用であることを確かめ、使用済みと記録し、ピーターのプログラムが準備した新しいトークンに署名します。アンナが持つ古いコピーは、もう交換に使えません。ピーターが新しいトークンをエバに送れば、エバも同じ手順を踏みます。再利用されるのは受け渡した価値であって、同じファイルがいつまでも有効なわけではありません。受け手が交換を完了するまでは、送り手が元のトークンを先に使う可能性があります。 [2] [11]
交換に差し出すものは、新しく計算したHashcashか、まだ使っていないRPOWトークンです。受け取るのはRSAデジタル署名の付いた新しいトークンで、署名は数学的に検証できるサーバーの証明に当たります。RSAは、この署名を計算する方式です。作成には秘密の署名鍵を使い、検証には対応する公開鍵を使います。手書き署名の画像ではなく、検証できる数値データです。署名で発行元は確認できますが、それだけでは交換済みかどうかは分かりません。その判断には、使用済みの入力を記録した一覧が必要です。以後の受け渡しでは、負担の大きいHashcashの探索を毎回繰り返さずに済みます。古い証明を無効にする代わりに、新しい署名が得られるからです。電力を再利用するのでも、過去の作業への請求権を無料で増やすのでもありません。 [2]
ここでいう価値は、計算の難易度を表す段階です。チェコ・コルナやドルでの価格ではありません。当時のHashcashは、データから短い数値の指紋を作るSHA-1を使い、先頭に指定数のゼロビットが並ぶ指紋を探しました。ビットは二進数の一桁です。必要なゼロが一つ増えると、平均試行回数はおよそ倍になります。そのため、レベル21のトークンはレベル20の二つ分と同じ期待作業量を表し、二つに分けられました。まとめたり分けたりしても、この計算上の価値の合計を保つ必要があります。ただし固定の交換相場や購買力が保証されたわけではなく、速いコンピューターなら同じ種類のトークンをより安く作れました。 [2] [10]
Double spendとは、同じ価値を二度使う二重支払いです。RPOWはこれを防ぐため、交換済みの証明の一覧を必要としました。ただしデータベース全体が保護カードの中にあったわけではなく、普通のホストコンピューターが保存していました。カードはその状態を確認する指紋を保持し、問い合わせの際に暗号学的な証明を検査しました。使われたのはMerkle Treeの原理です。指紋を木のようにつなぐことで、一つの共通の指紋からデータの一部を検証できます。記録の改変だけでなく、直前に使ったトークンがまだ記録されていない古いデータベースへの巻き戻しも見つけるのが目的でした。この保護がなければ、運営者は同じ入力から何度も新しいトークンを作れてしまいます。 [3]
サーバーは重要な処理をIBM 4758の内部で行いました。普通のコンピューターに装着する独立した計算カードで、署名鍵や機密性の高い状態を、そのコンピューターの所有者からも守る設計です。物理的な侵入を検知すると、秘密情報を消去できました。周囲のコンピューターは通信を中継してデータベースを保存しますが、信頼できるとは見なしません。サーバーを運営しているというだけで、勝手にトークンを発行させない。それがフィニーの解決策の中心でした。ただし保護はハードウェア、プログラム、鍵の管理が正しいことを前提とし、無条件に破れないと保証するものではありません。 [3] [9]
ソースコードの公開だけでは不十分です。運営者が見せるプログラムと、実際に動かすものは別かもしれません。そこでRPOWはremote attestation、遠隔から構成を確認する仕組みを使いました。カードは実行中のプログラムについて、署名付きの情報を提供します。利用者は公開コードを対応する道具でコンパイルし、完成したプログラムイメージの指紋と、カードが報告した指紋を比較できました。ソースファイルの文字列を単に比べるわけではありません。署名への信頼は証明書の連鎖をたどり、IBMの鍵に行き着きます。何のプログラムが動いているかの確認には役立ちますが、プログラムにバグがないことや、メーカーと認証手続きが決して失敗しないことまでは証明できません。 [3] [9]
デジタルトークンを交換する点でRPOWはeCashに似ています。しかし、当初説明された仕組みはブラインド署名でプライバシーを守っていたわけではありません。フィニーが頼ったのは保護カードまで暗号化された通信と、発行・受領したトークンの対応関係を保存しない、検証可能なプログラムでした。ホストコンピューターには内容が平文で見えない設計です。それでも利用者のネットワークアドレス、通信の時刻や量は観測できます。同じトークンを再提出した場合にも、いくつかの出来事を結び付けられます。保存された文書には、既にTorへの対応が説明されています。Torは複数の中継点を通して接続し、利用者の元のネットワークアドレスをサーバーから隠すネットワークです。一方、ブラインド署名は将来追加できる機能として挙げられています。この計画を、当時説明されていた動作の一部と混同してはいけません。 [8] [10]
RPOWは紙の上の案ではなく、動くサーバーと利用可能なクライアントソフトを備えていました。しかしフィニーは最初から、初期の試験版だと注意を促していました。必要なサーバープログラムの変更で、発行済みトークンが無効になる可能性もありました。用途は個人的・実験的・非商業的なもので、価値を保証する通貨ではありません。保護カードがあっても、運営者にサーバーを動かし続けるよう強制はできません。元のプロジェクトは終了しており、残るページやコードは歴史資料です。当時のSHA-1やRSA、ハードウェアの説明は、今日の決済サービスをそのまま作るための推奨ではありません。 [1] [4] [5] [7]
フィニーはニック・サボのBit Goldの考え方の一部を実現しようとしました。作るのにコストのかかるデジタルの物を、その後は受け渡せるという発想です。RPOWの文書は複数サーバーの協力も想定しており、永遠に一台しか使えない案と片付けるのは正確ではありません。ただし各トークンは交換先サーバーを指定していて、機械を増やすだけでは依存関係はなくなりません。Bitcoinは別の道を選びました。独立したノード、つまり検証ソフトを動かすコンピューターが、共通ルールと公開履歴を確認します。マイナーは次の有効なブロックを追加するために競います。ブロックとは、前の記録につながる取引のまとまりです。RPOWから分かるのは、Proof of Workだけでは足りないことです。受け渡しの有効な順序をどう共有し、その際に誰を信頼するかも決めなければなりません。 [1] [6] [11]
理解を深めるには、この項目とあわせて次もお読みください Hal Finney, Adam Back, Hashcash, Nick Szabo, Bit Gold, Proof of Work. 次の項目からも参照されています b-money, Bit Gold, Hal Finney.