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: [email protected]
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を再構成しますこれは最も賢明ではありません(以下を参照)。
ソフトウェアソリューションを使用して、既存のシステム状態からより多くのエントロピーを導出する(カーネルは、システム状態から導出する準備ができているエントロピーの量について、特にその状態に直接の人間の入力がない場合、CPUまたはNICタイミング);あなたが指摘したように、 haveged はそのようなソリューションの1つです。
高度なエントロピーの別の物理的なソースをコンピューターに提供します。 エントロピーキー または OneRNG のようなデバイスは、この要件を満たすことができます(エントロピーキーを所有しているため、どちらの製品にも接続していませんが、非常に満足しています)。
Edit:mzhaaseはコメントで私の注意を この記事/ dev/urandomと/ dev/randomの比較 (forおかげで、それは素晴らしい記事です!)そして、キーを作成するためにurandom
を使用する私の嫌いなことに問題を抱えています。実際、この記事は2つのソースが同等であるとは述べておらず、
Linuxの/ dev/urandomは、カーネルがエントロピーを収集する前に、ランダムではない数値を喜んで提供します。それはいつですか?システムの起動時に、コンピューターを起動します。
つまり、ブート後、urandom
PRNGが十分なエントロピーで初期化されるまでは、それをキー生成に使用するのは本当に安全ではありません。しばらく時間がかかる場合があります。 、特に無人のヘッドレスサーバーでは、システムが明示的に通知しないため、しきい値にいつ到達したかはわかりません。
さて、/dev/random
が番号を発行する準備ができている場合、エントロピープールがurandom
が適切に初期化されるのに十分な深さであると合理的に推測できます。しかし、urandom
を使用する前に/dev/random
のブロッキングをチェックする必要がある場合(再起動よりも頻繁にキーを生成しない場合、そうなる可能性があります)、キーを生成するための/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: [email protected]
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 [email protected] 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 [email protected] keydetails
# Delete the options and decrypt the original to stdout.
rm keydetails
gpg2 -d keydetails.asc
rm keydetails.asc
これは、自動化されたアプリケーションインストール用のキーを生成する一環として解決されました。 entroyを生成するために「 rngd 」パッケージをインストールして開始すると、問題が解決します。インストールと使用が簡単です。
これがコードです 。
/dev/hwrandom
デフォルトでは、ただし変更可能)エントロピーのソースを提供する