2013年のAndroid SecureRandomの脆弱性

研究・脆弱性

2013年のAndroid SecureRandomの脆弱性

2013年、Androidの乱数生成器は本来あるべきほどランダムではなかった。その結果、この生成器を信頼していたビットコインウォレットは、自身が署名した取引を通じて秘密鍵を漏洩させてしまった。

2026年7月更新 · KeychainX — 2017年よりウォレット復元サービスを提供

これは、プラットフォームレベルの乱数生成の不具合が直接的な金銭的被害をもたらした、画期的な事例です。2013年8月、AndroidのSecureRandomの実装に脆弱性があったため、本来は予測不可能であるはずの値が予測可能となってしまい、影響を受けた端末上のビットコインウォレットから鍵が漏洩しました。このページでは、何が起きたのか、そしてなぜそれが旧式のAndroidウォレットにとって今なお重要なのかについて解説しています。

署名にランダム性が必要な理由

ビットコインウォレットが送金を行うたびに、ECDSAを用いて取引に署名を行いますが、各署名には、予測不可能な新しい乱数、すなわち「ノンセ(nonce)」またはk値が必要です。 ECDSAのセキュリティは、各署名においてその数値が一意かつ秘密であることに完全に依存しています。2つの署名で同じkを再利用すると、数学的な原理により、誰でも2つの公開署名から秘密鍵を計算できてしまいます。これは、暗号学において最も顕著な「わずかなミスで全てを失う」リスクの一つです。

SecureRandomの脆弱性

Androidアプリは、システムのSecureRandomからそのランダム性を取得していました。2013年、特定の条件下では、Androidの実装においてシードが適切に設定されておらず、予測可能または繰り返しの出力が返される可能性があることが判明しました。ビットコインウォレットの場合、これは署名における重要なk値が時折繰り返されることを意味していました。同じウォレットから送信された2つの取引でk値が再利用された場合、観察者はパブリックブロックチェーンから直接、秘密鍵を導き出すために必要なすべての情報を得ることになっていました。

その影響

ビットコインの取引は公開されているため、攻撃者はブロックチェーンをスキャンして、不審な繰り返しノンスを探し出し、露見したウォレットから資金を盗み出すことが可能でした。多くのAndroid向けビットコインウォレットがこの影響を受け、エコシステム側が対応するより先に資金が盗まれてしまいました。公式の対応として、影響を受けたユーザーに対し、新しい鍵を生成してコインを移動するよう呼びかけられ、ウォレットアプリ側も修正パッチをリリースしましたが、繰り返しノンスで既に署名済みの取引については、その鍵が永久に露見してしまっていました。

影響を受けたウォレットの特定

フィンガープリントはオンチェーン上に残ります。これは、同じアドレスから発行され、同じノンスを共有する2つ以上の署名のことです。2013年頃の古いAndroid用ビットコインウォレットで、複数の取引に署名していたものが、classic です。明らかに資金が引き出された形跡がないウォレットであっても、脆弱な取引に署名していた可能性があります。そして、そのウォレットにまだ資金が残っている場合、そのパターンに気づいた誰にでもその資金にアクセスされる恐れがあります。そのため、安全だと安易に決めつけるのではなく、評価を行う価値があるのです。

回復にとってどのような意味を持つのか

所有者にとって、この欠陥は諸刃の剣となります。もし、ご自身の古いAndroidウォレットが、繰り返し使用されるノンスを通じて鍵を露呈してしまった場合、その秘密鍵はご自身の公開取引記録から導き出すことが可能です。これは、所有権の証明があれば、他の方法ではもはやアクセスできない資金を回復するための正当な手段となります。私たちはこれを厳密に「所有者による回復」として扱っています。つまり、クライアントが明らかに所有しているウォレットの署名から鍵を再構築し、アクセスできなくなっていた資金を移動させることです。

そこから得られるより広い教訓

AndroidのSecureRandomに関するインシデントは、ウォレットの安全性はその基盤となる乱数生成の安全性に左右されるという、典型的な教訓です。これはRandstormやMilkSadと同じ類いの問題であり、予測可能あるいは欠陥のある乱数生成源によって、本来堅牢な暗号技術が損なわれてしまうというものです。今回のケースとの違いは、欠陥によって鍵生成ではなく署名処理を通じて鍵が漏洩した点ですが、その原理や所有者向けの復旧手順は同じです。

