Qtum 開発者が古典的な PoS プロトコルに対する DoS 攻撃ベクトルを公開

Qtum 開発者が古典的な PoS プロトコルに対する DoS 攻撃ベクトルを公開

編集者注: この記事は、Qtum の共同創設者兼コア開発者の Jordan Earlz によって執筆されました。ジョーダン・アールズは 13 歳でプログラミングを学び始め、18 年の開発経験を持っています。コインレビュアーとして、コミュニティ内の100以上の仮想通貨のデザインをレビューしてきました。彼はセキュリティの専門家でもあり、北米のビットコインコミュニティで最も有名な開発者の一人です。以下の意見は、Qtum Quantum Chain Jordan eaelz の個人的な意見のみを表しています。

最近、Qtum Quantum Chain の開発中に、SCRIPT_VERIFY_ALLOW_EMPTY_SIG の識別子フィールドは必須オプションではないことがわかりました。この脆弱性により、サービス拒否 (DoS) 攻撃が発生する可能性があります。このフィールドはオプションであるため、ユーザーは DoS 禁止をトリガーすることなく無効なトランザクションを作成できます。この脆弱性を悪用すると、攻撃者は高価なトランザクションを作成して検証のために送信し、空の push および checksigverify 操作を送信して、空の署名を検証することができます。このように、システムはエラーメッセージを返し、トランザクションは無効とみなされ、ブロックも無効になります。さらに、コード構造により、コストのかかるトランザクションが 2 回評価されることになります。

方法:

voutなしで非標準トランザクションを作成する

[公開キー]

デュパ

トルスタック

以上

トルスタック

CHECKSIG - 有効でtrueを返す必要があります

DROP –結果をドロップ

FROMALTSTACK

FROMALTSTACK

スワップ

— sigopの上限に達するまでこのプロセスを無限に繰り返す

[空プッシュ]

[公開キー]

チェックシグ

1- スタックに1をプッシュし、トランザクション出力を使用可能にする

ブロックに採掘する(非標準なので、おそらく自分で行う必要があるでしょう)

CHECKSIG が true を返すが、エンコード検証などを実行しないようにソース コードを変更します。

最後に、前回のvoutを使用するブロックをマイニング/ステークします(vinは公開鍵の有効な署名である必要があります)

最後に、現在のブロックは前のブロックの出力値を使用します(vinは公開鍵の有効な署名である必要があります)

最後の空のプッシュ署名のため、ブロックは無効なブロックとみなされ、main.cpp:1328 のコードがトリガーされます。

// 署名を検証する

if (!VerifySignature(txPrev, *this, i, flags, 0))

