中学生でもわかる暗号化入門1 暗号化って何?
いろんな場所で暗号化って今や当たり前のように使われています
でも何が行われているの?ってのははっきり理解できていないことが多かったりします
特に共通鍵と公開鍵&秘密鍵ってなんだっけ?って方は多いのではないでしょうか?
ここでは中学生でも理解できるようになるべくわかりやすーく「基本的な暗号化まわり」のお話していきたいと思います
※実際に僕の次男(中学1年生)にこの記事を使ったらなんとなく公開鍵と共通鍵について理解してくれました
※暗号化のアルゴリズム周りにはふれません
※読むと共通鍵と公開鍵&秘密鍵についてざっくり理解が深まります(公開鍵を使った証明書は次回書きたいと思います)
それでははじめていきましょう!
1. はじめに
みなさん、友達とメッセージをやり取りしたりしていますよね。
でも、その情報がどうやって他の人にバレずに安全にやり取りされているか考えたことはありますか?
今回はメッセージをどう「暗号化(あんごうか)」するかの仕組みについて学んでいきましょう
2. インターネットの情報はそのままでは誰かに見られてしまいます
インターネットは、大きな道路のようなものです。あなたが送ったすごく秘密にしたいメッセージやデータは、その道路を通って相手に届きます。しかし、その途中で悪い人が情報を盗み見ることができるかもしれません。秘密にしたい内容が誰かにバレてしまうのはとても嫌ですよね?
図 :インターネット上で情報が盗み見られる様子
※ この何も対策せず送ったメッセージのことを平文(ひらぶん)と言ったりします
※ 覗き見る方法はWireshark(わいやーしゃーく)などのソフトを使えば簡単に内容が覗き見できてしまいます、怖いですね
3. 大切な文は暗号化しよう!
じゃあそのまま文を送るのではなく、悪い人に見られないように対策しないとですね?
そこで文を他の人が見てもわからないように暗号化する必要があります
ここでむかーしからある簡単なシーザー暗号というもので暗号化してみましょう
これは文字をずらして暗号化する方法です 例えば1文字ずらすよと電話で伝えてから文を送ってみましょう、悪い人は最初は何かわかりませんよね?
(暗号化を単純にするためメッセージをひらがなにしてます)
図 :暗号化して文を送る
ここで鍵は「1文字ずらす」というのがポイントです
この鍵を知っている人だけが、元のメッセージを読めるわけです
※暗号を元の文(平文)に解くことを復号(ふくごう)といいます、暗号に対して「復」元するからですね、よく出てくるから覚えておきましょう
このようなお互いが同じ共通した「鍵」を使っている暗号なので「共通鍵暗号」といいます
共通鍵暗号はすごくシンプルなのがいいですね
4. でも共通鍵暗号って鍵を知らせるときにバレやすいよね?
この方法って鍵をお互いが管理するし、相手に鍵を伝えないといけないんですよ
この鍵を送り先に教える時に悪い人に漏れる可能性があるわけです
図 :共通鍵は受け渡しが危険
5. そこで賢い人はこう考えました、暗号に使う鍵と復号に使う鍵を分けたらいいんじゃない?
共通鍵暗号では鍵が受け渡し怖いなーということがわかりました
たとえばこうしたらどうでしょう?
図 :鍵をかける南京錠を先に渡しておけばいいんじゃない?
女の子が南京錠と鍵を用意し、南京錠は先に男の子に送っておきます
男の子は女の子の南京錠をかけて文を送ります
女の子は自分の鍵で南京錠を開ければ元の文がわかるという仕組みです
ここで悪い人が南京錠を盗んでもそれ自体で暗号を解読できないので別にばれてもよいわけです
ここでちょっとややこしいことをいいます、暗号化の世界では南京錠もそれも開ける鍵もまとめて「鍵」と表現します
そして女の子から男の子に送った南京錠をここでは公開鍵といいます、まぁだれが持っても良い公開しても良い鍵ということでそう呼ばれているわけですね
で、女の子が持っている南京錠を開く「鍵」のことを秘密鍵といいます、これは誰にも渡してはいけないから秘密にしておく鍵ということですね
6. 公開鍵と秘密鍵で安全、だけどこれで実際やったら問題がおきた。。(遅くなった)
これで万事解決と行きたいところですがじつは例に出したような南京錠みたいなものだと実はその作りを分解すると元の鍵の形がわかってしまうのです、南京錠の中は元の鍵の形と合うようになっているわけですね。。
つまり公開鍵から秘密鍵をつくりだせたら意味がないってことですね
図 :秘密鍵は推測できたらだめよ
そこで公開鍵の作りをむつかしーくして秘密鍵を推測できないようにする必要がでてきました そこで、三人の暗号化のスペシャリストが公開鍵の暗号化をすごーく難しくしました
RSA の誕生というわけです
ここで難しくしたために一つ問題がおきました
それが、、難しくしたため暗号化や復号化が遅くなってしまったというわけです
(さらに2024年現在ではRSAでもあきたらずもっと難しい暗号が一般的になっています、楕円曲線暗号(ECC)といって数学的にすごーく難しい問題が元になっている暗号がよく使われたりします、暗号の進化はすごいですね)
7. じゃあ公開鍵と共通鍵の両方のメリットいかしてこんな方法どう?(ハイブリッド暗号化方式の爆誕)
1回の文のやり取りだったら遅くても我慢できるんですが
インターネットで文章をやり取りするのとても大量の文やデータをやり取りするわけです
この状態で遅かったらすごくイライラしますよね?
公開鍵暗号はRSAで安全にしたはいいけど遅いし、共通鍵は速いけど解錠の鍵を伝えるのが危険。。
なかなかうまくいかないですね。。
しかしお互いのデメリットを解決する以下のような方法が考え出されました
図 :ハイブリッド暗号
ちょっとややこしいですが頑張って説明してみます
手順
まず女の子は南京錠(公開鍵)と鍵(秘密鍵)を用意します
男の子に南京錠(公開鍵)を渡します
男の子は自分で用意したお互いにやり取りできるようなダイアルロックが開く番号を女の子の南京錠(公開鍵)でメッセージを暗号化して女の子に送ります
女の子は自分の鍵(秘密鍵)で開いてお互いやり取りするためのダイアルロックが開く番号を GET します
ここまでで安全にお互いの共通の鍵をやりとりする準備ができました!
あとは男の子はお互いの共通の鍵であるダイアルロック(共通鍵)をメッセージにかけて送ればいいわけですね
女の子はすでにダイアルロック(共通鍵)を開けるのでそれでメッセージを開けるわけです
最初の1回だけ遅い公開鍵暗号、その後は速い共通鍵暗号が使えるわけですね!!
8. ハイブリッド暗号をさらに改善
このハイブリッド方式ですが共通鍵をずーーーっと使い回すと何が起きるでしょう?
あまりないですが悪い人がどうにか共通鍵の番号をあれやこれやで
GET してしまったら?(どこかで話しているのを聞かれた、めっちゃ頑張って共通鍵を解析されたなど)
そこで共通鍵をずーーーっとじゃなくて、ある程度時間がたったら変えましょう!ということを考えました
このやり取りの一連の流れに名前をセッションという名前をつけることにしました
そしてこのセッションでやりとりされる共通の鍵にも名前をつけてセッションキーという名前をつけることにしたのです
そしてセッションは一定時間たったら無効にするとルールを作ったのです
図 :セッションについて
このセッションが切れるタイミングをあんまり短くすると使い勝手が悪くなるのでいいぐらいの時間を決めるのが大事ですね
9. さらに改善、共通鍵を強くしよう!
これでも強そうですが、肝心の共通鍵が現状1文字スライドさせるというかなーりしょぼい暗号であることは変わりません
公開鍵は RSA で強くなりましたが共通鍵がシーザー暗号ではかなりしょぼいためあっさり解析されてしまいそうですよね?
これではまずいということで登場したのは今から50年ほど前に結構強い暗号方式が生み出されました
1976 年くらいのアメリカで生み出され、名前を DES(Data Encryption Standard)データ暗号化標準というどストレートな名前の方式です
20年くらい使われたようですが暗号を解きたい人たちも頑張るわけです
やがて DES も万全ではなくなります
さらに強い暗号化方式が求められます
これまとアメリカが編み出した暗号化方式の AES(Advanced Encryption Standard)が誕生しました!
Advanced:よりすごい、Encryption:暗号化、Standard:標準
まぁようは DES よりすごいから Advanced なわけで AES というわけですね
AES は2024年現在も使われているつよーい共通鍵なんですね
図 :DES から AES へ
おわり
はーい、これで「中学生でもわかる暗号化入門1 暗号化って何?」は終わりです
ちょっと難しかったですかね?
まぁ少しづーつ理解していただければと思います
次は「中学生でもわかる暗号化入門2 なりすましってどう防ぐの?あなた本物ですか?証明書を使って相手が正しいかを判断しよう」をお話したいと思います
Discussion