사용자 상호 작용없이 gpg 키를 생성하는 방법 commit here,

https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html#Unattended-GPG-key-generation 방법에서 사용자 상호 작용없이 gpg 키를 생성하는 방법을 찾았 지만 그렇지 않습니다. 작동하는 것 같습니다.

내 스크립트는 다음과 같습니다

#!/usr/bin/env bash
rm -rf .gnupg
mkdir -m 0700 .gnupg
touch .gnupg/gpg.conf
chmod 600 .gnupg/gpg.conf
tail -n +4 /usr/share/gnupg2/gpg-conf.skel > .gnupg/gpg.conf

touch .gnupg/{pub,sec}ring.gpg


cat >.gnupg/foo <<EOF
    %echo Generating a basic OpenPGP key
    Key-Type: RSA
    Key-Length: 2048
    Subkey-Type: RSA
    Subkey-Length: 2048
    Name-Real: User 1
    Name-Comment: User 1
    Name-Email: user@1.com
    Expire-Date: 0
    Passphrase: kljfhslfjkhsaljkhsdflgjkhsd
    %pubring foo.pub
    %secring foo.sec
    # Do a commit here, so that we can later print "done" :-)
    %commit
    %echo done
EOF

gpg2 --verbose --batch --gen-key .gnupg/foo

내가 실행하면 다음과 같이 표시됩니다.

=$ ./gen.keys.sh
gpg: Generating a basic OpenPGP key
gpg: no running gpg-agent - starting one
gpg: writing public key to `foo.pub'
gpg: writing secret key to `foo.sec'

그러나 그냥 멈 춥니 다.

그 동안이 사용자의 ps 트리를 확인하면 다음을 볼 수 있습니다.

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
tstpg    22603  0.0  0.0  24108  5688 pts/9    Ss   14:59   0:00 -bash
tstpg    22624  0.0  0.0  13688  3168 pts/9    S+   14:59   0:00  \_ bash ./gen.keys.sh
tstpg    22632  0.2  0.0  27428  3676 pts/9    SL+  14:59   0:00      \_ gpg2 --verbose --batch --gen-key .gnupg/foo
tstpg    22634  0.3  0.0  18072  2884 pts/9    SL+  14:59   0:00          \_ gpg-agent --server

~ / .gnupg / gpg.conf에는 에이전트에 대한 언급이 없으며 에이전트가 무엇을 하려는지 전혀 모릅니다.

foo.pub/foo.sec 파일은 홈 디렉토리에 생성되지만 비어 있습니다.

내가 무엇을 놓치고 있습니까? 어떤 종류의 사용자 상호 작용없이 키를 생성하는 방법?

버전 :

  • gpg (GnuPG) 2.0.26
  • libgcrypt 1.6.2


답변

엔트로피가 부족할 수 있습니다. 키 생성에는 많은 고품질 난수가 필요합니다. 컴퓨터에 고품질의 무작위성을 제공하는 사용자의 활동이 없으면 엔트로피 풀은 생성에 의해 소진되고 생성 프로세스가 중단되어 풀이 다시 채워지기를 기다립니다.

만족도를 높이기 위해 당신의 선택은

  1. 가장 현명하지 않은 비 차단 의사 난수 생성기를 사용하도록 gpg 재구성 (아래 참조)

  2. 기존 시스템 상태에서 더 많은 엔트로피를 도출하기 위해 소프트웨어 솔루션 사용 (커널은 시스템 상태, 특히 해당 상태에 직접적인 사람 입력이없는 경우 (예 : CPU 또는 NIC 타이밍) 시스템에서 파생되는 엔트로피의 양에 대해 매우 보수적 임); 당신이 지적했듯이, hasged 는 그러한 해결책 중 하나입니다.

  3. 컴퓨터에 다른 고급 엔트로피 소스를 제공합니다. 엔트로피 키 또는 OneRNG 와 같은 장치는 이 요구 사항을 충족시킬 수 있습니다 (엔트로피 키를 소유하고 있다는 제품 저장과 관련이 없으며 매우 만족합니다).

편집 : mzhaase는 / dev / urandom vs. / dev / random에 대한 이 기사에 대한 의견에서 관심을 끌고 있습니다 (많은 덕분에 훌륭한 기사입니다!) urandom. 실제로이 기사는 두 가지 출처가 동일하다고 말하지 않으며

