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
Libérer: 2024-12-05 08:45:12
original
603 Les gens l'ont consulté

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
}
Copier après la connexion

Amorçage efficace :

Avec sysrandom disponible, ensemencement du mt19937 PRNG devient :

std::uint_least32_t seed;
sysrandom(&seed, sizeof(seed));
std::mt19937 gen(seed);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal