web-dev-qa-db-ja.com

どのようにしてGPG秘密鍵を安全にバックアップしますか?

pass という非常に興味深いCLIパスワードマネージャーを見つけました。これを使用するには、GPG2キーペアを生成し、ツールを使用してgpg2暗号化ファイルにパスワードを保存します。

ファイルを暗号化する(新しいパスワードを追加する)には、公開鍵を使用します。

ファイルを復号化する(保存されているパスワードを取得する)ために、パスワードが必要な秘密鍵が使用されます。

これはうまくいきます。

ツールですべてのパスワードが保存されたので、このデータをすべてバックアップして、コンピューターがクラッシュした場合にすべてのオンラインアカウントからロックアウトされないようにします。

このツールはgitとうまく統合されているので、.gpgファイルを別のコンピューターのプライベートgitリポジトリに簡単にプッシュできました。私が理解していることから、これらのファイルは、それらを解読するための秘密鍵なしでは役に立たない。

私の質問はこれです。秘密キーと公開キーを安全な方法でバックアップして、必要に応じて別のマシンで「データベース」を復元できるようにするにはどうすればよいですか。公開鍵と秘密鍵の両方をgitリポジトリに保存して、後で別のマシンにインポートすることはできますか?または、プライベートキーをローカルのプライベートgitリポジトリに保存するのは安全ではないと考えられていますか? git repoにアクセスするにはパスワードが必要です。秘密鍵は暗号化されており、開くにはパスワードが必要です-それを保存しても安全ですか?

25
Tal

PGP秘密鍵をリビジョン管理システムに保存しても、それ自体は重大なセキュリティ上の問題は発生しません。 local、private(unpublished) gitリポジトリに秘密鍵を保存しても、同じコンピューターに秘密鍵を保存する場合と比べて、セキュリティに大きな影響はありません。 gitリポジトリの外部

バージョン管理された方法で秘密鍵を保存することから来ると私が考えることができる唯一の問題は、古いリビジョンをどうにかして破壊できない限り、鍵のパスフレーズの変更は、それらよりもはるかに低い保護を購入することですそうでない場合があります。

独自のセキュリティ上の影響を伴う可能性があるのは、他の誰かがキーファイルにアクセスできるような方法で秘密キーを格納することです。このような状況では、すべて攻撃者とあなたの鍵の間に立つのは、そのパスフレーズの強さです。

ストレージのセキュリティは完璧ではないことを認識しており、人々が定期的にクラウドサービスにバックアップする現代の環境(文字通り、翻訳されたものは「他人のコンピューター」を意味します)では、通常、秘密鍵をパスフレーズで保護します。たとえばgpg-agentを実行している場合でも、同じことを実行していると私は信じています。

つまり、パスフレーズが適切である限り、暗号化されたキーファイルのコピーを他人のコンピューターに保存しても比較的安全です

ただし、次の場合はかなり大きなものです:ほとんどの人のパスワードまたはパスフレーズは、コンピュータ化されたそれらのクラッキングの試みが進んでいる限り、かなりお粗末です。 GnuPGは、与えられたものと同じように機能するようにかなりの時間を費やしますが、確実なデータ保護のためには、が適切なパスフレーズであり、you need to set it before import a private key into the git repository。キーがインポートされた後、攻撃者は原則としてそのキーの任意のバージョンを攻撃する可能性があり、特定のリビジョンのパスフレーズの品質が低いと信じる理由がある場合、攻撃者はそのパスフレーズを使用する可能性があります。そのため、パスフレーズは慎重に選択してください。 覚えておく必要のあるパスワードまたはパスフレーズの選択方法に関する提案 を含む、パスワードの処理方法に関する簡単な入門書を書きました。

10
a CVn

最近、同様の設定を検討しています。あなたの質問に取り組む前に、それについて私が何が気になるかを指摘させてください。これはかなり詳しく説明されています here 。つまり、PassがGPGを呼び出すと、内部で不要な非対称(RSA/EC)暗号化が実行されます。 不要-ここには信頼できない当事者がいないため。

