web-dev-qa-db-ja.com

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

私はGnuPGを使い始めて、それを使うための最良の方法を理解しようとしています。私は 技術的でない人のためのGPG/PGPの簡単でわかりやすい説明をレビューしましたか? 、しかしほとんどのガイドは単一マシンの観点からPGPを説明します。

私はGnuPGを3つのコンピューティングデバイス、つまりLinux PC、Linuxラップトップ、およびAndroid携帯電話で使用したいと考えています。

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

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

  1. 各デバイスのキーリングに自分のすべてのキーをコピーし、保護のために主に秘密キーのパスワードを使用するだけです。

  2. 私のアイデンティティを表すためにマスターキーを(--gen-keyで)作成し、それから電子メールを暗号化/復号化するための別の使い捨てキーを(--gen-keyで)作成し、マスターキーで署名します。前者は私のPCにのみ存在し、後者は各デバイスに配布されています。私のモバイル機器が危険にさらされていない限り、使い捨てキーは有効なままです。

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

マスターキーは、私のデジタルIDです。そのアイデンティティを中心に信頼を構築するために多くの努力が費やされるでしょう、そして私は不注意から私のキーを失い、新しいマスターキーの周りに信頼を構築しなければなりません。思ったほど悪いが、私はこれに慣れていない

私のPCよりもノートパソコンや携帯電話を紛失する可能性があります。 loss ==妥協すれば、マスターキーペアよりも使い捨てキーペア(失効可能)を失うことになります。私はいつでも新しい使い捨てのキーに私のマスターキーの信頼を授けることができます。

本当に長い質問ですみません。 :-)

TL; DR

自分のマスター秘密鍵を複数のデバイスに保存するためのパスワードは十分に保護されていますか?

オプション#2のための私の計画は実行可能ですか?問題が発生しましたか、それとも改善することができますか?

選択肢#2が悪い考えであるならば、複数のデバイスにわたる単一のユーザーのためにGnuPGを使用するとき、ベストプラクティスは何ですか?

99
Justin C

まあ、これは少し恥ずかしいです。私はこの問題を解明しようとして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
    • 秘密キーのsecの代わりにgpg -Ksec#を示すことを確認します。つまり、秘密鍵は実際には存在しません。 (gpg --export-secret-key YOURMASTERKEYID | gpg --list-packetsの出力にダミーのOpenPGPパケットが存在することも参照してください)。
    • オプションで、サブキーを保護するパスフレーズを変更します:gpg --edit-key YOURMASTERKEYID passwd。 (プライベートマスターキーを含むバックアップ上のプライベートキーマテリアルは、古いパスフレーズによって保護されたままになります。)

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

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

export GNUPGHOME=/media/something
gpg -K

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

gpg --home=/media/something -K

後者のコマンドは、sec#ではなくsecで秘密鍵をリストするはずです。

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

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

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

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

59
Justin C

シングルポイント障害(マスターキーと、特にパスワードを含む)も気に入らない人として、これが私のやり方です。それでも、分散IDを許可しながら、デバイスが信頼のWebを介して動作できるようになります。

このための既存のシステムがすでにあるかどうかはわかりませんが、cronジョブと数行のBashを一緒に使用すると、おそらく問題が発生する可能性があります。

このシステムでは、キーペアに2つのクラスがあります。デバイスキーペアタイムフレームキーペア 1つのデバイスキーペアが各デバイスのユーザーに対して生成され、そのデバイスの存続期間はそのデバイスに残ります。 タイムフレームのキーペアは、定期的に(毎月、毎日、毎時)、中央サーバーによって生成されます。公開鍵は公に発表され(サーバ自体が署名するためのそれ自身の装置鍵対を有する)、そして秘密鍵はこの鍵へのアクセスを有することを意味する各装置の公開鍵で暗号化されて配布される。 (この配布はできるだけプライベートにすべきです、例えば、デバイスをサーバーに直接接続させるなど)。

メッセージに署名するには、メッセージを送信しているデバイスのデバイスキーを使用します。誰かがあなたにメッセージを送りたいのであれば、彼らはあなたの現在の公開時間枠キーでそれに署名することができます。 (アナウンスに追いつくために自動化されたシステムを持っているべきです。)あなたはどんなデバイスからでも彼らのメッセージを読むことができます。

古い暗号化されたメッセージを読むために、適切な戦略(古い場合には時間枠キーペア生成サーバーを含む - やはりあなたのパラノイアのレベルに応じて)に従って、古い時間枠キーペアが各デバイスにバックアップされます。古い鍵を保護するパスワード保護された鍵ペアのリスト.

デバイスが盗まれたり、他の方法で侵害されたりした場合は、公的に信頼されている別のデバイスを使用して、自分の身元を証明する公開署名付きメッセージを作成できます。信頼できる友人に本人確認を依頼し、アクセスしたデバイスキーとタイムフレームキーをすべて無効にします。キーを失効させると、盗難に遭ったデバイスも(パスワードと信頼できるデバイスキーを使用して)サーバの信頼できるデバイスのリストから削除されます。

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

あなたのサーバが危険にさらされているなら、あなたは他の危険にさらされている装置について述べたのと同じ手順で(おそらく新しい装置を追加するためのものに近いより強い方針で)それを取り消します。新しいデバイスキーペア)は今後)。

9