トレンドトピック
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
ナンスの実装は簡単だと思いますか?もう一度考えてください。
オンチェーン プロトコルを構築する場合でも、オフチェーン インフラストラクチャを構築する場合でも、適切なナンス実装は暗号化セキュリティの最も難しい部分の 1 つです。
リプレイ保護が見た目👇よりも難しい理由を詳しく見てみましょう
2/ まず、デジタル署名を理解しましょう。公開鍵暗号 (BLS など) には、メッセージに署名する秘密鍵と、メッセージを確認する公開鍵があります。
イーサリアムの場合:
アドレス = 公開鍵ハッシュ
メッセージ = トランザクションハッシュ
署名 = 64 バイトの暗号化証明
3/ 問題は、ほとんどの公開鍵暗号プロトコルの計算では、同じメッセージに対して署名を検証できる回数を制限していないことです。有効な署名を取得したら、無限に再生できます。これにより、攻撃をリプレイする扉が開かれます。
4/ ナンスを入力します: リプレイ攻撃を防ぐ「一度使用された番号」。コンシューマーは、nonceを含むメッセージを受信すると、そのnonceが以前に使用されたかどうかを確認します。「はい」の場合、→拒否します。イーサリアム トランザクションはこのパターンを使用します。
5/ しかし、ノンスの実装は一見複雑です。主な要件:
- ナンスは(このチェーンまたは他のチェーンで)再利用可能であってはなりません。
- リプレイ攻撃を永久に防止する必要があります
- ストレージの増加に対応するメカニズムが必要
- フロントランニング攻撃に耐性がある必要があります
6 /素朴な解決策:すべてのナンスをデータベースに永久に保存します。これには2つの大きな問題があります。
a) ストレージの無制限の増加 (特にスパム攻撃の場合)
b) フロントランニング攻撃に対する脆弱性
問題(a)は(b)よりも解きやすいです。まずはストレージに取り組みましょう...
7/ タイムスタンプベースのナンスでストレージの増加を解決!タイムスタンプ + 有効期限を使用します。5 分より古いナンスはデータベースから削除されます。しかし、同じアカウントからの同時メッセージはどうでしょうか?タイムスタンプを共有します。解決策: タイムスタンプ + きめ細かな一意性のためのrandom_bytes。
8/フロントランニングは難しい部分です。悪意のある攻撃者は有効な署名を傍受し、それらをフロントランしてナンスが使用されたものとしてマークし、正当なユーザーの呼び出しが拒否されます。これは、1 つの不正な署名がバッチ全体を拒否した場合、バッチ操作のオンチェーンで問題になります。オフチェーンの場合: TLS 暗号化を使用します。悪意のある攻撃者にナンスや署名を見させないでください。
9/ 粘り強さを忘れないでください!ノンス キャッシュがメモリ内のみにある場合、攻撃者はシステムの再起動後に古いナンスを再生できます。常に nonce 状態を永続ストレージに保持し、起動時にリロードします。メモリのみのキャッシュ = リプレイの脆弱性ウィンドウ。
10/ 消費者ごとにユニークなナンス!複数のユーザーにブロードキャストする場合、それぞれが異なるメッセージ/署名を取得する必要があります。そうしないと、1 人の受信者が元の送信者になりすましてメッセージを転送する中間者攻撃に対して脆弱になります。
11/ 増分ナンス (イーサリアムのように、nonce = prev nonce + 1) にはその場所がありますが、注意してください。これらは、オフチェーン インフラストラクチャに、順序がずれたメッセージ、同期の問題、複雑な回復シナリオなど、大きな課題を引き起こします。メッセージが順番に届く (または届く必要がある) と確信できる場合にのみ使用してください。
概要 - Nonce 実装チェックリスト:
✅ nonces を使用してリプレイ攻撃を防ぐ
✅ 再起動後もnonce状態を保持する
✅ 有効期限メカニズムの実装 (タイムスタンプ + クリーンアップ)
✅ ナンスを受信者ごとに一意にする
✅ 暗号化されたチャネルでフロントランニングから保護
✅ 順序が保証されていない限り、増分ナンスは避けてください
セキュリティは細部に宿ります!🛡️
1.43K
トップ
ランキング
お気に入り