Hashcash は Proof of Work、つまり計算作業の証明を使う電子切手の仕組みです。切手は、指定された条件を満たす結果が見つかったことを示します。それ自体はビットコインでも、送金できる口座残高でもありません。
アンナがパヴェルにメールを送るとします。同じものをもう一通送っても、ほとんど費用はかかりません。ですが、何百万通もの広告を送る人にも同じ利点があります。Hashcash はここに小さな手間を加えます。送信者のコンピューターが先に計算による切手を作るのです。払うのは郵便局への料金ではなく、時間とエネルギーです。Adam Back は 1997 年 3 月 28 日に実装を発表し、2002 年に技術論文を公表しました。似た発想は Cynthia Dwork と Moni Naor が 1992 年に研究していました。Hashcash は、ネットワークの悪用を抑えようとするこの流れに位置づけられます。 [1] [12]
ハッシュとは、データから計算する、長さが一定の指紋のようなものです。アンナのプログラムは切手の試行値を変えて何度も指紋を計算し、先頭に必要な数のゼロのビットが並ぶまで続けます。ビットはゼロか一の二進数の桁です。ゼロを b 個要求すると、一回の成功確率はおよそ 2^-b、平均試行回数は 2^b です。b = 20 なら平均 1048576 回であり、必ずこの回数をこなすわけではありません。すぐに当たることも、長くかかることもあります。パヴェルは完成した切手のハッシュを一回計算して確認できますが、記載内容と受付条件も別に確認する必要があります。 [10] [11]
一枚の切手を百万通に添付できたら、この手間は意味を失います。そのため切手には、対象の受信者やサービスと日付が入ります。受信側は有効性を確認し、受け付けた切手を記録して、replay と呼ばれる再利用を拒否します。日付だけ、あるいは本文との結びつきだけでは、同じメールの再送を防げません。Hashcash に世界共通の使用済み台帳はなく、必要な確認は受信サービスが担います。ハッシュが正しくても、もう一度受け付けてよいとは限りません。 [11] [12]
必要な難易度は受信サービスが決めます。ゼロのビットを一つ増やすたびに、平均的な仕事量はおよそ二倍になります。要求が弱すぎれば迷惑メール送信者を止められず、強すぎれば普通の利用者も困ります。20 という数字は一例で、永遠の安全基準ではありません。同じ試行回数でも、古い携帯電話と高速なコンピューターでは所要時間が違います。サービスは機器の性能、有効期間、自身の処理能力を考える必要があります。Hashcash が全員に同じ秒数を強制するわけではありません。 [10] [11]
計算作業は、善意の利用者と攻撃者を見分けません。多数のコンピューターや botnet、つまり乗っ取られた機器の集団を使う送信者なら、仕事を分散し、費用の一部を他人に負わせられます。その間、普通の利用者のバッテリーも減ります。Hashcash は攻撃の採算を変える仕組みで、迷惑メールの消滅を保証するものではありません。切手は本文を暗号化せず、実名の本人確認もせず、配達も保証しません。他の対策と組み合わせられる受付条件の一つです。 [10]
バージョン 1 の形式は 1:bits:date:resource:ext:rand:counter です。各欄は、バージョン、申告する難易度、日付、受信者やサービス、拡張、乱数値、変化させるカウンターを表します。bits 欄は、送信者が主張するハッシュ先頭のゼロビットの数を示します。コンピューターが実際に試した回数ではありません。この名前は技術形式の一部なので翻訳して置き換えません。従来の実装は文字列全体に SHA-1 を適用します。bits に数字を書くだけでは足りず、実際の指紋が条件を満たさなければなりません。これは歴史的形式の説明であり、新しい安全設計に SHA-1 を勧めるものではありません。Bitcoin のデータ形式とハッシュ関数は別です。 [11] [13]
ここで探すのは、指紋の先頭が指定どおりになる入力です。このような入力を partial preimage と呼びます。そのハッシュは指定された部分の条件を満たし、残りの部分はどんな値でもかまいません。一方、衝突とは異なる二つの入力から同じ指紋が出ることです。古い文献には partial collision という緩い表現もありますが、作業を理解するには区別が大切です。SHA-1 の衝突を見つける攻撃が、そのまま指定の先頭を探す問題を解くとは限りません。だからといって、SHA-1 が現在の安全設計全般に適した選択になるわけでもありません。 [10] [11] [13]
Hal Finney は 2004 年に RPOW、Reusable Proofs of Work を発表しました。利用者は作業の証明を渡して新しいトークンを受け取り、次の移転では古いトークンが無効となって新しいものに交換されます。再利用とは、同じ切手を自由に複製することではありません。システムは IBM 4758 という安全なモジュールを備えたサーバーと、実行プログラムの遠隔確認に依存していました。運営者への信頼は減らせても、機器と製造元に関する前提は残ります。RPOW は実験的な先行例で、Bitcoin の分散型合意そのものではありません。 [7] [15]
Bitcoin Whitepaper は Back の Hashcash を明示的に引用しています。サトシが使ったのも、結果を探すには試行が必要だが、他人は簡単に確認できるという非対称性です。Bitcoin のマイナーは、取引群のブロックを要約し、前のブロックを指す有効なブロックヘッダーを探します。double SHA-256、つまり SHA-256 を続けて二回適用し、結果を target と呼ぶ数値上限と比較します。SHA-1 のメール切手をウォレットに入れる話ではありません。共通するのは原理であって、仕組み全体ではないのです。 [8] [14]
郵便料金が決めるのは一件の要求のコストです。お金にはさらに、矛盾する二つの送金のどちらが有効かという答えが必要です。Bitcoin はブロックをつなぎ、ノードは有効な分岐の中から累積仕事量が最大のチェーンを選びます。ノードとはルールを確認するコンピューターで、取引と許可された発行量も調べます。莫大な仕事をしても無効な取引が有効になることはありません。Hashcash は重要な部品を提供しました。それを他のルールと組み合わせて初めて、中央管理者のいない共通の貨幣履歴が可能になりました。 [8] [9]
理解を深めるには、この項目とあわせて次もお読みください Proof of Work, サイファーパンク, Adam Back, Bitcoin Whitepaper, Bitcoin, Hash. 次の項目からも参照されています サイファーパンク, b-money, Bit Gold, Reusable Proofs of Work.