複数のシステムでGPGキーを管理する方法は?


103

私はGnuPGを初めて使用し、GnuPGの最適な使用方法を理解しようとしています。私が確認しましたショート、非技術系の人々のためのGPG / PGPの分かりやすい説明を?、しかしほとんどのガイドは単一マシンの観点でPGPを説明しています。

Linux PC、Linuxラップトップ、Androidフォンの3つのコンピューティングデバイスでGnuPGを使用したいと思います。

基本的なユースケースは、IMAPサービスで管理される電子メールの暗号化/復号化であるため、すべてのデバイスは復号化に同じ秘密キーを必要とします。

私の選択肢は次のとおりです。

  1. すべてのキーを各デバイスのキーリングにコピーし、主に保護のために秘密キーのパスワードに依存します。

  2. IDを表すマスターキー(--gen-keyを使用)を作成し、メールを暗号化/復号化してマスターキーで署名した別の使い捨てキー(--gen-keyを使用)を作成します。前者は私のPCにのみ存在し、後者は各デバイスに配布されます。モバイルデバイスが侵害されない限り、使い捨てキーは有効なままです。

私は過度に妄想的で、これを必要以上に複雑にしているかもしれませんが、ユーモアをお願いします。すべての卵を1つのバスケットに入れないことを信じています。

マスターキーは、私のデジタルIDであることになっています。そのアイデンティティに関する信頼を構築するために多くの努力が費やされ、不注意からキーを失い、新しいマスターキーに関する信頼を構築しなければならないよりも、私はむしろ妄想の不便に苦しむでしょう(これは私ほど悪くはないでしょう)思うが、私はこれに新しいです)

PCよりもラップトップまたは電話を失う可能性が高くなります。損失==妥協の場合、マスターキーペアよりもむしろ破棄可能なキーペア(失効可能)を失います。マスターキーの信頼性は、新しい使い捨てキーにいつでも付与できます。

本当に長い質問でごめんなさい。:-)

TL; DR

マスター秘密鍵を複数のデバイスに保存するには、パスワードで十分な保護がありますか?

オプション#2の計画は実行可能ですか?何か間違ったことはありましたか、それとも改善できますか?

オプション#2が悪いアイデアである場合、複数のデバイスの単一ユーザーにGnuPGを使用する場合のベストプラクティスは何ですか?

回答:


59

まあ、これは少し恥ずかしいです。私は1週間にわたってこの問題を解明しようとして何時間も費やしましたが、その答えはサブキーにあるようです。GnuPGマニュアルとFAQで話題になっています。

サブキーとは何か、そして--gen-keyの代わりにサブキーが使用される理由を調査していると、この宝石http://wiki.debian.org/subkeysに出会いました。

Debianのwikiは、サブキーを含むマスターキーを使用してオプション#2 (OPを参照)を実装する方法を説明し、さらにバックアップメディア(フラッシュドライブなど)に保存した後、システムからマスターキーを削除する方法を説明します。その後、サブキーを各デバイスのキーリング間で配布できます。

長所:

  1. マスターキーを保護するために主にパスワードに依存しない、

  2. いずれかのシステムが侵害された場合、マスターキーはすぐには利用できません(愚かにもフラッシュドライブをプラグインしたままにするか、そのドライブを侵害されたシステムに接続しない限り)。

  3. これは、Debian開発チームによって実装されたプラクティスです。

  4. GnuPGのサブキー機能を使用します。キーリングにたくさんのゆるいキーを持っているよりも、少し整理されているように見えますか?

