Android でセキュアな乱数を生成するコンポーネントに致命的な脆弱性があるため、Android 用の多くの Bitcoin ウォレットが脆弱になる。Bitcoin.orgからこのような発表があったことを受けて、数日間は大混乱が続きました。
Bitcoin ウォレットの脆弱性を引き起こす原因となる問題はさまざまです。
Bitcoinは、正規の所有者しか資金を使えないようにするために ECDSAアルゴリズムを使っています。このアルゴリズムには、ECDSA 署名を計算する乱数が必要ですが、2 種類のメッセージが同じ秘密鍵と同じ乱数で署名されている場合には、秘密鍵の抽出が可能です。これはアルゴリズムを攻撃する既知の手法であり、以前にも PlayStation 3 のマスター鍵など、他の製品のセキュリティを突破するために使われたことがありました。
Android の側では、Android の一部のバージョンで SecureRandomクラスの実装に脆弱性がある可能性があります。今年の初め、SecureRandom クラスによって生成される乱数のランダム性に影響があるとして、2 人の研究者が多数の問題点を指摘しました。
Android バージョン 4.2(Jelly Bean)以降は、SecureRandom クラスが再実装されたため、この固有の欠陥の影響を受けません。
Android の SecureRandom クラスを使う一部の Bitcoin ウォレットアプリは、同じ「乱数」を使って複数のトランザクションに署名していました。トランザクションは Bitcoin ネットワーク上で公開されるため、攻撃者はトランザクションのブロックチェーンをスキャンしてこのトランザクションを探せば、所有者の同意を必要とせずに Bitcoin ウォレットから秘密鍵と資金を取り出すことができます。
SecureRandom クラスの実装方法によっては、他の Android アプリも同様の攻撃に対して脆弱な可能性があります。ノートン モバイルインサイトのデータを見ると、SecureRandom クラスを利用しているアプリは 360,000 以上あり、そのうち 320,000 以上は SecureRandom クラスの使い方が Bitcoin ウォレットと同じです(setSeedを呼び出さない)。影響を受けるアプリは、ほぼあらゆるカテゴリに分布しています。
図. 影響を受けるアプリの種類
Android 用の Bitcoin ウォレットアプリを使用している場合は、そのアプリが脆弱性の影響を受けるかどうかを確認し、Bitcoin.orgのサイトで説明されている手順に従って資金を保護することを強くお勧めします。また、Android 開発者の場合も、最新情報を確認したうえで SecureRandom クラスに基づいた暗号化の実装を見直し、セキュリティリスクを引き起こす可能性があるかどうかを評価することをお勧めします。
* 日本語版セキュリティレスポンスブログの RSS フィードを購読するには、http://www.symantec.com/connect/ja/item-feeds/blog/2261/feed/all/jaにアクセスしてください。