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はビットコインの価格に影響を与えない

推薦する

初リリース |ビットメイン:チャン・ケトゥアン氏をセンチュリークラウドコアのエグゼクティブディレクターから解任

2020年7月13日、北京ビットメインテクノロジー株式会社は、以下の内容の社内書簡を発行しました。深...

2020年3月のチャートフラクタルが正しければ、イーサリアムの価格は14,000ドルに達する可能性がある

イーサリアムのネイティブ資産であるイーサ(ETH)は、現在の傾向が昨年の傾向と驚くほど似ていることを...

泰康電子保護ラブホームシーズンWeChatレッドパケットアクティビティ期間限定引き換え

国内有数の保険グループである泰康人寿保険は、近年、泰康電子保険プラットフォームを通じて革新的なマーケ...

襄陽市、ビットコイン採掘のための国家電力窃盗事件を捜査・処罰、市内初の事例

原題:襄陽市、ビットコイン採掘のために公営電力を盗んだ同市初の事件を捜査今年に入ってからビットコイン...

欧州裁判所、ビットコイン取引に対するVAT免除を提案

最近、中国人民銀行と10の省庁・委員会が共同で「インターネット金融の健全な発展を促進するための指導意...

フランス中央銀行、初のブロックチェーンテストの詳細を発表

先週、フランス銀行はブロックチェーンに関する取り組みについての新たな詳細をひっそりと発表しました。フ...

中央銀行の法定デジタル通貨は春節後に発行される予定であると報じられている。

12月28日、複数の情報筋が21世紀ビジネスヘラルドの記者に対し、中央銀行のデジタル通貨研究が段階...

ViaBTC プール: ビットコインの暴落前夜にベテランマイナーはどのように活動したのか?

初心者マイナー:「ビットコインの価格が急落すると予測した場合、どうすればいいですか?」老鉱夫:「電気...

Localethereum: OTC取引プラットフォームは安全性を保証します

従来の通貨と比較して、暗号通貨の主な利点の 1 つは、サードパーティのリスクを排除し、取引に分散型ス...

もう一つの勝利!韓国の取引所Korbitがイーサリアムのサポートを発表

日本のコインチェック取引プラットフォームがイーサリアムのサポートを発表して以来、韓国のコルビット取引...

BCHハードフォーク:コミュニティは分裂し、権力に大きな差が

2018 年 11 月 16 日、BCH フォークの両側で起こったコンピューティング能力をめぐる戦争...

詳細な分析 |正直に言うと、95%の人はFilecoinについてあまり理解していない。

1. Filecoin とは何ですか? Filecoin は単なるトランザクション トークンではあ...

暗号通貨の世界がアベンジャーズのゲームだとしたら、サノスは誰になるでしょうか?

昨日の早朝、『アベンジャーズ4』が正式に始まりました。一夜にして、友人たちの輪はネタバレする側とネタ...

ジンベイ MINI-DOGE ドージコイン マイナー

今年、暗号通貨の世界で最もホットな通貨はペットに集中しており、最初に人気が出て最も長い間高値を保った...