Nonceは、“Number used once”(一度だけ使用される数値)の略称です。暗号技術や通信プロトコルにおいて、通信の一意性を保証するために生成されるランダムまたは疑似ランダムな数値を指します。Nonceの主な特徴は以下の通りです。
• 一意性:その名の通り、この数値は特定の暗号化通信内で一度だけ使用され、再利用されることはありません。
• 予測困難性:暗号分野では、攻撃者が値を予測できないようにNonceはランダムでなければなりません。
BitcoinのProof of Work(PoW)メカニズムでは、Nonceはマイナーがハッシュ計算時に唯一手動で調整できる変数です。マイナーはトランザクションデータを変更できず、異なるNonce値を試しながらハッシュを再計算し続けます。ブロックハッシュが必要な難易度を満たすNonceを発見した場合、そのNonceがProof of Workとなります。
この仕組みは宝くじの購入に例えられます。ブロックデータがあなたの名前、Nonceはあなたが選ぶランダムな番号です。ハッシュ難易度を満たす(当選する)まで番号(Nonce)を変え続けます。
Ethereumでは、Nonceは主に2つの目的で使われており、最も一般的なのがアカウントNonceです。
Nonceの主な目的は、システムのセキュリティと完全性を強化することです。
• リプレイ攻撃の防止:これがNonceの最も基本的な役割です。攻撃者が正規の通信を傍受し、それを再送して不正アクセスを試みる場合がありますが、Nonceによって、たとえ傍受されてもすでに期限切れのためサーバーはリクエストを拒否します。
これは小切手のシリアル番号に例えられます。#001の小切手が現金化されれば、その番号は銀行で無効化されます。同じ小切手をコピーしても再度現金化はできません。
• データの新鮮性保証:Nonceを含めることで、受信者はデータがリアルタイムで生成されたものであり、過去の情報の再送ではないことを確認できます。これにより、攻撃者が以前のセッション記録を利用してなりすます行為を防げます。
• 予測困難性の強化:Nonceは暗号化プロセスに変数を導入し、攻撃者によるパターン解析やシステム侵害をより困難にします。
生成方法や用途に応じて、Nonceは主に2つに分類されます。
• ランダムNonce:暗号的に安全な疑似乱数生成器(CSPRNG)で生成され、高いエントロピーと予測困難性を持ちます。デジタル署名や高度な暗号方式でよく使われます。
• シーケンシャルNonce:カウンターをインクリメントして生成されます。予測困難性は低いものの、絶対的な一意性が保証され、認証メカニズムに適しています。
Nonceは、日常のウェブ閲覧からデジタル通貨取引、各種セキュリティプロトコルや新興技術まで幅広く利用されています。その本質は常に一意性と予測困難性にあります。
• アイデンティティ管理と認証:HTTPダイジェスト認証、シングルサインオン(SSO)、二要素認証(2FA)などでNonceはユーザーの本人性やリクエストの正当性を検証します。
• 暗号プロトコルとデジタル署名:
◦ SSL/TLSハンドシェイクでは、クライアントとサーバーがNonceを交換して本人性を確認します。
◦ AES-GCMなどのアルゴリズムでは、Nonceが初期化ベクトル(IV)として機能し、同じ平文から同じ暗号文が生成されることを防ぎます。
• ブロックチェーンと分散型台帳
これは現在、Nonceの最も代表的な応用であり、「誰がトランザクションを記録するか」「トランザクションの順序」を決定します。
例として、Proof of Work(PoW)マイニング:BitcoinではNonceは32ビットのフィールドで、マイナーはブロックヘッダーのハッシュがターゲット難易度未満になるまでこの値を調整し続けます。
Ethereumのアカウント管理では、各アカウントがインクリメントされるNonceを保持します。これによりリプレイ攻撃(二重送信)を防ぐだけでなく、同じNonceかつ高い手数料で新しいトランザクションを送信することで「詰まった」トランザクションを「置換」または「キャンセル」することも可能です。
Nonceとハッシュ値はブロックチェーン領域で頻繁に登場しますが、本質的には異なるものです。
ハッシュ値はデータの「デジタル指紋」であり、入力によって決まり、サイズは固定です。一方、Nonceはハッシュ出力を変化させるために用いられる一時的な変数です。
時間軸で見ると、ハッシュ値はデータセットの固定識別子として機能し、Nonceは通常一度だけ使用されて破棄されます。
Nonceの生成や管理に不備がある場合、システムは重大なリスクにさらされます。主な攻撃例は以下の通りです。
◦ Nonce再利用攻撃:再利用されたNonceを悪用して暗号保護を破る攻撃です。例えば2021年7月、Anyswap Multichain Router V3クロスチェーンプロトコル で、同じ値(署名成分)で2つのトランザクションが署名され、攻撃者が秘密鍵を特定し、約800万ドルの損失が発生しました。
◦ Nonce予測攻撃:Nonce生成パターンが予測可能な場合、攻撃者がマイニングや認証プロセスを操作できてしまいます。
◦ ブルートフォース攻撃:Nonce値を総当たりで試行し、条件を満たすハッシュを発見する攻撃です。2018年には、Bitcoin Gold(BTG)が複数回の51%攻撃を受け、攻撃者が大量の計算資源をレンタルしてNonceを総当たりし、最終的に388,200 BTGを盗み、約1,800万ドルの損失が発生しました。

スクリーンショット出典:Bitcoin Gold Explorer
これらの攻撃を防ぐためには、高いランダム性を持つ生成アルゴリズム(CSPRNGなど)の採用、厳格な一意性チェックの徹底、暗号ライブラリの定期的な更新が不可欠です。
暗号技術の基盤要素であるNonceの「一度限り」特性は、複雑なインターネット通信や分散型台帳に強固なセキュリティをもたらします。Nonceメカニズムを正しく理解し実装することは、デジタル社会のセキュリティ、透明性、完全性を確保する上で不可欠です。
さらに学ぶ:





