web-dev-qa-db-ja.com

GnuPGはどのようにして復号化の初期化ベクトルを知るのですか?

正しいパスフレーズで暗号化されたファイルを復号化できます。しかし、どのようにして復号化中に正しい初期化ベクトルを知ることができますか?暗号化中にランダムに生成されませんか?

5
rostak87

OpenPGPは実際には初期化ベクトルを使用しません(すべてゼロとして定義されています)。代わりに、後でランダムデータのブロックを使用します。これは、OpenPGP固有のOpenPGP CFBモードで初期化ベクトルの役割を果たします。

From RFC 4880、OpenPGP、13.9。OpenPGPCFBモード

OpenPGP CFBモードは、すべてゼロの初期化ベクトル(IV)を使用し、プレーンテキストの前にランダムデータのBS + 2オクテットを付け、オクテットBS + 1およびBS + 2がオクテットBS-1およびBSと一致するようにします。これらのBS + 2オクテットを暗号化した後、CFBの再同期を行います。

言い換えれば、初期化ベクトルは一定であると定義されている一方で、初期化ベクトルと同様の構成が各暗号化メッセージに含まれています。だからはい-初期化ベクトルのようなものが暗号化中に生成されますが、それは暗号化ヘッダーに格納され、復号化に使用されます。

副次的事実:一部のオクテットの繰り返しにより、指定された受信者なしでメッセージを復号化しようとするときに使用されるため、誤ったセッションキーを早期に検出できます(この手法を使用すると、OpenPGPの実装は、メッセージ全体を復号化する前に、一致しないキーをスキップできます)。 。一方、Mister the Zuccherato( OpenPGPで使用されるCFBモードの暗号化に対する攻撃 )で説明されているように、難解な選択された暗号文攻撃が可能になります。基本的な暗号の原則の1つがここで破られています。自分自身を繰り返さないでください。予期しない攻撃ベクトルが開かれる可能性があります。

7
Jens Erat

暗号化時に、IVは暗号文の横に保存されます。

1
John Blatz