ソフトウェアの法則
(51)

ソフトウェアとセミ


── 素数と暗号化技術

◆素数年ゼミ
 梅雨があけるのを待ちかねたように、庭からセミの声が聞こえてきた。またセミの鳴き声に悩まされる季節の到来である。

 去年の夏は例年になくセミが少なくて、我が家では確か8月に入ってから鳴き出したように記憶している。新聞の投稿欄にも「セミの数が少ない」という記事が見受けられたから、セミの数が少なかったのは我が家だけのことではなかったようである。しかしそういう年はめったにない。

 我が家では、毎年庭の桜の木に沢山のアブラゼミやミンミンゼミが群がり盛大に鳴き続ける。その「ジージーミンミン」という鳴き声を聞いていると、最初の内は「夏が来たなぁ」という程度の感慨でどうということもないのだが、そばで長い間聞いていると次第にその声が気になりはじめる。

 というのは、私の家では普段家族が時間を過ごすダイニングルームが、その桜の木の近くにあるからなのだ。しかも、桜の咲く季節に部屋の中から桜の花がよく見えるようにと、南側が全面ガラス張りになっていて丁度桜の木の真下にいるようなぐあいになる。夏の日の午前中などは、そのガラスの中央にある窓を開けて網戸だけにしておくので、まさに木の下に座っているのと同じことになる。家の中なので蚊に刺される心配はないし涼しいしで最高に居心地のいい場所なのだが、盛大なセミ時雨れの中にいると次第にいたたまれまくなってくるのである。

 ジージーミンミンという鳴き声は、セミの声しか聞こえない静かな環境にいるという実感を与えてくれるせいか、最初の内は“静けさ”として自覚される。しかし長い間聞いていると、次第にその静けさが頭の芯にまでしみこんでくるような感じになる。芭蕉の句「静かさや岩にしみいる蝉の声」というのは、まさにこういう状態を詠んだものではないかと思ったりする。
 セミの鳴き声が互いに相和してくると、ある時点から急に1オクターブ上がったかのように感じられることがある。そうなると、もういけない。遂には耳の鼓膜がおかしくなったかと思う程になってくる。

 夜になってもセミは一向に鳴き止まない。ガラス窓にブラインドを降ろしても部屋の明かりが外に漏れるのであろう、セミは昼間だと勘違いして盛んに鳴き続けている。明かりを消しても小一時間は鳴き止まないから、我が家の庭では夜中の2時、3時になってもジージーミンミンとセミの大合唱が続くことになる。まさに異様な光景と言えるであろう。最近は、近所の家から苦情がくるのではないかと心配になる程である。

 常にバックグラウンドにセミの鳴き声が流れているというのは、実に困ったものである。妻は朗読のクラスに通っているのだが、自分の朗読の声を家で録音し(もちろん窓を閉めて)そのテープを先生に提出する。するとそこにはバックにジージーミンミンとセミの声が入っているという始末なのだ。

 業を煮やした妻は、これは桜の木のためにもよくないとセミを捕まえて退治しようと試みた時期もあった。捕らえて布の袋に入れてしまえばおとなしくなるといってひまを見つけてはセミ取りをしている。私は、そんな残酷なことはやめてくれ、長い間地中にいてやっと地上に出てきてわずか1〜2週間のはかない命なのだから好きにさせてやったらどうかと言ったのであるが。
 しかしわずかばかりのセミを退治しても大勢に影響はなく、セミは相変わらず盛大に鳴き続けているのであった。結局、妻は根負けしてセミ退治をやめてしまった。

 ところで、アメリカ東部には“17年ゼミ”がいるという。これは17年周期で大発生し、数週間で一生を終る北米特産のセミの総称である。当たり年になると数十億匹が大発生し樹木に被害を与える。5月下旬から6月にかけて地上に現れた幼虫は、脱皮して成虫になると交尾し数週間で死んでしまう。メスが木の枝に産みつけた卵からかえった幼虫は、地上に落ちて地中にもぐり再び17年後に現れるというサイクルを繰り返す。

 セミの幼虫が長い間地中にいるのは、宿主ともいうべき樹木を枯らさないよう樹液を少しずつ少しずつ吸う必要があるので成長に時間がかかるためであろう。一般に、幼虫の時代がこんなに長い昆虫は他にはいないという。とりわけ17年ゼミがなぜこんなに長い間地中にいるのか、その理由は明らかではないが、寿命を伸ばして体内にいる寄生虫より長生きし寄生虫を追放するためだという説が有力なのだそうである。私の素人考えではあるが、成虫の天敵となる鳥たちにとっても滅多に地上に姿を現さない相手ではそれを常時えさとすることはできないし、一度に大発生したのでは食い尽くせないので種の保存のためには有効なのであろうと思う。

 一方、アメリカ北西部には13年ゼミがいるそうである。これも名の示す通り13年周期で大発生する。日本では、このように長い周期で大発生するセミはいないようである。日本のセミは、概ね5年あるいは7年で地上に現れるという。
 もう少し正確に書くと、アブラゼミ、ミンミンゼミ、クマゼミは平均して4〜5年。エゾゼミ9年前後であるという。地上に現れる時期は、羽化する前の気候・温度などが微妙に影響する。5月中旬まで寒い日が続いたりすると幼虫の成長が遅れる。成長が遅れると羽化は翌年になるし、羽化直前の気候条件が悪ければ死んでしまう。アメリカに比べ日本の気候環境は厳しいから、このような理由で本来の5年あるいは7年から多少前後してきているのではなかろうか(これは素人生物学徒?による勝手な推量であるからして、余り信用はしないほうがよろしい)。

 このように、セミが5年、7年,13年,17年という素数(注)を周期として発生するのはなぜであろうか(我ながら、何と強引な推論であることか)。その理由は明らかではないが、次のような説もある。昔は素数でないセミもいたのだが、素数年ごとに地上に現れるようにすると生存に有利な理由がどこかにあったのであろう。その結果、素数年ゼミのみが子孫を残すことに成功したのではあるまいか。これを世に木下仮説と呼ぶ人もいる(たった今思い付いた仮説であるからして、そう呼んでいるのは今のところ一人しかいないが)。
