だるろぐ

明日できることは、今日しない。

『暗号 情報セキュリティの技術と歴史』

暗号 情報セキュリティの技術と歴史 (講談社学術文庫)

暗号 情報セキュリティの技術と歴史 (講談社学術文庫)

「ポスト量子化暗号」について知りたかったのだけど、まずそれ以前の暗号化に対する知識が割とあやふやなので1冊読んでみた。ペロッと読めて、楽しく、ためになる。ちょっと意識の高い高校生ぐらいにお勧めやね。

f:id:daruyanagi:20160924094820p:plain

本書はまず、歴史の話から始まる。古代スパルタのスキュタレー(一見、皮ひもにランダムな字が書かれてるんだが、とある棒に巻き付けて読むとと意味のある文になる)やカエサル暗号(アルファベットを n 個ずらすってヤツ)、そして第二次世界大戦時のエニグマ。割とありきたりかなって感じだったけど、日本軍のパープル暗号を評価している部分などは面白かった。システム自体は割と頑張って作ってたのに、運用がガバガバで解読されてしまうのは日本軍らしいなって思う。

あとは、上杉謙信の軍師・宇佐美定行が使ってたという暗号も興味深かったなー。これはもうちょっと調べて、歴史ブログの方のネタに使わせてもらおうっと(^ω^)

まぁ、そんな感じで歴史上いろんな暗号が考案されていて、割と高度なものもあったのだけど、そうした工夫をひっくり返してしまう大発見が現代になって行われた。それがアルゴリズムと鍵の分離なんだなー。

たとえばカエサル暗号を例にとってみる。カエサルは「A を C、B を D に置き換えれば復号できる暗号文」を右腕のラビエヌスへ送る。

この暗号をラビエヌスが読むとき、カエサルとラビエヌスはその解読法を共有していなければならない。これはラビエヌスが捕まって、拷問かなにかで解読法を知られてしまうとローマ軍全体が困ってしまう。そこで役に立つのが、アルゴリズムと鍵の分離だ。

暗号の解読法は、アルゴリズムと鍵に分類できる

たとえば、カエサル暗号では「アルファベットを n個 ずらす(n=2 ならば、A は C、B は Dにする)」がアルゴリズム。n が鍵とみなせる。

アルゴリズムと鍵を分離すると、アルゴリズムは公開できる。なぜならば、鍵さえ秘密になっていれば、ウェルキンゲトリクスが暗号文を入手しても、それを解読するのは至難だからだ。無論、アルゴリズムも秘密である方がいい。でも、鍵をもう少し複雑化して「5、3、-2」とでもすればどうだろう。これは単に「3で割って1余るならば5、2余るならば3、余らないならば-2だけずらせ」という鍵だけど、これだけで割と困るよな。もっと複雑にすれば、アルゴリズムを知っているだけでは復号できるとは断言できなくなる。

アルゴリズムと鍵を分離しておけば、もしラビエヌスが鍵を漏らしてしまっても、鍵を変えるだけで済む。さらに定期的に鍵を変えるように取り決めておけば、万が一古い暗号が漏えいしても新しい暗号文の解読は難しくなり、より安全に運用できる。単に難読化させたいだけならば、鍵を定期的に変える必要もない。相手に「計算うぜー(;^ω^)」と思わせれば勝ち。

さらに言えば、鍵は全体で共有しなくてもよい

たとえば、ラビエヌスと弟キケロで鍵を分けておけば、ラビエヌスにだけ、弟キケロにだけ解読できる暗号文を作成できる。逆に言えば、送られてきた暗号文が弟キケロに知らせた鍵でしか解けなければ、その暗号文はラビエヌスではなく、弟キケロが送ったものであるとみなせる。つまり、暗号は認証(相手がホンモノかどうかの判断)にも使える。「お前この暗号文読める? おっけおっけ」。これを応用すれば、ブロックチェーン――仮想通貨が本物かどうかを見分ける技術――なんかにも使えるわけだな(本書にはそこまでの話はない)。

鍵も公開できる

現代では、この鍵をさらに公開できるものと秘密のものに分ける「公開鍵」方式というのが使われている。鍵まで公開しちゃうんだな! それでも大丈夫っていうんだから、ちょっと不思議。

公開鍵方式では、公開鍵と秘密鍵の二つの鍵が使われる。

公開鍵は、暗号文の作成に使う。これはみんなが自由に使ってよい。一方、作成した暗号文の解読には公開鍵と秘密鍵の両方を知っておく必要がある。こうしておけば、解読用の鍵を運搬しなくてよい。ラビエヌスが襲われたり、拷問にかけられる心配がなくなるってわけ!(カエサルは狙われるかもだけど

これは暗号化における大きなパラダイムシフトだった。本書ではこれ以後とこれ以前で暗号化を分け、共通鍵方式と公開鍵方式についてとくに詳しく解説してくれている。

公開鍵方式の話を続けよう。公開鍵と秘密鍵はまったく無関係というわけではなく(無関係だったら復号できん)、秘密の関連性(二重のアルゴリズム=鍵の関係)があるのだけど、公開鍵からそれを推測することはできない(できないことはないが、スパコンを使っても何十年かかる)。これには数学の時間に習った「素因数分解」の原理が使われている。

28411×28429=807696319

は割と簡単に計算できるけど、逆にノーヒントで

807696319=?

を素因数分解するのは大変でしょ? そのほかにも p 進数みたいな話も応用されているみたいだな。

このあたりの具体的な話については、依然に読んだ数論の本の知識が非常に役に立った。暗号は「作るのは簡単だけど、元に戻すのにはすごい手間がかかる」のが基本。それに数論が役に立つっていうのはちょっと面白いよね。日本人が役に立っているっていうのも、読んでいてちょっとだけ鼻が高い感じ。あと、暗号化の記事を読んでると「ディフィー・ヘルマン」とかよく出てくるけど、あぁ、そういう人だったのね的な(多分大学の教養課程でもやった気がするんだが、身についてなかった……orz)。

でも、この数論ベースの暗号も今後登場が期待される「量子コンピューター」の前では役に立たなくなるかもしれない。そのために開発されているのが「ポスト量子化暗号(量子コンピューターが実用化された後も使える暗号)」で、それには楕円関数とかを使うらしいが……本書には「楕円関数はきれいだよ!」ぐらいしか書いてない。まだまだ素人にわかりやすく説明できるレベルではないんだろうな。

というわけで、今回はこの程度の理解で終わらせておくことにする。