드라이브

RDRAND

RDRAND ("read random"(읽기 랜덤) (인텔 시큐어테크놀로지,[1] 이전Bull[2] Mountain)는 온칩 엔트로피 [3]소스에 의해 시드된 인텔 온칩 하드웨어 난수 생성기에서 난수를 반환하는 명령입니다. RDRAND Ivy Bridge 프로세서에서[a] 사용할 수 있으며 Intel 64 및 IA-32 명령어세트 아키텍처의 일부입니다.AMD는 2015년 [5]6월에 이 명령의 지원을 추가했습니다.

난수 생성기는 NIST SP 800-90A,[6] FIPS 140-2 및 ANSI X9.[3]82와 같은 보안 및 암호화 표준을 준수합니다.또, 인텔은 2012년에 Cryptography Research Inc.에 난수 발생기의 검토를 의뢰해, 인텔의 Ivy Bridge Digital Random Number [7]Generator의 분석 논문을 작성했습니다.

RDSEED 와 유사하다RDRAND엔트로피 생성 하드웨어에 대한 낮은 수준의 액세스를 제공합니다.RDSEED제너레이터 및 프로세서 명령rdseed는 인텔 Broadwell CPU[8] AMD Zen [9]CPU에서 사용할 수 있습니다.

개요

CPUIDAMD와 인텔의 양쪽 CPU에서 명령어를 사용하여 이 명령어를 사용할 수 있는지 여부를 확인할 수 있습니다.RDRAND명령어가 지원됩니다.CPUID 표준 함수를 호출한 후 ECX 레지스터의 비트 30을 설정합니다.01HAMD 프로세서는 같은 [11]테스트를 사용하여 기능을 확인합니다.[10] RDSEED인텔의 CPU에서도 같은 방법으로 가용성을 확인할 수 있습니다.한다면RDSEEDEBX 레지스터의 비트 18은 CPUID 표준 함수를 호출한 후에 설정됩니다.07H를 클릭합니다.[12]

opcodeRDRAND0x0F 0xC7그 뒤에 수신인 레지스터를 지정하고 옵션으로 64비트모드의 REX 프리픽스와 조합하는 ModRM 바이트가 표시됩니다.[13]

인텔 시큐어 키는 인텔의 이름으로,RDRAND명령 및 기초 RNG(Random Number Generator) 하드웨어 구현.[3] 개발 중에 코드네임 [14]"Bull Mountain"이 지정되었습니다.인텔에서는, RNG 를 「디지털 난수 생성기」(DRNG)라고 부릅니다.제너레이터는 하드웨어 엔트로피 소스에 의해 생성된 256비트 원시 엔트로피 샘플의 쌍을 취하여 Advanced Encryption Standard(AES; 고도 암호화 표준)(CBC-MAC 모드) 컨디셔너에 적용합니다.이러한 샘플은 단일 256비트 조건부 엔트로피 샘플로 환원됩니다.NIST SP 800-90A에서 정의된 CTR DRBG라고 하는 결정론적 랜덤 비트 생성기는 컨디셔너로부터의 출력에 의해 시드되며, 암호화적으로 안전한 랜덤 번호를 요구 애플리케이션에 제공합니다.RDRAND사용설명서.[3][14]시드 값을 변경하기 전에 하드웨어는 최대 511개의 128비트샘플을 발행합니다.사용방법RDSEEDoperation을 사용하면 AES-CBC-MAC에서 조건부 256비트샘플에 액세스할 수 있습니다.

RDSEEDBroadwell CPU에서 사용할 수 있는 다른 의사 난수 [15]생성기를 시드하기 위한 명령이 인텔 시큐어 키에 추가되었습니다.의 엔트로피 소스RDSEED명령어는 셀프타이밍 회로 상에서 비동기적으로 실행되며 실리콘 내의 열노이즈에 의해 얻을 [16]수 있는 유효 6.4 Gbit/s보다 느린 3 GHz의 속도로 비트의 랜덤 스트림을 출력합니다.RDRAND(두 레이트는 모든 코어와 [17]스레드 간에 공유됩니다).RDSEED명령어는 임의의 폭의 소프트웨어 PRNG를 시드하기 위한 것입니다만,RDRAND는 고품질의 랜덤 번호만을 필요로 하는 애플리케이션을 대상으로 하고 있습니다.암호화 보안이 필요하지 않은 경우 일반적으로 Xorsshift 등의 소프트웨어 PRNG가 더 [18]빠릅니다.

성능

인텔 Core i7-7700K, 4500MHz(45×100MHz) 프로세서(Kaby Lake-S 마이크로아키텍처), 싱글RDRAND또는RDSEED명령어는 오퍼랜드의 크기(16/32/64비트)에 관계없이 110ns 또는 463클럭 사이클이 소요됩니다.이 클럭 사이클 수는 Skylake 또는 Kaby Lake 마이크로아키텍처를 탑재한 모든 프로세서에 적용됩니다.Silvermont 마이크로아키텍처 프로세서에서는 오퍼랜드 크기에 관계없이 각 명령어는 약 1472 클럭 사이클이 소요됩니다.Ivy Bridge 프로세서에서는RDRAND최대 117클럭 [19]사이클이 소요됩니다.

AMD Ryzen CPU에서는 16비트 또는 32비트 오퍼랜드의 경우 각 명령어는 약 1200클럭 사이클, 64비트 오퍼랜드의 [19]경우 약 2500클럭 사이클이 소요됩니다.

천체물리학적 몬테카를로 시뮬레이터는 다음을 사용하여 10개의 64비트 난수를 생성하는7 시간을 조사했다.RDRAND쿼드코어 인텔 i7-3740 QM 프로세서 탑재.그들은 C의 구현이RDRANDC의 기본 난수 생성기보다 약 2배 느리고 메르센 트위스터보다 약 20배 느렸다.의 Python 모듈이지만RDRANDPRNGCSPRNG의 성능을 비교할 수 없지만 [20]Python의 기본 난수 생성기보다 20배 느린 것으로 확인되었습니다.

인텔이 2020년 6월에 발표한 마이크로코드 업데이트는 CrossTalk의 취약성을 완화하기 위해 설계되었으며 (아래 보안 문제 섹션 참조)의 퍼포먼스에 악영향을 미칩니다.RDRAND그리고.RDSEED보안 제어가 강화되어 있습니다.경감기능이 적용된 프로세서에서는 영향을 받는 각 명령으로 인해 레이텐시가 추가되고 동시에 실행됩니다.RDRAND또는RDSEED효과적으로 직렬화할 수 있습니다.인텔은 이러한 보안 체크를 완화하는 메커니즘을 도입하여 대부분의 시나리오에서 퍼포먼스에 미치는 영향을 줄였지만 인텔 프로세서는 기본적으로 [21]이 보안 완화를 적용하지 않습니다.

컴파일러

Visual C++ 2015 에서는, 다음과 같은 내장 래퍼의 서포트를 제공합니다.RDRAND그리고.RDSEED 기능하고 있습니다.[22]GCC 4.6+ 및 Clang 3.2+는 다음을 위한 고유 기능을 제공합니다.RDRAND언제-mrdrnd플래그[23]지정되어 있습니다.__RDRND__조건부 컴파일을 가능하게 합니다.새로운 버전에서는 추가 기능 제공immintrin.h인텔 C 컴파일러 버전12.1+ 와 호환성이 있는 함수로 정리합니다.이러한 함수는 파라미터가 가리키는 위치에 랜덤 데이터를 쓰고 성공 [24]시 1을 반환합니다.

적용들

암호화로 보호된 랜덤 번호를 생성할 수 있는 옵션입니다.RDRAND그리고.RDSEEDOpenSSL을 사용하여 통신 보안을 확보합니다.

의 과학적 응용RDRAND천체물리학에서 [25]찾을 수 있습니다.질량이 작은 별과 갈색왜성의 전파를 관측한 결과 많은 별들이 전파를 폭발시키는 것으로 밝혀졌다.이러한 전파는 자기 재연결에 의해 발생하는데, 이는 태양에서 태양 플레어를 일으키는 것과 같은 과정이다. RDRAND몬테카를로 시뮬레이터에 대량의 난수를 생성하고 갈색왜성의 물리적 특성과 이를 관찰하는 계측기의 효과를 모델링하는 데 사용되었다.그들은 갈색왜성의 약 5%가 강한 전파폭발을 일으킬 만큼 충분히 자성을 띤다는 것을 발견했다.또, 퍼포먼스도 평가했습니다.RDRANDC [20]및 Python 명령어를 다른 난수 생성기와 비교합니다.

접수처

2013년 9월,[26] NSA가 암호화를 약화시키려는 노력을 폭로하는 뉴욕 타임즈 기사에 대응하여,Tsodore Tso가 공개적으로 게시한 것은RDRAND위해서/dev/randomLinux 커널:[27]

인텔 엔지니어의 압력에 저항한 것이 매우 기쁩니다./dev/random에만 의존하다RDRAND설명.[New York Times[26] 기사]에서 인용하자면:"올해까지 Sigint Enabling Project는 칩 메이커와 협력하여 백도어를 삽입함으로써 기업 및 정부의 정보를 스크램블하는 암호화 칩의 일부를 발견했습니다."칩 내부에 밀봉된 실장을 사용하는 하드웨어 난수 발생기에만 의존하는 것은 좋지 않습니다.

라이너스 토발즈는 사용의 우려를 일축했다.RDRANDLinux 커널을 사용하여 엔트로피의 유일한 소스로 사용되는 것이 아님을 지적했습니다./dev/random로부터 수신된 값을 조합함으로써 엔트로피를 향상시키는 데 사용됩니다.RDRAND무작위성의 [28][29]다른 원천들과 함께요.그러나 Defuse Security의 Taylor Hornby는 백도어가 도입되면 Linux 난수 생성기가 안전하지 않을 수 있음을 증명했습니다.RDRAND특히 이를 사용하는 코드를 대상으로 하는 명령입니다.Hornby의 개념 실장은 버전 3.13 이전의 [30][31][32]수정되지 않은 Linux 커널에서 작동합니다.이 문제는 [33]2013년에 Linux 커널에서 완화되었습니다.

개발자가 FreeB를 변경했습니다.SD 커널을 사용하지 않음RDRANDVIA PadLock을 통해 "For FreeB"라는 코멘트를 얻을 수 있습니다.SD 10, 역추적하여 삭제하겠습니다.RDRANDPadlock은 출력을 /dev/random으로 직접 전달하지 않고 백엔드하여 Yarrow에 공급합니다.하드웨어 난수 생성기는 계속 액세스할 수 있습니다.즉,RDRANDPadlock 등은 인라인 어셈블리 또는 사용자 랜드에서 OpenSSL을 사용하여 필요에 따라 직접 사용하지만 더 [28][34]이상 신뢰할 수 없습니다."FreeBSD /dev/random은 Fortuna 및 RDRAND를 FreeBSD [35]11부터 사용합니다.

보안 문제

2020년 6월 9일, 암스테르담 Vrije Universityit의 연구원들은 CrossTalk (CVE-2020-0543)라는 이름의 사이드 채널 공격을 발표했는데, 이 공격은 다음과 같은 영향을 미쳤다.RDRAND인텔 프로세서에 [36]탑재되어 있습니다.그들은 하드웨어 Digital Random Number Generator(DRNG; 디지털 난수 생성기)의 출력이 모든 코어에 공유되는 스테이징 버퍼에 저장된다는 것을 발견했습니다.이 취약성으로 인해 영향을 받는 프로세서에서 실행 중인 악성 코드를 읽을 수 있습니다.RDRAND그리고.RDSEED명령어는 인텔 SGX [36]엔클로저 내에서 실행되는 어플리케이션 등 같은 프로세서의 다른 코어 상에서 실행되는 공격 대상 어플리케이션의 결과입니다.연구진은 하나의 서명 작업 [36]후 별도의 CPU 코어에서 실행되는 SGX 인클로저에서 완전한 ECDSA 키를 추출하는 개념 증명(Proof-of-Concept[37])을 개발했습니다.이 취약성은 공유 호스팅 환경 등 동일한 프로세서에서 신뢰할 수 없는 코드가 신뢰할 수 있는 코드와 함께 실행되는 시나리오에 영향을 미칩니다.

인텔에서는 CrossTalk의 취약성을 특수 레지스터 버퍼 데이터 샘플링(SRBDS)이라고 부릅니다.이 조사에 응답하여 인텔은 이 문제를 완화하기 위해 마이크로코드 업데이트를 발표했습니다.갱신된 마이크로코드에 의해 오프코어 액세스가 기밀 조작(특히,RDRAND,RDSEED,그리고.EGETKEY순서: 완료되어 스테이징 버퍼가 [21]덮어쓰기되었습니다.SRBDS 공격은 MSR을 읽는 명령 등 다른 명령에도 영향을 미치지만 인텔은 퍼포먼스에 대한 우려와 [21]명령 결과의 기밀성이 낮아졌기 때문에 보안 보호를 추가 적용하지 않았습니다.데스크탑, 모바일, 서버 프로세서를 포함한 다양한 인텔 프로세서가 2012년부터 [38]2019년까지 출시되었습니다.보안 검사로 인한 지연 시간 증가와 코어 전체에서 영향을 받는 명령의 효과적인 직렬화로 인해 영향을 받는 명령어를 사용할 때, 특히 멀티 스레드 애플리케이션에 의해 병렬로 실행될 때, 완화 자체만으로도 성능에 부정적인 영향을 미쳤습니다.인텔에서는 옵트아웃 옵션을 도입하여IA32_MCU_OPT_CTRL각 논리 프로세서의 MSR: SGX 인클로저 [21]외부에서 실행되는 명령에 대한 추가 보안 검사를 비활성화하여 성능을 향상시킵니다.

「 」를 참조해 주세요.

메모들

  1. ^ 일부 Ivy Bridge 버전에서는 버그로 인해 RDRAND 명령에 의해 부정 명령 [4]예외가 발생합니다.

레퍼런스

  1. ^ "What is Intel® Secure Key Technology?". Intel. Retrieved 2020-09-23.
  2. ^ Hofemeier, Gael (2011-06-22). "Find out about Intel's new RDRAND Instruction". Intel Developer Zone Blogs. Retrieved 30 December 2013.
  3. ^ a b c d "Intel Digital Random Number Generator (DRNG): Software Implementation Guide, Revision 1.1" (PDF). Intel Corporation. 2012-08-07. Retrieved 2012-11-25.
  4. ^ Desktop 3rd Generation Intel Core Processor Family, Specification Update (PDF). Intel Corporation. January 2013.
  5. ^ "AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions" (PDF). AMD Developer Guides, Manuals & ISA Documents. June 2015. Retrieved 16 October 2015.
  6. ^ Barker, Elaine; Kelsey, John (January 2012). "Recommendation for Random Number Generation Using Deterministic Random Bit Generators" (PDF). National Institute of Standards and Technology. doi:10.6028/NIST.SP.800-90A. Retrieved September 16, 2013. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  7. ^ Hamburg, Mike; Kocher, Paul; Marson, Mark (2012-03-12). "Analysis of Intel's Ivy Bridge Digital Random Number Generator" (PDF). Cryptography Research, Inc. Archived from the original (PDF) on 2014-12-30. Retrieved 2015-08-21.
  8. ^ Hofemeier, Gael (2012-07-26). "Introduction to Intel AES-NI and Intel SecureKey Instructions". Intel Developer Zone. Intel. Retrieved 2015-10-24.
  9. ^ "AMD Starts Linux Enablement On Next-Gen "Zen" Architecture - Phoronix". www.phoronix.com. Retrieved 2015-10-25.
  10. ^ "Volume 1, Section 7.3.17, 'Random Number Generator Instruction'" (PDF). Intel® 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes: 1, 2A, 2B, 2C, 3A, 3B and 3C. Intel Corporation. June 2013. p. 177. Retrieved 24 June 2013. All Intel processors that support the RDRAND instruction indicate the availability of the RDRAND instruction via reporting CPUID.01H:ECX.RDRAND[bit 30] = 1
  11. ^ "AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions" (PDF). AMD. June 2015. p. 278. Retrieved 15 October 2015. Support for the RDRAND instruction is optional. On processors that support the instruction, CPUID Fn0000_0001_ECX[RDRAND] = 1
  12. ^ "Volume 1, Section 7.3.17, 'Random Number Generator Instruction'" (PDF). Intel® 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes: 1, 2A, 2B, 2C, 3A, 3B and 3C. Intel Corporation. June 2013. p. 177. Retrieved 25 October 2015. All Intel processors that support the RDSEED instruction indicate the availability of the RDSEED instruction via reporting CPUID.(EAX=07H, ECX=0H):EBX.RDSEED[bit 18] = 1
  13. ^ "Intel® Digital Random Number Generator (DRNG) Software Implementation Guide". Software.intel.com. Retrieved 2014-01-30.
  14. ^ a b Taylor, Greg; Cox, George (September 2011). "Behind Intel's New Random-Number Generator". IEEE Spectrum.
  15. ^ John Mechalas (November 2012). "The Difference Between RDRAND and RDSEED". software.intel.com. Intel Corporation. Retrieved 1 January 2014.
  16. ^ Mechalas, John. "Intel Digital Random Number Generator (DRNG) Software Implementation Guide, Section 3.2.1 Entropy Source (ES)". Intel Software. Intel. Retrieved 18 February 2015.
  17. ^ https://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide은 800메가바이트, 즉 초당 6.4기가비트라고 말한다.
  18. ^ Xorsshift의 가장 단순한 64비트 구현에는 3개의 XOR과 3개의 시프트가 있습니다.이러한 XOR을 2GHz에서 4개의 코어로 긴밀하게 루프하여 실행할 경우 스루풋은 80Gb/s입니다.실제로는 로드/스토어 오버헤드 등에 의해 감소하지만 여전히 6.4 Gb/s를 초과할 가능성이 있습니다.RDRAND반면, 품질은RDRAND의 수치는 Xorsshift와 같은 소프트웨어 PRNG의 수치보다 커야 합니다.
  19. ^ a b http://www.agner.org/optimize/instruction_tables.pdf[베어 URL PDF]
  20. ^ a b Route, Matthew (August 10, 2017). "Radio-flaring Ultracool Dwarf Population Synthesis". The Astrophysical Journal. 845 (1): 66. arXiv:1707.02212. Bibcode:2017ApJ...845...66R. doi:10.3847/1538-4357/aa7ede. S2CID 118895524.
  21. ^ a b c d "Special Register Buffer Data Sampling". Intel. Retrieved 26 December 2020.
  22. ^ "x86 intrinsics list". docs.microsoft.com. 2020-02-28. Retrieved 2020-05-07.
  23. ^ "X86 Built-in Functions - Using the GNU Compiler Collection (GCC)".
  24. ^ "Intel® C++ Compiler 19.1 Developer Guide and Reference". 2019-12-23.
  25. ^ Route, Matthew (2019). "Intel Secure Key-Powered Radio-flaring Ultracool Dwarf Population Synthesis". American Astronomical Society Meeting Abstracts #234. American Astronomical Society Meeting #234, id. 207.01. Bulletin of the American Astronomical Society, Vol. 51, No. 4. 234. Bibcode:2019AAS...23420701R.
  26. ^ a b Perlroth, Nicole; Larson, Jeff; Shane, Scott (September 5, 2013). "N.S.A. Able to Foil Basic Safeguards of Privacy on Web". The New York Times. Retrieved November 15, 2017.
  27. ^ Ts'o, Theodore (September 6, 2013). "I am so glad I resisted pressure from Intel engineers to let /dev/random rely..." Archived from the original on 2018-06-11.
  28. ^ a b Richard Chirgwin (2013-12-09). "FreeBSD abandoning hardware randomness". The Register.
  29. ^ Gavin Clarke (10 September 2013). "Torvalds shoots down call to yank 'backdoored' Intel RDRAND in Linux crypto". theregister.co.uk. Retrieved 12 March 2014.
  30. ^ Taylor Hornby (6 December 2013). "RDRAND backdoor proof of concept is working! Stock kernel (3.8.13), only the RDRAND instruction is modified". Retrieved 9 April 2015.
  31. ^ Taylor Hornby [@DefuseSec] (10 September 2013). "I wrote a short dialogue explaining why Linux's use of RDRAND is problematic. http://pastebin.com/A07q3nL3 /cc @kaepora @voodooKobra" (Tweet). Retrieved 11 January 2016 – via Twitter.
  32. ^ Daniel J. Bernstein; Tanja Lange (16 May 2014). "Randomness generation" (PDF). Retrieved 9 April 2015.
  33. ^ Ts'o, Theodore (2013-10-10). "random: mix in architectural randomness earlier in extract_buf()". GitHub. Retrieved 30 July 2021.
  34. ^ "FreeBSD Quarterly Status Report". Freebsd.org. Retrieved 2014-01-30.
  35. ^ "random(4)". www.freebsd.org. Retrieved 2020-09-25.
  36. ^ a b c Ragab, Hany; Milburn, Alyssa; Razavi, Kaveh; Bos, Herbert; Giuffrida, Cristiano. "CrossTalk: Speculative Data Leaks Across Cores Are Real" (PDF). Systems and Network Security Group, Vrije Universiteit Amsterdam (VUSec). Retrieved 26 December 2020.
  37. ^ "VUSec RIDL cpuid_leak PoC, modified to leak rdrand output". GitHub. Retrieved 26 December 2020.
  38. ^ "Processors Affected: Special Register Buffer Data Sampling". Intel Developer Zone. Retrieved 26 December 2020.

외부 링크