MtGoxチャレンジとSpambot Smith

ここで繰り返し書かれているよう 、仮想暗号通貨ビットコインは苦労しています。 数週間、最も古くかつかつて最大のMtGox取引所のユーザーは、ビットコインを取引所から引き出そうとして困難を経験しました。 過去数日間で、ビットコインが経験した困難は新しいレベルに達しました。



MtGoxの問題は、適切な免許なしでの違法送金活動の調査に関連して米国の銀行口座が逮捕された昨年の春に始まったことに注意すべきです。 それ以来、取引所は信頼できる銀行パートナーを見つけることができず、従来の通貨での支払いを定期的に遅らせています。 これにより、他の取引所と比較して顕著な為替レート差が生じ、 場合によっては最大25%に達しました



ただし、ビットコインの引き出しに関しては、取引所はこれらの問題を初めて経験していません。 Bitcoin Foundationの主要な開発者の1人であるGregory Maxwell (リンク)によると、昨年9月に取引所はすでに同様の問題を経験しています。



最初に、9月にスタックしたトランザクションを報告する人々を聞いた。 私はそれを調べ、Mtgoxが未熟なコインを使っていたと判断しました。 (マイニングから)新しく生成されたビットコインは、ブロックチェーンの深さが少なくとも100ブロックになるまで使用できません。 これにより、チェーンが再編成された場合に資金が永久になくなることを防ぎます。 magicaltux [注:マークカルペレス]にpingを送信し、2、3回試行して彼を捕まえました。 問題の実際の性質が注目される前に、彼らはこれを解決しようとして行き止まりで時間を無駄にしたと思います。例えば、手数料が十分に高くないと誤って信じて取引手数料を引き上げました。

Mtgoxは、コインが新たに生成されたかどうか、またはソフトウェアの高さを追跡していませんでした。 このデータを含めることは簡単な変更ではないようです。リスクの高い金融ソフトウェアの場合、些細な変更でも多くの作業が必要です。 私は回避策(基本的には、最も古いコインを使うようにしてください)を提案しましたが、私が知る限り、彼らはそれを実装し、効果的でした。




MtGoxは、Bitcoin Foundationが提供するリファレンスソフトウェアを使用して、ビットコインでの操作を実行しません。 彼らによると、参照ソフトウェアはそのボリュームに適していません。 代わりに、彼らは独自のウォレットを使用しています。噂によると、これはマーク・カーペレス(別名MagicalTux)によって個人的にPHPで書かれたものです。 暗号通貨を引き出すとき、彼らは最近生成されたビットコイン(100未満の確認)を使用しようとしましたが、これはプロトコルルールによって禁止されています。 その結果、これらのトランザクションはブロックされ、確認されませんでした。 この問題を根本的に解決するには、既存のソフトウェアを大幅にやり直し、コインの各部分の確認回数を追跡する必要があります。 ほとんどの場合、MtGoxは急進的な変更を行うことを敢えてせず、代わりに発信トランザクションのコイン選択アルゴリズムを変更することで問題を回避しました-受信した最も古いコインを優先します。



彼らが今回遭遇した問題はやや似ています。 これらの問題は、明らかに11月初旬に始まり、ウォレット内のビットコインが失われた発信トランザクションで「スタック」するにつれて、ますます悪化しています。 ロシアで起こったことの多かれ少なかれ通常の説明は、すでにここで以前に公開されまし 。 私はいくつかのコメントをします。



第一に、順応性のあるトランザクションは「柔軟」ではなく、「柔軟」(マレット=ハンマー)、または定義により変換される場合、「変形可能」です。



第二に、多くの発信MtGoxトランザクションは、最初は完全に正しくなく、ほとんどのネットワークノードによってブロックされました。これは、不正な形式の署名が含まれていたためです。 このロックは比較的最近クライアントの参照実装に追加され、明らかに、すべてのノードとすべてのマイナーがソフトウェアを更新できなかったため、MtGoxはしばらくの間トランザクションカーブを送信し続けました。 さらに、MtGoxはいくつかのマイニングプールに直接アクセスできるため、ネットワークブロックトランザクションをバイパスできます。



何らかの方法で、誰かが彼のトランザクションが通過しなかった理由を注意深く見て、それを修正し(脆弱性により署名を変更せずにこれを行うことができます)、送信しました。 トランザクションが(コンテンツではなく)形式で変更されたため、そのハッシュも変更され、mtGoxが追跡に使用していました。 ユーザーは、コインが自分の住所に到着したことを確認しましたが、MtGoxは取引が確認されていないと信じ続けました。 後で、自動または手動で(私は自動だと思う傾向があります)、MtGoxは同じユーザーに新しいトランザクションを送信しようとします。 この新しいトランザクションで「スタックされていない」コイン(最初はそれほど多くなかったコイン)を使用する場合、トランザクションが再び成功する(偶然、署名が正しい形式であった)か、ユーザーがトランザクションを再度「改”」する必要があり、新しい部分を受け取りましたあなたの住所へのコイン。



