57

ファイルを XOR 暗号化するための短い C++ プログラムを作成しました。これは、いくつかの個人用ファイルに使用する可能性があります (クラックされても大したことではありません。ただの閲覧者から保護しているだけです)。基本的に、ASCII パスワードを使用して、パスワードとファイル内のデータの XOR を繰り返します。

しかし今、私は興味があります: 誰かがこれを解読したいと思ったら、どうやってそれを実行しますか? 時間がかかりますか?パスワードの長さに依存しますか (つまり、big-O とは何ですか)?

4

13 に答える 13

124

XOR 暗号化の問題は、同じ文字を長時間使用すると、パスワードが非常に簡単にわかることです。このようなロングランは、テキスト ファイル内のスペースであることが最も一般的です。パスワードが 8 文字で、テキスト ファイルの行に 16 個のスペースがあるとします (たとえば、ASCII グラフィック テーブルの中央)。それをパスワードで XOR すると、出力に文字列が繰り返されることがわかります。攻撃者はそのようなものを探し、元のファイルの文字を推測しようとし (スペースが最初の候補です)、繰り返しグループの長さからパスワードの長さを導き出します。

バイナリ ファイルには繰り返しの0x00バイト シーケンスが含まれていることが多いため、さらに悪化する可能性があります。明らかに、これらの XOR はノーオペレーションであるため、パスワードは出力にプレーン テキストで表示されます。ヌルの長いシーケンスを持つ非常に一般的なバイナリ形式の例は、.doc.

于 2009-07-16T02:56:37.947 に答える
72

XOR の弱点に関するPavel Minaev の 説明に同意します。興味のある方のために、簡単な XOR 暗号化を数分で破るために使用される標準アルゴリズムの基本的な概要を以下に示します。

  1. キーの長さを決定します。これは、暗号化されたデータとそれ自体がさまざまな場所にシフトされた XOR 演算を実行し、同じバイト数を調べることによって行われます。

  2. 等しいバイト数が特定のパーセンテージ ( Bruce Schneier の Applied Cryptography second editionによると 6%) より大きい場合、キー長の倍数でデータをシフトしたことになります。 等しいバイト数が大量になる最小のシフト量を見つけることで、キーの長さを見つけます。

  3. 暗号文をキーの長さだけシフトし、それ自体に対して XOR します。 これによりキーが削除され、キーの長さだけシフトされたプレーンテキストで XOR されたプレーンテキストが残ります。メッセージの内容を判断するには、十分な平文が必要です。

詳細については、暗号化の問題、パート 1を参照してください。

于 2009-07-16T03:02:04.397 に答える
24

XOR 暗号化は、次の条件が満たされている場合、適度に*強力です。

  • プレーン テキストとパスワードの長さはほぼ同じです。
  • 複数のメッセージを暗号化するためにパスワードが再利用されることはありません。
  • パスワードは、辞書やその他の数学的手段によって推測することはできません。実際には、これはビットがランダム化されることを意味します。

*適度に強いということは、GeneQ の投稿のように、些細な数学的手段では破ることができないことを意味します。それはまだあなたのパスワードよりも強力ではありません.

于 2009-07-16T03:16:39.533 に答える
14

すでに述べた点に加えて、XOR 暗号化は既知の平文攻撃に対して完全に脆弱です。

cryptotext = plaintext XOR key
key = cryptotext XOR plaintext = plaintext XOR key XOR plaintext

ここで、平文を XOR リングすると互いに打ち消し合い、キーだけが残ります。

既知の平文攻撃に対して脆弱でないことは、同じ鍵が複数の平文ブロックに使用される (つまり、ワンタイム パッドは依然として安全である) 「安全な」暗号化方法にとって必要ですが、十分な特性ではありません。

于 2009-07-16T17:51:54.507 に答える
8

XOR を機能させる方法:

