>백엔드 개발 >C++ >다양한 플랫폼에서 C로 Mt19937 PRNG를 안전하게 시드하려면 어떻게 해야 합니까?

다양한 플랫폼에서 C로 Mt19937 PRNG를 안전하게 시드하려면 어떻게 해야 합니까?

DDD
DDD원래의
2024-12-05 08:45:12648검색

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를 활용할 수 있습니다.

  • 창: CryptGenRandom
  • 유닉스 계열: /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
}

효율적인 시딩:

sysrandom을 사용할 수 있는 경우 mt19937 PRNG 시딩 됩니다:

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

추가 참고 사항:

  • Linux(3.17)의 보안을 강화하려면 /dev/urandom에 대한 폴백과 함께 getrandom을 사용하는 것이 좋습니다.
  • OpenBSD에서는 대신 getentropy를 사용하세요. /dev/urandom.
  • 암호화 보안을 위해 sysrandom을 사용할 때는 I/O 버퍼링을 비활성화해야 합니다.

위 내용은 다양한 플랫폼에서 C로 Mt19937 PRNG를 안전하게 시드하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.