【注】
 念のため記しておくと、素数(prime number)とは1とそれ自身でしか割りきれない正の整数のことである。たとえば、2,3,5,7,11,13,17,‥‥など。


 数学の分野では、素数はいろいろと興味深い性質をそなえていて研究の対象になっている。素数の性質が、自然界の動きに影響を及ぼしていても一向におかしくはないと私は思うのである。

 実は私は、昔から素数というものに特別な思い入れを持ってきた。自分の子供に“素”という名前を付けてしまったくらいである。
 周知のように素数は無限にあるが、それを手際よく求める方法はない。最もよく知られた方法は、たとえば1000以下の素数を求めたいと思ったら、1から1000までの整数の表から2の倍数、3の倍数、‥‥という具合に表の中から倍数のみを順次消去していって最後に残ったものを素数とするものである。味も素っ気もないアルゴリズムで(これを俗に“エラトステネスのふるい”という)初歩的なプログラミングの問題としてよく登場するものである。

 最近ではスーパーコンピュータを用いて何時間も計算して最大の素数を求めるのが競争になっている。たとえば、37万8千6百32桁の素数を見つけたというのがニュースになったりする。しかし、こういった計算をすることにどれだけの意味があるのか疑問を呈する人もいるであろう。円周率(π)の値を求めるのと同じで、求まったからといって実生活の上で特別どうということもない。ただ、コンピュータの性能を限界まで引き出すプログラムとしては有用なので、コンピュータの性能を測定する際の評価手段としては意味があると言われてきた。

