web-dev-qa-db-ja.com

暗号化でXOR=が使用されるのはなぜですか?

暗号アルゴリズムでXORのみが使用され、OR、AND、およびNORは使用されないのはなぜですか?

66
Bhaskar

論理演算XORはすべての暗号化で使用される唯一のものですが、排他的に使用される唯一の双方向暗号化です。

以下がその説明です:

2進数の文字列10101があり、XOR文字列10111を使用すると、00010が得られます

これで、元の文字列がエンコードされ、エンコードされた文字列を使用してキーをXOR.

XORを使用すると、文字列を簡単に暗号化および復号化できますが、他のロジック操作ではできません。

長い文字列がある場合、たとえば、文字列が1010010011の場合、十分に長くなるまでキーを繰り返すことができます。キーを2回書くだけで、1011110111とXOR新しい文字列で

これは XOR暗号に関するウィキペディアのリンク


66
Stephen Lacy

2つの理由がわかります。

1)(主な理由)XORは、元の平文に関する情報を漏らしません。

2)(いい理由)XORは インボリュート関数 です。つまり、XORを2回適用すると、元のプレーンテキストを取得します(つまり、XOR(k, XOR(k, x)) = xxはプレーンテキスト、kはキーです)。内側のXORは暗号化で、外側のXOR=は復号化です。つまり、まったく同じXOR関数を暗号化と復号化の両方に使用できます。

最初のポイントを例証するために、AND、ORおよびXORの真理値表を考えてください

そして

0および0 = 0

0および1 = 0

1 AND 0 = 0

1 AND 1 = 1(リーク!)

または

0 OR 0 = 0(リーク!)

0 OR 1 = 1

1 OR 0 = 1

1 OR 1 = 1

XOR

0 XOR 0 = 0

0 XOR 1 = 1

1 XOR 0 = 1

1 XOR 1 = 0

最初の列のすべてが入力(つまり、プレーンテキスト)です2番目の列はキーであり、最後の列は、特定の操作を使用してキーと「混合」(暗号化)された入力の結果です、暗号文)

ここで、攻撃者が暗号化されたバイトにアクセスしたとします:10010111、彼は元の平文バイトを取得したいと考えています。

元の平文バイトからこの暗号化されたバイトを生成するためにAND演算子が使用されたとしましょう。 ANDが使用された場合、暗号化されたバイトにビット '1'が表示されるたびに、入力(つまり、最初の列、プレーンテキスト)も真理値表に従って '1'でなければならないことがわかります。そして。暗号化されたビットが代わりに「0」である場合、入力(プレーンテキスト)が「0」か「1」かはわかりません。したがって、元のプレーンテキストは1 _ _ 1 _ 111​​であると結論付けることができます。したがって、元のプレーンテキストの5ビットがリークしました(つまり、キーなしでアクセスできた)。

ORに同じ考え方を適用すると、暗号化されたバイトに「0」が見つかるたびに、入力(つまり、プレーンテキスト)も「0」でなければならないことがわかります。 「1」が見つかった場合、入力が「0」か「1」かはわかりません。したがって、入力プレーンテキストは_ 00 _ 0 _ _ _であると結論付けることができます。今回は、キーについて何も知らずに、元のプレーンテキストバイトの3ビットをリークすることができました。

最後に、XORでは、元のプレーンテキストバイトを取得できません。暗号化されたバイトに「1」が表示されるたびに、「1」は「0」または「1」から生成された可能性があります。 「0」の場合も同じです(「0」または「1」の両方から取得できます)。したがって、元のプレーンテキストバイトから1ビットもリークされません。

34
Tiago

主な理由は、分布が不明なR1の確率変数が一様分布の確率変数R2とXORされた場合、結果は一様分布の確率変数であるため、基本的に、他の二項演算子では不可能なバイアス入力を簡単にランダム化できるためです。

32
Anurag Uniyal

XORの出力は常に両方の入力に依存します。これはあなたが言及した他の操作には当てはまりません。

26
recursive

XORは可逆です。ハッシュを作成したい場合は、XORを避けたいと思います。

6
Denis Masyukov

XORは直接使用される唯一のゲートです。1つの入力が何であっても、他の入力は常に出力に影響を与えるからです。

ただし、暗号アルゴリズムで使用されるゲートはこれだけではありません。これは、大量のビットシャッフルとXORおよび回転バッファーを伴うタイプのオールドスクール暗号化に当てはまる場合がありますが、素数ベースの暗号化には、XORを通じて実装されないあらゆる種類の数学が必要です。

6
jprete

XORは、特定のビットのオンとオフを切り替えることができるトグルスイッチのように機能します。数値(ビットのパターン)を「スクランブル」したい場合は、XOR数値を使用します。そのスクランブルされた数値を取得し、XOR=再び同じ番号で、あなたは元の番号を取り戻します

210 XOR 145 gives you  67  <-- Your "scrambled" result
 67 XOR 145 gives you 210  <-- ...and back to your original number

