web-dev-qa-db-ja.com

GnuPG対称暗号化は、パスフレーズに対するブルートフォース攻撃に対して脆弱ですか?

ハンドブック は、平文にアクセスする必要がある場合にのみ、対称暗号化が適切であることを示しています(したがって、公開鍵暗号化よりも安全性が低くありませんか?)。しかし、 this postによると、gpg --symmetricパスフレーズのみが必要です。攻撃者は、パスフレーズから生成された完全な128/256ビットキーではなく、このパスフレーズをブルートフォース攻撃するだけで済みます。

その場合の正しい手順は、データを対称的に暗号化するために使用される128/256ビットのキーファイルを実際に用意することであるように思われます。これ自体は、秘密鍵が保護されるのと同じように、パスフレーズから生成された鍵で対称的に暗号化されます。これには、攻撃者が完全対称鍵を総当たり攻撃する必要があります。攻撃者が私の鍵ファイルを取得したとしても、私のパスフレーズを総当たり攻撃する必要があります。

gpgはこの種の使用法をサポートしていますか?状況についての私の理解には欠陥がありますか?これが有効なユースケースではない理由はありますか?

-

または別の言い方をすれば:

this の質問では、パスフレーズ保護で十分であると想定されていますが、基本的に私の質問は、適切な256ビットのパスワードを記憶することを自分自身に信頼しない場合はどうなるでしょうか。秘密鍵と同じように対称鍵ファイルを使用できますか?明らかに、実際に秘密鍵を使用することもできますが、ハンドブックでは、この状況では対称暗号化が慣用的な選択になると示唆されています。

2
kgmstwo

OpenPGPでは、パスフレーズから対称(セッション)鍵を導出するために許可されている2つの可能性があります。パスフレーズを直接使用して鍵を導出する方法と、生成された鍵で暗号化されたランダム鍵を生成する方法です。ただし、どちらの場合も、対称鍵は常に暗号文と一緒に保存され、OpenPGP形式との互換性を失うことなく対称鍵を分割することはできません。最終的には、使用するキーの種類に関係なく、パスフレーズを介してキーをブルートフォース攻撃することもできます。

ただし、OpenPGPは、ハッシュされる大きな入力を生成することにより(ハッシュ入力に対してパスフレーズを複数回繰り返す)、パスフレーズをブルートフォース攻撃することを困難にします。このように、パスフレーズをブルートフォースすることははるかに高価です。から RFC 4880、OpenPGP、3.7.1.3。反復および塩漬けS2K

これには、ソルトカウントとオクテットカウントの両方が含まれます。ソルトはパスフレーズと組み合わされ、結果の値は繰り返しハッシュされます。これにより、攻撃者が辞書攻撃を試みるために行う必要のある作業量がさらに増加し​​ます。

GnuPGでは、パスフレーズ(およびその他のいくつかのオプション)を繰り返す回数 --s2k-*オプションを使用して微調整できます

2
Jens Erat