注目★★★★★GitHub Advisory
CryptoJS の乱数生成に致命的欠陥、BIP39 ウォレットの秘密鍵が列挙可能に
30秒で把握
- 1CryptoJS 3.x の乱数生成器が暗号学的に不安全・128/256 ビット要求が 2^39/2^47 に縮小
- 2BIP39 ウォレットの秘密鍵生成に使用されていた・Coinspect が実際の攻撃を再現確認
- 34.0.0 で修正済み・依存だけでは攻撃対象にならず使用関数の追跡が必須
要約
CryptoJS 3.x 系の `WordArray.random()` が暗号学的に安全でない乱数生成器であることが判明した。128 ビット・256 ビット の要求でも実効的な探索空間は 2^39・2^47 に縮小され、一般的なハードウェアで全列挙可能である。Coinspect の調査で、BIP39 リカバリフレーズの生成にこの関数を使うウォレットアプリケーションが存在することが確認された。4.0.0 でネイティブ暗号 API に置き換わったが、脆弱な生成器の後に PBKDF2 やハッシュを適用しても欠落エントロピーは復元されない。依存するだけでは攻撃リスクを持たず、セキュリティ値の生成に該当関数を使う場合に限定される。
あなたへの影響
BIP39 ウォレットを運用するチームは、CryptoJS < 4.0.0 に依存して秘密鍵生成を行っているかを即座に確認し、該当するなら 4.0.0 以上への直ちな更新と既存ウォレットの再生成が必須である。
推奨:暗号ライブラリのバージョンアップは機械的であってはならず、エントロピー生成の具体的な実装を追跡する必要がある。