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

推薦する

最高のビットコインマイナー: Antminer S5 レビュー (パート 2)

このレビューの前半では、 Antminer S5の外観、使用方法、技術的な詳細、デフォルト周波数35...

シンガポール、暗号通貨の新たな避難場所

シンガポールは混乱の時代に仮想通貨の安全な避難場所を提供する出典: Decryptアドリアナ・ハマッ...

テザーは3000万USDTが盗まれたと主張、Huobi Pro、OKExなどの取引所は入出金サービスを停止

デジタルトークンUSDTを運営する謎の企業テザーは、3,000万ドル相当のUSDTがハッカーに盗まれ...

福建省初の仮想通貨事件が摘発され、被害額は11万USDTに達した。

最近、福建省で仮想通貨に関わる最初の事件が摘発された。 2019年9月、4か月以上の捜査と証拠収集を...

トルコ財務省は、暗号通貨の研究のために地元の規制当局と協力することを発表

トルコはデジタル資産に対して「様子見」の姿勢を取ることで暗号通貨に友好的な国としての地位を確立してき...

ジョン・ケリー米国務長官:国務省はビットコイン技術研修コースの開設を検討するかもしれない

おそらくアメリカ大使館もすぐにビットコインについて学び始めるだろう。美国国务卿约翰•克里(John ...

米国エネルギー省、ブロックチェーン研究プロジェクトを募集

Baozou Timesのコメント:ブロックチェーンに基づくピアツーピアエネルギーシステムは、エネル...

PoWは時代遅れに見えるかもしれないが、イノベーションは止まっていない

新しい PoW プロジェクト Kaspa は最近好調な業績を上げており、わずか 1 年で 100 倍...

呉季漢:重慶の企業は研究開発を行わず、北京の従業員は重慶に移転しない

呉季漢氏は、自身の友人の間で「ビットメインが本体を変更し、従業員が契約を再締結する」という噂が流れた...

裁判のビデオ公開:大連の男性はビットコイン投資で2000万元を失い、妻と娘を連れて行ったと主張

13日午後、「星海湾大橋から家族3人が転落、裁判に!2千万を失い娘を殺害し妻とともに海に飛び込んだ」...

中国の規制は大きな衝撃を引き起こした!ビットコインはジェットコースターに乗って半日で800ドルまで上昇した

概要: ビットコインの取引価格は一時 3,800 ドルを超え、日中の安値から 800 ドル以上反発し...

チリのビットコイン取引所 Surbtc が地震救済のための募金キャンペーンを開始

チリ政府は、マグニチュード8.3の地震と大津波が同国を襲ったことを受けて、同国の沿岸都市に非常事態...

鉱業における 3 つの大きな死のスパイラル: カナン (深度) に何が起こったかを理解するのに役立つ 2 つのグラフ

数か月前、カナンが上場を祝う壮大な光景がまだ私たちの目の前に残っているようでした。しかし、カナンが発...

研究報告 | DeFiの暴落後、潜在的な危機はまだ明らかになっていない

出典: ハシュパイ著者: LucyCheng 1. 概要2020年上半期にはビットコインが半減し、市...