もし2013年頃のAndroidウォレットをお持ちなら

2013年頃にAndroidウォレットでビットコインを保有しており、その鍵情報や取引履歴をまだ保持している場合は、そのウォレットが侵害されている可能性があると見なしてください。残っている資金はすべて、堅牢な乱数生成機構を備えたウォレットに移すべきです。もしそのようなウォレットへのアクセス権を失ってしまった場合でも、ノンセの脆弱性が、所有者であるあなたにとって再びアクセスを取り戻す手段となる可能性があります。資金を諦める前に、一度検討してみる価値があります。

なぜ、あれから何年経ってもなお重要なのか

2013年の脆弱性を「遠い過去の出来事」として片付けてしまいたくなるかもしれませんが、ビットコインの永続性によって状況は一変します。これまでに送信された脆弱な署名はすべて、当時のままの状態でブロックチェーン上に残っています。つまり、10年前にノンスの繰り返しによって公開されてしまった鍵は、永久に公開されたままとなるのです――ブロックチェーンは決して忘れません。 つまり、その時代の古いAndroidウォレットは、今日でも依然として現実的な懸念事項となっている。残高が残っているウォレットは、そのパターンをスキャンする者なら誰でもアクセス可能であり、所有者がアクセス権を失ったウォレットも、まさにその同じ脆弱性を通じて回復される可能性がある。永続的で公開されたデータにおける欠陥は、決して完全に消滅することはない。だからこそ、これは2013年の脚注としてではなく、このような参考資料に盛り込まれるべきなのである。

当社のドキュメント

KeychainXは、RandstormやMilkSadと並んで、この問題を「弱いランダム性」に関する研究の一環として記録しています。ビットコインコミュニティが2013年に発表した当初の勧告には、詳細な情報が記載されています。当方の焦点は、影響を受けたウォレットを正当な所有者に返還することにあります。もし、アクセスできなくなった古いAndroid版ビットコインウォレットをお持ちであれば、ぜひご確認ください。

よくある質問

自分の署名でノンスが再利用されているかどうか、どうすれば確認できますか?

オンチェーン上では、1つのアドレスから同じノンセ値を持つ2つの署名が出ていることが確認できます。評価の一環として、アドレスの取引履歴を調べて、このようなパターンがないか確認することができます。

2013年のAndroid SecureRandomの脆弱性とは何だったのでしょうか?

AndroidのSecureRandomに、予測可能または繰り返し発生する出力を生じさせる脆弱性が存在した。これを使用していたビットコインウォレットでは、署名間でECDSAのノンセが再利用される可能性があり、その結果、誰でも公開された取引情報から秘密鍵を導き出せるようになっていた。

資金はどのように盗まれたのですか?

攻撃者は、ブロックチェーン上で同じノンスが再利用されている署名をスキャンし、そこから秘密鍵を導き出した後、ウォレットから資金を一掃した――そのすべてが公開データのみを用いて行われた。

以前使っていたAndroidウォレットも影響を受ける可能性はありますか?

2013年頃のもので、複数の取引に署名されている場合、その可能性があります。このリスクは、オンチェーン上で署名ノンスが繰り返し使用されていることとして現れます。残っている資金はすべて移動させるべきです。

これで自分のウォレットを復元できるでしょうか?

もしご自身のウォレットが、ノンスの繰り返しによって鍵を漏洩させてしまった場合、その鍵は公開された取引記録から導き出すことができます。これは、正当な所有者であることが証明されているあなたにとって、正当な復旧手段となります。

回復にはどれくらいの費用がかかりますか?

成功報酬型:ウォレットの回収に成功した場合にのみ、回収額の一定割合を報酬としてお支払いいただき、前払いは一切不要です。

アクセスできなくなった古いAndroid版ビットコインウォレットをお持ちですか?

2013年頃のAndroidウォレットは、ノンスの脆弱性を利用して復元できる可能性があります――所有者であるあなたにとっては。お持ちのウォレットについて、24時間以内に正直な評価をお知らせください。

KeychainXへのお問い合わせ →