GPG 키에 "랜덤 번호 엔트로피"를 추가 하시겠습니까?


10

다음 비디오 : Linux HOWTO : PGP로 데이터 보안, Part 2 에서는 키 페어를 생성하는 방법을 보여줍니다 gpg. 대략 1:50강사는 다음과 같이 말합니다.

키가 생성되는 동안 키 쌍을 만들기 위해 마우스를 조금 움직여 조금 더 임의의 숫자 엔트로피를 얻는 것이 좋습니다.

특히 명령 줄 도구가 커서의 영향을받지 않기 때문에 이것은 신화처럼 보입니다. 다른 한편으로, 나는 리눅스의 난수 생성기가 GUI에 의해 공유되는지 또는 독립적인지에 관계없이 리눅스의 난수 생성기가 어떻게 작동하는지 전혀 모른다. 그가 주장하는 것에 재고가 있습니까, 아니면 화물 컬트 프로그래밍 의 예 입니까?


부수적 인 질문으로, 이것은 "도시 신화"의 올바른 사용입니까? "컴퓨팅 내 신화"와 비슷한 문구가 있습니까?
IQAndreas 2018 년

1
나는 그 구절이 도시의 전설 이라고 생각한다 . 나는 도시 신화에 대해 들어 본 적이 없다 . en.wikipedia.org/wiki/Urban_legend를 참조하십시오 . 컴퓨팅에서 "cargo cult" 라는 문구 가 적합 할 수 있습니다.
derobert

답변:


8

사실에는 신화보다 ​​더 많은 진실이 있지만 그럼에도 불구하고 그 진술은 무슨 일이 일어나고 있는지에 대한 근본적인 오해를 반영합니다. 예, GPG를 사용하여 키를 생성하는 동안 마우스를 이동하는 것이 좋습니다. 그렇습니다. 마우스를 움직이면 임의의 숫자를 무작위로 만드는 엔트로피가 생깁니다. 아니요, 마우스를 움직여도 키가 더 안전하지 않습니다.

암호화에 적합한 모든 좋은 임의 생성기는 Linux에 해당 범주에 있으며 두 가지 구성 요소가 있습니다.

  • 엔트로피 비 결정적이다 소스. 엔트로피의 목적은 난수 생성기를 예측할 수없는 데이터로 부트 스트랩하는 것입니다. 엔트로피 소스는 결정적이지 않아야합니다. 그렇지 않으면 공격자가 동일한 계산을 재현 할 수 있습니다.
  • 유사 난수 변화 내부 상태에서 결정적 방식으로 예측 불가능한 난수를 생성한다.

엔트로피는 컴퓨터 외부의 소스에서 가져와야합니다. 사용자는 엔트로피의 한 소스입니다. 사용자가하는 일은 대부분 무작위가 아니지만, 키 스트로크와 마우스 움직임의 미세한 타이밍은 예측할 수 없을 정도로 약간 무작위 적입니다. 매우 무작위 적이지는 않지만 조금씩 누적됩니다. 엔트로피의 다른 잠재적 원인으로는 네트워크 패킷 및 카메라 또는 마이크 화이트 노이즈의 타이밍이 있습니다. 다른 커널 버전과 구성은 다른 소스 세트를 사용할 수 있습니다. 일부 컴퓨터에는 방사성 붕괴 또는 덜 불안정한 전자 회로에 기반한 전용 하드웨어 RNG 회로가 있습니다. 이 전용 소스는 사용자가 이상한 일을하지 않고도 처음 부팅 할 때 예측 가능한 동작을 수행 할 수있는 내장 장치 및 서버에 특히 유용합니다.

Linux는 두 개의 장치를 통해 프로그램에 난수를 제공합니다 : /dev/random/dev/urandom . 두 장치 중 하나에서 읽으면 암호화 품질이 반환됩니다. 두 장치 모두 동일한 내부 RNG 상태와 동일한 알고리즘을 사용하여 상태를 변환하고 임의 바이트를 생성합니다. 그들에게는 옳지 않은 한계가 있습니다.

  • /dev/urandom 시스템이 아직 충분한 엔트로피를 축적하지 않은 경우 예측 가능한 데이터를 반환 할 수 있습니다.
  • /dev/random사용 가능한 엔트로피의 양을 계산하고 충분하지 않은 경우 차단합니다. 계산이 사용 가능한 엔트로피의 양을 각 출력 비트에 따라 선형으로 줄 이도록하는 이론적 고려 사항을 기반으로한다는 점을 제외하고는 좋은 소리입니다. 따라서 /dev/random매우 빨리 차단되는 경향이 있습니다.