XORで数値(またはテキストまたはビットのパターン)を「スクランブル」すると、暗号化の多くの基礎ができます。

4
Robert Cartaino

XORは、より複雑な操作(ADD、MULなど)よりも少ないトランジスタ( 4 NANDゲート )を使用するため、ゲートカウントが重要な場合にハードウェアに実装するのに適しています。さらに、XORはそれ自体が逆であり、キーマテリアルの適用に適しています(同じコードを暗号化および復号化に使用できます)。美しくシンプルな AddRoundKey AESの操作はこの例です。

3
Jeff Moser

XOR property (a xor b)xor b = aは、ストリーム暗号に便利です。ビット幅のデータを暗号化するには、nビットの擬似ランダムシーケンスです。暗号鍵と暗号アルゴリズムを使用して生成されます。

送信者:
データ:0100 1010(0x4A)
疑似ランダムシーケンス:1011 1001(0xB9)
 ------------ ------ 
暗号化されたデータ1111 0011(0xF3)
 ------------------ 
 
受信者:
暗号化されたデータ1111 0011(0xF3)
擬似ランダムシーケンス:1011 1001(0xB9)(受信者はキーを持ち、同じシーケンスを計算します)
 ------- ----------- 
 0100 1010(0x4A)復号化後のデータ
 ------------------ 
2
Babu Srinivasan

3つの一般的なビット単位の論理演算子を考えてみましょう

いくつかの番号を選択して(マスクと呼びましょう)、未知の値と組み合わせることができるとしましょう

  • ANDは、一部のビットを強制的にゼロにします(マスクでゼロに設定されているビット)
  • ORは、いくつかのビットを1に強制します(マスクで1に設定されているビット)

XORは、どのマスクを選択しても、結果のビットの値を確実に知ることはできません。ただし、マスクを適用すると、2回初期値が返されます。

つまり、ANDおよびORの目的は、一部の情報を削除することであり、これは暗号化アルゴリズム(対称または非対称暗号、デジタル署名)で必要なものではありません。戻せない(復号化できない)か、署名がメッセージのわずかな変更を許容するため、その目的が無効になります。

とは言っても、それは実装ではなく暗号アルゴリズムに当てはまります。暗号化アルゴリズムの実装の多くは、通常32個または64個の内部レジスタから個々のバイトを抽出するために、多くのANDも使用します。

通常、そのようなコードを取得します(これはaes_core.cのほぼランダムな抽出です)

rk[ 6] = rk[ 0] ^
 (Te2[(temp >> 16) & 0xff] & 0xff000000) ^
 (Te3[(temp >>  8) & 0xff] & 0x00ff0000) ^
 (Te0[(temp      ) & 0xff] & 0x0000ff00) ^
 (Te1[(temp >> 24)       ] & 0x000000ff) ^
 rcon[i];
rk[ 7] = rk[ 1] ^ rk[ 6];
rk[ 8] = rk[ 2] ^ rk[ 7];
rk[ 9] = rk[ 3] ^ rk[ 8];

私が正しければ8つのXORと7つのAND

2
kriss

対称暗号の場合、ビットを暗号と混合し、長さを増加させない唯一の実際の選択操作は、キャリー付き加算、キャリーなし加算(XOR)および比較(XNOR)演算のみです。その他の操作は、ビットを失うか、拡張するか、CPUで使用できません。

2
Joshua

XORは暗号化における数学的計算です。これは論理的な操作です。他の論理演算があります:AND、OR、NOT、モジュロ関数など。XORは最も重要で最も使用されています。

enter image description here

同じ場合、0です。

異なる場合は1です。

例:

メッセージ:こんにちは

Helloのバイナリバージョン:01001000 01100101 01101100 01101100 01101111

キーストリーム:110001101010001101011010110011010010010111

XOR:10001110 11000110 00110110 10100001 01001010を使用した暗号テキスト

アプリケーション:ワンタイムパッド/ Vern-am Cipherは、受信者が同じキーストリームを持ち、秘密のトランスポートチャネルを介して暗号文を受信するExclusiveまたは機能を使用します。次に、受信者は、Helloの平文を明らかにするために、暗号ストリームとキーストリームをXorします。ワンタイムパッドでは、キーストリームは少なくともメッセージと同じ長さでなければなりません。

事実:ワンタイムパッドは、唯一の真に解読不可能な暗号化です。

排他的ORブロック暗号で使用されるFeistel構造で使用されるDES algo。

注:XOR操作は50%の確率で0または1を出力します。

enter image description here

1

単に2進数のランダムなセットが与えられると、多数の「OR」演算がすべて「1」になり、同様に多数の「AND」演算がすべてゼロになる傾向があるためだと思います。多数の「XOR」が1と0のランダムな選択を生成する場合。

これは、ANDとORが役に立たないということではありません-ちょうどXORがより便利です。

暗号化におけるOR/ANDおよびXORの普及率は、次の2つの理由によります。

これらの1つは、超高速の指示です。

2従来の数式を使用してモデリングするのが難しい

1
James Anderson