したがって、この脆弱性は明らかになり、可能になり、簡単に悪用されます。 ハッカーは、ネットワークによってすでにブロックされていた元の不正なトランザクションと競合する必要はありませんでした。トランザクションを「偽造」する巧妙な方法を発明する必要はありませんでした(その多くはもはや利用できません)。 彼はトランザクションを「修正」するだけでした。



ハッシュを使用してトランザクションを追跡できないという事実は、 2011年4月に知られていました 。 少し後に、対応する変更が参照ソフトウェアに加えられ、トランザクションIDのみに依存せず、対応する出力を消費するトランザクションを監視しました(これらの変更は不十分でした)。 それにもかかわらず、2014年1月末時点で、MtGoxの開発者は何が起こっているのか分かりませんでした。 数日間の調査の後、2月10日にMtGoxは最終的にすべての発信トランザクションをブロックし、そのWebサイトに発表を公​​開しました 。 その中で、彼らは問題の技術的な説明を簡潔に示し、これはプロトコルの重大なエラーであり、すべての交換とオンラインウォレットは攻撃を受けやすいと述べています。 攻撃を実装しやすくしたクライアントの独自の実装の問題については、発表に言葉がありません。 MtGoxは、誰もがすべての問題を非難するために急いでいたので、自分の欠陥、低迷を謝罪することすら忘れていました。



この声明の後に、MtGoxが最初にいくつかの主要な開発者から個人的応答しました 。なぜ公式のビットコイン財団の応答声明です。 彼らは皆、これがプロトコル設計における既知の欠陥であることを認めていますが、決して重大ではありません。 参照ソフトウェアにはこれらの困難に対処するためのコードが長く含まれており、MtGoxは独自のソフトウェアを修正する必要があることが示されています。 多くの人は、なぜこれが取引所からの資金の引き出しをブロックする口実として使用されるのか疑問に思っています。



多くのビットコイナーは、MtGoxのこの声明の主な目的は、ビットコインの損失をカバーするために価格を不安定化することであり、ビットコインを自分の取引所で低価格で購入し、他の取引所でアービトラージすることであることに同意します。



しかし、楽しみは昨日始まりました。



誰かがBitcoinネットワーク上で1つまたは複数のノードを立ち上げ、すべてのトランザクションをインターセプトし、それらを産業規模で「転送」します。 いくつかのレポートによると、2月11日と12日にのみ、約30,000件のトランザクションが「変異」しました。 ビットコインプロトコルでは、この方法でお金を盗むことはできません。ハッカーの唯一の目標は、明らかに、価格をさらに不安定にすることを目的として、ビットコイン全体を攻撃することです。



前述したように、参照プロトコルの実装はtx id(トランザクションハッシュ)に依存して出力の使用状況を追跡しません。 ただし、鍛造と完全に互換性のない機能が1つあります。 現在、bitcoin-qtでは、確認を待たずに、トランザクションからの「変更」をすぐに使用できます。 これは安全な慣行であると信じられていました-変化は常に私たち自身の財布に入るからです。 変更を作成するトランザクションが確認された場合、変更を消費する後続のトランザクションは正しくなり、ウォレットの全体的な残高に違反することはありません。 最初のトランザクションが確認されない場合、変更を費やしたトランザクションは意味がありません。 tx idが変更された偽造トランザクションは確認できますが、依存するトランザクションのtx idが変更されたため、変更を消費するトランザクションが不正確になるため、トランザクションの偽造はこの仮定に対して独自の調整を行います。



したがって、誰かが自分の財布から資金を積極的に使うと、残高が正しく反映されず、一部の取引が完了しないという事実に直面する可能性があります。 ビットコインは失われません! ただし、これは使用済みビットコインの会計処理に混乱をもたらし、「スタック」トランザクションは手動で削除するのが簡単ではないため、特定の困難を生じます。



この問題を緊急に解決するためのパッチがすでに準備されています。 解決策は簡単です。少なくとも1つの確認が受信されるまで変更を費やさないでください。 スタックしたトランザクションを手動で「クリア」するコマンドも追加されます。 長期的には、 「偽造」トランザクションの可能性最小限に抑えることが提案されましたが、これを完全に排除できるかどうかはまだ明確ではありません。



新しいリリースがリリースされるまで、リファレンスbitcoin-qtを使用してビットコインを転送しないことをお勧めします。 ただし、これを緊急に行う必要がある場合は、少なくとも1つの確認を待ってから新しいトランザクションを作成してください。



更新:Bitcoin Foundationはついに、Bitcoinの0.9.0リファレンスの新しいリリースを作成しました。



All Articles