Linux 시스템은 내부 RNG 상태를 디스크에 저장하고 부팅시 복원합니다. 따라서 엔트로피는 한 부팅에서 다음 부팅으로 이어집니다. 엔트로피가 부족한 Linux 시스템은 새로 설치할 때뿐입니다. 시스템에 엔트로피가 충분하면 엔트로피가 감소하지 않습니다. 리눅스의 결함 계산 만이 감소합니다. 이 고려 사항에 대한 자세한 설명을 보려면 전문 암호 작성자 /dev/urandom가 암호 키를 생성하는 데 읽기 가 적합합니다 . 아소 참조 할 수 있습니다은 RANDOM.C에 사용되는 엔트로피 추정을 설명 .

마우스를 움직이면 시스템에 더 많은 엔트로피가 추가됩니다. 그러나 GPG 만 읽을 수 /dev/random없습니다,/dev/urandom (이 문제를 해결하는 방법은 만드는 것입니다 /dev/random:로 9 장치 같은 1 /dev/urandom가 - 랜덤 충분하지 난수를받을 위험에 노출되지 않도록). 마우스를 움직이지 않으면 키는 임의로 무작위입니다. 그러나 일어날 수있는 일은 gpg가 에서 읽기로 차단 되어 /dev/random커널의 엔트로피 카운터가 상승하기를 기다리는 것입니다.


리눅스의 현재 버전을 제외하고는 적어도 내 테스트에서 입력 장치를 엔트로피 소스 (또는 적어도 예상 엔트로피)로 사용하지 않습니다. 이론 상으로는 공격자의 통제하에있을 수 있기 때문에 그들이 바뀌 었다고 확신합니다.
derobert

@derobert 3.12부터 add_input_randomness에 대한 호출이 drivers/input/input.c있지만 실제로 어떤 상황에서 엔트로피를 주입할지 모르겠습니다.
Gilles 'SO- 악한 중지'

엔트로피가 추가되지만 0의 추정치로 USB 마우스와 PS / 2 키보드를 모두 시도했지만 엔트로피 추정치보다 높지 않은 것으로 보입니다. 그러나 코드에서 credit_entropy_bits에 대한 호출을 볼 때 왜 그런지 확실하지 않습니다.
derobert

3

GPG는 Linux (커널) 난수 생성기를 사용하고 있습니다. 커널 생성기는 모든 종류의 장소에서 엔트로피 (랜덤 성)를 얻습니다. 그 중에서도 특정 인터럽트에 대한 인터럽트 타이밍이 있습니다. 마우스를 움직이면 (타자, 디스크 활동 등) 모두 인터럽트가 발생합니다.

따라서 마우스를 움직이면 실제로 난수 생성기에 들어갈 수 있습니다. 그러나 사용중인 정확한 커널 버전에 따라 다릅니다. 최신 버전은 (적어도 내 테스트에서는) 엔트로피에 키보드 또는 마우스 인터럽트를 사용하지 않습니다. 그러나 디스크 활동은 수행합니다 (예를 들어, 실행 sync하면 플러시 양에 따라 잠재적으로 많은 양의 엔트로피가 추가됨).

요컨대 이것은 현재 Linux 버전에서는 사실이 아닙니다. 오래된 것들이었습니다.

그러나 생성기에 엔트로피가 부족하면 중지해야합니다. 따라서 일부 엔트로피가 생성 될 때까지 키 생성이 중단됩니다. 따라서 보안 문제가 아니라 영원한 문제가 될 것입니다.

에서 사용할 수있는 엔트로피 양을 확인할 수 있습니다 cat /proc/sys/kernel/random/entropy_avail.


또한 rngd엔트로피 풀을 인공적으로 먹이는 것과 같은 도구를 사용할 수 있습니다.
Patrick

실제로 패트릭은 새로운 칩을 가지고 NSA를 신뢰한다면 (오, 잠깐, 인텔) RDRAND를 사용할 수 있습니다.
derobert

haveged엔트로피 풀을 인위적으로 먹이는 또 다른 좋은 도구입니다.
mavillan

RNG는 엔트로피가 부족하지 않으며 내부 엔트로피 측정 값이 부족합니다. 또한 퍼즐의 중요한 부분은 gpg가 마우스를 신경 쓰지 않고 커널이하는 것입니다.
Gilles 'SO- 악의를 멈춰라'

@Gilles gpg가 Linux RNG를 사용하고 있음을 분명히했습니다. 엔트로피 추정기의 버그는 범위를 벗어난 것으로 보입니다.
derobert

0

테일은 다음을 haveged설치 했기 때문에 키 생성이 매우 빠릅니다 .

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