dd를 사용할 때 왜 / dev / random이 너무 느립니까?


29

많은 하드 드라이브를 반쯤 안전하게 지우려고합니다. 다음은 20-50Mb / s에서 작동합니다.

dd if=/dev/zero of=/dev/sda

그러나

dd if=/dev/random of=/dev/sda 

작동하지 않는 것 같습니다. 입력 할 때도

dd if=/dev/random of=stdout

bs = 및 count =에 전달한 내용에 관계없이 몇 바이트 만 제공합니다.

/ dev / random을 잘못 사용하고 있습니까? 이 문제 해결을 진행하기 위해 어떤 다른 정보를 찾아야합니까? 스크립트 또는 이와 비슷한 방법으로 다른 방법이 있습니까?

makeMyLifeEasy | dd if=stdin of=/dev/sda

아니면 그런 ...


1
참고로 : CIA가 데이터를 추적하는 것으로 의심되지 않는 한 0 (/ dev / zero)으로 한 번 덮어 쓰는 것으로 충분합니다. 자세한 내용은 superuser.com/questions/215852/… 를 참조하십시오 .
sleske

읽기에서 /dev/random몇 바이트 만 반환하는 이유 는 superuser.com/a/712515/139307
mklement0

답변:


42

/dev/random/dev/urandom에 "엔트로피 풀"을 사용합니다. 풀이 다 떨어지면 /dev/random다시 채워질 때까지 기다리면 시스템 동작 (키보드 입력, 마우스 움직임 등)을 모니터링해야하지만 /dev/urandom의사 난수 데이터는 계속 제공됩니다. /dev/random이론적으로 더 높은 품질이지만, /dev/urandom거의 확실하게 귀하의 목적에 충분합니다. (그러나 /dev/urandom다른 방법보다 속도가 느릴 수도 있습니다. 더 빠르지 만 품질이 낮은 발전기는 아마도 하드 드라이브를 지우는 데 충분할 것입니다. 임의의 숫자는 0, 1, 2, 3, 4, ....와 같은 시퀀스 보다이 목적에 더 좋습니다 .)

random(4)매뉴얼 페이지 인용 :

당신은 당신이 사용하는지 여부를 모르는 경우 /dev/random또는 /dev/urandom, 다음 아마 당신은 후자를 사용하고 싶습니다. 일반적으로 /dev/urandom오래 지속되는 GPG / SSL / SSH 키를 제외한 모든 항목에 사용해야합니다.

