난수생성
Random number generation
난수 생성은 종종 난수 생성기(RNG)를 통해 난수보다 합리적으로 더 잘 예측할 수 없는 숫자나 기호의 연속을 생성하는 과정입니다.이는 특정 결과 시퀀스가 나중에 감지할 수 있지만 예측할 수 없는 일부 패턴을 포함한다는 것을 의미합니다.실제 난수 생성기는 하드웨어 난수 생성기(HRNG)가 될 수 있으며, 여기서 각 생성기는 모델링이 현실적으로 불가능한 방식으로 지속적으로 변경되는 물리적 환경 속성의 현재 값의 함수입니다.이는 의사 난수 생성기(PRNG)가 수행하는 소위 "난수 생성"과는 대조적인데, 이는 무작위해 보이지만 실제로는 미리 결정된 숫자를 생성합니다. 이 세대들은 PRNG의 상태를 아는 것만으로 재현될 수 있습니다.
무작위성의 다양한 응용은 무작위 데이터를 생성하는 다양한 방법의 개발로 이어졌습니다.주사위 굴리기, 동전 뒤집기, 카드놀이, 아이칭에서의 (점을 위한) 야로우 줄기의 사용과 같은 잘 알려진 예들을 포함하여, 이것들 중 일부는 고대부터 존재해 왔습니다.이러한 기술의 기계적 특성 때문에 (통계학에서 중요한) 충분히 무작위한 숫자를 대량으로 생성하기 위해서는 많은 작업과 시간이 필요했습니다.따라서 때때로 결과가 수집되고 난수표로 배포됩니다.
의사 난수 생성을 위한 몇 가지 계산 방법이 있습니다.비록 결과가 얼마나 예측 불가능한지(즉, 패턴을 식별할 수 있는 정도)를 측정하기 위한 임의성에 대한 통계 검정의 일부를 다양한 성공으로 충족시킬 수는 있지만, 모두 실제 임의성의 목표에는 미치지 못합니다.이로 인해 일반적으로 암호화와 같은 응용 프로그램에 사용할 수 없게 됩니다.그러나 암호학에 사용하기 위해 특별히 설계된 특수 기능과 함께 신중하게 설계된 암호학적으로 안전한 의사 난수 생성기(CSPRNGS)도 존재합니다.
실용적인 응용 및 용도
난수 생성기는 도박, 통계 샘플링, 컴퓨터 시뮬레이션, 암호화, 완전 무작위 설계 및 예측 불가능한 결과를 생성하는 기타 분야에 적용됩니다.일반적으로 보안 응용 프로그램과 같이 가장 중요한 기능으로 예측 불가능성을 가진 응용 프로그램에서는 가능한 경우 의사 랜덤 알고리즘보다 하드웨어 생성기를 선호합니다.
의사 난수 생성기는 동일한 난수 시드에서 시작하여 동일한 난수 시퀀스를 다시 실행할 수 있는 기능에 의해 디버깅이 용이하기 때문에 몬테카를로 방법 시뮬레이션을 개발하는 데 매우 유용합니다.씨앗이 비밀인 한 암호학에서도 사용됩니다.발신자와 수신자는 키로 사용하기 위해 동일한 번호 집합을 자동으로 생성할 수 있습니다.
의사 난수의 생성은 컴퓨터 프로그래밍에서 중요하고 일반적인 작업입니다.암호화 및 특정 수치 알고리즘은 매우 높은 수준의 명백한 무작위성을 필요로 하지만, 다른 많은 작업들은 약간의 예측 불가능성만 필요로 합니다.간단한 예로는 사용자에게 "오늘의 무작위 인용문"을 제시하거나 컴퓨터가 통제하는 상대가 컴퓨터 게임에서 어떤 방향으로 움직일 수 있는지를 결정하는 것이 있습니다.더 약한 형태의 무작위성은 해시 알고리즘과 상각된 검색 및 정렬 알고리즘을 만드는 데 사용됩니다.
일견 무작위화에 적합한 것처럼 보이는 몇몇 애플리케이션들은 사실 그렇게 간단하지 않습니다.예를 들어, 배경 음악 시스템을 위한 음악 트랙을 "무작위적으로" 선택하는 시스템은 무작위로만 나타나야 하며, 심지어 음악 선택을 제어할 수 있는 방법을 가지고 있을 수도 있습니다: 진정한 무작위 시스템은 같은 곡이 연속적으로 두 세 번 등장하는 것에 제한이 없을 것입니다.
참 대 의사 난수
난수를 생성하는 데 사용되는 주요 방법은 두 가지입니다.첫 번째 방법은 임의로 예상되는 물리적 현상을 측정한 다음 측정 과정에서 발생할 수 있는 편향을 보상합니다.예를 들면 대기 소음, 열 소음 및 기타 외부 전자기 및 양자 현상 측정 등이 있습니다.예를 들어, 우주 배경 복사 또는 짧은 시간 척도에 걸쳐 측정된 방사성 붕괴는 자연 엔트로피의 근원을 나타냅니다(숫자 생성 과정의 예측 불가능성 또는 놀라움의 척도).
자연적인 근원으로부터 엔트로피를 얻을 수 있는 속도는 측정되는 근본적인 물리적 현상에 따라 달라집니다.따라서 자연적으로 발생하는 "진정한" 엔트로피의 원천은 차단이라고 합니다. 이들은 수요를 충족하기에 충분한 엔트로피가 수집될 때까지 속도 제한이 됩니다.대부분의 Linux 배포판을 포함한 일부 Unix와 유사한 시스템에서는 의사 장치 파일/[1]dev/dev는 환경에서 충분한 엔트로피를 가져올 때까지 차단됩니다.이러한 차단 동작으로 인해 하드 디스크 드라이브를 랜덤 비트로 채우는 것과 같이 /dev/random에서 대량으로 읽어오는 것은 이러한 유형의 엔트로피 소스를 사용하는 시스템에서는 종종 느려질 수 있습니다.
두 번째 방법은 무작위한 결과의 긴 시퀀스를 생성할 수 있는 계산 알고리즘을 사용하며, 이는 실제로 시드 값 또는 키로 알려진 더 짧은 초기 값에 의해 완전히 결정됩니다.결과적으로 시드 값이 알려지면 겉보기에는 무작위로 보이는 시퀀스 전체가 재현될 수 있습니다.이러한 유형의 난수 생성기를 종종 의사 난수 생성기라고 합니다.이러한 유형의 발전기는 일반적으로 자연적으로 발생하는 엔트로피의 근원에 의존하지 않지만, 자연적인 원천에 의해 주기적으로 시드될 수도 있습니다.이 제너레이터 유형은 비차단이므로 외부 이벤트에 의해 속도 제한을 받지 않으므로 대량 읽기가 발생할 수 있습니다.
일부 시스템은 하이브리드 방식을 채택하여 사용 가능할 때 자연 소스에서 추출한 무작위성을 제공하고 주기적으로 재배종된 소프트웨어 기반 암호학적으로 안전한 의사 난수 생성기(CSPRNG)로 되돌아갑니다.임의성의 원하는 읽기 속도가 수요를 따라가는 자연 수확 접근법의 능력을 초과할 때 폴백이 발생합니다.이 접근법은 더 느리고 순수하게 환경적인 방법을 기반으로 하는 난수 생성기의 속도 제한 차단 동작을 방지합니다.
결정론적 논리만을 기반으로 하는 의사 난수 생성기는 가장 순수한 의미의 "진정한" 난수 소스로 간주될 수는 없지만, 실제로는 일반적으로 보안이 중요한 애플리케이션에도 충분합니다.정밀하게 설계되고 구현된 의사 난수 생성기는 야로우 알고리즘 및 포춘의 경우와 마찬가지로 보안에 중요한 암호화 목적으로 인증될 수 있습니다.전자는 FreeBSD, AIX, OS X, NetBSD 등의 엔트로피의 /dev/random 소스의 기초입니다.OpenBSD는 [dubious ][2]arc4random으로 알려진 의사 난수 알고리즘을 사용합니다.
생성방법
물리적 방법
주사위, 동전 뒤집기, 룰렛 바퀴와 같은 난수를 생성하는 가장 초기의 방법은 통계학과 암호학에서 대부분의 응용 프로그램에 너무 느린 경향이 있기 때문에 오늘날에도 주로 게임과 도박에서 여전히 사용됩니다.
물리적 난수 생성기는 양자역학의 [3][4]법칙으로 예측 불가능성이 추적될 수 있는 본질적으로 무작위한 원자 또는 아원자 물리 현상에 기초할 수 있습니다.엔트로피의 근원에는 방사성 붕괴, 열 잡음, 샷 잡음, 제너 다이오드의 애벌랜치 잡음, 클럭 드리프트, 하드 디스크 읽기-쓰기 헤드의 실제 움직임 타이밍, 무선 잡음 등이 있습니다.그러나 물리적 현상과 이를 측정하는 데 사용되는 도구는 일반적으로 비대칭과 체계적 편향을 특징으로 하며, 이는 결과를 균일하게 무작위적이지 않게 만듭니다.더 낮은 비트 레이트이지만, 불균일한 랜덤 소스로부터의 비트의 균일한 분포에 접근하기 위해, 암호 해시 함수와 같은 랜덤성 추출기가 사용될 수 있습니다.
광 카오스와 증폭된 자발 방출 잡음과 같은 광대역 광 엔트로피원의 출현은 물리적 난수 발생기의 개발에 큰 도움을 주었습니다.그 중에서도[5][6] 광 카오스는 대역폭이 크고 진폭이 크기 때문에 물리적으로 고속 난수를 생성할 가능성이 높습니다.혼돈 [7]레이저 기반의 고속 실시간 물리 랜덤 비트 생성기 시제품은 2013년에 제작되었습니다.
이러한 엔트로픽 정보를 수집하기 위한 다양한 상상력의 방법들이 고안되었습니다.한 가지 기술은 예측할 수 없는 소스로부터 비디오 스트림의 프레임에 대해 해시 함수를 실행하는 것입니다.Lavarand는 이 기술을 여러 용암 램프의 이미지와 함께 사용했습니다.HotBits는 Geiger-Muller 튜브로 방사성 붕괴를 측정한 반면, Random.org 은 일반 라디오로 녹음된 대기 소음의 진폭 변화를 사용합니다.

