/dev/random의 낮은 엔트로피가 나쁜가요?

/dev/random의 낮은 엔트로피가 나쁜가요?

일반 Linux 사용자의 경우 /dev/random에 엔트로피가 없거나 거의 없는 것이 보안 관점이나 기타 관련 관점에서 나쁜 것으로 간주되는지 궁금합니다.

편집: 난수를 생성할 필요가 없습니다(비밀번호 생성 및 디스크 암호화에도 /dev/urandom을 사용합니다). 재미삼아 /dev/random에서 임의의 문자열을 생성하는 bash 스크립트가 있습니다. 물론 잠시 사용하고 나면 /dev/random에 엔트로피가 없어 차단됩니다. IRC에서는 이렇게 하는 것이 "나쁘다"는 말을 들었지만 이유는 제시되지 않았습니다. 일반 Linux 사용자가 /dev/random을 사용하여 자동으로 임의의 항목을 생성하기 때문에 이것이 나쁜가요? 그렇다면 어떤 절차가 필요합니까?

나는 또한 /dev/random에 엔트로피를 남기지 않으면 숫자 생성이 결정적이라는 것을 알고 있습니다. 하지만 다시 말하지만, 내 컴퓨터(일반 Linux 사용자)에게 정말 난수가 필요한가요?

편집 2: 약 3분 동안 매초 /dev/random의 엔트로피 수준을 모니터링했는데, 모니터링 시작 시 엔트로피를 사용하여 임의의 문자 문자열을 생성하는 bash 스크립트를 시작했습니다. 나는 계획을 세웠다. 엔트로피 수준이 어떤 방식으로든 진동하는 것을 볼 수 있으므로 내 컴퓨터의 일부 프로그램은 /dev/random을 사용하여 콘텐츠를 생성하고 있습니다. /dev/random 파일을 사용하여 모든 프로그램을 나열하는 방법이 있습니까? 엔트로피 수준과 시간

또한 엔트로피 풀이 비워지면 "허용 가능한 수준"의 엔트로피를 생성하는 데 1분도 채 걸리지 않는다는 것을 알 수 있습니다.

답변1

엔트로피는 입력 속도가 상당히 느리기 때문에 /dev/random사용하는 프로그램을 사용하면 /dev/random엔트로피가 낮아지는 것이 일반적입니다 .

Linux의 엔트로피 정의를 믿는다고 해도 낮은 엔트로피는 보안 문제가 아닙니다. /dev/random엔트로피가 충분할 때까지 차단합니다. 엔트로피가 낮으면 무작위성을 잃지 않고 마우스를 움직일 때까지 기다리는 응용 프로그램을 얻을 수 있습니다.

사실, 엔트로피에 대한 Linux의 정의에는 결함이 있습니다. 이는 이론적 수준의 무작위성을 달성하려고 노력하는 극도로 보수적인 정의이지만 실제로는 쓸모가 없습니다. 실제로 엔트로피는 절대 없어지지 않습니다. 일단 엔트로피가 충분하면 충분합니다. 불행하게도 Linux에는 난수를 가져오기 위한 두 가지 인터페이스만 있습니다. 차단 /dev/random해서는 안 될 때 차단하는 인터페이스와 /dev/urandom절대 차단하지 않는 인터페이스입니다. 다행히도 실제로는/dev/urandom거의 항상 정확함, 시스템이 신속하게 충분한 엔트로피를 수집하기 때문입니다./dev/urandom항상 가능(암호화 키 생성 등의 용도 포함).

문제가 발생하는 유일한 /dev/urandom경우는 새로 설치를 처음 부팅할 때, Live CD를 부팅한 후 또는 가상 머신을 복제한 후와 같이 시스템에 엔트로피가 아직 충분하지 않은 경우입니다. 이 경우 /proc/sys/kernel/random/entropy_avail약 200에 도달할 때까지 기다리십시오. 그 후에는 /dev/urandom원하는 대로 사용할 수 있습니다.

답변2

잔여 엔트로피 없음그리고 알아확신을 가지세요 /dev/random. 이를 통해 다른 프로세스(악의적인 사용자가 시작한 프로세스 포함)가 향후 출력(즉, 해당 프로세스에서 읽은 바이트)을 "예측"할 수 있습니다 /dev/random.

한편으로 "진정한" 무작위성이 필요한 훌륭한 Linux 프로그래머는 주의 깊게 읽을 것입니다.랜덤(4)그래서 그럴 것이다독서(2)/dev/random 사용 가능한 엔트로피가 없으면 차단됩니다. 이로 인해 데이터를 읽는 프로세스가 짜증날 수 있습니다. 또한 참조하십시오 (OP가 댓글을 달았음)에 관한 신화urandom페이지.

반면에 일부 프로그래머는 읽기가 /dev/urandom거의 항상 충분하고 차단되지 않는 것을 선호합니다. AFAIK, C++11 표준 라이브러리걸프 협력 협의회이는 다음을 위해 수행됩니다.표준::random_device.

분명히 임의성은 일반 데스크톱보다 서버에서 더 중요합니다.

귀하의 질문이 "Linux 프로그래머가 이러한 문제를 인식할 만큼 유능합니까?"가 된다면 /dev/random이는 의견에 대한 질문이나 설문조사가 되며 이는 아마도 주제에서 벗어난 것일 수 있습니다.

내 의견은 프로그래머가 읽어야 한다는 것입니다.랜덤(4).

최신 Intel 프로세서에는로드랜드기계 명령을 실행하고 /dev/random이를 임의성의 소스로 사용합니다. 그래서 나는 엔트로피 부족이 /dev/random그들에게 영향을 미치지 않을 것이라고 생각합니다 (즉, 결코 일어나지 않을 것입니다).

간단히 말해서, 나는 낮은 엔트로피에 관심이 없습니다 /dev/random. 그러나 나는 무작위성이 중요한 소프트웨어(예: 포커 사이트, 일부 뱅킹 시스템)를 작성하지 않습니다(인명 손실이나 수백만 유로 또는 달러의 비용이 너무 많이 듭니다). 나는 그러한 시스템이 더 나은 무작위성 소스를 제공할 수 있고(IIRC, 메가비트/초 대역폭을 갖춘 하드웨어 무작위 생성기 비용은 몇 백 유로임) 무작위성과 확률 전문 지식을 보유해야 합니다(또는 그에 대한 컨설팅 서비스를 구매해야 합니다).

README아마도 및 문서에서 간단히 언급해야 할 수도 있습니다.당신의귀하가 사용하고 있는 소프트웨어 /dev/random및/또는 /dev/urandom어떤 목적으로 사용하고 귀하의 코드에 대한 임의성의 중요성을 명확하게 문서화하십시오.

관련 정보