아래 영상에서:Linux HOWTO: PGP로 데이터 보호, 2부, 를 사용하여 키 쌍을 생성하는 방법을 살펴보겠습니다 gpg
. 그 무렵 1:50
강사는 다음과 같이 말했다.
키를 생성할 때 다음을 수행하는 것이 가장 좋습니다.마우스 이동키 쌍을 생성하려면 난수 엔트로피를 조금 더 부여하세요.
특히 명령줄 도구는 일반적으로 커서의 영향을 받아서는 안 되기 때문에 이것은 나에게 신화처럼 보입니다. 반면에 Linux의 난수 생성기가 GUI에서 공유되는지 또는 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
(이 문제를 해결하는 한 가지 방법은 로 만드는 것입니다 /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