리눅스를위한 엔트로피 소스


9

일회성 패드에 적합한 / dev / random의 기가 바이트 정도의 임의 데이터를 원한다고 가정 해 봅시다 ./dev/urandom이 종료되었습니다. 이에 대한 특정 명령과 프로그램을 찾고 있습니다. 나는 아무것도 사고 싶지 않다. 차이가 있다면 아치 리눅스를 사용하고 있습니다.


그러한 프로그램이 / dev / random을 사용하고 싶지 않은 / dev / urandom과 같은 문제로 바꾸지 않겠습니까? 아니면 일부 장치 또는 네트워크를 통해 추가 엔트로피를 얻는 것을 말하고 있습니까?
Anthon

@Anthon 샷 노이즈, 열 노이즈, 일부 장치 등과 같은 엔트로피 소스에서 임의성을 추출하는 특정 프로그램에 대해 이야기하고 있습니다 ... 프로그램이 임의성을 자체적으로 만들지는 않습니다.
PyRulez 2016 년

... 예를 들어,라는 명령 또는 프로그램 Here — type something:은 인간이 제어 할 수있는 것보다 더 높은 정밀도로 키 간 시간 델타를 측정합니까?
G-Man, 'Reinstate


1
그것은 한 번의 패드를 _'... 거의 모든 암호화 알고리즘은 ... '단순히'계산적 보안을 제공한다 '는 주장에 대한 두 가지 예외 중 하나로 언급합니다. 당신이 일회용 패드는 urandom을 사용할 수 없다고 말한 곳에서 내가 놓친 것을 인용 할 수 없다면?
쓸모없는

답변:


4

추가 하드웨어없이 엔트로피 풀을 증가시킬 수있는 두 가지 프로그램은 rng-toolshaveged입니다. rng-tools최신 CPU 및 칩셋에서 haveged사용 가능한 RNG를 사용하고 최신 CPU 임의성을 사용합니다 (캐시 동작 등). 두 가지 모두 아치에서 사용할 수 있으며 아치 위키 에는 흥미로운 페이지가 있습니다. 나는 기가 바이트의 데이터를 생성하기 위해 그것들을 사용하려고 시도하지 않았지만 상당한 시간 안에 가능해야합니다.

당신은 아무것도 구매하는 것을 명시 적으로 배제하지만, 완전성을 위해 LWN 에는 NeuG와의 엔트로피에 관한 흥미로운 기사가 ​​있으며 여기에는 haveged다양한 접근법과 토론이 포함됩니다 . NeuG를 10 달러 미만으로 운영하거나 FST-01을 35 달러로 운영 할 수있는 STM8S 보드를 구입할 수 있습니다.


4

불행히도 / 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 (여기서 요약하기에는 너무 길다). 특히, 엔트로피의 하드웨어 소스 (여러 다른 답변에서 권장 한 바와 같이)는 보안 측면에서 매우 나쁜 선택입니다. 하드웨어는 악의적 인 일을 할 수있는 주요 위치에 있으며 본질적으로 감사 할 수 없기 때문입니다.


나는 더 많은 엔트로피로 그것을 고치고 있다고 말하지 않았고 더 큰 키를 위해 더 필요했습니다. 그것은 결함이 있다는 것에 대한 좋은 지적입니다. 대안을 추천 할 수 있습니까?
PyRulez 2016 년

1
이것은 하드웨어 소스에 대한 마지막 부분을 제외하고 좋은 대답입니다. 엔트로피의 하드웨어 소스는 엔트로피를 얻는 유일한 신뢰할 수 있고 감사 가능한 방법입니다. 귀하 (또는 신뢰하는 사람)는 설계 정보가 있고 제조 프로세스가 설계 정보를 존중하는지 확인해야하는 소스를 감사해야합니다. 엔트로피 소스를 결합하여 그 중 하나 이상이 양호하면 결과가 양호합니다 (NB : 올바르게 결합해야 함).
Gilles 'SO- 악마 그만해'

질, 내가 게시 한 두 번째 링크를 읽으십시오. 적어도 하나의 엔트로피 소스가 양호하면 결과가 양호하다고 주장하는 것은 완전히 거짓입니다. 그 링크의 전체 목적은이 허위 주장을 반박하는 것입니다!
djao

또한 소스와 제조 프로세스를 감사하는 것만으로는 충분하지 않습니다. 제조 프로세스에 따라 장치가 제조되었는지 확인하려면 개별 장치를 감사해야합니다. 이것은 단순히 체크섬 확인으로 구성된 소프트웨어의 유사한 작업보다 훨씬 어려운 작업입니다.
djao

