문제

현재 부스트는 random_device Linux (아마도 *닉스) 시스템 용 클래스. 다른 OS-ES의 기존 구현을 아는 사람이 있습니까? 이상적으로는 이러한 구현은 오픈 소스입니다.

아무것도 존재하지 않으면 어떻게 Mac OS X뿐만 아니라 Windows 용 비 결정적 RNG를 구현해야합니까? API 호출은이 기능을 제공 할 환경에 존재합니까? 감사합니다 (그리고 모든 질문에 대해 죄송합니다)!

도움이 되었습니까?

해결책

MacOSX에서는 /dev /random을 사용할 수 있습니다 ( *nix이므로).

Windows에서는 아마도 CryptGenrandom 기능을 원할 것입니다. Boost :: random_device의 구현이 있는지 모르겠습니다.

다른 팁

RNG를 사용하고 싶은 것에 달려 있습니다.

일반적으로 종자 데이터를 버퍼에 공급하고, 버퍼의 해시 값을 생성하고, 카운터를 결과에 혼합 한 후, 더 해시 할 것입니다. 해시 기능을 사용하는 이유는 양호한 해시가 더 체계적인 입력 데이터로부터 무작위로 보이는 결과를 얻도록 설계 되었기 때문입니다.

암호화에 사용하려면 상황이 훨씬 더 털이 돌입니다. RNG가 합리적으로 안전한 한계 내에서 반복 패턴을 유지하도록하기 위해 더 많은 후프를 뛰어 넘어야합니다. Bruce Schneier의 "실제 암호화"(RNG에 대한 소개 및 샘플 구현)를 추천 할 수 있습니다. 그는 또한 그의 RNG 관련 물건을 가지고 있습니다. 톱풀 rng.

부스트가 /dev /random에 의존하면 MacOS에서도 작동 할 가능성이 있습니다 (그와 마찬가지로).

Windows에는 OS의 일부로 Cryptoapi가 있으며 Crypto 품질 RNG를 제공합니다.

또한 Modern Intel CPU는 칩에 하드웨어 RNG가 있다고 생각하지만 각 OS에서이를 얻는 방법을 알아 내야합니다. 더 높은 레벨 API를 사용하는 것이 더 나은 내기 일 것입니다.

편집 : 여기에 다음과 같습니다 링크 인텔 RNG의 작동 방식에

OpenSSL에는 괜찮은 것이 있습니다.

#include <openssl/rand.h>
...
time_t now = time(NULL);
RAND_seed(&now, sizeof(now)); // before first number you need

int success = RAND_bytes(...);
if (!success) die_loudly();

RAND_cleanup(); // after you don't need any more numbers

Microsoft cryptoapi에는 Win32에 하나가 있습니다. 몇 가지 기능 호출이 필요합니다. 이러한 각 호출에 2 ~ 5 개의 ARG가 있기 때문에 여기에 세부 사항을 포함하지 않습니다. Cryptoapi는 사용자에게 완전한 로컬 프로필 (C : 문서 및 설정 User Local 설정)이 임의의 숫자를 제공하기 전에 올바르게 설정 해야하는 것 같습니다.

CryptAcquireContext // see docs
CryptGenRandom
CryptReleaseContext
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top