はじめに
本記事は以下のツイートの翻訳転載です。
鍵作成時はmath/rand
の使用を避ける
暗号化や一意な識別子の作成など、鍵の生成が必要なプロジェクトでは、鍵の品質とセキュリティは重要になります。
なぜmath/rand
を避けるべきなのでしょうか。
math/rand
パッケージは擬似的に乱数を生成します。
つまり、乱数の生成方法(と生成時に使用されるシード)を知っていれば、生成される乱数は予測されてしまいます。
現在時刻をシードとして使用したとしても、実行ごとに現在時刻が大きく変動することはないため、予測不可能性(unpredictability (entropy)
)は低いままです。
ではcrypto/rand
はどうでしょうか。
crypto/rand
は、暗号的に安全な数値を生成する方法を提供します。
(OSが提供するランダム性のソースを使用することで、予測しにくいように設計されています)
暗号化、認証、その他セキュリティが重視される処理においては、crypto/rand
の方が適しているでしょう。
おわりに
math/rand
, crypto/rand
については以下にまとめられているのがわかりやすかった。