Haskell でこのECDSA実装を使用しようとしています。15 行目を見ると、k 値がグローバル乱数ジェネレーターを使用するrandomRIOを使用していることがわかります。そのゲッターは、シードを作成するmkStdRNGを使用する theStdGenを使用します。
(壁時計の現在の秒数) * 12345 + (壁時計の現在のピコ秒) + (現在のプログラムで使用されている CPU 時間のピコ秒数)
これは、数十億ドルの価値があるデータに署名するのに十分ですか?
一般に、答えはノーです。ユースケースを検討している場合、唯一の現実的なオプションは、FIPS または Common Criteria 認定の HSM を使用することです。FIPS および CC 評価は最近の日付である必要があり、ECDSA に対して有効である必要があります。専門家だけが鍵管理プロトコルを作成できるようにする必要があります。別の専門家が、このプロトコルと HSM の有用性を検証する必要があります。ECDSA の名前付きパラメーターの選択は、プロトコルの一部である必要があり、軽視すべきではありません。
次に、Haskell RNG について説明します。乱数ジェネレーターは確かに標準に達していないため、現在の実装を使用しないでください。安全でないシードを使用している可能性があり (すでに発見されている可能性があります)、不十分な状態を維持しているようです (コメントで整数を使用するなどと書かれているものは信頼すべきではありません)。新しい乱数または状態を生成するためにハッシュまたは HMAC が使用されていることはわかりません。そのため、この実装が安全な乱数を生成する方法がまったくわかりません。
インターネットをざっと見てみると、私の疑念が強まりました。
http://tommd.wordpress.com/2010/09/02/a-better-foundation-for-random-values-in-haskell/
執筆時点での実験的なタグに注意してください。
http://hackage.haskell.org/package/crypto-random-api-0.2.0/docs/Crypto-Random-API.html
何十億ドルもの価値のあるものとの契約を本当に開発している場合は、自分をマネージャーにして専門家を雇ってください (そして専門家の話を聞いてください)。