/dev/random에서 일회성 채우기에 적합한 약 기가바이트의 무작위 데이터를 원한다고 가정해 보겠습니다. 따라서 /dev/urandom은 더 이상 사용되지 않습니다. 이를 수행하기에 충분한 엔트로피를 /dev/random에 어떻게 시드합니까? 이에 대한 특정 명령과 프로그램을 찾고 있습니다. 나는 아무것도 사고 싶지 않습니다. 차이점이 있다면 저는 Arch Linux를 사용하고 있습니다.
답변1
불행하게도 /dev/random은 일회용 패드에 사용하기에 적합하지 않습니다. 적어도 대부분의 사람들이 일회용 패드를 생각하거나 구현할 때 상상하는 종류의 일회용 패드(증명 가능한 보안 보장 포함)에는 적합하지 않습니다. 아래 정보의 대부분은 (매우 긴) 기사에서 요약되었습니다.http://www.2uo.de/myths-about-urandom/
문제는 /dev/random이 실제로 무작위가 아니라는 것입니다. CSPRNG를 사용하여 출력을 생성합니다. 실제로 /dev/random은 /dev/urandom과 정확히 동일한 CSPRNG를 사용합니다. 유일한 차이점은 내부 엔트로피 추정치가 충분하지 않으면 /dev/random이 차단된다는 것입니다.
이전 문장의 "추정"이라는 단어가 핵심입니다. 대부분의 사람들은 이 추정치가 항상 정확하고 완벽하다고 생각하지만 실제로는 전혀 정확하지 않습니다. 추정이 틀리면 일회용 패드의 입증 가능한 보안 보장이 모두 상실되고 계산 보안만 남게 됩니다. /dev/urandom을 사용하는 것보다 낫지 않습니다!
엔트로피 추정이 약간이라도 틀려도 일회용 패드의 보안이 떨어지는 것은 아닙니다. 일회용 패드의 입증된 보안 보장은 전부 아니면 전무입니다.
이 질문의 전제는 엔트로피를 더 추가하면 /dev/random 문제를 "수정"할 수 있다는 것입니다. 불행하게도 이 전제는 틀렸다. 엔트로피 소스는 종종 내부 데이터에 액세스할 수 있고 RNG 출력을 사용하여 비밀리에 이 데이터를 내보낼 수 있으므로 악의적인 엔트로피 소스는 엔트로피가 전혀 없는 것보다 훨씬 더 나쁩니다.http://blog.cr.yp.to/20140205-entropy.html완전한 토론을 하십시오(여기서 요약하기에는 너무 길습니다). 특히, 하드웨어 엔트로피 소스(다른 여러 답변에서 권장됨)는 보안 관점에서 볼 때 매우 잘못된 선택입니다. 하드웨어는 악의적인 작업을 수행하는 데 가장 좋은 위치에 있고 본질적으로 감사할 수 없기 때문입니다.
답변2
하드웨어 구성 요소가 가장 좋은 아이디어인 것 같습니다. 시장에는 일부 하드웨어 생성기 IC가 있지만 실제로 나타나는 것으로 믿어야 합니다.
가능한 두 가지 좋은 솔루션은 유도된 부품 노이즈입니다. 두 가지 주요 솔루션은 온도 편차와 다이오드 생성 애벌런치 노이즈인 것 같습니다(참조:http://web.archive.org/web/20061117145903/http://willware.net:8080/hw-rng.html)
자이로스코프 및 가속도계와 같은 구성 요소가 더욱 민감해짐에 따라 최고 감도에서 작동하도록 하고 LSB 값을 사용하는 것도 좋은 솔루션이지만, 내가 아는 한 아무도 이를 감사하지 않았습니다.
RNG를 수행하지 않는다는 논문은 많지만 입증된 개방형 하드웨어 구현은 없기 때문에 흥미롭습니다.
답변3
추가 하드웨어 없이 엔트로피 풀을 늘릴 수 있는 두 가지 프로그램은rng-tools
그리고haveged
. rng-tools
최신 CPU 및 칩셋에서 사용할 수 있는 RNG를 haveged
사용하여 최신 CPU 임의성(캐시 동작 등)을 사용합니다 . 둘 다 Arch에서 사용할 수 있으며,아치스 위키이에 대해 논의하는 흥미로운 페이지가 있습니다. 나는 이를 사용하여 기가바이트의 데이터를 생성하려고 시도하지 않았지만 합리적인 시간 내에 가능할 것입니다.
구체적으로 구매를 제외하지만 완전성을 위해 LWN에 다음과 같은 흥미로운 기사가 있습니다.NeuG 엔트로피, 여기에는 haveged
다양한 다른 방법에 대한 논의가 포함됩니다. NeuG를 실행할 수 있는 STM8S 보드를 10달러 미만으로 구입하거나 FST-01을 35달러에 구입할 수 있습니다.
답변4
마이크가 연결되어 있지 않으면 아날로그 마이크 채널에서 얻는 정보는 일반적으로 정적입니다. 예를 들어 bzip2를 통해 파이프하고 미백을 위해 다른 임의의 소스(urandom 또는 다른 마이크 잭)와 혼합하고 결과를 openssl을 통해 파이프하여 좋은 측정값과 결과를 얻을 수 있습니다.~해야 한다매우 무작위입니다.
그러나 결과의 무작위성과 관련하여 엄격하고 빠른 보안 속성을 증명하는 것은 어렵습니다.