プルーフ・オブ・ワークシステム
プルーフ・オブ・ワーク (proof-of-work、POW) システム (またはプロトコルかファンクション) はサービスのリクエスターに一部の作業を要求(通常はコンピュータによる処理時間を意味する)することでDoS攻撃やネットワーク上のスパムなどの他のサービスの濫用を抑止する経済的手段。コンセプトは1993年のジャーナル記事で示されているようにシンシア・ドワークとMoni Naorによって発明された 。「プルーフ・オブ・ワーク」またはPOWという用語はマーカス・ヤコブソンとアリ・ジュルズによる1999年の論文で最初に造語され、公式化された 。ソロモン諸島の貝貨は通貨に価値を与えるためにプルーフ・オブ・ワークシステムが使われた初期の例である。
これらのスキームの重要な特徴はそれらの非対称性にある:作業はリクエスター側にとって適度に難しい(しかし実行可能)ものでなければならないが、サービスプロバイダー側にとってはチェックは容易である。このアイディアはCPUコストファンクション、クライアントパズル、計算パズルまたはCPUプライスファンクションとして知られている。PoWはコンピュータではなく人間が素早く解決することを意図したCAPTCHAとは異なる。プルーフ・オブ・スペース(Proof of space、PoS)提案はCPUタイムの代わりに専用のメモリーまたはディスクの容量を証明することで同じ原理を適用している。プルーフ・オブ・バンドワイズ(Proof of bandwidth)アプローチは暗号通貨のコンテキストで議論されてきた。プルーフ・オブ・オーナシップ(Proof of ownership)は特定のデータが証明者によって保持されていることを証明することを目的としている。
ビットコインのマイニングやHashcashで使われているこの有名なシステムは電子メールを送信するための信用トークンとして作業の完了を証明する部分的なハッシュの逆算を利用している。例えば、以下のヘッダーは2038年1月19日にメッセージを calvin@comics.netへ送信するための 約252のハッシュ計算を表している
X-Hashcash: 1:52:380119:calvin@comics.net:::9B760005E92F0DAE
それはスタンプのSHA-1ハッシュ(ヘッダー名 X-Hashcashを省略: コロンと余白も「1」の桁まで省略)が二進法で52桁の0、つまり十六進法で13桁の0で始まることを確認することにより1回の計算で検証される
POWシステムがスパム問題などの特定のサービスの拒否問題を実際に解決できるかどうかは議論になった。システムはスパマーにとってスパムメールの送信が押し付けがましく非生産的なものとしなければならないが、正当なユーザーがメッセージを送信するのを妨げてはならない。言い換えれば、本物のユーザーはメール送信時にいかなる困難にも遭遇すべきではないが、メールのスパマーは一度に大量のメールを送るために莫大な計算力を消費しなければならない。プルーフ・オブ・ワークシステムはHashcashに類似したシステムを使用するビットコインなどの他のより複雑な暗号システムがプリミティブとして使用している。
プルーフ・オブ・ワークプロトコルには2つのクラスが存在する。
チャレンジ・レスポンス プロトコルはリクエスター(クライアント)とプロバイダー(サーバー)の間で直接対話型リンクを担う。プロバイダーはチャレンジを選択し、プロパティを持つセット内のアイテムを表示し、リクエスターはセット内の関連するレスポンスを見つけて送り返しプロバイダーによってチェックされる。チャレンジはプロバイダーによって即座に選ばれるので、難易度を現在の負荷に適合させることができる。リクエスター側での作業はチャレンジ・レスポンスプロトコルが既知のソリューション(プロバイダーが選択)を持つ場合、または限定されたサーチスペース内に存在することが知られている場合に限定される可能性がある。
ソリューション検証プロトコルはそのようなリンクを想定していない:結果として、リクエスターがソリューションを求める前に問題を自ら科さなければならず、プロバイダーは問題の選択と見つかったソリューションの両方を確認しなければならない。そのようなスキームの大半はHashcashなどの無限の確率的反復手続きである。
既知のソリューションプロトコルは、矩形分布の分散がポアソン分布の分散よりも(同じ平均で)低いことから無限の確率的プロトコルよりもわずかに低い分散を持つ傾向がある。複数サンプルの平均は低い分散を有するため分散を減らすための一般的な技術は複数の独立したサブチャレンジを使用することである 。
タイムロックパズルなどの固定費関数も存在する。
更に、これらのスキームが使用する基本機能は以下のものがある:
CPUバウンド ハイエンドのサーバーからローエンドのポータブル端末まで同様に時間と共に大きく変化するプロセッサーの速度で計算がなされている
メモリーバウンド 計算速度がメインメモリーアクセス(レイテンシ(待ち時間)または帯域幅の何れか)によって制限されており、その性能はハードウェアの進化に対してあまり敏感ではないと予想されている。
ネットワークバウンド クライアントが殆ど計算を行わなくてもよい場合でも最後のサービスプロバイダーに照会する前に遠隔サーバーからトークンを収集しなければならない。この意味で作業は実際にはリクエスター側によって行われないが、必要なトークンを取得するための待ち時間が原因で遅延が発生する。
最後に、一部のPOWシステムは秘密(典型は秘密鍵)を知っている参加者に安価なPOWを生成するためのショートカット計算を提供している。その根拠としてメーリングリストの所有者は、高いコストが発生することなく全ての受信者へのスタンプを生成することができることができる点が挙げられる。そのような機能が望ましいかどうかは使用シナリオによって異なる
コンピュータ科学者のハル・フィニーはプルーフ・オブ・ワークのアイディアを基に、リユーザブル・プルーフ・オブ・ワーク(Reusable Proof-of-work、RPOW)を利用するシステムを作り出した 。プルーフ・オブ・ワークを実用目的に再利用するアイディアは1999年に既に確立されていた 。フィニーの目的はRPOWをトークンマネー(名目貨幣)とすることだった。金貨の価値が金貨の製造に必要な純金の価値に下支えされていると考えられているように、RPOWトークンの価値はPOWトークンを「鋳造」するのに必要な現実世界のリソースの価値によって保証される。フィニーのRPOW版ではPOWトークンはHashcashの一部である。
ウェブサイトはサービスと引き換えにPOWトークンを要求できる。ユーザーにPOWトークンを要求することでサービスのつまらないもしくは過度の使用を抑止し、インターネットへの帯域幅、計算、ディスク容量、電力、管理費などのサービスの基本リソースを節約する
フィニーのRPOWシステムはトークンを生成するために必要な作業を繰り返すことなくトークンのランダム交換を許可する点でPOWシステムと異なる。 誰かがウェブサイトでPOWトークンを「使用」した後で、サイトの管理者は「使用された」POWトークンを新しい未使用のRPOWトークンと交換でき、その後同様にRPOWトークンの受け入れ態勢が整っている第三者のウェブサイトで使用できる。これはPOWトークンを「鋳造」するために必要なリソースを節約する別の方法である。RPOWトークンの偽造防止は遠隔証明により保証されており、使用済みのPOWかRPOWトークンを同価値の新しいトークンに交換するRPOWのサーバーは遠隔証明を利用して関係者がRPOWサーバーで動作しているソフトウェアを検証できるようにしている。フィニーのRPOWソフトウェアのソースコードは公開されている(BSDに似たライセンスの下で)ので、十分な知識のあるプログラマーはコードを調べることで、ソフトウェア(とひいてはRPOWサーバー)が同価値の使用済みトークンとの交換の場合を除いて新たなトークンの発行を決して行わないことを検証できる。
2009年までは、フィニーのシステムは実装された唯一のRPOWシステムであり、経済的に重要な用途で利用されることはなかった。2009年にネットワークがオンライン状態となったビットコインはプルーフ・オブ・ワークの暗号通貨であり、フィニーのRPOWのようにHashcashのPOWをベースとしている。しかしビットコインではRPOWで使用されていたハードウェアのトラステッド・コンピューティング機能ではなく、コインの転送トラッキング用の分散型P2Pプロトコルによって二重支出プロテクションが提供されている。ビットコインは計算によってプロテクトされているためより信頼性が高い。RPOWはTPMハードウェアに格納されている秘密鍵とTPM秘密鍵を所持するメーカーによってプロテクトされているが、TPMメーカーの秘密鍵を盗んだハッカーまたはTPMチップ自体を調査して鍵を取得する能力がある者はプロテクトを破ることが出来た。ビットコインは個々のマイナーによってHashcashのプルーフ・オブ・ワーク機能を利用して「採掘」され、P2Pビットコインネットワーク内の分散ノードによって検証される。
多くのPOWシステムはクライアントにハッシュ関数の逆算など無駄な作業を要求しているが、これは多大なリソース(主にクライアントのコンピュータを動作させる電力)が浪費されることを意味する。損失を軽減するために一部のアルトコインは行われた作業が実際に有用なPOWシステムを利用しており、例えばプライムコインは素数定理など数学的研究に有用な特定の種類の未知の素数を見つけることをクライアントに要求する。