
다음 비디오에서:Linux HOWTO: PGP로 데이터 보호, 2부을 사용하여 키 쌍을 생성하는 방법이 표시됩니다 gpg
. 쯤에 1:50
강사가 다음과 같이 말합니다.
키가 생성되는 동안 다음을 수행하는 것이 좋습니다.마우스를 움직여 보세요키 쌍 생성을 위해 좀 더 임의의 숫자 엔트로피를 제공합니다.
특히 명령줄 도구는 일반적으로 커서의 영향을 받아서는 안 되기 때문에 이것은 나에게 신화처럼 보입니다. 반면에 나는 Linux의 난수 생성기가 GUI에 의해 공유되거나 독립적인지 여부에 관계없이 어떻게 작동하는지 전혀 모릅니다. 그가 주장하는 주식이 있습니까? 아니면 이것이 다음의 예입니까?화물 컬트 프로그래밍?
답변1
사실 신화보다 더 많은 진실이 있습니다. 그럼에도 불구하고 이 진술은 무슨 일이 일어나고 있는지에 대한 근본적인 오해를 반영합니다. 예, GPG로 키를 생성하는 동안 마우스를 움직이는 것이 좋습니다. 예, 마우스를 움직이면 난수를 무작위로 만드는 엔트로피가 발생합니다. 아니요, 마우스를 움직인다고 해서 키가 더 안전해지는 것은 아닙니다.
암호화에 적합한 모든 우수한 무작위 생성기(Linux는 해당 범주에 속함)에는 두 가지 구성 요소가 있습니다.
- 안엔트로피비결정적인 소스입니다. 엔트로피의 목적은 예측할 수 없는 데이터로 난수 생성기를 부트스트랩하는 것입니다. 엔트로피 소스는 비결정적이어야 합니다. 그렇지 않으면 공격자가 동일한 계산을 재현할 수 있습니다.
- ㅏ의사 난수 생성기, 이는 변화하는 내부 상태에서 결정론적인 방식으로 예측할 수 없는 난수를 생성합니다.
엔트로피는 컴퓨터 외부의 소스에서 나와야 합니다. 사용자는 엔트로피의 한 소스입니다. 사용자가 하는 일은 대부분 무작위가 아니지만 키 입력과 마우스 움직임의 미세한 타이밍은 너무 예측할 수 없어서 약간 무작위입니다. 아주 무작위는 아니지만 조금씩 누적됩니다. 엔트로피의 다른 잠재적인 원인으로는 네트워크 패킷의 타이밍과 카메라 또는 마이크 백색 소음이 있습니다. 다양한 커널 버전과 구성에서는 다양한 소스 세트를 사용할 수 있습니다. 일부 컴퓨터에는 방사성 붕괴 또는 덜 인상적이지만 불안정한 전자 회로를 기반으로 하는 전용 하드웨어 RNG 회로가 있습니다. 이러한 전용 소스는 사용자가 이상한 작업을 하지 않고도 처음 부팅할 때 상당히 예측 가능한 동작을 수행할 수 있는 내장 장치 및 서버에 특히 유용합니다.
Linux는 두 가지 장치를 통해 프로그램에 난수를 제공합니다./dev/random
그리고/dev/urandom
. 두 장치 중 하나에서 읽으면 암호화 품질이 반환됩니다. 두 장치 모두 동일한 내부 RNG 상태와 동일한 알고리즘을 사용하여 상태를 변환하고 임의 바이트를 생성합니다. 그것들은 어느 쪽도 옳지 않게 만드는 특별한 한계를 가지고 있습니다.
/dev/urandom
시스템이 아직 충분한 엔트로피를 축적하지 않은 경우 예측 가능한 데이터를 반환할 수 있습니다./dev/random
사용 가능한 엔트로피의 양을 계산하고 충분하지 않은 경우 블록을 차단합니다. 계산이 각 출력 비트에 따라 선형적으로 사용 가능한 엔트로피의 양을 감소시키는 이론적 고려 사항을 기반으로 한다는 점을 제외하면 이는 좋은 것 같습니다. 따라서/dev/random
매우 빠르게 차단되는 경향이 있습니다.
Linux 시스템은 내부 RNG 상태를 디스크에 저장하고 부팅 시 복원합니다. 따라서 엔트로피는 한 부팅에서 다음 부팅으로 이어집니다. Linux 시스템에 엔트로피가 부족한 유일한 경우는 새로 설치할 때입니다. 시스템에 충분한 엔트로피가 있으면 엔트로피는 감소하지 않습니다. Linux의 잘못된 계산만이 감소합니다. 이 고려 사항에 대한 자세한 설명은 다음을 참조하세요./dev/urandom
암호화 키를 생성하는 데 적합합니다., 전문 암호학자가 작성했습니다. 아소 참조Random.c에서 사용된 엔트로피 추정을 설명할 수 있습니까?.
마우스를 움직이면 시스템에 더 많은 엔트로피가 추가됩니다. 하지만gpg는 에서만 읽을 수 있지만 읽을 /dev/random
수는 없습니다./dev/urandom
(이 문제를 해결하는 방법은 /dev/random
와 같은 1:9 장치를 만드는 것입니다 /dev/urandom
.) 따라서 충분히 난수가 아닌 난수를 받을 위험이 절대 없습니다.마우스를 움직이지 않으면 키는 최대한 무작위로 지정됩니다. 하지만 일어날 수 있는 일은 gpg가 차단될 수 있다는 것입니다.에서 읽는 동안 /dev/random
커널의 엔트로피 카운터가 상승할 때까지 기다립니다.
답변2
GPG는 Linux(커널) 난수 생성기를 사용하고 있습니다. 커널 생성기는 모든 종류의 장소에서 엔트로피(임의성)를 얻습니다. 그중에는 특정 인터럽트에 대한 인터럽트 타이밍이 있습니다. 마우스를 움직이면(타이핑, 디스크 활동 등) 모두 인터럽트를 생성합니다.
따라서 마우스를 움직이면 실제로 난수 생성기에 영향을 미칠 가능성이 있습니다. 그러나 작동 여부는 사용 중인 정확한 커널 버전에 따라 다릅니다. 최신 버전에서는 (적어도 내 테스트에서는) 엔트로피를 위해 키보드나 마우스 인터럽트를 사용하지 않습니다. 그러나 디스크 활동은 그렇습니다(예를 들어, 실행하면 sync
플러시되는 양에 따라 잠재적으로 많은 양의 엔트로피가 추가됩니다).
간단히 말해서 현재 Linux 버전에서는 그렇지 않습니다. 그것은 오래된 것들에있었습니다.
그러나 생성기의 엔트로피가 부족하면 그냥 중지되어야 하므로 일부 엔트로피가 생성될 때까지 키 생성이 중단됩니다. 따라서 이는 보안 문제가 아니라 영원히 지속되는 문제일 것입니다.
엔트로피가 얼마나 되는지 알 수 있습니다 cat /proc/sys/kernel/random/entropy_avail
.
답변3
Tails는 다음을 설치했기 때문에 매우 빠른 키 생성을 제공합니다 haveged
.
sudo apt-get install haveged