일회성 패드에 적합한 / dev / random의 기가 바이트 정도의 임의 데이터를 원한다고 가정 해 봅시다 ./dev/urandom이 종료되었습니다. 이에 대한 특정 명령과 프로그램을 찾고 있습니다. 나는 아무것도 사고 싶지 않다. 차이가 있다면 아치 리눅스를 사용하고 있습니다.
Here — type something:
은 인간이 제어 할 수있는 것보다 더 높은 정밀도로 키 간 시간 델타를 측정합니까?
일회성 패드에 적합한 / dev / random의 기가 바이트 정도의 임의 데이터를 원한다고 가정 해 봅시다 ./dev/urandom이 종료되었습니다. 이에 대한 특정 명령과 프로그램을 찾고 있습니다. 나는 아무것도 사고 싶지 않다. 차이가 있다면 아치 리눅스를 사용하고 있습니다.
Here — type something:
은 인간이 제어 할 수있는 것보다 더 높은 정밀도로 키 간 시간 델타를 측정합니까?
답변:
추가 하드웨어없이 엔트로피 풀을 증가시킬 수있는 두 가지 프로그램은 rng-tools
및 haveged
입니다. rng-tools
최신 CPU 및 칩셋에서 haveged
사용 가능한 RNG를 사용하고 최신 CPU 임의성을 사용합니다 (캐시 동작 등). 두 가지 모두 아치에서 사용할 수 있으며 아치 위키 에는 흥미로운 페이지가 있습니다. 나는 기가 바이트의 데이터를 생성하기 위해 그것들을 사용하려고 시도하지 않았지만 상당한 시간 안에 가능해야합니다.
당신은 아무것도 구매하는 것을 명시 적으로 배제하지만, 완전성을 위해 LWN 에는 NeuG와의 엔트로피에 관한 흥미로운 기사가 있으며 여기에는 haveged
다양한 접근법과 토론이 포함됩니다 . NeuG를 10 달러 미만으로 운영하거나 FST-01을 35 달러로 운영 할 수있는 STM8S 보드를 구입할 수 있습니다.
불행히도 / 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 (여기서 요약하기에는 너무 길다). 특히, 엔트로피의 하드웨어 소스 (여러 다른 답변에서 권장 한 바와 같이)는 보안 측면에서 매우 나쁜 선택입니다. 하드웨어는 악의적 인 일을 할 수있는 주요 위치에 있으며 본질적으로 감사 할 수 없기 때문입니다.
HW 구성 요소가 최선의 아이디어 인 것 같습니다. 거기에 HW 발생기 IC가 있지만 올 때 그것을 신뢰해야합니다.
아마도 두 가지 좋은 해결책은 구성 요소를 유도하여 노이즈를 만드는 것입니다. 두 가지 주요 솔루션은 온도 바이어스와 다이오드로 생성 된 밴치 노이즈입니다 ( http://web.archive.org/web/20061117145903/http://willware.net:8080/hw-rng.html 참조 )
자이로 및 가속도계와 같은 구성 요소가보다 현명 해짐에 따라 가장 높은 감도로 작동하고 LSB 값을 사용하는 것도 좋은 해결책이 될 수 있지만 AFAIK는 아무도 감사하지 않았습니다.
RNG를하지 말아야 할 문서가 많지만 HW 구현이 열려 있고 검증되지 않았기 때문에 재미 있음
pycsprng.py 사용할 수 있습니다 . 암호화 적으로 안전한가? 잘 모르겠지만 동료 리뷰를 원합니다.
python pycsprng.py | pv | dd of=data.file bs=1024 count=1000
파이프 대상 pv
은 선택 사항이며 전송 된 데이터 양을 파악하는 데 도움이됩니다.
블록 크기가 클수록 성능이 향상 될 수 있습니다. 블록 크기를 늘리면 파일을 너무 많이 생성하지 않도록 카운트를 조정해야합니다.
/dev/urandom
...
pycsprng.py
말 그대로에서 임의성을 얻는 10 개의 SLOC 스크립트입니다 os.urandom
. 문서에 따르면 "반환 된 데이터는 암호화 응용 프로그램에 대해 예측할 수 없을 정도로 예측할 수 없어야합니다 ...] UNIX와 같은 시스템에서는 쿼리합니다 /dev/urandom
" . 실제로 (오래된 소스이지만) Security.SE는 crypto에 적합 하다고 말합니다 .
amd64 / x86_64 프로세서, 가상 또는 물리적 환경에서 Linux 커널 2.6.9 이상을 사용 하는 경우 ncomputers.org/pandom 에서 64 ubits / 64 비트 의 8 KiB / s 엔트로피를 제공하는 진정한 난수 생성기를 사용해 볼 수 있습니다/dev/random
100MB의 하드웨어 생성 임의 데이터를 생성하려면 다음을 수행하십시오.
컴퓨터의 내장 마이크 (노트북에서 사용 가능)로 20 분 분량의 오디오 (96khz 16 비트 모노)를 녹음하십시오. ~ 220MB WAV 파일이 제공됩니다.
쓸모없는 비트를 버리고 수학으로 이진 데이터 비트를 셔플하십시오 (여러 가지 방법).
섞은 비트를 ~ 100MB 이진 파일로 내보내기
다음은 이에 관한 기사 입니다. 오디오 (및 컴퓨터의 내장 마이크)를 사용하여 진정한 엔트로피 및 임의의 데이터를 생성하려는 시도 .