2009年6月29日

レポートの先

「じゃその先にはなにがあるの?」
という質問(きっと答えは期待してないと思うけど)がコメントにあったので書いてみるテスト

数学屋的にはこの先、初等整数論の話が始まって、その後代数的整数論に進んで、イデアルや類体論などというあたりに進んでいくとか、解析的整数論の方面で、リーマン予想とかそういう世界に行ったり、最近では数論幾何学とかいう分野もあるそうです。

しかし、ここの話は情報処理数学なので、進む先は暗号化理論の方面になります。
数学屋の進む道とは違って、計算量とか、解読可能性とか、そういう方向に進んでいきます。

まずRSA暗号(公開鍵暗号方式としてもっとも最初に出てきたもので、現在でもよく使われている方式)の話をやってその中で出てくる、素数判定や多倍長整数演算の話になってそこで計算量なんかの話になります。

たとえば、整数の素因数分解は、普通にやるとその数の平方根までの素数について順番に調べていかなければならないので、とてつもなく時間がかかるとか
(どんなにうまくやっても簡単にはできないだろうというのが、RSAが安全な理由なんだけど、本当に簡単にはできないのかどうかはわかっていない。)

全く同じ平文(もとの文章)を複数の宛先に送ると解読されてしまうとか、
おかしな鍵を使うと簡単に解読されてしまうとか、
そういう暗号の強さの話。

実際に使うときは計算量(コンピュータの負荷)を考えて、一時的な共通鍵暗号をつかうために、共通鍵暗号の鍵のやりとりをする時だけに公開鍵暗号を使うとか

そのほかの暗号方式として、公開鍵暗号なら楕円関数暗号やElGamal暗号、
共通鍵暗号では、DESや3DES、AESという話。
電子署名の流れから、メッセージダイジェスト関係でMD4/MD5やSHA/SHA1/SHA256の話
なんかに進んでいくんでしょう。

あと、関連している話としては、CRCとかの誤り訂正符号の話とか、
情報理論として、情報のエントロピーの話、シャノンの定理、ハミング距離の話
JPEGで使われている離散コサイン変換の話とか、
FFTを使った多倍長整数演算の話なんかもおもしろいですね。

まぁ、先はいくらもありますんで、まだまだ勉強してもらわないといけないんですが、うちの馬鹿娘はそこまで理解できるのかなぁ・・・

2009年6月19日

レポート

情報基礎数学とかいう科目の課題を持って帰ってきて、わからん・・・とほざいている馬鹿娘がいたので、仕方がないから、説明をしてやっていた。

内容は、RSAの計算に入るための基礎の数論
たとえば、3294x≡1(mod 44556)のxを求めよ
あたりのごく簡単な話から始まって有限体上の行列演算とかべき計算とかの初歩的な話なのだが

課題、手計算で97の200乗(mod 44556)なんかを計算したりして、久しぶりに大量の数字を書き殴った。

しかし、やはり手で計算するのは邪魔くさくなって、多倍長整数演算クラスや、ユークリッドの互除法をやってくれるクラスとかプログラムを書いてしまった。

元々の課題は、long(32bit)で十分な値なので、多倍長整数演算なんてできなくてもいいんだが
つい調子に乗って、メモリのある限り、任意の進数表現で使える演算ライブラリを作るなどという牛刀をもって鶏を割く状態になってしまった。

とはいえ、これを娘の課題として提出すると、絶対信じてもらえないので、娘はやっぱり自力でがんばって計算している。

ついでに提出して採点してもらえないかなぁ(^^)
花丸ぐらいくれるかな。