web-dev-qa-db-ja.com

同一のPGPキーでバックアップYubikeyを作成する

私は最近、主にGnuPGでスマートカード機能を使用して暗号化と認証に使用したい2つのYubikeys Neoを購入しました。私は件名に関するいくつかのハウツー(最も注目すべきは ここ および ここ )を読み、3でキーリングを生成してYubikeyにエクスポートすることができました署名、暗号化、認証用のサブキー。これらを使用して、私は自分の公開鍵を使用してファイルを暗号化することができました。これは、Yubikeyをプラグインすることによってのみ解読できました。すごい。

次に、この設定を他のYubikeyに複製して、メインデバイスを紛失した場合のバックアップとして機能させます。 gpgの「keytocard」コマンドはローカルキーを削除するので、.gnupgディレクトリのバックアップを作成して復元することで同じキーを他のYubikeyにエクスポートすることしかできません(これは正しくないようです)。テストファイルを復号化するために、gpgはシリアル番号を含むキーを具体的に要求し、バックアップキーを使用して復号化しません。

このようなバックアップとして2つの異なるユビキーを使用する方法はありますか?そうでない場合、これを達成するために進む最良の方法は何ですか? (つまり、メインキーを紛失した場合に備えて、ファイルの復号化に使用できるバックアップキーを保持します)。

13
Foaly

試行錯誤の末、ようやくこれを実現する方法を見つけました。これは誰かを助けるために私の質問への回答です:

トリックは、同じサブキーを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にエイリアスしました。

3
Foaly

あなたがローカルのgpgアプリに新しいカードをスキャンし、問題が発生した場合は代わりにそれを使用するように指示する実行可能なコマンドがあることを示すこの言い回しを見つけました。そのため、バックアップカードを使用する場合は、「init」を実行して機能させる最悪のケースではありません。

https://forum.yubico.com/viewtopic38a1.html?f=35&t=24

ランニング

gpg-connect-agent "scd serialno" "learn --force"/bye

現在挿入されている鍵のPGP鍵の秘密鍵スタブを更新します。したがって、キーの挿入後にそれを実行すると、gpgは現在挿入されているキーを使用します。

8
MrTristan

ディレクトリ全体をバックアップする代わりに、キーをエクスポート(のバックアップコピーを作成)できます。

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エクスポートされたキーを安全に保ち、それをバックアップとして使用しますが、それは質問されませんでした。

4
user8675309

可能です。

  1. キーチェーンでローカルにキーを生成します。ユビキーはまだありません。
  2. 秘密鍵(マスターおよびすべてのサブ鍵を含む)をエクスポートします。 (エクスポートされたblobは暗号化されるため、キーの暗号化に使用したパスワードを忘れないでください)
  3. 秘密鍵をエクスポートして安全な場所に保管したら、編集キーメニューで各キーにkeytocardを実行します。
  4. Yubikey 1を削除し、移動したキーの編集キーメニューに入ります。
  5. gripコマンドを使用して、各キーのキーグリップを見つけます。
  6. .keyフォルダーに各キーグリップの~/.gnupg/private-keys-v1.d/*ファイルが見つかります...何も削除しないように注意しながら、それらを削除します(無関係なリングの秘密鍵はワイプしないでください)。
  7. gpg2 --import手順2で作成したエクスポートされた秘密鍵。
  8. これで、ローカルの鍵リングに秘密鍵が再びあります。 yubikey 2を挿入し、ステップ3を繰り返します。
  9. ここで説明するのは難しい部分です...これらのkeygrip.key秘密鍵ファイルは基本的にgpgに「この秘密鍵はシリアル番号xxxxxのYubikeyにある」ため、カードを交換してどちらかを使用することはできません。スワッピングの間にいくつかのコマンドを実行する...おそらくスワッピングを行わず、バックアップ用に2つ目のコマンドが必要なだけなので問題ありません...しかし、2年後、バックアップが必要になったときに、忘れてしまったためにトリップする可能性があります。この小さな問題について。これを行う1つの方法は、私が示したkeygripメソッドを使用してすべての秘密鍵を削除することです。次に、gpg2 --card-editを1回実行するだけで、カードが自動的に検出され、キーリング内のpubkeyの秘密鍵に接続されます(キーグリップを削除してもpubkeyは削除されません)...またはgpg-connect-agent "scd serialno" "learn --force" /byeを次のように実行しますMrTristanさんは、カードのシリアルx秘密鍵の関係情報をリセットすることを提案しました。

秘密鍵をいったんyubikeyに入力すると、それを取得することはできません。そのため、自分で作成したのでは手遅れです。

また、この方法の大きな重大な問題の1つは、キーログを作成していないこと、および作成中に秘密キーのバックアップを盗んでいないことをどのようにして知ることができるかです...

それでも、この方法は、秘密鍵をディスクに保存するだけの方法よりも優れています。攻撃対象領域が初期設定のみに削減されるため、いつでもバックアップを取得する必要があります。

1
user3074620