리눅스의 / dev / urandom은 커널이 엔트로피를 모을 수있는 기회를 갖기 전에 행복하지 않은 숫자를 제공합니다. 언제입니까? 시스템 시작시 컴퓨터를 부팅합니다.

즉, 부팅 후 urandomPRNG가 충분한 엔트로피로 초기화 될 때까지 키 생성에 사용하는 것은 실제로 안전하지 않습니다. 특히 무인 헤드리스 서버에서 시간이 걸릴 수 있으며 시스템이 명시 적으로 알려주지 않기 때문에 임계 값에 도달 한 시점을 알 수 없습니다.

이제 /dev/random숫자를 발행 할 준비가 되었다면 엔트로피 풀이 충분히 깊어 urandom제대로 초기화 될 수 있다고 합리적으로 추론 할 수 있습니다 . 그러나 /dev/random매번 사용하기 전에 블로킹 을 확인 해야하는 경우 urandom(재부팅보다 키를 덜 생성하는 경우가 많을 가능성이 높습니다) 숫자를 사용하여 /dev/random키를 생성 할 수도 있습니다 .


답변

스크립트를 작동시키는 몇 가지 간단한 변경 사항이 있습니다. 또한 키가 생성되면 자동으로 테스트되도록 몇 가지 테스트를 포함 시켰습니다.

또한 주요 테스트를 자동화 할 수 있도록 비밀번호를 제거했습니다.

#!/usr/bin/env bash
rm -rf .gnupg
mkdir -m 0700 .gnupg
touch .gnupg/gpg.conf
chmod 600 .gnupg/gpg.conf
tail -n +4 /usr/share/gnupg2/gpg-conf.skel > .gnupg/gpg.conf

cd .gnupg
# I removed this line since these are created if a list key is done.
# touch .gnupg/{pub,sec}ring.gpg
gpg2 --list-keys


cat >keydetails <<EOF
    %echo Generating a basic OpenPGP key
    Key-Type: RSA
    Key-Length: 2048
    Subkey-Type: RSA
    Subkey-Length: 2048
    Name-Real: User 1
    Name-Comment: User 1
    Name-Email: user@1.com
    Expire-Date: 0
    %no-ask-passphrase
    %no-protection
    %pubring pubring.kbx
    %secring trustdb.gpg
    # Do a commit here, so that we can later print "done" :-)
    %commit
    %echo done
EOF

gpg2 --verbose --batch --gen-key keydetails

# Set trust to 5 for the key so we can encrypt without prompt.
echo -e "5\ny\n" |  gpg2 --command-fd 0 --expert --edit-key user@1.com trust;

# Test that the key was created and the permission the trust was set.
gpg2 --list-keys

# Test the key can encrypt and decrypt.
gpg2 -e -a -r user@1.com keydetails

# Delete the options and decrypt the original to stdout.
rm keydetails
gpg2 -d keydetails.asc
rm keydetails.asc


답변

자동화 된 응용 프로그램 설치를위한 키 생성의 일부로이 문제를 해결했습니다. enrg 를 생성 하기 위해 ‘ rngd ‘패키지를 설치하고 시작하면 문제가 해결됩니다. 설치 및 사용이 간편합니다.

코드는 다음과 같습니다 .

  • /dev/hwrandom엔트로피 소스를 제공하기 위해 rngd ( 기본적으로 수정 가능)를 시작합니다.
  • 간단한 템플릿을 복사합니다 (jinja 템플릿 이메일과 이름을 원하는 것으로 바꿉니다)
  • gpg를 사용하여 키를 생성합니다
  • 로컬 키링으로 가져옵니다.

답변

다음은 사용할 수 있지만 현재 터미널에 영향을 미치지 않도록 새 터미널에서이 스크립트를 실행하는 것이 좋습니다. 이 스크립트는 사용자가 스크립트를 종료 할 때까지 머신을 사용 중 상태로 유지하고 무한 루프에 빠지도록하여 엔트로피를 계속 생성합니다. 키 생성 이후까지 사용자 상호 작용이 필요하지 않습니다. 모든 스크립트는 파일을 영원히 나열하는 것입니다.

컴퓨터와 키의 크기에 따라 생성하는 데 몇 분 (때로는 10+)이 걸릴 수 있지만 상호 작용할 필요는 없습니다.

#!/bin/sh

while true;
do find * / && find * / && find * / && find * / && find * / && find * / && find * / && find * / && find * /;

echo "Press ctrl+c to exit this infinite loop"
sleep 2;
done


답변