【えっくすおーある】
XOR とは?
最終更新:
💡 同じなら0、違えば1。桁ごとに比べる
2つのビットが異なれば1、同じなら0を返す排他的論理和。複数ビットには桁ごとに適用し、同じ値で2回XORすると元へ戻ります。この性質だけでは暗号の安全性を保証できません。
📌 このページのポイント
- 真理値表は00→0、01→1、10→1、11→0
- A XOR A=0、A XOR 0=A、(A XOR B) XOR B=A
- 論理演算と、複数のビットを扱うビット演算を区別
- 暗号で使われる部品だが、固定キーでXORするだけでは安全でない
- JavaScriptのNumberの^は32ビット整数に変換される
XORは何をする?
入力の2ビットが違えば1、同じなら0を返す演算だよ。0と0なら0、0と1なら1、1と0なら1、1と1なら0。ORと違うのは、両方1の場合に0になるところだね。
数値にも使える?
各桁のビットに適用できる。たとえば2進数の1010と1100をXORすると0110になるよ。数値の大きさを比べる演算ではない。記号は⊕やXOR、言語によっては^などを使うけれど、^が累乗を表す言語もあるので確認しよう。
同じ値で元に戻るのはなぜ?
それだけで安全に暗号化できる?
重複しない値を探せる?
JavaScriptでは注意がある?
もっと詳しく知りたい人へ
キーの再利用は何が漏れる?
C1=P1 XOR K、C2=P2 XOR Kなら、C1 XOR C2=P1 XOR P2です。Kが打ち消されるため、単にキーを秘密にしているだけでは十分ではありません。ChaCha20-Poly1305などの方式でも鍵・nonceの使い方と認証タグの検証を守る必要があります。
📖 おまけ:英語の意味
「Exclusive OR」 = 排他的論理和
💬 どちらか一方だけが真の場合に真になる演算です。両方が真の場合も真になるORと区別します。