Randstorm:2011年~2015年のBitcoinJSウォレットの復元
10年前にブラウザで作成したビットコインウォレットにアクセスできなくなってしまった場合、そのウォレットの脆弱性の原因となっている「Randstorm」という欠陥が、場合によっては自身の資金へのアクセスを回復させる助けになることがあります。ここでは、その仕組み、影響を受ける対象、および回復の方法について解説します。
秘密鍵の強度は、その生成に使用された乱数の質に左右されます。「Randstorm」とは、ある時代のウェブブラウザにおいて、その乱数の強度が想定よりもはるかに低くなってしまった一連の欠陥の総称です。この欠陥により、2011年から2015年の間に生成された多数のビットコインウォレットの鍵は、程度こそ異なりますが、予測可能なものとなってしまいました。 攻撃者にとっては脅威ですが、ロックアウトされたウォレットの正当な所有者にとっては、まさにそのことが復旧を可能にする要因となり得ます。
Randstormとは
Randstormは、2023年11月に復旧専門企業Uncipheredによってその名称が公表されました(同社は2022年、Blockchain.comのウォレットからロックアウトされた顧客の支援を行う中で、この問題を再発見していました)。根本的な原因は、JSBNJavaScriptライブラリのSecureRandom()関数と、当時の主要なウェブブラウザにおけるMath.random()の実装上の脆弱性が組み合わさったことにあります。これらにより、安全なウォレットに求められる水準よりもはるかにエントロピーの低い秘密鍵が生成されてしまいました。
人気のあるBitcoinJSライブラリは、2014年3月までそのJSBNコードに依存していましたが、その時点でメンテナンス担当者がそのコードの使用を中止しました。多くのブラウザウォレットがBitcoinJSを基盤として構築されていたり、その初期のコードをコピーしていたりしたため、この脆弱性はエコシステム全体に広がってしまいました。 重要な点として、その影響は一様ではありません。以前に生成された鍵ほど予測されやすく(2012年3月以前のウォレットが最も容易です)、2014年や2015年にかけて作成されたウォレットになるほど、解読に必要な労力は急激に増加します。
どのウォレットが影響を受けるのか
Randstormは、2011年から2015年の間に、BitcoinJSまたはそれを基盤としたプロジェクトを使用してウェブブラウザ上で最初に生成されたウォレットに影響を及ぼします。これには以下が含まれます:
- 初期のbitaddress.orgおよびBrainWalletのペーパーウォレット/ブラウザウォレット
- CoinPunkやQuickCoin(現在はサービス終了)といったブラウザウォレットプロジェクト
- その当時の初期のBlockchain.info/Blockchain.comのウェブウォレット
- 同じライブラリで生成されたその他のビットコインウォレット、および場合によってはドージコインウォレット
一般的に影響を受けないもの:ハードウェアデバイス(Trezor、Ledger)や、Bitcoin Core などのデスクトップソフトウェア、あるいはその後パッチが適用されたツールによって作成されたウォレットです。最も重要な判断材料は作成時期です。2010年代前半にブラウザ上で作成されたウォレットであれば、確認する価値があります。
私も影響を受けるのでしょうか?
次の3つの質問を自問してください。そのウォレットは2011年から2015年の間に作成されたものか、ウェブブラウザ上で作成されたものか(ハードウェアデバイスやデスクトップソフトウェアではなく)、そしてBitcoinJSを使用していることが知られているサイトやツールで生成されたものか。これら3つすべてに「はい」と答えられる場合は、影響を受ける可能性があるものとみなしてください。アドレスを検証できる独立したチェックツールが存在します。また、ウォレットが作成された時期が該当期間の早いほど、この脆弱性の影響を受ける可能性が高くなります。
Randstormとウォレットの復元
この欠点は、良い面も悪い面もあるのです。もしあなたが正当な所有者であり、単に問題のあるウォレットにアクセスできなくなってしまった場合(パスワードを紛失した、ウォレットをインポートできない、サービスが終了したなど)、ランダム性の低下により、あなたが提供した公開情報から秘密鍵を再構築し、資金の管理権限をあなたに返還できる場合があります。これは、セキュリティ研究者を不安にさせているのと同じ数学的原理ですが、ここではコインの実際の所有者のために活用されているのです。
2つの重要な注意点があります。まず、これは所有者による承認を得た復旧のみを対象としています。当社は、お客様が所有していることを証明できるウォレットのみを扱い、第三者からの依頼には一切対応いたしません。次に、復旧の可否は作成された年によって大きく異なります。2012年のウォレットと2015年のウォレットでは状況が全く異なり、場合によっては復旧が不可能なケースもあります。当社は依頼を受ける前にその点を正直に評価し、成功した場合のみ料金を請求いたします。
もしまだそのウォレットを管理しているなら:資金を移動してください
セキュリティを最優先に。ランダム性の低いアルゴリズムで生成されたと思われるウォレットにまだアクセスできる場合は、その中に資金を残さないでください。最新かつ信頼性の高いソフトウェア(最新のハードウェアウォレットが理想的です)を使用して新しいウォレットを作成し、今すぐすべての資金を移し替えてください。予測可能な鍵は、その脆弱性を誰が発見したかに関わらず、常にリスクとなります。復旧機能は、アクセスできなくなったウォレットのためのものです。影響を受けたウォレットに資金を残しておく理由にはなりません。
これが我々の「弱いランダム性」に関する研究にどのように位置づけられるか
Randstormは、私たちが取り組んでいるいくつかの「弱いランダム性」の問題の一つです。特定のツールがどのように鍵を生成したかを正確に理解し、それを処理可能な検索に変換するという同じ手法は、2014年のイーサリアムプレセール用ウォレット(初期のコードでは初期化ベクトルとしてブラウザのMath.random()を使用していた)や、その他の過去のジェネレーターにも適用されます。 私たちはRandstormについて公表していませんでしたが、長年にわたり、こうした脆弱性を活用し、ウォレットの所有者の方々に資金を回収してきた実績があります。
よくある質問
私のビットコインウォレットは、Randstormの影響を受けましたか?
2011年から2015年の間に、BitcoinJSライブラリを使用したウェブブラウザ、あるいはそれに基づいて構築されたサイト(初期のbitaddress.org、BrainWallet、CoinPunk、QuickCoin、あるいは初期のBlockchain.infoウォレットなど)で最初に生成された場合、影響を受ける可能性があります。この期間の中でも、特に2012年3月以前に作成されたウォレットが最も影響を受けやすいと考えられます。 ハードウェアデバイス、それ以降のソフトウェア、またはオフラインジェネレーターで作成されたウォレットは、一般的に影響を受けません。
Randstormは、ロックされてしまった自分のウォレットの復旧を手助けしてくれますか?
場合によっては。所有者の方が、影響を受ける2011年~2015年のウォレットからロックアウトされてしまった場合、これらのウォレットの脆弱性の原因となっている「ランダム性の低下」という同じ要因により、場合によっては、ご提供いただいた公開情報から秘密鍵を復元できることがあります。これは、所有者ご自身が承認した、ご自身の資金のみを対象とした復旧措置です。この期間の後半に作成されたウォレットについては、復旧の難易度が急激に高まります。
まだ影響を受けたウォレットを管理しています。どうすればよいですか?
資金を移動させてください。ランダム性の低いウォレットが生成されていた場合、最も安全な対処法は、最新かつ信頼できるソフトウェアを使用して新しいウォレットを作成し、直ちにすべての資金をそちらに移すことです。影響を受けている可能性があると思われるウォレットに資金を残したままにしないでください。
ランドストームを発見したのは誰ですか?
Randstormの脆弱性は、SecureRandom関数におけるランダム性の弱さに関する以前の調査結果を踏まえ、2023年11月に復旧専門企業Uncipheredによって特定・公表されました。KeychainXは復旧サービスであり、この脆弱性を公表した当事者ではありません。当社は、ランダム性の弱さに関する分析を行い、影響を受けたウォレットの所有者が自身のウォレットを復旧できるよう支援しています。
Randstormの復旧にはいくらかかりますか?
成功報酬制:成功した場合にのみ、回収額の一定割合を報酬としていただきます。失敗した場合は一切の報酬は発生しません。前払いを求めることは一切なく、お客様が所有していることを証明できるウォレットのみを対象に作業を行います。
2011年から2015年製の古いウォレットにアクセスできなくなってしまいましたか?
ウォレットの種類、おおよその作成時期、およびアドレスをお知らせください。Randstorm方式による復旧が可能かどうかを誠実に判断いたします。資金の復旧に成功した場合のみ、料金をお支払いいただきます。
