C# Tips | セキュリティ:暗号学的乱数を生成する

C# C#
スポンサーリンク
スポンサーリンク

暗号学的乱数を生成することは「安全なトークン・鍵・識別子を作るための最重要基盤」です

読者のみなさんが業務システムを開発する際、 暗号学的に安全な乱数(Cryptographically Secure Random Number)を生成することは必須のセキュリティ要件です。

この乱数は次のような場面で使われます。

  • パスワードリセット用トークン
  • API アクセストークン
  • セッション ID
  • CSRF トークン
  • 暗号鍵(AES、RSA など)
  • ランダムな初期化ベクトル(IV)

これらはすべて「推測されてはいけない」ため、 暗号学的に安全な乱数生成器を使う必要があります。

ここでは、初心者でも理解できるように、 実務で使える C# の暗号学的乱数生成ユーティリティを丁寧に解説します。

なぜ“暗号学的乱数”が必要なのか?

Random クラスは絶対に使ってはいけません

初心者がやりがちな誤り:

var rnd = new Random();
int value = rnd.Next();
C#

これは セキュリティ用途では完全に不適切 です。

理由:

  • 予測可能
  • シード値が弱い
  • 総当たり攻撃に弱い
  • トークンや鍵として使うと破られる

攻撃者は Random の生成パターンを簡単に推測できます。

暗号学的乱数とは?

  • 予測不能
  • 再現不可能
  • 攻撃者が次の値を推測できない

C# ではこれを生成するために RandomNumberGenerator を使います。

暗号学的乱数を生成するための正しい API を理解する

C# の正しい乱数生成器:

  • RandomNumberGenerator.GetBytes()
  • RandomNumberGenerator.Fill()

これらは OS の暗号モジュールを利用し、 安全な乱数を生成します。

タイトルとURLをコピーしました