【XOR暗号】原理・アルゴリズム・例題

XOR暗号の原理と仕組みについてまとめました。

## XOR暗号の原理

XOR暗号とは、その名の通り、排他的論理和(XOR, 記号:⊕)を用いた暗号化手法です。
排他的論理輪(XOR)には、以下のような2つの特徴があります。

XORの性質
与えられた2つのビットのうち片方が1、もう一方が0のときに1になる
ビット列Xに対してビット列YでXOR演算した結果に対し、再びビット列YでXOR演算すると元のビット列Xに戻る

特徴①②を実際に数値で見ると次のようになります。

特徴①

排他的論理和(XOR)

1 ⊕ 1 = 0
1 ⊕ 0 = 1
0 ⊕ 1 = 1
0 ⊕ 0 = 0

特徴②

X ⊕ Y ⊕ Y = X

ビット列X 10110010
ビット列Y 01010101
*------------------
XOR結果 11100111

XOR結果 11100111
ビット列Y 01010101
*------------------
ビット列X 10110010

これらの性質(特に②)を利用した暗号化がXOR暗号です。
XOR暗号では、平文(暗号化するデータ)に鍵(パスワード)をXOR演算することで暗号文を生成します。
そして、暗号文に対して鍵でXORすると復号化(暗号解除)します。
XOR暗号は、基本的に鍵さえバレなければ解読は困難です。

## 例題(XOR暗号)

今回は「SAO」という文章をXOR暗号化することを考えます。
S、A、OのASCIIコード(2進数)は次のようになります。

S:1010011
A:1000001
O:1001111

また、今回は鍵を「11100000」とします。

よって、平文と鍵は次のようになります。

平文(SAO):1010011 1000001 1001111
鍵(K):1110000

暗号文を作るには、S、A、Oそれぞれのビット列に対して、鍵のビット列でXOR演算をしてやります。

S ⊕ K = 0100011
A ⊕ K = 0110001
O ⊕ K = 0111111

暗号文(#1?):0100011 0110001 0111111

暗号文を復号(平文)に戻す場合は暗号文に対して鍵でXOR演算します。

# ⊕ K = 1010011
1 ⊕ K = 1000001
? ⊕ K = 1001111

平文(SAO):1010011 1000001 1001111

## XOR暗号の実装例(プログラミング)

プログラミング言語でシーザー暗号を実装した例を下記に整理しました。

言語 記事
Python 【Python】XOR暗号の実装例

コメント