또 다른 일반적인 엔트로피 소스는 시스템의 인간 사용자들의 행동입니다.사람들은 요청에 따라 좋은 무작위성 생성자로 간주되지는 않지만, 혼합 전략 [9]게임을 하는 상황에서 무작위 행동을 꽤 잘 생성합니다.일부 보안 관련 컴퓨터 소프트웨어는 사용자가 임의 키를 생성하거나 의사 [10]난수 생성기를 초기화하는 데 필요한 충분한 엔트로피를 생성하기 위해 긴 일련의 마우스 움직임 또는 키보드 입력을 요구합니다.
계산법
대부분의 컴퓨터에서 생성된 난수는 PRNG를 사용하는데, PRNG는 좋은 난수 특성을 가진 숫자의 장기 실행을 자동으로 만들 수 있지만 결국 순서가 반복됩니다(또는 메모리 사용량이 제한 없이 증가합니다).이러한 난수는 많은 상황에서 미세하지만 [11]엔트로피의 근원으로 사용되는 전자기 대기 잡음에서 생성된 수만큼 무작위하지는 않습니다.그러한 알고리즘에 의해 생성된 일련의 값들은 일반적으로 시드(seed)라고 불리는 고정된 수에 의해 결정됩니다.가장 일반적인 PRNG 중 하나는 리커브를 사용하는 선형 합동 생성기입니다.
숫자를 생성하려면 a, b 및 m은 큰 정수이고 n + {\ X_은 일련의 의사 난수로서 X에서 다음입니다.공식이 생성할 수 있는 최대 수는 모듈러스, m입니다.반복 관계를 행렬로 확장하여 훨씬 더 긴 기간과 더 나은 통계적 [12]특성을 가질 수 있습니다.단일 선형 합동 생성기의 특정한 비난수 특성을 피하기 위해, 승수 계수 a의 값이 약간 다른 여러 난수 생성기를 여러 다른 생성기 [citation needed]중에서 선택하는 "마스터" 난수 생성기와 병렬로 사용할 수 있습니다.
존 폰 노이만이 제안한 이른바 미들 스퀘어(middle-square) 방법은 난수를 생성하는 간단한 펜 앤 페이퍼 방법입니다.구현은 간단하지만 출력은 품질이 떨어집니다.주기가 매우 짧고 출력 순서가 거의 항상 0으로 수렴하는 등의 심각한 약점이 있습니다.최근의 혁신은 중간 사각형과 Weyl 시퀀스를 결합하는 것입니다.이 방법은 오랜 [13]기간에 걸쳐 고품질의 출력을 생산합니다.
대부분의 컴퓨터 프로그래밍 언어는 난수 생성기를 제공하는 함수나 라이브러리 루틴을 포함합니다.임의 바이트나 단어 또는 0과 1 사이에 균일하게 분포된 부동 소수점 번호를 제공하도록 설계되는 경우가 많습니다.
이러한 라이브러리 함수의 품질, 즉 무작위성은 완전히 예측 가능한 출력에서부터 암호학적으로 안전한 것까지 매우 다양합니다.Python, Ruby, R, IDL 및 PHP를 포함한 많은 언어에서 기본 난수 생성기는 Mersenne Twister 알고리즘을 기반으로 하며 언어 문서에 명시적으로 명시된 것처럼 암호화 목적으로 충분하지 않습니다.이러한 라이브러리 함수는 종종 통계적 특성이 좋지 않으며 몇 만 번만 시도해도 패턴이 반복됩니다.이러한 시계는 64비트이며 사람의 정확도를 훨씬 넘는 나노초 단위로 측정되기 때문에 컴퓨터의 실시간 시계를 시드로 사용하여 초기화되는 경우가 많습니다.이러한 함수는 특정 작업(예: 비디오 게임)에 충분한 무작위성을 제공할 수 있지만 암호학 응용 프로그램, 통계 또는 수치 [citation needed]분석과 같이 고품질 무작위성이 필요한 경우에는 적합하지 않습니다.
대부분의 운영 체제에서 훨씬 더 높은 품질의 난수 소스를 사용할 수 있습니다. 예를 들어 다양한 BSD 버전의 /dev/random, Linux, Mac OS X, IRIX 및 Solaris 또는 Microsoft Windows의 CryptGenRandom 등에서 사용할 수 있습니다.위에서 언급한 것들을 포함한 대부분의 프로그래밍 언어들은 이러한 더 높은 품질의 소스들에 접근하기 위한 수단을 제공합니다.
인간에 의해서
난수 생성은 또한 최종 사용자로부터 다양한 입력을 수집하여 랜덤화 소스로 사용하는 형태로 인간에 의해 수행될 수 있습니다.그러나 대부분의 연구들은 인간의 피험자들이 숫자나 글자의 무작위한 배열을 만들어 내기 위해 어느 정도의 비임의성을 가지고 있다는 것을 발견합니다.이 방법은 [14]우수한 랜덤 생성기와 비교할 때 선택 간에 너무 많은 교대를 할 수 있으므로 널리 사용되지는 않습니다.
사후처리 및 통계적 확인
그럴듯한 난수의 출처가 주어진 경우에도(아마도 양자 역학 기반 하드웨어 생성기에서), 완전히 편견이 없는 숫자를 얻는 것은 주의를 요합니다.또한, 이러한 발전기의 거동은 종종 온도, 전원 전압, 장치의 연령 또는 기타 외부 간섭에 따라 변경됩니다.의사 난수 루틴의 소프트웨어 버그나 이를 실행하는 하드웨어의 하드웨어 버그도 마찬가지로 탐지하기 어려울 수 있습니다.
생성된 난수는 사용 전에 기본 소스가 여전히 작동하는지 확인하기 위해 통계적 테스트를 거치는 경우가 있으며, 통계적 특성을 개선하기 위해 후처리됩니다.예를 들어, TRNG9803[15] 하드웨어 난수 생성기를 들 수 있는데, 이는 엔트로피 측정을 하드웨어 테스트로 사용한 후 쉬프트 레지스터 스트림 암호로 난수열을 후처리합니다.생성된 난수의 유효성을 검증하기 위해 통계 검정을 사용하는 것은 일반적으로 어렵습니다.Wang과 Nicol은[16] 여러 랜덤 생성기의 약점을 식별하는 데 사용되는 거리 기반 통계 테스트 기법을 제안했습니다.Li와[17] Wang은 브라운 운동 특성을 이용하여 레이저 혼돈 엔트로피 소스를 기반으로 난수를 테스트하는 방법을 제안했습니다.
기타 고려사항
분포 재구성
균등분포
대부분의 난수 생성기는 기본적으로 정수 또는 개별 비트로 작동하므로 0과 1 사이의 "정규 분포"에 도달하려면 추가 단계가 필요합니다.구현은 정수를 가능한 최대 값으로 나누는 것만큼 사소하지 않습니다.구체적으로:[18][19]
- 변환에 사용되는 정수는 의도된 정밀도에 충분한 비트를 제공해야 합니다.
- 부동소수점 수학 자체의 특성은 숫자가 0에 가까울수록 더 많은 정밀도가 존재한다는 것을 의미합니다.이러한 추가 정밀도는 일반적으로 필요한 비트 수 때문에 사용되지 않습니다.
- 나눗셈의 반올림 오차는 결과에 편의를 줄 수 있습니다.최악의 경우 실수 수학에 기반한 예상과 달리 제외된 것으로 추정되는 경계가 그려질 수 있습니다.
C++의 STL은 OpenJDK, Rust, NumPy가 사용하는 메인스트림 알고리즘을 제안합니다.여분의 정밀도를 사용하지 않으며,[20] 라운드 투 짝수로 인해 마지막 비트에만 치우침이 발생합니다.이 "정규 분포"를 다른 [21]범위로 이동할 경우 다른 수치 문제가 발생할 수 있습니다.스위프트 프로그래밍 언어를 위한 제안된 방법은 모든 [22]곳에서 완전한 정밀도를 사용한다고 주장합니다.
균등 분포 정수는 피셔-예이츠 셔플과 같은 알고리즘에서 일반적으로 사용됩니다.다시, 순진한 구현은 결과에 모듈로 편향을 유도할 수 있으므로, 더 많은 관련 알고리즘을 사용해야 합니다.분할을 거의 수행하지 않는 방법은 2018년 Daniel Lemire에 [23]의해 설명되었으며, 현재의 최첨단 기술은 산술 인코딩에서 영감을 받은 Apple Inc.[24]의 Stephen Canon의 2021년 "최적 알고리즘"입니다.
대부분의 0 대 1 RNG는 0을 포함하지만 1을 제외하고 나머지는 둘 다 포함하거나 제외합니다.
기타분포
균일한 난수의 출처가 주어졌을 때, 확률 밀도 함수에 대응하는 새로운 난수 출처를 만드는 몇 가지 방법이 있습니다.반전 방법이라고 하는 하나의 방법은 난수보다 크거나 같은 면적까지 적분하는 것입니다(적절한 분포를 위해 0과 1 사이에서 생성되어야 함).허용-거부 방법이라고 하는 두 번째 방법은 x와 y 값을 선택하고 x의 함수가 y 값보다 큰지 여부를 검정하는 것입니다.그렇다면 x 값이 허용됩니다.그렇지 않으면 x 값이 거부되고 알고리즘이 [25][26]다시 시도됩니다.
거부 샘플링의 예를 들어, 통계적으로 독립적인 표준 정규 분포 난수 쌍(x, y)을 생성하기 위해 먼저 r22~θ와 θ~UNIFY(0,2θ)를2 생성할 수 있습니다(박스-뮬러 변환 참조).
화이트닝
다수의 독립적인 RNG들의 출력들은 (예를 들어, 비트 단위 XOR 연산을 사용하여) 결합된 RNG를 적어도 사용된 최상의 RNG만큼 제공하기 위해 결합될 수 있습니다.이를 소프트웨어 화이트닝이라고 합니다.
계산 및 하드웨어 난수 생성기는 두 종류의 이점을 반영하기 위해 결합되기도 합니다.계산 난수 생성기는 일반적으로 물리적 생성기보다 훨씬 더 빠르게 의사 난수를 생성할 수 있는 반면 물리적 생성기는 "진정한 무작위성"을 생성할 수 있습니다.
대안으로 낮은 불일치 시퀀스
난수 생성기를 사용하는 일부 계산은 몬테카를로 방법에 의한 적분 계산과 같이 총 또는 평균 값의 계산으로 요약될 수 있습니다.그러한 문제에 대해서는 준난수라고도 불리는 소위 저차분수 시퀀스를 사용하여 더 정확한 해결책을 찾는 것이 가능할 수 있습니다.이러한 순서는 질적으로 말하면 간격을 고르게 채우는 확실한 패턴을 가지고 있습니다. 진정한 무작위 순서는 일반적으로 더 큰 간격을 남길 수 있습니다.
활동 및 시연
다음 사이트에서 사용 가능한 난수 샘플을 제공합니다.
- SOCR 리소스 페이지에는 자바 애플릿을 이용한 난수 생성 시연과 실제 대화형 활동이 다수 포함되어 있습니다.
- ANU의 양자 광학 그룹은 양자 진공에서 얻은 난수를 생성합니다.난수 샘플은 양자 난수 생성기 연구 페이지에서 확인할 수 있습니다.
- Random.org 은 대기 소음의 무작위성에서 비롯된 임의의 숫자를 사용할 수 있게 합니다.
- 루제르 보슈코비치 연구소의 양자 무작위 비트 발생기 서비스는 반도체의 광자 방출 양자 과정으로부터 무작위성을 수확합니다.그들은 여러 프로그래밍 언어를 위한 라이브러리를 포함한 다양한 데이터 가져오기 방법을 제공합니다.
- Taiyuan 기술 대학의 그룹은 혼란스러운 레이저로부터 얻은 무작위 숫자를 생성합니다.난수 샘플은 해당 물리적 난수 생성기 서비스에서 구입할 수 있습니다.
뒷문
대부분의 암호학은 키 및 암호 논스 생성을 위해 암호학적으로 안전한 난수 생성기에 의존하기 때문에 난수 생성기를 예측 가능하게 만들 수 있다면 공격자가 암호를 깨는 백도어로 사용할 수 있습니다.
NSA는 NIST 인증 암호학적으로 안전한 의사 난수 생성기 듀얼 EC DRBG에 백도어를 삽입한 것으로 보고되었습니다.예를 들어 이 난수 생성기를 사용하여 SSL 연결을 생성하는 경우, Matthew Green에 따르면 NSA가 난수 생성기의 상태를 확인할 수 있으며, 따라서 SSL [27]연결을 통해 전송되는 모든 데이터를 읽을 수 있습니다.Dual_이라는 것이 명백했음에도 불구하고EC_DRBG는 NSA 백도어가 2013년에 확인되기 훨씬 전부터 매우 빈약하고 백도어 의사 난수 생성기였을 가능성이 높으며, 2013년까지 저명한 보안 [28]회사인 RSA Security와 같이 실질적으로 상당한 용도로 사용되어 왔습니다.이후 RSA Security가 NSA 백도어를 제품에 의도적으로 삽입했다는 의혹이 제기되었습니다. Bullrun 프로그램의 일부일 가능성도 있습니다.RSA는 [29]제품에 의도적으로 백도어를 삽입하는 것을 부인했습니다.
또한 하드웨어 RNG는 명시된 것보다 적은 엔트로피를 갖도록 비밀리에 수정될 수 있으며, 이는 하드웨어 RNG를 사용하는 암호화를 공격에 취약하게 만들 것이라는 이론이 있습니다.공개된 그러한 방법 중 하나는 칩의 도펀트 마스크를 수정함으로써 작동하는데, 이는 광학 [30]역공학에서 감지할 수 없을 것입니다.예를 들어, 리눅스에서 난수 생성의 경우, 특히 NSA Bullrun [31][32]프로그램이 공개된 후 하드웨어 RNG의 백도어에 대응하기 위해 RDRAND 출력에 다른 엔트로피 소스를 섞지 않고 인텔의 RDRAND 하드웨어 RNG를 사용하는 것은 용납할 수 없는 것으로 여겨집니다.
2010년 미국 복권 추첨은 MUSL(Multi-State Rotice Association)의 정보보안 책임자에 의해 조작되었는데, 그는 일상적인 유지보수 [33]중에 MUSL의 보안 RNG 컴퓨터에 비밀리에 백도어 악성코드를 설치했습니다.해킹 기간 동안 이 남성은 일 년에 몇 번씩 숫자를 정확하게 예측하여 총 16,500,000 달러를 획득했습니다.
메모리 칩의 물리적 하드웨어에 대한 로우 해머 및 관련 공격에 대한 완화책인 ASLR(Address Space Layout Randomization)은 2017년 초 VUSec에 의해 부적절한 것으로 확인되었습니다.하드웨어에 구현된 시프트 레지스터를 기반으로 하는 난수 알고리즘은 충분히 큰 p 값에서 예측 가능하며 충분한 처리 능력(Brute Force Hack)으로 역설계가 가능합니다.이는 간접적으로 이 방법을 사용하는 멀웨어가 코딩된 경우 GPU와 CPU 모두에서 실행될 수 있음을 의미하며, 심지어 GPU를 사용하여 CPU [34]자체의 ASLR을 깨기도 합니다.
참고 항목
참고문헌
- ^ – Linux 프로그래머 설명서 – 특수 파일
- ^ – OpenBSD 라이브러리 함수 매뉴얼
- ^ Herrero-Collantes, Miguel; Garcia-Escartin, Juan Carlos (2016). "Quantum random number generators". Reviews of Modern Physics. 89. arXiv:1604.03304. doi:10.1103/RevModPhys.89.015004. S2CID 118592321.
- ^ Jacak, Marcin M.; Jóźwiak, Piotr; Niemczuk, Jakub; Jacak, Janusz E. (2021). "Quantum generators of random numbers". Scientific Reports. 11 (1): 16108. doi:10.1038/s41598-021-95388-7. PMC 8352985. PMID 34373502.
- ^ Li, Pu; Wang, Yun-Cai; Zhang, Jian-Zhong (2010-09-13). "All-optical fast random number generator". Optics Express. 18 (19): 20360–20369. Bibcode:2010OExpr..1820360L. doi:10.1364/OE.18.020360. ISSN 1094-4087. PMID 20940928.
- ^ Li, Pu; Sun, Yuanyuan; Liu, Xianglian; Yi, Xiaogang; Zhang, Jianguo; Guo, Xiaomin; Guo, Yanqiang; Wang, Yuncai (2016-07-15). "Fully photonics-based physical random bit generator". Optics Letters. 41 (14): 3347–3350. Bibcode:2016OptL...41.3347L. doi:10.1364/OL.41.003347. ISSN 1539-4794. PMID 27420532. S2CID 2909061.
- ^ Wang, Anbang; Li, Pu; Zhang, Jianguo; Zhang, Jianzhong; Li, Lei; Wang, Yuncai (2013-08-26). "4.5 Gbps high-speed real-time physical random bit generator". Optics Express. 21 (17): 20452–20462. Bibcode:2013OExpr..2120452W. doi:10.1364/OE.21.020452. ISSN 1094-4087. PMID 24105589. S2CID 10397141.
- ^ Walker, John. "HotBits: Genuine Random Numbers". Retrieved 2009-06-27.
- ^ Halprin, Ran; Naor, Moni. "Games for Extracting Randomness" (PDF). Weizmann Institute of Science. Archived from the original (PDF) on 2011-08-07. Retrieved 2009-06-27.
- ^ TrueCrypt Foundation. "TrueCrypt Beginner's Tutorial, Part 3". Retrieved 2009-06-27.
- ^ "RANDOM.ORG - True Random Number Service". www.random.org. Retrieved 2016-01-14.
- ^ "High Dimensionality Pseudo Random Number Generators". Retrieved 2018-11-21.
- ^ Widynski, Bernard (19 May 2020). "Middle-Square Weyl Sequence RNG". arXiv:1704.00358 [cs.CR].
- ^ W. A. Wagenaar (1972). "Generation of random sequences by human subjects: a critical survey of the literature". Psychological Bulletin. 77 (1): 65–72. CiteSeerX 10.1.1.211.9085. doi:10.1037/h0032060.
- ^ Dömstedt, B. (2009). "TRNG9803 True Random Number Generator". Manufacturer: www.TRNG98.se.
- ^ Wang, Yongge (2014). "Statistical Properties of Pseudo Random Sequences and Experiments with PHP and Debian OpenSSL". Computer Security - ESORICS 2014. Lecture Notes in Computer Science. Vol. 8712. Heidelberg: Springer LNCS. pp. 454–471. doi:10.1007/978-3-319-11203-9_26. ISBN 978-3-319-11202-2.
- ^ Li, Pu; Yi, Xiaogang; Liu, Xianglian; Wang, Yuncai; Wang, Yongge (2016-07-11). "Brownian motion properties of optoelectronic random bit generators based on laser chaos". Optics Express. 24 (14): 15822–15833. Bibcode:2016OExpr..2415822L. doi:10.1364/OE.24.015822. ISSN 1094-4087. PMID 27410852.
- ^ Goualard, F. (2020). "Generating Random Floating-Point Numbers by Dividing Integers: A Case Study". Computational Science – ICCS 2020. ICCS. Lecture Notes in Computer Science. Vol. 12138. pp. 15–28. doi:10.1007/978-3-030-50417-5_2. ISBN 978-3-030-50416-8. S2CID 219889587.
- ^ Campbell, Taylor R. (2014). "Uniform random floats: How to generate a double-precision floating-point number in [0, 1] uniformly at random given a uniform random source of bits". Retrieved 4 September 2021.
- ^ "A new specification for std::generate_canonical". www.open-std.org.
- ^ Goualard, Frédéric (July 2021). "Drawing random floating-point numbers from an interval". HAL. Retrieved 4 September 2021.
- ^ NevinBR. "[stdlib] Floating-point random-number improvements by NevinBR · Pull Request #33560 · apple/swift". GitHub.
- ^ Lemire, Daniel (23 February 2019). "Fast Random Integer Generation in an Interval". ACM Transactions on Modeling and Computer Simulation. 29 (1): 1–12. arXiv:1805.10941. doi:10.1145/3230636. S2CID 44061046.
- ^ "An optimal algorithm for bounded random integers by stephentyrone · Pull Request #39143 · apple/swift". GitHub.
- ^ The MathWorks. "Common generation methods". Retrieved 2011-10-13.[영구 데드링크]
- ^ The Numerical Algorithms Group. "G05 – Random Number Generators" (PDF). NAG Library Manual, Mark 23. Retrieved 2012-02-09.
- ^ matthew Green (2013-09-18). "The Many Flaws of Dual_EC_DRBG".
- ^ Matthew Green (2013-09-20). "RSA warns developers not to use RSA products".
- ^ "We don't enable backdoors in our crypto products, RSA tells customers". Ars Technica. 2013-09-20.
- ^ "Researchers can slip an undetectable trojan into Intel's Ivy Bridge CPUs". Ars Technica. 2013-09-18.
- ^ Theodore Ts'o. "I am so glad I resisted pressure from Intel engineers to let /dev/random rely only on the RDRAND instruction". Google Plus.
- ^ Theodore Ts'o. "Re: [PATCH] /dev/random: Insufficient of entropy on many architectures". LWN.
- ^ Nestel, M.L. (July 7, 2015). "Inside the Biggest Lottery Scam Ever". The Daily Beast. Retrieved July 10, 2015.
- ^ "AnC - VUSec". Retrieved 13 July 2018.
추가열람
- Donald Knuth (1997). "Chapter 3 – Random Numbers". The Art of Computer Programming. Vol. 2: Seminumerical algorithms (3 ed.).
- L'Ecuyer, Pierre (2017). "History of Uniform Random Number Generation" (PDF). Proceedings of the 2017 Winter Simulation Conference. IEEE Press. pp. 202–230.
- L'Ecuyer, Pierre (2012). "Random Number Generation" (PDF). In J. E. Gentle; W. Haerdle; Y. Mori (eds.). Handbook of Computational Statistics: Concepts and Methods. Handbook of Computational Statistics (second ed.). Springer-Verlag. pp. 35–71. doi:10.1007/978-3-642-21551-3_3. hdl:10419/22195. ISBN 978-3-642-21550-6.
- Kroese, D. P.; Taimre, T.; Botev, Z.I. (2011). "Chapter 1 – Uniform Random Number Generation". Handbook of Monte Carlo Methods. New York: John Wiley & Sons. p. 772. ISBN 978-0-470-17793-8.
- Press, WH; Teukolsky, SA; Vetterling, WT; Flannery, BP (2007). "Chapter 7. Random Numbers". Numerical Recipes: The Art of Scientific Computing (3rd ed.). New York: Cambridge University Press. ISBN 978-0-521-88068-8.
- NIST SP800-90A, B, C 시리즈의 난수 생성
- M. Tomassini; M. Sipper; M. Perrenoud (October 2000). "On the generation of high-quality random numbers by two-dimensional cellular automata". IEEE Transactions on Computers. 49 (10): 1146–1151. doi:10.1109/12.888056. S2CID 10139169.
외부 링크
- RANDOM.ORG 참 난수 서비스
- ANU의 양자난수 발생기
- BBC에서 우리 시간에 랜덤과 유사랜덤으로
- jRand 숫자의 의사 난수 시퀀스를 포함한 시뮬레이션 시퀀스 생성을 위한 Java 기반 프레임워크
- NAG Fortran 라이브러리의 난수 생성기
- NIST의 랜덤성 비콘, 60초마다 512비트의 블록으로 전체 엔트로피 비트열을 브로드캐스트합니다.예측 불가능성, 자율성 및 일관성을 제공하도록 설계되었습니다.
- 난수에 대한 시스템 호출: getrandom(랜덤)은 전용 Linux 시스템 호출을 설명하는 LWN.net 기사입니다.
- PHP와 Debian OpenSSL을 이용한 의사 랜덤시퀀스의 통계적 특성 및 실험
- 아발란치 소음을 이용한 랜덤시퀀스 발생장치