最強の暗号!?

はじめに

初心者向けの記事です。

オチが知りたい方・お急ぎの方は「これの欠点」をお読みください。

私自身まだ未熟者故、記事の内容には誤りがあるかもしれません。もし間違いがありましたらコメントしていただけるとありがたいです。あとブログ書くのはじめてなんです。少しでも暗号に興味を持ってくれたらいいなと思い書いてみました。

絶対に解読のできない暗号とは

暗号と聞いて皆さんは何を思い浮かべるでしょうか?

シーザー暗号? RSA暗号?

これらは鍵を知らない第3者によって解読することが可能です。

 

シーザー暗号なら鍵が26通りしかないためブルートフォースアタック(総当たり攻撃)で解読できます。

 

RSA暗号素因数分解さえできれば第3者の手によって解読されてしまいます。

 

現在使われている暗号技術は解読が困難なだけであって、決してできないというわけではないのです。

 

 

One Time Pad(使い捨てパッド)

説明をするうえで必要な知識

知らなければ各自ググってね

  • 論理演算「XOR」(授業でやったよね?)

One Time Pad とは

必要なもの

  • 暗号化するデータ
  • 暗号化するデータと同じビット数の鍵

暗号化の方法

とてもシンプル

  1. 暗号化するデータと鍵でXORをとる

終わり!

復号化の方法

とてもシンプル

  1. 暗号化されたデータと暗号化するときに用いた鍵でXORをとる

終わり!

実際にやってみる

pythonで実装してみたので試したい方がいればどうぞ

(本当は直接コードを貼りたかったけどめんどくさかったというわけではありませんよ)

「suki」を暗号化

ASCIIコードでそれぞれの文字を8bitに変換

s→01110011

u→01110101

k→01101011

i →01101001

 

合体させると

平文(ビット列) : 01110011011101010110101101101001

鍵生成

平文と同じビット数(32ビット)の鍵を用意する

鍵 : 11101000101011110100100010100111

暗号化

平文と鍵でXORをとる

平文  : 01110011011101010110101101101001
鍵   : 11101000101011110100100010100111

XOR

暗号文 : 10011011110110100010001111001110

復号化

暗号文と平文でXORをとる

暗号文 : 10011011110110100010001111001110

鍵   : 11101000101011110100100010100111

XOR

平文  : 01110011011101010110101101101001

ASCII変換

平文 : suki

なぜ解読されない?

先ほどの暗号文を正しい鍵を知らない人が適当な鍵でXORをとったとしよう

暗号文 : 10011011110110100010001111001110

鍵   : 11111001101110110100100010101111

復号化 : 01100010011000010110101101100001

ASCII変換

baka

違う文字列になっちゃった!

 

絶対に解読できない理由は正しい鍵で復号しないと、このようにまったく違う文字列に復号されちゃうからだ。

これの欠点

One Time Padを用いた通信を行う際、誰にも鍵を傍受されることのないように通信相手に鍵をわたさなければならない。

 

仮にそれが出来るなら暗号化する必要がなくなるよね。

 

だって鍵が暗号化するデータと同じビット数なんだから、誰にも傍受されないならそのままデータをわたしても問題ないじゃん。

終わりに

この記事を読んでいただきありがとうございます。少しでも暗号に興味をもってくれたらうれしいです。