◆暗号鍵
 このように、今までは素数を求めるということは、一部の専門家の単なる興味の範囲にとどまっていた。しかしコンピュータ上で扱う情報の機密を守るための暗号化技術の発展にともない、最近ちょっと様子が変わってきた。大きな素数を求めることに重要な意味が生じてきたのである。

 ネットワークの利用が盛んになるにつれ、インターネット上を流れるデータが無防備である問題が指摘されるようになってきた。電話の盗聴と同じで、他人に聞かれない(見られない)ようにするためには、暗号化して他人が見ても意味の分からないデータにしなければならない。一般に、隠したい文章を、ある鍵を用いて意味の分からない文章に変換することを“暗号化”といい、この鍵のことを“暗号鍵”と呼ぶ。逆に鍵を用いて元の文章に戻すことを“復号化”といい、鍵を用いずに(知らずに)文章を復元することを“解読”というのである。

 これまでの暗号化の方法は、アメリカのDES(データ暗号化規格)方式に代表されるもので、一つの暗号鍵を用いて暗号化と復号化を行うものであった(これを共通鍵方式ともいう)。暗号鍵を用いて何段階もの変換を繰り返すので、暗号鍵を知らない限りコンピュータを用いてもなかなか解読ができない。しかしこの方式では、情報を送る相手ごとに異なる秘密の暗号鍵を用意しなければならないので、沢山の暗号鍵が必要になる欠点があった。インターネットなどを通じて多数の人に情報を送るには適していない。

 一方、RSA暗号では公開鍵を用いるのが特徴である。たとえばAさんがBさんに情報を送りたい場合、AさんはBさんが公開している鍵(公開鍵)を用いて暗号化し、その結果だけを送ればよい。それを復号化するには、Bさんが保管している自分の鍵(秘密鍵)を用いる。暗号化に用いた公開鍵では復元することができないようになっている。

 この仕組みを実現するのに素数が利用される。たとえば、80桁程度の素数を二つ用意し、この積とある整数の組み合わせを用いて公開鍵と秘密鍵の対を作ればよい。大きな整数(公開鍵の値)を素因数分解するには、コンピュータを用いても大変な時間と労力がかかることを利用し、暗号を解くための鍵が分からないようにしたものである。たとえば、1MIPS程度のコンピュータを用いても、129桁の数字を素因数分解するのに5千年はかかるといわれている。ある程度以上の大きな素数になると、実用的な時間内では素因数分解できないのである。RSA暗号の場合、公開鍵は150桁程度になるが、この素因数分解は129桁に比べ少なくとも数千倍は難しくなるという。

 私も、そろそろ大きな素数を二つばかり用意しようかと考えているところだ。しかし本当に解読されないのか、いささか心配ではある。何事にも絶対安全と言い切れるものはない。多くのボランティアを募って素因数分解の作業を分担することにより、129桁の数を一気に素数に分解してしまった事例も報告されている。コンピュータウィルスを用いて素因数分解を行う可能性についても警告されている。

 今まで私は、コンピュータウィルスを作っている輩は、何と頭の悪い連中だろうと思ってきた。だって、彼らは壮大なアルゴリズムの構築を必要とするような大規模ソフトウェアなど決して自力では作れない連中ばかりなのだ。だから他人の作ったウィルスプログラムをちょっと改造して変種のウィルスを作り、自分が作ったような積もりになってみたり、ハードウェアのちょっとした知識を知っている程度で、もうコンピュータを完全に制御した積もりになるしか方法がないのである。ファイル破壊などを起こしてマシンの持ち主が大騒ぎするのを見て、何か自分が大きなことをやり遂げた(あるいは、やらかした)と思い込んだり、自分が特殊な技術を身に付けた特別な存在であるかのように錯覚しているだけなのだ。あの程度のものを作っただけで自己満足しているとしたら、プログラマの技量としてはかなりレベルの低い連中なのであろう。

 私だったら、決してあんな愚かなことはしない。侵入したマシンの持ち主には絶対気づかれないように行動するであろう。ウィルスの病気を発症させて、侵入したことを声高らかに宣言するような愚かな真似は決して犯さない。ウィルスプログラムとして他人のマシンに忍び込むことによって多数の宿主コンピュータを獲得したら、私はセミの幼虫のように深く深く静かに潜行するであろう。そして樹液を吸うが如くに、少しずつ少しずつそれと気付かれない程度に計算機時間を吸い上げていく。もちろんその時間を利用して素因数分解のための計算の一部を行い、その結果をこっそりと運び出すためである。と同時に、そこに幼虫の卵を産み付けて次なる指令の到着に備える。そして、自分はセミプログラムとしてのはかない一生を終るのである。一方、運び出された計算結果は、まとめられて素因数分解の最終解を得るのに用いる。こうしてまんまと暗号の解読に成功するという訳である。世の中に私のような悪賢い“計算時間泥棒”が沢山でてきたとしたら、やはり80桁の素数でも簡単に破られてしまうのではなかろうか。

 あぁ、いかんいかん。セミ時雨れの中で“静けさ”に浸っているうちに頭がおかしくなってきた。セミの鳴き声というのは、論理の飛躍、強引な結論、妙な仮説の設定、倫理観の欠如などをともなう妄想を引き起こす働きがあるようだ。頭の芯に本物の静けさを注入し、こんな愚かな考えは早々に洗い流した方がよさそうである。■(1997-8 記)



【追記】
 上記木下仮説(懲りないなぁ)をより強固なものにするためには、素数年ごとに地上に現れることが生存に有利であることを示す何らかの理由付け(真面目なもの、ジョーク、こじつけ、何でも可)を用意する必要がある。今のところ私には何も思い浮かばないが、何か思いついた方はご教授願いたい(締め切り日は特に設けません)。


【再度の追記(1997-9-1)】
 セミと素数の関係については既に別冊宝島という本で紹介されていると、ある読者から教えられました。

 素数を話題にする際の取っ掛かりとしてセミを使おうと長年暖めてきたアイディアだったのですが、木下仮説にはまったくオリジナリティーがないことを知りました(ちょっぴり残念)。
 しかし世の中には、強引な推論で無茶な結論を引き出す人が私以外にも沢山いるのだと知りました(ちょっぴり安心)。

 それにしても“木下仮説”だとか、メールアドレスの利用法に関する“木下方式”(素歩人徒然欄の「字化け」参照)だとか、年を取るとどうも自己顕示欲が強くなるようであります。こういう現象を“木下症候群”と呼ぶのがいいのではないかと思います。あっ! またやってしまった。
 でも、これオリジナリティーのある主張だとは思いませんか? 思いません!