대안에 관해서는 : PC에서 1GB의 임의의 데이터를 가져 오는 대체 마술 방법이 없습니다. 이를 위해서는 하드웨어 장치가 필요합니다 (그러나 감사하기 어려운 하드웨어에 대해 말한 것에주의하십시오). / dev / random을 기꺼이 사용한다면 / dev / urandom도 마찬가지입니다. 모든 암호화 응용 프로그램에서 / dev / random보다 나쁘지 않습니다.
djao

3

HW 구성 요소가 최선의 아이디어 인 것 같습니다. 거기에 HW 발생기 IC가 있지만 올 때 그것을 신뢰해야합니다.

아마도 두 가지 좋은 해결책은 구성 요소를 유도하여 노이즈를 만드는 것입니다. 두 가지 주요 솔루션은 온도 바이어스와 다이오드로 생성 된 밴치 노이즈입니다 ( http://web.archive.org/web/20061117145903/http://willware.net:8080/hw-rng.html 참조 )

자이로 및 가속도계와 같은 구성 요소가보다 현명 해짐에 따라 가장 높은 감도로 작동하고 LSB 값을 사용하는 것도 좋은 해결책이 될 수 있지만 AFAIK는 아무도 감사하지 않았습니다.

RNG를하지 말아야 할 문서가 많지만 HW 구현이 열려 있고 검증되지 않았기 때문에 재미 있음


2

pycsprng.py 사용할 수 있습니다 . 암호화 적으로 안전한가? 잘 모르겠지만 동료 리뷰를 원합니다.

python pycsprng.py | pv | dd of=data.file bs=1024 count=1000

파이프 대상 pv은 선택 사항이며 전송 된 데이터 양을 파악하는 데 도움이됩니다.

블록 크기가 클수록 성능이 향상 될 수 있습니다. 블록 크기를 늘리면 파일을 너무 많이 생성하지 않도록 카운트를 조정해야합니다.


3
그것은 단지 /dev/urandom...
Stephen Kitt

1
pycsprng.py말 그대로에서 임의성을 얻는 10 개의 SLOC 스크립트입니다 os.urandom. 문서에 따르면 "반환 된 데이터는 암호화 응용 프로그램에 대해 예측할 수 없을 정도로 예측할 수 없어야합니다 ...] UNIX와 같은 시스템에서는 쿼리합니다 /dev/urandom" . 실제로 (오래된 소스이지만) Security.SE는 crypto에 적합 하다고 말합니다 .
gronostaj 2016 년

시간 패드 암호가 아닙니다!
PyRulez 2016 년

0

마이크를 연결하지 않을 때 아날로그 마이크 채널에서 얻는 것은 일반적으로 정적입니다. 레스 햇의 bzip2를 통해, 예를 들어, 미백을 위해, 임의성 (urandom을 또는 다른 마이크 잭)의 다른 소스와 함께 혼합하는 것이 파이프, 좋은 측정을위한 OpenSSL이 무엇을 당신이 얻을 통해 어쩌면 파이프 결과는 해야 꽤 무작위.

그러나 결과의 임의성에 대해 강력하고 빠른 보안 속성을 입증하기는 어렵습니다.


0

amd64 / x86_64 프로세서, 가상 또는 물리적 환경에서 Linux 커널 2.6.9 이상을 사용 하는 경우 ncomputers.org/pandom 에서 64 ubits / 64 비트 의 8 KiB / s 엔트로피를 제공하는 진정한 난수 생성기를 사용해 볼 수 있습니다/dev/random

샘플 출력


링크가 파열되어 백업을 찾을 수 없습니다.
slm

0

100MB의 하드웨어 생성 임의 데이터를 생성하려면 다음을 수행하십시오.

  • 컴퓨터의 내장 마이크 (노트북에서 사용 가능)로 20 분 분량의 오디오 (96khz 16 비트 모노)를 녹음하십시오. ~ 220MB WAV 파일이 제공됩니다.

  • 쓸모없는 비트를 버리고 수학으로 이진 데이터 비트를 셔플하십시오 (여러 가지 방법).

  • 섞은 비트를 ~ 100MB 이진 파일로 내보내기

다음은 이에 관한 기사 입니다. 오디오 (및 컴퓨터의 내장 마이크)를 사용하여 진정한 엔트로피 및 임의의 데이터를 생성하려는 시도 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.