編集者注: この記事は、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はビットコインの価格に影響を与えない
FX168ニュース:ビットコイン価格は金曜日(1月22日)のアジアセッションでさらに下落し、昨日の不...
Vitalik は最近、「メインネットの分散化を改善し、コンセンサス レイヤーの負荷を軽減するため...
DASH は、ビットコインのソースコードに基づいた分散型暗号化デジタル通貨です。即時決済技術と優れ...
Segwit2x ハードフォークが今年 11 月に実施されない可能性があるという兆候が増えています...
水曜日に公表された連邦公開市場委員会の6月14日~15日の政策会合の議事録によると、連邦準備制度理事...
Ethereum は、開発者が次世代の分散アプリケーションを構築および起動できるようにするプラットフ...
市場が下落していた1月9日の朝、主要な仮想通貨メディアは悪いニュースを報じた。「米国司法省が押収した...
OKExユーザーの皆様へ: Super Bitcoin (SBTC) は、ブロック高 498888 ...
新たな研究は、ビットコイン(BTC)のマイニングと気候変動は相容れないという見解に異議を唱えている。...
昨日、待望のビットコインキャッシュ(BCC/BCH)が発売され、代替デジタル通貨は現在、暗号通貨市場...
現在、多くの国がビットコインの規制の問題を検討しています。暗号通貨は無限の可能性を提供します。しかし...
6月28日、ビットコインキャッシュの提唱者であるハビエル・ゴンザレス氏は、ビットコインマイニング議会...
ビットコイン採掘業界は弱気相場の危機に耐えている。 2017年第4四半期にビットコイン価格が急騰した...
中国人民銀行の公式サイトによると、 1月20日に北京でデジタル通貨セミナーが開催された。会議では、中...
日本のインターネット大手GMOはこれまでに906以上のビットコインと537以上のビットコインキャッシ...