Asayomu Tech
注目★★★★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会員向けに掲載しています。

7日間無料で読む

クレカ不要・いつでも解約

詳細を読む → 元記事へ※ 本文は元記事をご確認ください (asayomu は要約のみ提供)

関連する記事

※ 外部記事の権利は原著作者に帰属します。著作権削除要請は copyright@asayomu.jp までご連絡ください(受領確認 24h・実処理 72h 以内)。