なんでもかんでも電子メールでのやりとりの時代になったが、絶対他人に見られてはまずいものに対しては電子メールを用いることができないでいるのは私だけであろうか。どこかで誰かがなんらかの方法で盗み見ることができる方法があるのではないか、という不安を拭い去ることができない。そして他人に見られたのかどうかさえも私にはわからないのは困る。 電子メールの文章を暗号化する方法があるという。例えば、”10:00に駅前で会おう”というメッセージをなんらかの規則によって変換し、 ”%uFF11%uFF10%uFF1A%uFF10%uFF10%u306B%u99C5%u524D%u3067%u4F1A%u304A%u3046” とし、これを電子メールとして相手に送信する。受け取った相手は逆の変換をすれば、ちゃんと元の ”10:00に駅前で会おう”というメッセージを読むことができる。 (下のメッセージ欄になにか書いて暗号化したり解読したりしてみてください。半角英数字は変換されません。) 上の例は、単に文字コードの変換をしているだけで、ちょっとプログラム言語をかじった人なら知っていることなので、もちろん使いものにならない。金融取引などで使用される、高度な数学を使った本格的な暗号化はどのようなものかは知らないが、その仕組みがわからないだけにやはり全面的に信用することができない。困った。 ところで、中学数学1の教科書(大阪書籍)をぱらぱらめくっていたら、次の文章が目に留まった。 「ディオファンタスは、一生の1/6を少年時代としてすごし、一生の1/12を青年時代としてすごし、さらに、一生の1/7をすごしてから結婚した。結婚してから5年後に子どもが生まれたが、不幸なことに、この子どもは父の一生の1/2だけしか生きられず、父が死ぬ4年前に死んでしまった。」 ディオファンタスはギリシア時代の数学者でいつ生まれいつ死んだかはよくわかっていないが、彼の墓石にきざまれたこの文章から何歳まで生きたかを考えてみよ、というのである。中学生に方程式というものを初めて教えるための例として挙げてあるものであった。 まあその導出法はよいとして、これはひとつの暗号化の例と言えるのではないか。これを次のように使えないだろうか。 例えば、”私の今年度の小遣いは、(ディオファンタスの生きた年齢の数の半分)万円です。ディオファンタスは、一生の1/6を少年時代としてすごし、…(中略)…、この子どもは父の一生の1/2だけしか生きられず、父が死ぬ4年前に死んでしまった。” と書くのである。 どうにも長ったらしいが、これで少なくとも何人かの人からは (少なくとも数学に弱い家内からは) 秘密を守ることができるだろう。 冗談はこれくらいにして、あることで暗号化する必要が生じてきた。もちろん秘密の電子メールをやり取りする相手ができたというような色っぽいことではない。ウェブページ上で学生用の数学演習問題をつくれないかというあくまでまじめな仕事上のことである。練習に次のようなクイズの問題を作ってみた。 答のところに入力して、採点するボタンをクリックすると、正解かどうか判定される。このような判定をするためには、プログラムのどこかに”答”を書いておかなくてはならないが、学生のなかにはなぜか数学は苦手だがパソコンにはやたら詳しいものもいて、”答”がプログラムのどこに書いてあるかぐらいのことは簡単に見つけられてしまうのである。 そこで数学教師の私は考えたのである。”答”の部分を、いま学生に教えている数学を使って暗号化してやろうと。学生は、”答”が知りたくて問題を解こうとはしないかもしれないが、暗号化された”答”の部分が知りたくて必死になるのではないか。よもや見事、私の暗号が解読されてしまったとしてもそれは私の思う壺、というものである。 (2001. 2.25)
|
このクイズの答の部分は、私の作ったもので暗号化してある。16進数、自然対数、常用対数を知っていれば簡単に解読できる。 Math.floor(△):△の小数点以下を切り捨て整数値にする。 Math.LOG10E: 自然対数の底eの常用対数。 Math.log(△):△の自然対数。 parseInt(△,16):16進数の数△を10進数に変換する。 |