各キーの長さが素数に等しい複数のキーを使用しますが、キーの長さが同じになることはありません。元のファイル名を別のキーとして使用しますが、ファイル名を取得するためのメカニズムを作成することを忘れないでください。次に、暗号化されたファイルであることを知らせる拡張子を付けて新しいファイル名を作成します。素数の長さの複数のキーを使用する理由は、結果の XOR キーの長さが、繰り返される前にキー A の TIMES キー B になるためです。ファイルを暗号化する前に、繰り返しパターンをファイルから圧縮します。乱数を生成し、この数値を X オフセットごとに XOR します (この数値も再作成可能でなければならないことに注意してください。Filelength の RANDOM SEED を使用できます。

これらすべてを行った後、長さが 31 以上のキーを 5 つ使用すると、キーの長さは約 100 メガバイトになります。

鍵は、ファイル名が1つ(フルパス含む)、STR(ファイルサイズ)+STR(ファイル日付)+STR(日付)+STR(時刻)、ランダム生成鍵、あなたのフルネーム、一度だけ作成される秘密鍵。

暗号化された各ファイルに使用されるキーを保存するデータベースですが、DAT ファイルはコンピューターではなく USB メモリ スティックに保存します。

これにより、Pictures や Music などのファイルで繰り返しパターンが発生するのを防ぐことができますが、長さが 4 ギガ以上の映画は依然として脆弱である可能性があるため、6 番目のキーが必要になる場合があります。

私は個人的に、メモリ スティック上で暗号化された dat ファイルを持っています (Microsoft Access で使用するための Dat ファイル)。私はそれを暗号化するために3キー方式を使用しました。これは、関連付けられたキーを持つファイルのディレクトリであるため、それほど大きくなることはないからです。

1 つの非常に大きなキーをランダムに生成するのではなく、複数のキーを使用する理由は、素数と素数の積が急速に大きくなり、キーの作成をある程度制御できるためです。真の乱数などは実際には存在しないことがわかります。私が 1 つの大きな乱数を作成した場合、他の誰かが同じ数を生成できます。

キーを使用する方法: ファイルを 1 つのキーで暗号化し、次に次のキーで暗号化し、すべてのキーが使用されるまで次のキーで暗号化します。ファイル全体がそのキーで暗号化されるまで、各キーは何度も使用されます。

キーの長さが異なるため、繰り返しのオーバーラップはキーごとに異なり、キー 1 時間キー 2 の長さの派生キーが作成されます。このロジックは、残りのキーに対して繰り返されます。素数の理由は、キーの長さの分割で繰り返しが発生するため、分割を 1 またはキーの長さ、ヘンス、プライムにする必要があるためです。

確かに、これはファイルに対する単純な XOR ではありませんが、概念は同じです。

ランス

于 2011-10-14T10:08:51.457 に答える
5

普通の視聴者から守ってるだけ

この仮定が成り立つ限り、暗号化方式は問題ありません。Internet Explorer を「インターネット」だと思っている人は、それを破ることはできません。

そうでない場合は、いくつかの暗号ライブラリを使用してください。Blowfish や AES など、対称暗号化のための優れたアルゴリズムはすでにたくさんあります。

于 2009-07-16T17:55:02.393 に答える
3

優れた暗号化の目標は、キーなしで解読することを数学的に困難にすることです。
これには、キー自体を保護したいという欲求も含まれます。XOR 技術
は 、基本的には非常に単純な暗号であり、ここで説明するように簡単に破ることができます。

XOR は暗号化アルゴリズム内で使用されることに注意することが重要です。
これらのアルゴリズムは、その周りの数学的困難の導入に取り組んでいます。

于 2009-07-16T03:04:23.830 に答える
2

もう1つのトリックは、パスワードのmd5()ハッシュを生成することです。保護されたテキストの長さをオフセットとして使用するか、パスワードと組み合わせて短いフレーズをより適切に配布することで、さらにユニークにすることができます。また、長いフレーズの場合は、各16バイトブロックを前のハッシュと組み合わせてmd5()ハッシュを進化させ、XORキー全体を「ランダム」で非反復にします。

于 2010-11-27T17:51:34.963 に答える
2

Norton の Anti-virus は、前の暗号化されていないレターを次のレターのキーとして使用する技術を使用していました。私の記憶が正しければ、それを理解するのにさらに30分かかりました。

カジュアルな視聴者を止めたいだけなら、それで十分です。実行可能ファイル内の文字列を非表示にするために使用しました。ただし、実際に試してみると、10 分も耐えられません。

とはいえ、最近でははるかに優れた暗号化方法がすぐに利用できるので、より良いものを利用してみませんか. 「カジュアルな」ユーザーから隠れようとしている場合は、gzip のようなものでさえ、その仕事をよりうまく行うことができます。

于 2009-07-16T03:37:36.137 に答える
1

GeneQが言及している「6%」は、英語の電信テキストの一致の指標です。句読点と数字が綴られた26文字です。長いテキストの実際の値は0.0665です。

<4%は、26文字のアルファベットのランダムテキストの一致指数であり、1/26、つまり0.385です。

別の言語または別のアルファベットを使用している場合、特定の値は異なります。ASCII文字セット、Unicode、またはバイナリバイトを使用している場合、特定の値は大きく異なります。しかし、平文とランダムテキストのICの違いは通常存在します。(圧縮されたバイナリにはランダムのICに非常に近いICが含まれている可能性があり、最新のコンピューター暗号で暗号化されたファイルには、ランダムテキストのICとまったく同じICが含まれます。)

テキストをそれ自体に対してXORすると、残ったものは自己鍵暗号と同等になります。ウィキペディアには、そのような暗号を破る良い例があります

http://en.wikipedia.org/wiki/Autokey_cipher

于 2010-06-07T23:03:11.883 に答える
1

RC4 は本質的に XOR 暗号化です! 多くのストリーム暗号と同様に、キーはキーです (しゃれは意図されていません!) キーは決して再利用してはなりません。これまで!

于 2010-02-11T23:01:36.073 に答える
1

回答が少し遅くなりましたが、まだ誰も言及していないので、これはヴィジュネール暗号と呼ばれています。

ウィキペディアは、それを破るために多くの暗号解読攻撃を提供しています。ただし、ほとんどのファイル形式には固定ヘッダーがあるため、さらに簡単なのは、平文ヘッダーと暗号化ヘッダーを XOR してキーを取得することです。

于 2010-06-04T17:15:00.457 に答える