업데이트 :`random (4) 매뉴얼 페이지는 내가 쓴 이후로 업데이트되었습니다. 이제 말합니다 :

/dev/random인터페이스는 기존의 인터페이스로 간주되며, /dev/urandom초기 부팅 시간 동안 임의성을 필요로하는 응용 프로그램을 제외하고, 선호하는 모든 사용 사례에 충분한되며, 이러한 응용 프로그램의 getrandom(2)경우 엔트로피 풀이 초기화 될 때까지 차단되므로 대신 사용해야합니다.

Thomas Hühn의 " / dev / urandom에 대한 신화 "도 참조하십시오 .

그러나 /dev/urandom차단되지 않더라도 대량의 데이터를 생성하려는 경우 속도가 너무 느릴 수 있습니다. 시도하기 전에 시스템에서 몇 가지 측정을 수행하십시오.

편집 : 다음은 "참"난수 대 의사 난수에 대한 설명입니다. 관심있는 모든 것이 질문에 대한 실질적인 답변이라면 지금 읽기를 중단 할 수 있습니다.

/dev/random의사 난수 생성기 (PRNG)와 달리 "진정한"난수 생성기 를 구현하는 클레임 (여기 다른 답변 포함 )이 있습니다. 예를 들어, Wikipedia 기사 는 그러한 주장을합니다. 나는 그것이 옳지 않다고 생각합니다. 거기의 논의의 여기 하드웨어 난수 발생기를 의미,하지만 난 아무 기록도 볼 /dev/random일반적으로 이러한 장치를 사용하거나 일반적인 컴퓨터도 이러한 장치를 가지고 있습니다. 그들은 rand()실제로 예측할 수없는 출처에서 엔트로피를 수확하므로 결정 론적이지 않다는 점에서 C 함수 와 같은 PRNG와 다릅니다 .

"무작위"숫자 생성기에는 세 가지 클래스가 있다고합니다.

  1. C rand()함수 와 같은 결정 론적 PRNG 는 알고리즘을 사용하여 진정으로 무작위 시퀀스의 통계적 특성을 갖는 반복 가능한 시퀀스를 생성합니다. 이것들은 게임에 충분할 수 있고 (게임을 파종하는 좋은 방법으로) 반복성이 필요한 응용 프로그램에 필요하지만 암호에는 적합하지 않습니다.

  2. I / O 활동과 같이 실제로 예측할 수없는 일부 소스에서 엔트로피를 좋아 /dev/random하고 생성 /dev/urandom하는 생성기 (키보드를 두드 리거나 마우스를 움직이면 /dev/random더 많은 데이터를 생성 할 수 있음 ) 이들이 PRNG의 정의를 충족시키는 지 여부는 명확하지 않지만 (PRNG가 결정적이라고 말하는 정의를 보았 음) 진정한 난수 생성기 도 아닙니다 .

  3. 초기 상태에 대한 완전한 지식이 있어도 물리적으로 예측할 수없고 추가로 수학적 기술을 사용하여 올바른 통계적 속성을 보장하는 하드웨어 난수 생성기 .


2
/ dev / urandom조차도 암호화 된 파일 시스템을 만들기 전에 전체 파티션과 같이 많은 양의 디스크 공간을 채워야 할 경우 속도가 느려집니다. 이것은 훌륭한 답변과 자세한 설명에 작은 추가로 취해 져야합니다.
vtest

임의의 비트에서 하나 이상의 비트를 엔트로피를 계산 / 파생 / 생성 / ... 할 수 없으므로 입력으로 수신 된 것보다 더 많은 '무작위'비트를 생성 / 출력하는 것은 정의상 의사 랜덤입니다. 따라서 /dev/urandom의사 난수는 분명합니다. /dev/random입력의 엔트로피를 보수적으로 추정하려고 시도하고 실제로 할 수있는 것보다 더 많은 엔트로피를 출력하지 않는다는 점이 다릅니다. 키보드 나 네트워크 IO vs. 시간과 같은 모든 종류의 독립적 인 이벤트에서도 진정한 엔트로피를 얻을 수 있기 때문에 이것은 전용 TRNG 장치의 존재와 무관합니다.
JimmyB

13

/dev/random진정한 엔트로피의 소스, 진정한 임의의 바이트입니다. 따라서 임의의 출처가 필요합니다. 당신은 그것을 읽음으로써 임의성을 '사용'할 수 있습니다. 그것은 당신에게 가지고있는 모든 무작위성을 줄 것이고, 더 많이 얻을 때까지 차단합니다. 당신은 아마 거기 앉아 기다리고있을 것이고, 기계는 새로운 무작위성을 거의 얻지 못하고 기다릴뿐입니다.

/dev/random진정한 무작위 암호화, 고품질 무작위성. 따라서 디스크 드라이브 덮어 쓰기에 너무 많은 부담이됩니다. /dev/zero몇 번 부터 쓰는 것이 좋습니다. 또는에서 쓸 수 있습니다 /dev/urandom.이 코드는 진정한 임의성이 떨어지면 의사 난수를 차단하지 않습니다.


10
아니요, /dev/random"정확한 임의 바이트"를 생성하지 않습니다. 보다 고품질의 의사 난수 바이트를 생성 /dev/urandom합니다.
키스 톰슨

7

Linux에서 / dev / random은 고품질 의사 난수를 제공 하는 특수 파일입니다. 이 구현은 키보드, 마우스, 디스크 및 시스템 인터럽트에서 발생하는 이벤트에서 엔트로피를 수집합니다. ( 문서를 참조하십시오. ) 그러한 이벤트가 없을 때 엔트로피 풀이 비어 있으면 추가 환경 노이즈가 수집 될 때까지 / dev / random의 읽기가 차단됩니다. 문제가 설명되어 있습니다. 엔트로피 풀을 채우려면 키보드에서 키를 누를 수 있습니다.

다른 한편으로, 진정한 난수 생성기는 물리적 프로세스에서 난수를 생성 하는 하드웨어 난수 생성기를 사용 합니다. 이러한 프로세스에는 열 잡음 또는 광전 효과 또는 다른 물리적 현상. 이론적으로 이러한 과정은 완전히 예측할 수 없으며 예측할 수없는 이론에 대한 주장은 실험 테스트를 거칩니다.

하드웨어 난수 발생기는 일반적으로 물리적 현상의 일부 측면을 전기 신호, 증폭기 및 기타 전자 회로로 변환하여 임의 변동의 진폭을 거시적 수준으로 높이고 일부 유형의 아날로그-디지털 변환기를 변환기로 구성합니다. 무작위로 변하는 신호를 반복적으로 샘플링함으로써 일련의 난수가 얻어진다.

하드웨어 난수 생성기는 장치 드라이버 및 기타 소스에서 환경 소음을 엔트로피 풀로 수집합니다. 이 엔트로피 풀에서 난수가 생성됩니다. 읽을 때 / dev / random 장치는 엔트로피 풀의 추정 된 비트 수의 비트 내에서 임의의 바이트 만 반환합니다. 문제가 설명되어 있습니다.

하드웨어 RNG의 일부 구현은 커널 문서장치 정보에 설명되어 있습니다.

/ dev / random에 대응하는 것은 / dev / urandom ( "잠금 해제"/ 비 차단 임의 소스)이며 내부 풀을 재사용하여 의사 난수 비트를 생성합니다. 이는 호출이 차단되지 않지만 출력에 / dev / random의 해당 읽기보다 엔트로피가 적을 수 있음을 의미합니다.

따라서 CSPRNG (암호 적으로 안전한 의사 난수 생성기)를 생성하지 않으려면 / dev / urandom을 사용해야합니다.


/dev/random실제로 열 노이즈와 같은 소스를 사용 합니까 ? 내 이해는 I / O 활동 및 프로세스 상태와 같이 (상대적으로) 예측할 수없는 시스템 상태의 정보를 사용한다는 것입니다. 대부분의 Linux 시스템에는 열 잡음을 발생시킬 수있는 하드웨어가 있다고 생각하지 않습니다. 이것에 대한 몇 가지 문서를 인용 할 수 있습니까?
키이스 톰슨

그래 네가 맞아. 내가 언급 한 정보는 일반적인 하드웨어 난수 생성기에 적용됩니다.
Sachin Divekar

리눅스에서 링크 가 어떻게 구현되는지에 대한 문서를보십시오 . PC 환경에서 LRNG는 키보드, 마우스, 디스크 및 시스템 인터럽트에서 발생하는 이벤트로부터 엔트로피를 수집한다고 언급되어 있습니다. 다른 환경에서 LRNG는 사용 가능한 리소스에서 엔트로피를 수집합니다. 예를 들어 OpenWRT 라우터에는 하드 디스크, 마우스 및 키보드가 포함되어 있지 않으므로 엔트로피 소스로 사용할 수 없습니다. 반면, 라우터는 네트워크 이벤트에서 엔트로피를 수집합니다.
Sachin Divekar

아마도 당신은 당신의 대답을 업데이트 할 수 있습니다. /dev/random" 정확한 난수" 를 생성 한다고 말하는 것이 정확하다고는 생각하지 않습니다 .
Keith Thompson

Wikipedia의 / dev / random 기사에 따르면 Linux는 첫 번째 단락에서 이런 방식으로 진정한 난수 생성기를 구현 한 최초의 운영 체제입니다.
Sachin Divekar

2

귀하의 질문에 대답하지 않고 여기에 완전한 답변이 있습니다- 라이브 CD 드라이브 와이퍼 인 Darik 's Boot and Nuke 일명 DBAN 도 확인할 수 있습니다 .


0

shredcoreutils와 함께 제공 되는 명령을 사용하십시오 . 효율적인 방식으로 임의의 데이터를 사용합니다. dd는 저수준 도구이며 아마도이 작업에는 약간 낮은 수준 일 것입니다. shred예를 들어 장치의 쓸 수없는 부분을 효율적으로 건너 뜁니다.

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