{

if (フラグ & STANDARD_NOT_MANDATORY_VERIFY_FLAGS) {

// 失敗の原因が

// 必須ではないスクリプト検証チェック、例:

// null 以外のダミー引数;

// そうであれば、DoS保護をトリガーしないでください

// アップグレードされたネットワークと

// アップグレードされていないノード。

if (VerifySignature(txPrev, *this, i, flags & ~STANDARD_NOT_MANDATORY_VERIFY_FLAGS, 0))

エラーを返します("ConnectInputs(): %s の非必須の VerifySignature が失敗しました", GetHash().ToString());

}

script.cpp は異なる操作結果を返す必要があると思います:

OP_CHECKSIGの場合:

OP_CHECKSIGVERIFYの場合:

{

// (署名公開鍵 — bool)

スタックサイズ() < 2 の場合

false を返します。

valtype& vchSig = スタックトップ(-2);

valtype& vchPubKey = スタックトップ(-1);

// 最新のコードセパレータから始まるスクリプトのサブセット

CScript スクリプトコード(pbegincodehash、pend);

// 署名を削除する。署名が自分自身に署名する方法はない。

scriptCode.FindAndDelete(CScript(vchSig));

if ((flags & SCRIPT_VERIFY_STRICTENC) && (!CheckSignatureEncoding(vchSig, flags) || !CheckPubKeyEncoding(vchPubKey)))

false を返します。 //ここでは、最初の実行ではスクリプトが失敗しますが、2回目の実行では失敗しません

bool fSuccess = CheckSignatureEncoding(vchSig, flags) && CheckPubKeyEncoding(vchPubKey) &&

CheckSig(vchSig、vchPubKey、scriptCode、txTo、nIn、nHashType、フラグ);コンセンサスメカニズムに対する一般的な攻撃ベクトル:

このセクションでは、コンセンサス メカニズムが直面する可能性のあるさまざまな攻撃ベクトルをまとめます。一般的に、ネットワーク層とコンセンサス プロトコル層に対する一般的な攻撃には、サービス拒否攻撃 ( DoS )Sybil攻撃が含まれますサービス拒否攻撃は、大量のデータをノードに送信することで、ノードが通常のデータを処理できない状態にします (たとえば、システムが通常のトランザクションを処理できないように、大量の小さなトランザクション要求を送信するなど)。 Sybil 攻撃は、ネットワーク内のほとんどのノードを制御することで、正しいデータ冗長バックアップの有効性を弱めます。

PoW コンセンサス メカニズムでは、マイナーは新しく発見したブロックをすぐにネットワーク全体にブロードキャストします。セルフィッシュ・マイニング攻撃では、不正なマイナーが次の方法でコンピューティング リソースを浪費します。新しい有効なブロックを見つけたときに、それをすぐにネットワーク全体にブロードキャストせず、マイニングを継続して、他のマイナーが新しいブロックをマイニングする前に、より多くのブロックをマイニングしようとします。他のマイナーが有効なブロックをマイニングすると、攻撃者は以前に保持していた有効なブロックをすぐにネットワーク全体にブロードキャストします。しかし、一部の研究者は、そのような攻撃を実際に実行するのは容易ではないと考えています。

短距離攻撃では、攻撃者はシステムのセキュリティを確保するさまざまなリソース(コンピューティングリソース、暗号通貨リソースなど)の一定の割合を制御し、トランザクションを実行した後にロールバックします(トークンの支出やスマートコントラクトの実行など)。(つまり、暗号通貨を複数回支出する二重支出攻撃を実行します。)攻撃者が短距離攻撃を開始する場合、まずロールバックするトランザクションをネットワーク全体に送信し、次にトランザクションが n ブロックの確認情報を受信するまで、前のブロックのフォーク (ロールバックするトランザクションを含まないフォーク) でマイニングを続けます。フォーク上のブロック数が n より大きい場合、攻撃者はロールバックするトランザクションを含むブロックを公開します。このように、フォークされたチェーンの長さは元のメインチェーンよりも長いため、ネットワーク内のすべてのノードはフォークされたチェーンをメインチェーンと見なします。この時点で、トランザクションはロールバックされます。

長距離攻撃では、攻撃者はシステムリソースの一定の割合を制御して、ブロックチェーンのメインチェーンを履歴ブロックまたはジェネシスブロックでフォークし、より多くのブロック報酬を獲得したり、トランザクションをロールバックする目的を達成したりします。このタイプの攻撃は、プルーフ・オブ・ステーク合意メカニズムに基づくシステムを主に標的としています。フォークが発生したときに攻撃者が保有しているトークンはごくわずかであっても、フォーク上のトークンを自由に取引できるため、攻撃者はコインを鋳造し、より長いブロックチェーンを迅速に形成しやすくなります。

対照的に、PoS コンセンサス メカニズムに基づくシステムでは、攻撃者はコインの年齢を使用してノード エクイティを計算し、消費されたコインの年齢の合計によって有効なブロックチェーンを決定できます。未使用のトランザクション出力 (UTXO) の年齢は、コインの年齢にブロックの前の履歴ブロックの数を掛けて計算されます (次の章で紹介する Peercoin など)。コイン エイジ蓄積攻撃では、攻撃者はトークンをさまざまな UTXO に分散し、自分のステークがノード平均よりもはるかに大きくなるまで待機します。このように、攻撃者は継続的にコインを鋳造する可能性が高く、それによってメインチェーンをフォークしたり、トランザクションをロールバックしたりする目的を達成できます(二重支払い攻撃の実装など)。

PoS コンセンサス メカニズムでは、現在のブロックの解決は前のブロックのハッシュ値に依存します。十分な計算能力とエクイティを持つ攻撃者は、h 番目のブロックの仮想マイニング プロセス中にランダムな試行錯誤を通じて h 番目のブロックのハッシュ値に干渉し、h+1 番目のブロックをマイニングできるようになります。これは事前計算攻撃と呼ばれます。この方法を使用すると、攻撃者は継続的にコインを鋳造し、対応するブロック報酬を取得したり、二重支出攻撃を開始したりできます。

<<:  ウクライナではビットコインとダッシュ決済が普及し、加盟店カバー率は80%に達する

>>:  EternalBlueウイルスのアップグレード、OKCoinはビットコインの価格に影響を与えない

推薦する

ロシアのブロックチェーンスタートアップExscudoは、伝統的な金融市場と暗号通貨市場を結びつけることを目指している

クレイジー解説:暗号通貨市場は2009年から登場していますが、KYC、AML、監督などの制限により、...

LCoin: Node.JS で書かれた最初の Litecoin フルノード ツール

BCoin開発チームがLCoinをリリース、ライトコイン決済の大規模商用化への道を開く概要: 多くの...

ファイルコインの暗号経済モデル

パブリック ブロックチェーン ネットワークは、暗号化とインセンティブ構造の組み合わせに依存しており、...

コインファーム、初のブロックチェーンラボを設立、ヨーロッパを世界のブロックチェーン技術の中心地にすることを目指す

最新の報道によると、データ管理に特化したブロックチェーンのスタートアップ企業であるCoinfirmが...

リップルラボのCTOがブロックチェーン技術に対する姿勢を変える

クレイジーな解説: リップルラボの最高技術責任者であるステファン・トーマス氏は、かつてビットコインコ...

鉱業業界の是正の噂が再浮上:実名登録は簡単だが税金計算は難しい

暗号通貨の分野における上流の生産リンクとして、マイナーとマイニングファームは常に極めて控えめな存在で...

BRC20の登録がなぜ増え続けているのでしょうか?

碑文市場は最近非常に活況を呈しており、参入する人もいれば撤退する人もいます。多くの上級暗号通貨専門家...

なぜ大企業はブロックチェーンゲームで勝てないのか?

この記事の著者であるマシュー・スポークは、ブロックチェーンスタートアップNucoの創設者兼CEOです...

起源を遡って:ビットコインとイーサリアムの価値はどこから来るのか?

ビットコインなどの暗号通貨について言及されるたびに、暗号通貨は単なる紙くずの山であるかのように、常に...

中央銀行初のデジタル通貨ビットコインはブロックチェーンによって異なる見方をされている

中国時報の胡金華記者が上海から報告中国は、一方では国内のビットコインブームの中で違法投機家を排除する...

次世代の医療情報技術

クレイジー解説:世界の医療市場シェアは1兆5700億米ドルで、主要株主にはファイザー(474億米ドル...

コメント | SEC の不法利益回収権限は制限されています。暗号通貨のスタートアップ企業はこの恩恵を受けることができるでしょうか?

米国証券取引委員会(SEC)による規制は、暗号通貨のスタートアップにとって常に悪夢であり、規制の不確...

最もホットなトレンドは終わったのでしょうか? Google検索における「ビットコイン」の人気が80%急落

昨年ビットコインが急騰したとき、人々がどれほど熱狂していたか覚えていますか?当時、Googleでの「...

ビットコインは一時4万ドルを下回り、米国の規制当局は暗号通貨が金融システムを脅かすと述べた。

ビットコインは火曜日に3日連続で下落し、8月以来初めて一時4万ドルを下回った。イーサリアムやライトコ...