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