最強の暗号!?
はじめに
初心者向けの記事です。
オチが知りたい方・お急ぎの方は「これの欠点」をお読みください。
私自身まだ未熟者故、記事の内容には誤りがあるかもしれません。もし間違いがありましたらコメントしていただけるとありがたいです。あとブログ書くのはじめてなんです。少しでも暗号に興味を持ってくれたらいいなと思い書いてみました。
絶対に解読のできない暗号とは
暗号と聞いて皆さんは何を思い浮かべるでしょうか?
シーザー暗号? RSA暗号?
これらは鍵を知らない第3者によって解読することが可能です。
シーザー暗号なら鍵が26通りしかないためブルートフォースアタック(総当たり攻撃)で解読できます。
RSA暗号は素因数分解さえできれば第3者の手によって解読されてしまいます。
現在使われている暗号技術は解読が困難なだけであって、決してできないというわけではないのです。
One Time Pad(使い捨てパッド)
説明をするうえで必要な知識
知らなければ各自ググってね
- 論理演算「XOR」(授業でやったよね?)
One Time Pad とは
必要なもの
- 暗号化するデータ
- 暗号化するデータと同じビット数の鍵
暗号化の方法
とてもシンプル
- 暗号化するデータと鍵でXORをとる
終わり!
復号化の方法
とてもシンプル
- 暗号化されたデータと暗号化するときに用いた鍵でXORをとる
終わり!
実際にやってみる
(本当は直接コードを貼りたかったけどめんどくさかったというわけではありませんよ)
「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を用いた通信を行う際、誰にも鍵を傍受されることのないように通信相手に鍵をわたさなければならない。
仮にそれが出来るなら暗号化する必要がなくなるよね。
だって鍵が暗号化するデータと同じビット数なんだから、誰にも傍受されないならそのままデータをわたしても問題ないじゃん。
終わりに
この記事を読んでいただきありがとうございます。少しでも暗号に興味をもってくれたらうれしいです。