Debian Subkey Wikiからの関連部分

  1. 既存のGnuPGファイル($ HOME / .gnupg)のバックアップを作成します。それらを安全に保ちます。次の手順で何か問題が発生した場合、既知の適切な場所に戻るためにこれが必要になることがあります。(注:umask 077は、バックアップの制限付きアクセス許可になります。)

    • umask 077; tar -cf $HOME/gnupg-backup.tar -C $HOME .gnupg
  2. 署名用の新しいサブキーを作成します。

    • キーIDを見つけます: gpg --list-keys yourname
    • gpg --edit-key YOURMASTERKEYID
    • gpg>プロンプト:addkey
    • パスフレーズの入力を求められますので、入力してください。
    • 「RSA(署名のみ)」キータイプを選択します。
    • 4096(または2048)ビットキーサイズを選択するのが賢明です。
    • 有効期限を選択します(サブキーはマスターキーよりも頻繁にローテーションするか、有効期限なしでマスターキーの有効期間中保持することができます)。
    • GnuPGは(最終的に)キーを作成しますが、そのために十分なエントロピーが得られるまで待つ必要があります。
    • キーを保存します。 save
  3. これを繰り返して、必要に応じて「RSA(暗号化のみ)」サブキーも作成できます。

  4. 次に$HOME/.gnupg、USBドライブにコピーします。

  5. ここからが難しい部分です。プライベートマスターキーを削除する必要がありますが、残念ながらGnuPGはそれを行う便利な方法を提供していません。サブキーをエクスポートし、秘密キーを削除して、サブキーをインポートし直す必要があります。

    • サブキーをエクスポートしますgpg --export-secret-subkeys YOURMASTERKEYID >secret-subkeys(エクスポートするサブキーかを選択するために、それぞれが感嘆符に続くサブキーIDを指定しますgpg --export-secret-subkeys SUBKEYID! [SUBKEYID! ..]
    • マスターシークレットキーを削除します。 gpg --delete-secret-key YOURMASTERKEYID
    • サブキーをインポートして戻します。 gpg --import secret-subkeys
    • 秘密鍵の代わりにがgpg -K表示されることを確認してください。つまり、秘密鍵は実際には存在しません。(の出力にダミーのOpenPGPパケットが存在することも参照してください)。sec#secgpg --export-secret-key YOURMASTERKEYID | gpg --list-packets
    • オプションで、サブキーを保護するパスフレーズを変更しますgpg --edit-key YOURMASTERKEYID passwd。(プライベートマスターキーを含むバックアップ上のプライベートキーマテリアルは、古いパスフレーズによって保護されたままになります。)

これでコンピュータは通常の使用準備が整いました。

マスターキーを使用する必要がある場合、暗号化されたUSBドライブをマウントし、GNUPGHOME環境変数を設定します。

export GNUPGHOME=/media/something
gpg -K

または--homeコマンドライン引数を使用します。

gpg --home=/media/something -K

後者のコマンドは、今のあなたの秘密鍵をリストしなければならないsecし、ありませんsec#

マシンごとの複数のサブキーとすべてのマシンの単一のサブキー

Debianサブキーwikiからの抜粋。もともとコメントに記載されています。[言い換え]と私のものを強調します。

マシンごとにサブキーを1つ持って、そのマシンの潜在的に危険にさらされたサブキーのみを交換する必要がある場合があります。すべてのマシンで単一のサブキーを使用する場合、すべてのマシンで交換する必要があります(その単一のサブキーが侵害された、または侵害された疑いがある場合)。

ただし、これはサブキーに署名する場合にのみ機能します。複数の暗号化サブキーがある場合、gpgは、最新の暗号化サブキーのみを暗号化し、すべての既知の無効化されていない暗号化サブキーは暗号化しないと言われます。


5
良いQ&Aですが、このセットアップにはまだ1つの問題があります...署名には最適ですが、異なるデバイス間で同じ暗号化キーを共有したくない場合は暗号化には最適ではありません。メッセージ、gpgはデフォルトで、生成された失効していない最新のencキーを使用します。UID(自宅または職場など)に応じて、送信者に特定のencサブキーを強制的に使用させることはできません。
-KurzedMetal

2
おそらくこれが問題です。私の最大の懸念は、マスターキー(署名のみ)の周りに構築する信頼の網を失うことです。もちろん、暗号化サブキーは、暗号化されたメッセージの読み取りに使用するすべてのデバイスに存在する必要があります。暗号化キーが侵害された場合、回復プロセスには自分だけが関与します。マスター署名キーを紛失し、新しいキーに署名するために信頼のWebに依頼/納得しなければならないのとは対照的です。ボールト内の暗号化サブキーを再配置するつもりはありませんでした。
ジャスティンC

9

単一障害点(マスターキー、特にパスワードを含む)も気に入らない人として、これが私がやる方法です。これにより、デバイスは信頼できるWebを介して動作できますが、分散型IDは引き続き許可されます。

このための既存のシステムが既にあるかどうかはわかりませんが、おそらくcronジョブと数行のBashで一緒にスクラブできると思います。

このシステムには、デバイスキーペアタイムフレームキーペアの 2つのクラスのキーペアがあります。各デバイスのユーザーに対して1つのデバイスキーペアが生成され、そのデバイスの存続期間中はそのデバイスにとどまります。時間枠の鍵ペアをルーチンの間隔で中央サーバーによって生成される(毎月、毎日、毎時間-あなたがなりたいか偏執によって異なります)。公開キーは公開され(サーバー自体が署名する独自のデバイスキーペアを持っています)、秘密キーはこのキーにアクセスすることを意図した各デバイスの公開キーで暗号化されて配布されます。(この配布は可能な限りプライベートにする必要があります。たとえば、デバイスをサーバーに直接接続する必要があります。)

メッセージに署名するには、メッセージの送信元のデバイスのデバイスキーを使用します。誰かがあなたにメッセージを送りたいなら、あなたはあなたの現在の公開タイムフレームキーでそれに署名することができます。(アナウンスに対応するための自動システムが必要です。)その後、どのデバイスからでもメッセージを読むことができます。

古い暗号化されたメッセージを読み取るために、別のセットがある場合、適切な戦略(必要に応じて、タイムフレームキーペア生成サーバーを含む-再度、あなたのパラノイアのレベルに応じて)に従って、古いタイムフレームキーペアが各デバイスにバックアップされます古いキーを保護するパスワードで保護されたキーペア(ただし、覚えやすいと感じるほど多くのパスワードを使用します)。

デバイスが盗まれたり、侵害されたりした場合、公に信頼されたデバイスの別の1つを使用して、身元を確認する公的に署名されたメッセージを作成できます(何らかの手段、例えば、あなたが公共の会合に出席すること、および/または信頼できる友人に直接確認してもらいます)、侵害されたデバイスキーとアクセスしたタイムフレームキーを取り消します。キーを失効させるとき、盗まれたデバイスをサーバーの信頼できるデバイスのリストから削除します(パスワードと信頼できるデバイスキーを使用)。

新しく発表されたデバイスキーを信頼するためのポリシーは、現在の信頼ポリシーのようなものに従う必要があります。適切なポリシーは、生成サーバー、モバイルデバイス、および大きく重いデバイスを信頼することです。ユーザーが気付く前に、ユーザーの電話、デスクトップPC、および協調型強盗のVPS。

サーバーが危険にさらされた場合、他の危険にさらされたデバイスについて説明した同じ手順(おそらく新しいデバイスの追加と同様のより強力なポリシーを使用)でサーバーを無効にし、再保護されたサーバーまたは完全に新しいサーバーを使用します(新しいデバイスキーペア)


書かれているように、失効セクションは少し曇っています-他のデバイスからのアナウンスでデバイスを失効させることができます(誰かがあなたのラップトップを盗み、あなたの電話がサーバーに直接接続できない場合に失敗しないように)泥棒によって行われます(したがって、デバイスは失効のためにパスワードで保護されたキーを持っている必要があります)。競合するレポートが発生した場合、第三者による手動の検証を実行できるようになるまで、すべてのキーは一時的に信頼されません。
スチュアートP.ベントレー14

実際、定期的に手動で更新(置換)される強力な公開パスワードを使用して、キーを無効にする別のメカニズムを使用することをお勧めします。この方法では、デバイスに依存せずにキーを無効にできます(たとえば、パスワードを秘密にしておけば、携帯電話だけで盗み出して誰かが盗む)。
スチュアートP.ベントレー14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.