私は最近、主にGnuPGでスマートカード機能を使用して暗号化と認証に使用したい2つのYubikeys Neoを購入しました。私は件名に関するいくつかのハウツー(最も注目すべきは ここ および ここ )を読み、3でキーリングを生成してYubikeyにエクスポートすることができました署名、暗号化、認証用のサブキー。これらを使用して、私は自分の公開鍵を使用してファイルを暗号化することができました。これは、Yubikeyをプラグインすることによってのみ解読できました。すごい。
次に、この設定を他のYubikeyに複製して、メインデバイスを紛失した場合のバックアップとして機能させます。 gpgの「keytocard」コマンドはローカルキーを削除するので、.gnupgディレクトリのバックアップを作成して復元することで同じキーを他のYubikeyにエクスポートすることしかできません(これは正しくないようです)。テストファイルを復号化するために、gpgはシリアル番号を含むキーを具体的に要求し、バックアップキーを使用して復号化しません。
このようなバックアップとして2つの異なるユビキーを使用する方法はありますか?そうでない場合、これを達成するために進む最良の方法は何ですか? (つまり、メインキーを紛失した場合に備えて、ファイルの復号化に使用できるバックアップキーを保持します)。
試行錯誤の末、ようやくこれを実現する方法を見つけました。これは誰かを助けるために私の質問への回答です:
トリックは、同じサブキーを2つのYubikeyにエクスポートしようとせず(gpgはそれを好まない)、異なるサブキーを生成することでした。私のキーリングには6つのサブキーがあります。3つはメインのYubikey(Sign、Encrypt、Auth)用で、3つはバックアップのYubikey用です。対応する秘密鍵をYubikeysにエクスポートしました。今回は.gnupg
のバックアップを復元するためにハックする必要はありませんでした。最後に、私はboth公開鍵を使用してファイルを暗号化しているので、Yubikeysでそれらを復号化できます。
gpg -e -r [keyid1]! -r [keyid2]! [file]
各キーIDの最後にある感嘆符を忘れないでください。そうでなければ、何らかの理由で、gpgは各受信者に対して「同じキーリングのいくつかのキー」が必要であることを理解し、デフォルトで同じキーを2回選択します。
これでgpgはいずれかの秘密鍵を受け入れてファイルを復号化します。 Yubikeysの場合、最初のプラグを差し込むように求め、キャンセルすると2つ目のプラグを求めるので、どちらかを使用できます。最初の-r
でメインキーを指定したので、gpgはメインのYubikeyを直接要求し、バックアップのキーを気にしません。物事を簡単にするために、両方のキーIDを使用してgpgコマンド全体をyk_encrypt
にエイリアスしました。
あなたがローカルのgpgアプリに新しいカードをスキャンし、問題が発生した場合は代わりにそれを使用するように指示する実行可能なコマンドがあることを示すこの言い回しを見つけました。そのため、バックアップカードを使用する場合は、「init」を実行して機能させる最悪のケースではありません。
https://forum.yubico.com/viewtopic38a1.html?f=35&t=24
ランニング
gpg-connect-agent "scd serialno" "learn --force"/bye
現在挿入されている鍵のPGP鍵の秘密鍵スタブを更新します。したがって、キーの挿入後にそれを実行すると、gpgは現在挿入されているキーを使用します。
ディレクトリ全体をバックアップする代わりに、キーをエクスポート(のバックアップコピーを作成)できます。
gpg -a -o seckey.asc --export-secret-key ABCD1234
そしてそれを(最初のカードに移動した後)再びインポートします
gpg --import seckey.asc
GPGは、カードにキーを移動した後、キーを格納するため、特定のカードを要求しています スタブ システムで、そのキーをそのカードに関連付けます。キーをgpgから削除した場合(例:gpg --delete-secret-and-public-key ABCD1234)and参照(たとえば、.
C:\ users\someUser\AppData\Roaming\gnupg\private-keys-v1.dまたは
/ home/someUser/.gnupg/private-keys-v1.d
)次に、バックアップYubikeyを挿入して、
gpg --card-status
最初のキーではなく、2番目のユビキーでそのキーを参照するスタブを作成します。
あなたもcouldエクスポートされたキーを安全に保ち、それをバックアップとして使用しますが、それは質問されませんでした。
可能です。
grip
コマンドを使用して、各キーのキーグリップを見つけます。.key
フォルダーに各キーグリップの~/.gnupg/private-keys-v1.d/*
ファイルが見つかります...何も削除しないように注意しながら、それらを削除します(無関係なリングの秘密鍵はワイプしないでください)。gpg2 --import
手順2で作成したエクスポートされた秘密鍵。gpg2 --card-edit
を1回実行するだけで、カードが自動的に検出され、キーリング内のpubkeyの秘密鍵に接続されます(キーグリップを削除してもpubkeyは削除されません)...またはgpg-connect-agent "scd serialno" "learn --force" /bye
を次のように実行しますMrTristanさんは、カードのシリアルx秘密鍵の関係情報をリセットすることを提案しました。秘密鍵をいったんyubikeyに入力すると、それを取得することはできません。そのため、自分で作成したのでは手遅れです。
また、この方法の大きな重大な問題の1つは、キーログを作成していないこと、および作成中に秘密キーのバックアップを盗んでいないことをどのようにして知ることができるかです...
それでも、この方法は、秘密鍵をディスクに保存するだけの方法よりも優れています。攻撃対象領域が初期設定のみに削減されるため、いつでもバックアップを取得する必要があります。