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暗号の実装例 |
コメント