web-dev-qa-db-ja.com

ファイルが持つことができる暗号化のレイヤーに制限はありますか?

特定のファイルの対称GPG暗号化を検討しますmy_file.txt。 (コマンドラインで)のようなもの

gpg --symmetric --cipher-algo AES256 my_file.txt

新しいパスワードでプロンプトを提供した後、上記はmy_file.txt.gpg。次に、もう一度暗号化できます。

gpg --symmetric --cipher-algo AES256 my_file.txt.gpg

(別のパスワードを設定する場合)

等々。上記の何回の反復に制限はありますか?対称暗号化はテキストの一部を取得してそれを別のテキストに変換するだけなので、テキストの一部が最初に何であるかを尋ねることはありません。これは本当ですか?

12
luchonacho

理論的には、ファイルを暗号化できる回数に制限はありません。暗号化プロセスの出力もファイルです。このファイルを別のアルゴリズムに渡して、出力を取得できます。

問題は、解読側では、適切なパスワードを使用してLIFO(後入れ先出し)スタイルで解読する必要があることです。

たとえば、ファイルが最初にalgo1とパスワードabcdeで暗号化され、次にalgo2とパスワードvwxyzで暗号化された場合、最初にalgo2(パスワードvwxyz)で復号化し、次にalgo1(パスワードabcde)で復号化します。

この方法は、異なるメディアまたはチャネルを介してキーを送信する場合に意味があります。この方法は、すべてのパスワードが同じチャネルを介して送信される場合にはほとんど役に立ちません。

24
pri
  • ですから、遅かれ早かれ、あなたはスペースを使い果たすでしょう。

GnuPGは [〜#〜] cfb [〜#〜] 対称暗号化の操作モードを使用します( rfc488 で定義)。 CFBモードでは、AES暗号化に128ビットサイズのIVが必要で、パディングは必要ありません。

理論的には他の回答で指摘されているように制限はありません。ファイルサイズの増加により、実際的な制限があります。たとえば、サイズが163バイトのファイルを暗号化した場合、結果は213バイトでした。以前のコードを再暗号化すると、結果は295バイト、382バイト、473バイトなどになります。

これらのバイトには、GnuPGの packet も含まれます。ですから、遅かれ早かれ、あなたはスペースを使い果たすでしょう。

8
kelalaka

ファイルを暗号化できる回数に制限がないことは正しいですが、必ずしもLIFOの順序で復号化する必要があるとは限りません。

LIFO復号化は機能しますが、特定の多重暗号化ファイルは、結果に影響を与えることなく順不同に復号化できます(暗号化に使用されたアルゴリズムによって異なります):

異なるキーで1つのタイムパッド(XOR)を使用して同じファイルを2回暗号化することを検討してください。すべてのビットに対して(A xor B)xor C ==(A xor C)xor Bであるため、どちらの順序でも復号化できます。

(50人の担当者がいた場合、これはコメントになります。他の回答を編集して、この回答を削除してください。)

編集:このEdgeケースの詳細については、 この質問 を参照してください。

7
Steven Jackson

多くの人がすでに観察しているように、暗号化のたびにファイルに追加する必要があるIVのため、暗号化の各レベルの後でファイルのサイズが少し増加します。あまり関係がない。

むしろ、そうする動機は明らかに、ブルートフォース攻撃を含む攻撃に対する暗号文の堅牢性を高めることであることに注目したい。暗号化の$ h $レベルごとに$ n $ビットのキーを使用する場合、たとえば、キー$ k_1、k_2、\ ldots、k_h $を使用すると、1つの長いキーに基づいて1つの一意の暗号化の堅牢性が得られると予想される$ h\times n $ビットの。理論的には、攻撃者がキースペースのサイズを$ 2 ^ {h\times n} $未満に減らすことを可能にする Meet-in-the-Middle 攻撃を実行することが可能です。実用的な例は2-DESです。ここで、平文$ P $は最初にDESキー(56ビット)で暗号化され、暗号文$ C '$、次に$ C' $が取得されます。は別のDES=鍵で再び暗号化され、最終的な暗号文$ C $を取得します。ただし、鍵空間のサイズが$ 2 ^ 112 $であるという期待は間違っています。実際のサイズは$ 2 ^ 57 $は、ミートインザミドル攻撃、つまり known-plaintext attack (攻撃者がペア$(P、C)$を知っていることを意味する)であるため、攻撃者を許可します最初に、$ P $のすべての可能な$ 2 ^ 56 $暗号化のテーブルを作成し(潜在的なキーごとに1つ)、次に$ C $のすべての可能な暗号化を生成します(ここでも、潜在的な2番目のキーごとに1つ)。それらを$ C '' $と呼び、$ C '' $がテーブル内の潜在的な暗号文の一部と等しいかどうかを確認します。一致した場合、$ C '' = C '$となり、2つが見つかりましたDESキー。暗号化/復号化の合計数は$ 2 ^ 56\times 2 = 2 ^ 57 $になります。

同様の理由で、 -DES (3つのレベルDES 3つの異なるキーを使用した暗号化))は、112ビットのキーのセキュリティを提供します。

2
flex