
のハンドブックは、平文にアクセスする必要がある場合に対称暗号化が適切である(したがって、公開鍵暗号化よりも安全性が低いわけではない)ことを示唆している。しかし、これこのポストではgpg --symmetric
パスフレーズのみが必要なので、攻撃者はパスフレーズから生成された完全な 128/256 ビット キーではなく、このパスフレーズのみをブルート フォース攻撃すれば済みます。
正しい手順は、実際に 128/256 ビットのキー ファイルを用意して、それを使ってデータを対称的に暗号化することだと思います。このキー ファイル自体は、秘密キーが保護されているのと同じように、パスフレーズから生成されたキーで対称的に暗号化されます。このためには、攻撃者は完全な対称キーをブルート フォースで解読する必要があります。たとえ攻撃者が私のキー ファイルを入手したとしても、パスフレーズをブルート フォースで解読する必要があります。
この種の使用法をサポートしていますかgpg
? 私の状況の理解に誤りがありますか? これが有効な使用例ではない理由があるのでしょうか?
--
あるいは別の言い方をすると:
でこれ質問では、パスフレーズ保護で十分であると想定されていますが、基本的に私の質問は、自分が適切な 256 ビット パスワードを記憶できるかどうか自信がない場合はどうなるかということです。対称キー ファイルを秘密キーと同じように使用できますか? もちろん、秘密キーを使用することもできますが、ハンドブックでは、この状況では対称暗号化が慣用的な選択であると示唆されています。
答え1
OpenPGP では、パスフレーズから対称 (セッション) キーを導出する方法として、パスフレーズを直接使用してキーを導出する方法と、生成されたキーで暗号化されたランダム キーを生成する方法の 2 つが考えられます。ただし、どちらの場合も、対称キーは常に暗号文と一緒に保存され、対称キーを分割すると OpenPGP 形式との互換性が失われます。結局、キーの保存方法に関係なく、パスフレーズを介してキーをブルート フォース攻撃することもできます。
しかし、OpenPGPは、ハッシュされる大きな入力を生成することで(ハッシュ入力に対してパスフレーズを複数回繰り返す)、パスフレーズのブルートフォース攻撃を困難にしています。この方法では、パスフレーズのブルートフォース攻撃のコストははるかに高くなります。RFC 4880、OpenPGP、3.7.1.3。反復およびソルト付き S2K:
これにはソルトとオクテットカウントの両方が含まれます。ソルトはパスフレーズと組み合わされ、結果の値は繰り返しハッシュされます。これにより、攻撃者が辞書攻撃を試みるために行う必要がある作業量がさらに増加します。
GnuPGでは、パスフレーズを繰り返す回数(およびその他のオプション)--s2k-*
オプションを使用して調整できます。