移動式のブログ

ガジェット、アニメ、プログラミング、考えたことその他色々・・・特にこれといったテーマはないカオスなブログです。

解読できない暗号 ワンタイムパッド

ワンタイムパッド

総当たり(ブルートフォースアタック)で鍵の組み合わせを総当たりで探せば、時間はかかるが必ず暗号文は解読できる。

しかし、ワンタイムパッドという暗号方法は、総当たりですべて探そうとしても解読することができない。

ワンタイムパッドは平文(元の文)とランダムなビット列とのXORを取ることで平文を暗号化する方法だ。

この暗号方法は単純な手順で文を暗号することができるが、解読することは不可能であるといわれている。
数億年とか、実現不可能な時間をかけないと解読できないというわけではない。
いくら時間をかけても論理的に解読不可能である。


・暗号化、復号化のやり方

f:id:idoushiki:20180113223525p:plain
例えば、以上の図のように、101010という平文を110110という鍵を利用して暗号化すれば、011100という暗号文が出来上がる。
そして、暗号文を平文に戻したい場合は、暗号文と鍵でXORをすれば良いので、110110という鍵と011100という暗号文でXORをすれば平文の101010になる。

・どうして解読できないのか

ワンタイムパッドの暗号文は、適当な鍵とXORして出た結果が意味を持った文になったとしても、その情報が正しい平文であるとは限らない。

例えば、暗号文に総当たりで適当な鍵を当てはめていって、BAKAという解読結果になったとする。「ばか」と意味を持った文になるので、これは正しく復号できていて正しい平文なのだろうか。

f:id:idoushiki:20180113233531p:plain
以上の図のように、11111 11111 11111 11111という暗号文に11101 11110 10100 11110という適当な鍵とXORしたらたまたま「BAKA」という文になった。

しかし、以下の図のように、別の適当な鍵を当てはめたら「BOKE」という文になった。
f:id:idoushiki:20180113233945p:plain

この結果は、単純に数字の「216115」を表している可能性もある。
ほかにも、適当に鍵を当てはめていけば、「KUSO」とか「KUKI」とか「KAKI」とか意味をもった文章になる場合がいくらでもある。
以上の図のように暗号文の11111111111111111111は11101 01111 10100 11010でXORしたら「BOKE」となるが、11101 01111 10100 11010が正しい鍵であることが確定していなければ、「BOKE」が正しい平文であることは確定しない。

適当にやって意味を持った単語になったとしても、どれが正しい平文なのか判断できない。
正しい鍵によって復号化したときにのみ、その結果が正しい平文であると確定する。

つまり、総当たりで鍵と暗号文をXORした結果が意味を持った文になったとしても、それが正しい平文かどうかはわからないということだ。

理論的には、正しく運用された場合に解読不可能となる。たとえ総当たりで解読しようとしても、総当たりで生成される多数の文章(文字列)の中には、送信者が暗号化した文章以外にも、人間が意味を読み取れる文章(文字列)が生成されてしまう。従って、解読者には、送信者自身の文章とそれ以外の人間が意味が読み取れる文章を区別することができず、解読不可能となる。

ワンタイムパッド - Wikipediaより引用


しかし、この暗号化方法には欠点がある。
同じ鍵によって暗号化、復号化をおこなので、文章を送り合う人がお互い鍵を知っておく必要があるということだ。
また、本文を暗号化する鍵のデータ量が本文と同じ量になってしまうということだ。
そのため、鍵の情報が流出することがあったり、事前に鍵を通信者間で共有する手間があったりするので、ワンタイムパッドは完璧な暗号というわけではない。
論理的に解読は不可能でも、運用に手間がかかるというわけだ。



暗号技術入門 第3版

新品価格
¥3,240から
(2018/1/14 00:27時点)