web-dev-qa-db-ja.com

GnuPGはどのように秘密鍵を暗号化しますか?

GnuPGで秘密鍵を作成するとき、それを保護するためにパスワードを求められます。これを達成するために使用されている暗号化アルゴリズムはどれですか? ハンドブック は、対称暗号化アルゴリズムが使用されていることのみを示しています。

8
moe1

GnuPG 2.xには別のgpg-agentがあります。これは秘密鍵の管理者であり、内部の秘密鍵の暗号化パラメーターをまったく制御できません。

さらに、--s2k受け入れられますが無視されますパスフレーズの設定時または秘密鍵のエクスポート時。

issue がバグトラッカーにあり、- メーリングリスト でフォローアップすると、答えは

いいえ、それは不可能です。現在、エージェントは常にAESおよびS2Kパラメータを使用しています。これは、実行中のマシンで復号化に約100msを必要とします。

したがって、現在の状況では、エージェントが実行中のマシンの速度目標を満たすことが最善であり、それを制御したり、別の方法でエクスポートしたりする方法がないと判断したときに、キーがエージェントによって保持されていると思います。私が試したすべてのエクスポートは、次のような主要な属性になります。

$ gpg --export-secret-key DEADBEEF | gpg --list-packets
iter+salt S2K, algo: 7, SHA1 protection, hash: 2, salt: ...

RFC488 で定義されているように、使用中の対称鍵( algo )およびハッシュ( hash )アルゴリズムが明らかになります。上記は、algo: 7128ビットキーのAESであり、hash: 2SHA-1であることを示しています。 。

iter+saltタグは、GnuPGがパスフレーズ(文字列)をキーに変換するために使用する string-to-key モードです。デフォルト値iter+saltは、ソルトがパスフレーズに追加され、その文字列が複数回ハッシュされることを意味します(総当たりのパスフレーズの難易度を上げることを目的とした キーストレッチング と呼ばれる手法)。


つまり、これはGnuPGが秘密鍵を暗号化する方法を示し、gpg-agentを使用しているためにバージョン2.xを使用している場合、それを制御できないという事実を強調しています。

9
starfry

フェーズ1:対称鍵の導出

まず、パスフレーズを使用して、 string-to-key function を使用した対称暗号化のキーを導出します。これを考慮して、ハッシュアルゴリズムや繰り返し数など、いくつかの設定をGnuPGで微調整できます。 GnuPGマニュアル から:

--s2k-digest-algo name

対称暗号化のパスフレーズをマングルするために使用されるダイジェストアルゴリズムとしてnameを使用します。デフォルトはSHA-1です。

--s2k-mode n

対称暗号化のパスフレーズをマングルする方法を選択します。 nが0の場合、単純なパスフレーズ(一般的には推奨されません)が使用され、1はパスフレーズにソルト(使用されるべきではありません)を追加し、3(デフォルト)はプロセス全体を何度も繰り返します( --s2k-countを参照してください)。

--s2k-count n

対称暗号化のためにパスフレーズをマングルする回数を指定します。この値の範囲は、1024以上65011712以下です。デフォルトはgpg-agentから照会されます。 1024-65011712の範囲のすべての値が有効であるとは限らないことに注意してください。無効な値が選択された場合、GnuPGは最も近い有効な値に切り上げます。このオプションは、--s2k-modeがデフォルトの3に設定されている場合にのみ意味があります。

フェーズ2:対称暗号化

この対称鍵を使用して、秘密鍵は対称的に暗号化されます。暗号化アルゴリズムも選択できますが、GnuPGのデフォルトはAES-128です。

--s2k-cipher-algo name

--personal-cipher-preferencesおよび--cipher-algoが指定されていない場合は、パスフレーズを使用した対称暗号化の暗号アルゴリズムとして名前を使用します。デフォルトはAES-128です。

サポートされている暗号は、gpg --versionを実行して表示できます。次に例を示します。

$ gpg --version
[...]
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256

公開秘密鍵アルゴリズム(GnuPG 2.1が楕円曲線を追加したもの)とは異なり、サポートされている対称アルゴリズムは、GnuPGのいくらか現在のリリースすべてで同じです。

これらのオプションはすべて~/.gnupg/gpg.confでも設定でき、--接頭辞なしで示されます。

7
Jens Erat

この記事 によると、次のリストから、データの暗号化に使用する暗号(ファイルだけなので、鍵の暗号化が含まれていると思います)を選択できます。

サイファー:3DES、CAST5、BLOWFISH、AES、AES192、AES256、TWOFISH、CAMELLIA128、CAMELLIA192、CAMELLIA256

編集:

Manページとgoogleで少し調べた後、いくつかの設定を通じてデフォルトを変更できます(詳細はこの質問を参照してください: LinuxとWindowsの両方でGnuPGのデフォルトの暗号を変更するには?

秘密鍵の暗号化について特に言及しているものは見つからないので、デフォルトの対称暗号として設定されているものを使用するだけだと思います。

0
Mike Ounsworth