web-dev-qa-db-ja.com

OpenPGP秘密鍵は本質的にパスワードで保護されていますか?

OpenPGPキーを使用するたびにパスワードを入力する必要があることはわかっています。これはソフトウェアの実装を介して行われますか、それともプロトコルに固有の特性であり、したがって鍵となりますか?

基本的に、質問は次のように分類されます。誰かが私の秘密鍵を盗んだ場合、彼らは私のパスワードを知らない(または壊れた)なしでそれを使用できますか?

7
Iszi

PGPキーを暗号化せずに(パスワードなしで)残すことができるため、コピーされた場合、パスワードなしで使用できます。秘密鍵の暗号化は仕様( RFC 488 -「String-to-Key」セクションを参照)に固有であり、秘密鍵のパスフレーズを要求するソフトウェアを使用しているときはいつでも、それを実際の復号化に使用しています。最新バージョンのソフトウェアのほとんどは、暗号化されていないキーまたはパスフレーズに使用されるメモリをディスクにスワップできるようにすることも回避するために苦労しています。

ですから、あなたの秘密鍵は、パスワードを知らない、またはパスワードを破らない限り使用できません。

11
Jeff Ferland

OpenPGPメッセージ形式 は、暗号アルゴリズムを含む構造のシリアル化である多くの「メッセージ」を記述します。 これらのメッセージの一部は、電子メールとして交換されることを意図しています。 「署名付きメール」を送信するときは、秘密鍵を使用する必要があります。結果のメッセージ(SMTPサーバーに送信されるメッセージ)は、非一時的なメディアに格納されているときに、上記の秘密鍵がどのようにフォーマットされているかには影響されません。その意味で、「パスワードで保護された」秘密鍵を保存する必要なしに、「OpenPGPを使用する」(署名および暗号化された電子メールを送受信する)ことができます。 OpenPGPが必要とするのは、ユーザーが秘密鍵を「所有」し、重要な時間の間それを「記憶」できることです。秘密鍵自体は、高いレベルの機密性で保存する必要があります。このような機密性は、スキームのセキュリティ全体にとって非常に重要であるためです。多くの場合、ユーザーの秘密鍵はファイルに保存され、ユーザーのパスワード(PGP版では「パスフレーズ」)から派生した対称鍵で暗号化されます。それほど頻繁ではありませんが、同等に有効ですが、秘密キーをスマートカードなどの改ざん防止デバイスに格納し、PKCS#11などの専用APIを介してアクセスできます。 PKCS#11のサポート はGnuPGに存在します。デバイスがキーを保存する方法はデバイス次第ですが、パスワードから派生したキーを使用した暗号化はほとんどありません。

OpenPGPalsoは、特にパスワードから派生したキーを使用した対称暗号化を使用して、シリアル化された秘密キーを格納するためのメッセージ形式を定義します。したがって、OpenPGP実装が秘密鍵をパスワード保護付きのファイルとして保存したい場合、その特定のメッセージ形式を使用する傾向があります。このフォーマットを使用すると、異なる実装間で秘密鍵(「鍵リング」)を転送できます。

したがって、秘密鍵のパスワード保護は、ネットワーク上のメッセージに関する限り、「OpenPGPサポート」を主張するための必須要件ではありませんが、それでも推奨され、そのパスワードを実行する「OpenPGP承認」の方法があります。保護には移植性の利点があり、その後に実際の実装が続きます。

3
Thomas Pornin

gpg-agentを見落とさないでください...

ジェフの答えはよく、あなたがほとんど話していたものをカバーしています。しかし、最初の文は、使用するたびにパスワードを入力せずにOpenPGPキーを使用する方法があるという事実を見落とします。一度入力すると、しばらく暗号化されずにRAMに保存されます。デフォルトの "ttl"(存続時間)は控えめです:5分。 @gillesがリスクを追加することを指摘しているように、暗号化されていないディスクには表示されません。 gpg-agentはgnupg 2.0の一部として提供され、GUIアプリを対象としています。 gpg-agent: GPG-AGENTの呼び出し-GNU Privacy Guard の使用)を参照してください。これは、ssh-agentが行うSSHキーアクセスタスクも処理できます。

2
nealmcb