注目★★★★★GitHub Advisory
sm-crypto、デフォルトで SM2 鍵生成が予測可能に、Math.random() と時刻から導出
30秒で把握
- 1sm-crypto v0.4.0、Node.js で SM2 秘密鍵生成が Math.random() と時刻から導出されて予測可能化
- 2window.crypto ではなく globalThis.crypto チェック対応ミスが根因・攻撃者が数回の出力と時刻観測で全秘密鍵を復元可能
- 3既存 SM2 秘密鍵の無効化と CSPRNG 明示指定による再生成を即実施・署名検証ロジック全体の再検証が必須
要約
npm パッケージ sm-crypto (v0.4.0) は SM2 秘密鍵と署名用一時スカラーを単一の RNG インスタンスから生成するが、Node.js 環境では window が undefined のため CSPRNG (Web Crypto) フォールバックが実行されず、Math.random() (V8 xorshift128+・数回の出力から復元可能) と new Date().getTime() (壁時計・推定可能) からのシード充填に落ちる。攻撃者が数個の Math.random() 出力を観測し生成時刻を推定すれば、デフォルトの sm2.generateKeyPairHex() で生成されたすべての秘密鍵と署名スカラーは予測可能となる。ライブラリの既定動作であり、呼び出し側の設定やパラメータを不要とする。
あなたへの影響
この記事が日本のエンジニアに与える影響と、今日取るべきアクションは、Personal会員向けに掲載しています。
クレカ不要・いつでも解約