Nonceとは何か?
Nonceは暗号処理で一度だけ使われる数値で、試行を一意にします。ビットコイン式のマイニングでは、マイナーがブロックハッシュが規則に合うまで調整する使い捨ての値です。ロッカーのダイヤルを何度も回してカチッと合うまで試すようなイメージです。
Nonceは常にランダムだ、という考えがあります。完全にそうではありません。その試行で一意であればよいので、マイナーはランダム生成ではなく順番に値を試すことが多いです。
Nonceの仕組み
マイニングの簡単な手順を説明します。マイナーがキーボードの前でコーヒーを片手に、機械の速さで値を試している様子を想像してください。
- 手順1:マイナーがトランザクションを集めて、ブロックヘッダーを準備します。
- 手順2:Nonceの値を試し、ヘッダーをハッシュして、その結果がネットワークの難易度で定められた目標を満たすか確認します。
- 手順3:失敗したら値を変えて再試行します。これを大量に繰り返します。
- 手順4:うまくいったらマイナーはブロックをブロードキャストし、誰でも同じヘッダーと含まれたブロックデータをハッシュして検証できます。
- 手順5:次のブロックでまた新しい探索を始めます。同じ勝負です、新しいラウンドが始まります。
それだけです。
Nonceが重要な理由
ではあなたにとっての利点は何でしょうか?
- 利点:誰でも作業証明を検証できるようにし、ブロック生成の正当性を保ちます。
- 視点:アカウントベースのチェーンでは、トランザクションカウンター(これもnonceと呼ばれる)がリプレイ攻撃や順序の不正を防ぎます。リプレイ攻撃
- 関連性:ブロックエクスプローラーやウォレットのUI、マイニングダッシュボード、開発ツールで目にします。
ブロックエクスプローラーを見ているときは、それがブロック内のマイニング用Nonceか、アカウント用のトランザクションカウンターかを確認してください。同じ単語でも役割が異なります。
Nonceの主な特徴
関係するポイントをまとめます。
- 一意性:特定の暗号的試行に対して一度だけ使われ、その場所では再利用されません。
- 調整可能:マイニングでは、有効なハッシュを探すためにマイナーが回すノブのようなものです。
- 検証可能:誰でもハッシュを再計算して主張を確認でき、信頼は不要です。
- 制限あり:ビットコインでは32ビットフィールドが用意されているため、値が尽きたら他のフィールドも変えます。
バリエーション
同じ名前でもいくつかの種類があります。
- マイニング:プルーフオブワーク探索のためのブロックヘッダー内の値。
- エクストラ:コインベーストランザクションに入れる追加のNonceで、探索領域を広げます。
- アカウント:イーサリアムのようなチェーンにおけるトランザクションカウンターで、重複や順序問題を防ぎます。
- 署名:ECDSA署名で決して繰り返してはいけない秘密のランダム値で、繰り返すと鍵が漏れる可能性があります。
Nonceはパスワードではありません。ブロックやトランザクションとともに公開され、その役割は計算を一意かつ検証可能にすることです。
例
マイナーはヘッダー内の値を何十億回もループして、ハッシュが長いゼロの連続で始まるものを見つけるまで試し、見つかったらブロックを送信します。
豆知識
Nonceは中英語の「その場のために」を意味する語句に由来します。暗号学者はこれを一度だけ使う数値として採用しました。GPUやミームコインの時代よりずっと前の話です。
まとめ
一言で言えば、Nonceは作業証明や多くの暗号的手法を実際に動かす一度限りの数値で、仲介者を必要としません。
