ホームページ > バックエンド開発 > C++ > 異なるプラットフォーム間で C の Mt19937 PRNG を安全にシードするにはどうすればよいですか?

異なるプラットフォーム間で C の Mt19937 PRNG を安全にシードするにはどうすればよいですか?

DDD
リリース: 2024-12-05 08:45:12
オリジナル
603 人が閲覧しました

How Can I Securely Seed the Mt19937 PRNG in C   Across Different Platforms?

C での Mt19937 PRNG の簡潔、移植可能、および徹底的なシード

std::random_device と time(NULL) の使用の欠点にもかかわらず播種の場合、堅牢でポータブルなシステムを実現できます。解決策:

CSPRNG ベースのシーディング

std::random_device の制限を回避するには、次のような CSPRNG を利用できます:

  • Windows: CryptGenRandom
  • Unix のような: /dev/urandom
  • 最後の手段 (オプション): std::random_device (問題になる可能性があります)

最小限のシード関数:

次のクロスプラットフォーム関数は、さまざまな OS 固有の CSPRNG の最小限のラッパーを提供します:

size_t sysrandom(void* dst, size_t dstlen) {
  #ifdef _WIN32
    // Windows CSPRNG implementation
  #elif defined(__linux__)
    // Linux CSPRNG implementation
  #else
    // POSIX CSPRNG implementation
  #endif
}
ログイン後にコピー

効率的なシード:

利用可能なシステムランダムで、mt19937 PRNG をシードします

std::uint_least32_t seed;
sysrandom(&seed, sizeof(seed));
std::mt19937 gen(seed);
ログイン後にコピー

追加メモ:

  • Linux (3.17) でセキュリティを強化するには、/dev/urandom へのフォールバックで getrandom を使用することを検討してください。
  • OpenBSD では、代わりに getenttropy を使用します。 /dev/urandom.
  • 暗号化セキュリティのため、sysrandom を使用する場合は I/O バッファリングを無効にする必要があります。

以上が異なるプラットフォーム間で C の Mt19937 PRNG を安全にシードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート