편집하다질문을 더 구체적으로 만들려면:
프로그램이 /dev/urandom
클라우드의 Ubuntu LTS VM에서 최소 1MB/초의 속도로 암호화가 강력한 고품질 난수를 읽을 수 있습니까? 아니면 고려해야 할 함정이 있습니까?
원래:
여러 조건을 충족하면서 난수를 제공하는 구성 요소를 작성해야 합니다.
- 통계적으로 독립적이고 선형적으로 분포된 숫자를 생성하고 업계 표준 통계 무작위성 테스트를 통과해야 합니다.
- 알고리즘은 "암호적으로 강력하다"고 간주되어야 합니다.
- 충분히 빨라야 합니다.
- 대상 시스템은 클라우드에 가상화된 Ubuntu LTS입니다.
/dev/urandom
실제 (하드웨어) RNG(예 :이것) 또는 CSPRNG 코드를 작성하세요. 내가 수집한 정보(아래 참조)에 따르면 이것이 유효한 접근 방식인 것 같지만 누락된 내용이 없는지 확인하고 싶습니다.
~에 따르면Linux 난수 생성기의 문서화 및 분석섹션 8.2:
테스트 결과 /dev/random 및 dev/urandom에 대해 난수를 생성하는 출력 함수가 이상적인 난수 생성기의 특성을 나타내는 데이터를 생성하는 것으로 나타났습니다. 따라서 난수의 엔트로피를 줄이는 구현 오류는 발견되지 않았습니다.
이는 첫 번째 요구 사항을 충족하는 것으로 보입니다.Wikipedia에 인용된 정보에 따르면 Linux 커널은 다음을 사용합니다.정확히 20데이터를 생성하는 알고리즘은
/dev/urandom
다음에서 시작됩니다.버전 4.8. 이 알고리즘은 일반적으로 "암호적으로 안전한" 것으로 간주됩니다.
이는 두 번째 요구 사항을 충족하는 것으로 보입니다.사용 가능한 Ubuntu 시스템이 없지만
{ timeout --foreground 1s cat /dev/urandom; } | wc -c
M1 Mac에서 실행하고 있는데 약 200MB/s로 보고되는데 이는 내 요구 사항에 충분히 빠릅니다. 동일하게 실행온라인2.5배 더 빨라졌습니다.
작은 C++ 프로그램은read()
40KB 버퍼를 반복적으로 채우기 위해 낮은 수준의 호출을 사용하여/dev/urandom
약 1GB/s의 속도를 달성했습니다 .getrandom()
Mac에서는 테스트 할 수 없었지만 Gotbolt로 빠르게 확인해 보면 두 방법 모두 동일한 버퍼 크기에 대해 거의 동일한 성능을 발휘하는 것으로 나타났습니다.
이는 세 번째 요구 사항을 충족하는 것으로 보입니다.이것기사이는 속도 향상이 커널 버전 5.17(및 5.18의 추가 개선)에서 이루어졌음을 나타냅니다. 이는 이미 Ubuntu 22.04.2LTS(커널 버전 5.19 사용)에 있음을 의미합니다.
제가 놓친 주의사항이 있나요?