非対称暗号は対称暗号よりも将来の保証が少ないため、これは厄介です。たとえば、今日の非対称暗号は、まだ存在しない十分に大きな量子コンピューターによって破られます。より一般的には、非対称暗号は、解決方法がわからない「数学の問題」に依存しており、対称暗号よりもはるかに重要です。

この弱点を緩和するには、たとえば、(潜在的な)量子攻撃にこの公開鍵が必要になるため、GPG公開鍵もPassで非公開のままにしておくことです こちらを参照

実際の質問では、git repoを(パスワード付きで)パブリックに保存するのか、プライベートに保存するのかは不明です。非公開にしたい場合は、ほとんどのことを行い、GPG秘密キーのセキュリティを、リポジトリをバックアップするメディアのセキュリティに下げることができます。しかし、それは鶏と卵の問題になる可能性があります:リポジトリがプライベートである場合、クラッシュした場合にどのようにそれを取り戻すのですか?つまり、「悪いクラッシュ」の場合、最初に取得するものが必要です。したがって、git repoを非公開にしたいが、GPGキーをバックアップして、他のものとは無関係に最初に取得できるようにすることができます。

オフラインバックアップソリューションは、弁護士、地下室など、数多くあります ここを参照 。しかし、地下室は誰もが利用できるわけではないので、オンラインソリューションを提案しましょう。

  • 何年も入力することを想定していない、非常に強力なパスフレーズを作成します。提案:個人的に重要なフレーズの長くて覚えやすいスペルミス、または検索する必要がある場合にコピーが不足しない本からのスペルミス。

  • エクスポートしたG​​PG秘密鍵とSSH資格情報を使用してtarballを作成します。

  • パスフレーズで対称的に暗号化します:gpg --symmetric --armor

  • 無料のgitホスティングアカウントを作成します。

  • 認証情報なしで複製できるpublicリポジトリを作成します。

  • そこに暗号化された装甲のtarボールを入れます。

「悪いクラッシュ」の後にそれを取得するには:

  • ライブUSBスティックを起動します。

  • パブリックリポジトリのクローンを作成します。

  • gpg --decrypt

対称パスフレーズは、ゾンビに対する主な保護手段になります。パスフレーズの選択に関して、人々はあなたや匿名の読者に疑いの恩恵を与えないことがあります。しかし、適切なパスフレーズがあれば、対称暗号は堅固になります。

GPG秘密鍵をエクスポートすると、それは独自のパスフレーズで暗号化されます。 GPGの最近のバージョンでは、暗号化されていないエクスポートは許可されません。ここでは「通常の」GPGパスフレーズを使用できます。クラッシュが発生した場合は、GPG秘密鍵を取得するために両方のパスフレーズが必要になることに注意してください。

6
Matei David

私が使用する別のオプションは次のとおりです: 紙にキーを印刷する

詳細はリンクされた回答にあります。大きな利点は次のとおりです。必要な場所に簡単に保管でき、見ただけでまだ良好な状態かどうかを確認できます。しかし、最大の利点は、バックアップを保存して取得する場所に実際に物理的に存在しない限り、誰もハッキングできないことです。

これに対するもう1つの答えは「オフライン」です。つまり、どのコンピュータにも接続されていない安全な場所に保存します。銀行のセーフティボックスに、すべてのキーの完全な暗号化されていないコピーをフロッピーディスクに保存します(これは長い間この方法で行ってきましたが、今は習慣になっています)。銀行のメディアでそれらを暗号化しないでおく理由は、キーを「失う」可能性のあるシナリオの1つがパスフレーズを忘れていることです(私のパスフレーズには多くの奇妙な句読点とスペルがあり、そのうちの1つだけを忘れるとそれができます)使用できません)。そのコピーからそれを取り戻すことに頼る必要はなかったが、最悪の事態を想定している。

さらに、メディアには重要な失効があり、もう連絡が取れなくなった場合に備えて、相続人にそれをどうするかを指示するメモがあります。

2
MAP