排他的論理和による暗号と復号

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

わかる人にしかわかってほしくない、そんな情報を扱うための技術が暗号です。

本記事では暗号技術の基礎である、排他的論理和による暗号・復号について簡単に説明します。

排他的論理和とはなにか

排他的論理和について述べる前に、それとよく似た性質をもつ正負の掛け算について復習します。

正負の掛け算、より具体的には、集合\( \left\{ 1,-1\right\}\)で定義された\(\times \)という演算は、次のような性質を持っています。

\[
\begin{array}{ccccc}
1&\times &1&=&1\\
1&\times &(-1)&=&-1\\
(-1)&\times &1&=&-1\\
(-1)&\times &(-1)&=&1
\end{array}
\]

排他的論理和はこの正負の掛け算によく似た演算です。

排他的論理和\( \oplus\)は、集合\( \left\{ 0,1\right\}\)で定義された演算で、以下の性質を満たすもののことです。

\begin{equation} \begin{split}
0\oplus 0&=0\\
0\oplus 1&=1\\
1\oplus 0&=1\\
1\oplus 1&=0
\end{split} \end{equation}

 

排他的論理和の性質

この演算には結合法則が成り立ちます。つまり、どんな\( a,b,c\in\left\{ 0,1\right\}\)に対しても

\begin{equation} \begin{split}
(a\oplus b)\oplus c=a\oplus (b\oplus c)
\end{split} \end{equation}
が成り立ちます。

また、自分自身との排他的論理和は常に0になります。つまり、どんな\( a\in\left\{ 0,1\right\}\)に対しても

\begin{equation} \begin{split}
a\oplus a=0
\end{split} \end{equation}
が成り立ちます。

さらに、0との排他的論理和は、もとの数を変化させません。つまり、どんな\( a\in\left\{ 0,1\right\}\)に対しても

\begin{equation} \begin{split}
a\oplus 0=0\oplus a=a
\end{split} \end{equation}
が成り立ちます。

 

2進数の排他的論理和

2進数は各桁の取りうる値が0か1のどちらかになります。したがって、各桁に対して排他的論理和をとるという演算によって、2進数の排他的論理和も定義できます。

例えば、私たちが普段よく使う10進数の2と11は、2進数ではそれぞれ10と1011と表されます。桁を揃えるために、2を0010と表すことにします。

このふたつの数の排他的論理和\( 0010\oplus 1011\)を計算してみましょう。

2進数の排他的論理和は各桁の排他的論理和を取れば良いので

\begin{equation} \begin{split}
\mbox{1桁目}~~0\oplus 1&=1\\
\mbox{2桁目}~~1\oplus 1&=0\\
\mbox{3桁目}~~0\oplus 0&=0\\
\mbox{4桁目}~~0\oplus 1&=1\\
\end{split} \end{equation}
と計算することで、\( 0010\oplus 1011=1001\)であるとわかります。ちなみに2進数の1001は10進数では9になります。

 

排他的論理和による暗号

排他的論理和は暗号に用いることが出来ます。

先ほど10進数の2と11を2進数に変換し排他的論理和を計算しました。この「2」という数字が、機密情報だったとしましょう。

2という数字をそのまま相手に送ると、通信を傍受されたときに秘密が漏れてしまいますから、なんとかしてこれを隠したいと考えます。これが暗号です。

2という数字をそのまま送りたくないので、2と適当な数字、たとえば11の排他的論理和をとってから送ってみます。2と11を2進数に変換し排他的論理和をとって得られる数は9でしたから、もとの2という数は秘匿されています。

排他的論理和をとるのに使った11という数字が漏れなければ、機密情報の2という数字は相手に伝わりません。つまり「11」という鍵が漏れなければ、「2」という機密情報は暗号化されるのです。

 

排他的論理和による復号

もちろん、暗号化した9という数からもとの2という数を復元(復号)出来なければ意味がありません。

しかし実は復号はとても簡単です。

排他的論理和の定義から、\( a,r\in\left\{ 0,1\right\}\)について以下の等式が成り立ちます。

\begin{equation} \begin{split}
\left(a\oplus r \right)\oplus r=a\oplus\left( r\oplus r\right)=a\oplus 0 =a
\end{split} \end{equation}

この式は「数\( a\)に対して、同じ数\( r\)について排他的論理和を二度とると、元の数\( a\)にもどる」ことを意味しています。

\( r\)との排他的論理和をとるという操作を暗号と解釈すると、もう一度\( r\)との排他的論理和をとるという操作が復号になります。

先ほど、秘密にしたい数2(2進数では0010)に対して、隠匿のための11(2進数では1011)という数との排他的論理和をとって、1001という2進数を得ました。この数に対してもう一度1011との排他的論理和をとって、秘密にしたかった0010が復元できるか確かめてみます。

\begin{equation} \begin{split}
\mbox{1桁目}~~1\oplus 1&=0\\
\mbox{2桁目}~~0\oplus 1&=1\\
\mbox{3桁目}~~0\oplus 0&=0\\
\mbox{4桁目}~~1\oplus 1&=0\\
\end{split} \end{equation}

と計算できますから、たしかに復号できています。

 

参考文献

本記事はこちらの書籍を参考にしました。

暗号に関するさらに発展的な内容は、以下の書籍が詳しいです。私も読み進めています。


2進数と10進数の変換についてはこちらのサイトを利用しました。

2進数、8進数、10進数、16進数相互変換ツール https://hogehoge.tk/tool/number.html

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す

*