Heim > Backend-Entwicklung > C++ > Wie kann ich den Mt19937 PRNG sicher in C auf verschiedenen Plattformen einsetzen?

Wie kann ich den Mt19937 PRNG sicher in C auf verschiedenen Plattformen einsetzen?

DDD
Freigeben: 2024-12-05 08:45:12
Original
604 Leute haben es durchsucht

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

Prägnantes, tragbares und gründliches Seeding von Mt19937 PRNG in C

Trotz der Mängel bei der Verwendung von std::random_device und time(NULL) Für die Aussaat ist es möglich, ein robustes und tragbares Gerät zu erhalten Lösung:

CSPRNG-basiertes Seeding

Um die Einschränkungen von std::random_device zu vermeiden, können wir ein CSPRNG verwenden wie:

  • Windows: CryptGenRandom
  • Unix-Like: /dev/urandom
  • Letzter Ausweg (Optional): std::random_device (kann problematisch sein)

Minimale Aussaat Funktion:

Die folgende plattformübergreifende Funktion bietet einen minimalen Wrapper um verschiedene betriebssystemspezifische CSPRNGs:

size_t sysrandom(void* dst, size_t dstlen) {
  #ifdef _WIN32
    // Windows CSPRNG implementation
  #elif defined(__linux__)
    // Linux CSPRNG implementation
  #else
    // POSIX CSPRNG implementation
  #endif
}
Nach dem Login kopieren

Effizientes Seeding:

Mit Sysrandom verfügbar, Seeding des mt19937 PRNG wird zu:

std::uint_least32_t seed;
sysrandom(&seed, sizeof(seed));
std::mt19937 gen(seed);
Nach dem Login kopieren

Zusätzliche Hinweise:

  • Für erhöhte Sicherheit unter Linux (3.17) sollten Sie getrandom mit einem Fallback auf /dev/urandom verwenden.
  • Verwenden Sie unter OpenBSD Getentropy anstelle von /dev/urandom.
  • Aus Gründen der kryptografischen Sicherheit sollte die E/A-Pufferung bei Verwendung von sysrandom deaktiviert werden.

Das obige ist der detaillierte Inhalt vonWie kann ich den Mt19937 PRNG sicher in C auf verschiedenen Plattformen einsetzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage