8/21 サマーウォーズを見てRSA暗号について調べた
普段テレビはほとんど見ないのだけれど, 先日は金曜ロードショーのサマーウォーズを見てました.
相変わらずいつ見てもいい作品だなぁとか夏希先輩かわいいなぁとか思いつつ, Twitterでわいわいしてました.
サマーウォーズが放送されると必ず話題に上がるのが健二が解いているあの暗号の話.
解いている様子の描写からRSA暗号じゃないかと言われています.
RSA暗号というと素因数分解というイメージが強いのですが, あまり暗号化と複合の部分がどういう原理でできているのかについては理解できてませんでした.
というわけで, サマーウォーズを見ながらいろいろと調べて考えてみたことをまとめてみたいと思います.
公開鍵暗号方式
そもそも, RSA暗号は公開鍵暗号方式の一種で, 2つの鍵を用いて暗号化と復号を行います.
簡単に言うと, 以下の2つの性質を持つような暗号です.
1. 片方の鍵で暗号化したら, もう片方の鍵でしか復号できない.
2. 片方の鍵からはもう片方の鍵は(簡単には)推測できない.
RSA暗号の基本的な仕組み
RSA暗号の基本的な仕組みについてはWikipediaなどを参照してもらうと良いと思うのですが, 簡単に書いておきます.
RSA暗号 - Wikipedia
, : 任意の素数,
: と互いに素な任意の正の整数(公開鍵)
: を満たす正の整数(秘密鍵)
: 平文, : 暗号文暗号化:
復号:
というわけで, 実は累乗が計算できれば暗号化と復号は簡単にできます...
ってほんまか?となるわけですね.
これってつまり, が成り立つってことに他ならないわけです.
さすがに自明ではないよなぁ......と.
復号がうまくいくのはフェルマーの小定理で説明できる
『高校数学の美しい物語』の説明がわかりやすかったです.
少し補足をすると, 合同式には以下の性質があります.
かつならば
(はとの最小公倍数を表す.)
つまり, を示すためには, を示せば十分ということになります.
興味深いのは, フェルマーの小定理を用いているところです.
これを利用してうまく暗号化ができるようになっているわけですね, 賢い.
素因数分解の困難性が安全を保証している
公開鍵暗号方式なので, 公開鍵から秘密鍵が推測されると暗号を突破されてしまいます.
秘密鍵を推測するためにはを満たすを計算する必要があります.
つまり, を素因数分解して, を求め, を計算する必要があるわけです.
素因数分解は, が十分に大きな素数であれば現実的な時間で解くことはできません.
逆に言えば, 素因数分解ができてしまえば暗号を解読することができます.
「RSA暗号 = 素因数分解」というイメージ
サマーウォーズを見ながら, 流れてくるRSA暗号についてのツイートを眺めていたのですが, 「素因数分解する暗号」という説明が結構多かった気がします.
まぁ確かに「ふたつの素数から積を求めるのは簡単だけれど, からを計算するのは困難」と言われると, なんとなくわかったような気がしてしまうんですよね.
「素因数分解が効率よくできない」って直感的なのでそういう説明が出てくるのはわかるのですが, それって誤解の原因になりやすいんじゃないかなぁと.
人間って直感的な事柄の次に非直感的な事柄が出てくると, なんとなく理解した気になってしまうところがあると思います.
やはりそういう説明で納得してしまうことのないように気をつけたいなぁと.
まぁ, そんなことを考えていたよ, というお話でした.
(余談ですけど, はてなブログってTeXの数式を書くとMathJaxでレンダリングしてくれるんですね.)