
BRC-20ウォレットの潜在的な攻撃方法の技術的解析
TechFlow厳選深潮セレクト

BRC-20ウォレットの潜在的な攻撃方法の技術的解析
BRC-20の設計原理から出発し、ビットフィネックスがORDIの引き出しを一時停止した理由を体系的に分析する。
執筆:Trustless Labs
BRC-20のコードとメカニズムを詳細に調査した結果、転送プロセスにおいてhuge holder(大口保有者)に対する攻撃手法が存在することを発見しました。取引所が運用フローに問題がないか確認できるよう支援するとともにホワイトハットの精神を貫くため、我々はテスト済みの手法を用いてバイナンスのORDIホットウォレット資産をロックし、その結果としてバイナンスはORDIの出金を一時停止しました。我々は直ちにバイナンステームへ連絡し、操作の詳細を共有することで、早期の出金再開を支援しました。3時間後、バイナンスはORDIの出金を回復しました。本稿ではBRC-20の設計原理から出発し、システム的にバイナンスがなぜORDIの出金を停止したのかを分析することで、誰もが他の人のBRC-20残高をロックできてしまう理由を明らかにします。
まず、UniSat上でブロックチェーン上で何が起こったかを見てみましょう。

これは本稿執筆時点におけるUniSat上でのバイナンスORDIホットウォレット残高で、Transferable(譲渡可能)、Available(利用可能)、Balance(総残高)の3つに分かれています。ここではBRC-20における3つの基本概念であるTransferable balance(譲渡可能残高)、Available balance(利用可能残高)、Overall balance(総残高)が関係しています。Transferable balanceとは直接送金可能な残高を指し、Available balanceとは将来的にTransferable balanceに変換可能な残高を指し、Overall balanceはこの二つを合計した値であり、当該アドレスの総BRC-20保有量を示します。ここで読者は疑問に思うかもしれません。「なぜバイナンスのORDIホットウォレットにはこれだけの残高があるのに、出金できないのでしょうか?」焦らず、もう少し詳しく見ていきましょう。
BRC-20の送金には2段階の操作が必要です。第一段階で「transfer」のInscriptionを刻印(inscribe)し、第二段階でそのInscriptionを受信アドレスに送信することで、BRC-20の転送が完了します。Inscriptionの移転はUTXOに基づいているため、第一段階でamt(数量)nのInscriptionを刻印すれば、第二段階ではちょうどamt nのBRC-20のみを送信できます。そのため前述のTransferable balanceもまたUTXOに基づいています。わかりやすくするために例を挙げます。Aという新規作成されたアドレスがあり、そこにm個のORDIをmintしたり、他のアドレスからm個のORDIを送金したとします。このときAアドレスのAvailable balanceおよびOverall balanceはともにmとなりますが、Transferable balanceは0になります。次に、AアドレスからBアドレスへn個のORDIを送金する場合、まず第一段階としてAアドレスに対してamtがnのInscriptionを刻印します(ただしn ≦ mの場合に限り、このInscriptionは有効です)。この時点でAアドレスのTransferable balanceはn、Available balanceはm - n、Overall balanceはmとなります。第二段階で、このamt nのInscriptionをBアドレスに送信すると、AアドレスのAvailable balanceおよびOverall balanceはともにm - nに、Transferable balanceは0になります。一方BアドレスではAvailable balanceおよびOverall balanceがn、Transferable balanceは0となり、転送が完了します。

UniSat上に表示されるバイナンスORDIホットウォレットのトランザクション履歴を例にすると、「Method」が「inscribe-transfer」のものが前述の第一段階の操作に該当し、「receive」または「send」が第二段階に対応します。図中の最後の2件のトランザクションは、一つの完全なBRC-20送金を構成しています。それ以外の3件の「inscribe-transfer」トランザクションは、それぞれamtが8,210,108、6,099、2,683のInscriptionを刻印したものであり、これら3つのInscriptionがまとめてTransferable balanceを構成しています。したがって、現在バイナンスのORDIホットウォレットからORDIを送金しようとした場合、これらのamtに限定された3件の送金しか行えず、ユーザーの多様な出金要求には到底応えられません。
このような状況が生じる原因は、誰でも任意のアドレスに対して任意のInscriptionを刻印できることにあります。つまり誰でもBRC-20送金の第一段階操作を実行することで、任意のアドレスのBRC-20残高を事実上ロックできてしまうのです。ではバイナンスは現在直面している問題をどう解決すべきでしょうか?実は簡単です。先述の3つのInscriptionを自分自身に送信すれば、Transferable balanceを再びAvailable balanceに戻すことができます。その後、ユーザーの出金要求に応じて適切なamtのInscriptionを新たに刻印して送金すればよいのです。しかし、これはあくまで緊急の一時的な対処法であり、根本的な解決にはなりません。真に持続可能な解決策を得るには、プロトコル自体を改良し、現行のBRC-20設計に内在する欠陥を修正する必要があります。
TechFlow公式コミュニティへようこそ
Telegram購読グループ:https://t.me/TechFlowDaily
Twitter公式アカウント:https://x.com/TechFlowPost
Twitter英語アカウント:https://x.com/BlockFlow_News













