Maison >développement back-end >C++ >Comment puis-je amorcer en toute sécurité le PRNG Mt19937 en C sur différentes plates-formes ?

Comment puis-je amorcer en toute sécurité le PRNG Mt19937 en C sur différentes plates-formes ?

DDD
DDDoriginal
2024-12-05 08:45:12626parcourir

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

Ensemencement succinct, portable et approfondi de Mt19937 PRNG en C

Malgré les lacunes de l'utilisation de std::random_device et de time(NULL) pour l'ensemencement, il est possible d'obtenir un système robuste et portable solution :

Amorçage basé sur CSPRNG

Pour éviter les limitations de std::random_device, nous pouvons utiliser un CSPRNG tel que :

  • Windows : CryptGenRandom
  • Unix-Like : /dev/urandom
  • Dernier recours (facultatif) : std::random_device (peut être problématique)

Ensemencement minimal Fonction :

La fonction multiplateforme suivante fournit un wrapper minimal autour de divers CSPRNG spécifiques au système d'exploitation :

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

Amorçage efficace :

Avec sysrandom disponible, ensemencement du mt19937 PRNG devient :

std::uint_least32_t seed;
sysrandom(&seed, sizeof(seed));
std::mt19937 gen(seed);

Notes supplémentaires :

  • Pour une sécurité renforcée sous Linux (3.17), envisagez d'utiliser getrandom avec un repli vers /dev/urandom.
  • Sur OpenBSD, utilisez getentropy au lieu de /dev/urandom.
  • Pour la sécurité cryptographique, la mise en mémoire tampon d'E/S doit être désactivée lors de l'utilisation de sysrandom.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn