素数と暗号
石井俊雄
最近、素数という言葉が暗号との関連で語られることが多い。
例えば、NHKでは1年ほど前、「素数の魔力に囚われた人たち」という表題で、リーマン予想や、暗号への応用、を分かりやすく説明していた。
小生が、興味をもったのは、後者の「暗号への応用」。
それで、その素数をどうやって暗号に応用するのか、肝心のアルゴリズムを調べてみた。
暇つぶしには丁度いいかなというところだ。
昔の暗号は、共通鍵暗号を用いるのに対し、新しい暗号は公開鍵暗号を用いる。
共通鍵暗号は、1つの鍵で暗号化し、同じ鍵で復号化する。
だから、共通鍵は秘密にしなければならない。
一方、公開鍵暗号は、公開鍵と秘密鍵を使う。そして、公開鍵は公開するのだ。秘密鍵は秘密にして大事にしまっておく。
両者の根本的な違いは、公開鍵を公開すること。
従って、共通鍵暗号方式では必須であった秘密鍵の搬送が、公開鍵暗号方式では不要となる。
ここに、決定的な相違があるのだ。
分かりやすくするため、例を掲げる。
共通鍵暗号の例:シーザー暗号
シーザー暗号(Caesar cipher)は、ジュリアス・シーザーが使ったと言われる暗号だ。紀元前100年くらい前に使われた。
シーザー暗号では、平文(ひらぶん:plaintext)で使われているアルファベットを、一定の文字数だけ「ずらす」ことによって暗号化(encript)する。
例えば、3文字ずらすとすると、平文の"EIGHT"は暗号文の"HLJKW"となる。
復号化(decript)は、3文字逆にずらすことで、暗号文の"HLJKW"は平文の"EIGHT"となる。
この場合の3という数字が共通鍵である。
シーザー暗号のアルゴリズムは、非常に簡単なもので、暗号解読(criptanalysis)も比較的に容易である。
盗聴者は、高々26通りの総当たりで解読できる。
このように、すべての鍵の候補をためしてみるという解読方法を、総当たり法、しらみつぶし法などと呼ぶ。
公開鍵暗号の例は、RSA
RSAは、公開鍵暗号のアルゴリズムの1つだ。RSAという名前は、3人の開発者の名前、ロン・リヴェスト(Ron Rivest)、アデイ・シャミア(Adi Shamir)、
レナード・アドルマン(Leonard Adelman)の頭文字をとってつけられた。1983年、アメリカにおける特許をとったが、現在は期限切れである。
その概要は、ある個人が、秘密鍵と公開鍵という二種類の鍵を所有し、
秘匿に利用する場合は、どの通信相手にも公開鍵で暗号化させ、受信した暗号文を自分だけが持つ秘密鍵で復号する。
こうすれば、秘密鍵を搬送しなくてよいことになり、搬送中に盗まれたり、漏れたりすることはなくなり、
搬送が必要な共通鍵暗号方式に比べ秘匿性が格段に高くなるのだ。
RSAは、素数の見つけ難さと素因数分解の困難性を利用している。「素数」とは、それ自体しか約数を持たない整数のこと。
整数一覧を見たい方は
こちらを参照されたい。
具体的にやってみよう。尚、掛け算を表す記号は「*」、べき乗は「^」と表記することにする。
- 2つの素数pとqを定める。
- 例えば、p=71、q=97としよう。
- pとqの積Nを求める。
- N=pq=71*97=6887
- ある数eを適当に定める。
- いま、e=13としよう。
- 久留島−オイラー関数(以降「オイラー関数」と呼ぶ。)を求める。
- オイラー関数は、φ(N)=(p−1)(q−1)であるから、
- φ(N)=φ(6887)=70*96=6720
- オイラー関数φ(N)は、一般にある数Nより小さくてNと約数を持たない数の個数を表す。
- 例えば、Nが10なら、1,3、7,9の4個が10と約数をもたないので、φ(10)=4である。
- このφ(N)の値が数字として暗号の一翼を担うのだ。
- なお、当然のことながらpが素数なら、φ(p)=p−1である。何故なら、素数とは約数を持たない整数だから。
- 6720を法(除数のこと)とする数の中から、e=13の逆数を求める。
- 13の逆数とは、13とかけて6720で割り算すると余りが1となる数のことである。
- 即ち、逆数をdとすると、13*d=6721であるから、d=517となる。
- このことを数学的に書けばつぎのようになる。
- ed=13*517=1(mod 6720)
- modは、"modulus"の意で、「法」と訳すが、「のり」、即ち差渡しというような量を表している。
- だから、1(mod 6720)は、6720というのりからはみ出した値が1という意味である。
- 明治維新後、西洋文明から日本語への和訳のため多くの漢字が使われたが、この場合は、「法」と読むより「のり」とよむ方がわかりやすい。
- 結構上手く訳してると思う。
以上により、
公開鍵 N=6887 e=13
秘密鍵 d=517
と暗号が決まってくる。
p=71,q=97、φ(N)=6720のどれが分かってもdを計算することができるので、p,q,φ(N),dは、すべて秘密であるが、
秘密通信や認証に使うのはd=517だけである。
秘密通信を実際やってみよう。
- 暗号化
- 公開鍵のeを使って平文Mをe乗し、N(もう一つの公開鍵)で割って余りを計算し、この余りCを暗号文とする。
今、平文として、1687(例えば口座番号など)を秘密にしたいとする。
- C=1687^13=57(mod 6887)
- この式は、1687の13乗(^13で表記)を6887で割り算した結果、割り切れないで残る「余り」をCとすることを表しています。
- 余りは57なので、C=57となる。
- 本当にこうなるかEXCELの関数(mod)を使って計算することができる。
その際には、13乗を直接やってもオーバーフローするだけなので、2乗とか3乗とかの低い冪数になるよう分けてそのたび剰余計算をするようにする。
- 例えば、つぎのようにする。
-
(((1687^2)^2)^3)*1687
-
- 復号化
-
C=57を受信した人は、秘密鍵517と公開鍵6887を使って復号化する。
- M=57^517(mod 6887)=1687
- これで、平文Mを得ることができる。
-
本当にこうなるかEXCELの関数(mod)を使って計算することができる。
57の517乗も直ぐオーバーフローするので、低い冪数になるよう分けてそのたび剰余計算をするようにする。
-
((((((57^2)^2)^3)^2)^3)^3)*((((((57^2)^2)^3)^2)^3)^4)*(((57^2)^2)^3)*57
公開鍵方式の利点は、秘密鍵(復号鍵のこと)を搬送しなくてよいことにある。
搬送中に盗まれたり、漏れたりしたことは、過去、数限りないのである。
だから、デリバリ問題の解消が公開鍵方式の最大の利点である。
秘匿通信を行いたい人(ここでは「秘匿原因者」と呼ぼう。)は、先ず自分の秘密の復号鍵(上では「d」)を定めてから、それに対応する暗号化鍵を計算し、
これを公開して、自分宛の暗号化文は、誰でもこの暗号化鍵で暗号化して送信できるようにする。そうすれば、秘密鍵は搬送等、外部に出ることなく、
秘匿通信を行うことができるのだ。
これが、1970年代以降行われているポストモダーン暗号の核心である。
このような公開鍵方式の暗号が実現できた数理マジックの種は、暗号化・復号化で使用する一方向性関数の性質にある。
一方向性関数とは、平文から暗号文を作成することは簡単にできるが、暗号文が盗まれても平文を割り出すことは困難、
即ち、順方向の計算はできるが、逆方向の計算は実際上不可能となるような関数のことである。
現在のところ、頼りになる一方向性関数は、オイラー関数である。もう一つ離散対数関数というのもあるがここでは省略する。
オイラー関数は、
φ(N)=(p−1)(q−1)
であるが、p、q が与えられれば、簡単にφ(N)を求めることができるが、逆に、φ(N)が与えられて、p,q を求めることは簡単ではない。
この p,q を求める行為を「素因数分解」とよぶ。
コンピュータを使っても、効率よく素因数分解するアルゴリズムは見つかっていない。
この事実が数理マジックの種なのだ。
だが、技術は日進月歩、何時素数の秘密が解き明かされるか分かったものではない。
アメリカ国家安全保障局(NSA)は、数学者の学会がある度に、エージェントを送り素数とリーマン予想に関する論文をチェックしているそうだ。
我が国でも、少なくとも銀行協会あたりは、世界の数学論文をモニタしているはず。
そうでなければ、素数の秘密が解き明かされた時、大損をする羽目に陥るからだ。
大損で済めばいいが、下手すると事業継続が不可能になる、・・・それほどインパクトのある出来事と言えると思う。
以上、説明の便宜上、小さな数を例として用いているが、実際には、p,qは十進数で150〜300桁くらい、
従って、Nは300〜600桁くらいのとてつもない大きな数が用いられている。
これでは、スーパーコンピュータ回しても現実的な時間では、素因数を割り出すことはできない。
このことは、公開鍵から秘密鍵を割り出すことはできないことを意味し、暗号を意味あるものとしているのである。
人間の悪意に対抗するための工学的体系としての暗号技術、今後、ますます発達すること間違いないだろう。
ネット社会を担保する技術として不可欠の技術であり、孫やひ孫にも、やりがいのある専門分野として、推奨できるのではなかろうか。
以上、公開鍵暗号方式を「秘匿」に使うとした場合について説明したが、セキュリティには、「秘匿」のほか、「認証」という使われ方がある。
別の言葉でいえば、「本人確認」のことである。
ここで、この「認証」について説明しよう
ある個人が、秘密鍵と公開鍵という二種類の鍵を所有し、
- 秘匿に利用する場合は、どの通信相手にも公開鍵で暗号化させ、受信した暗号文を自分だけが持つ秘密鍵で復号する。
- 認証に利用する場合は、まず、秘密鍵で署名文を作成(暗号化すること)し、どの相手にも公開鍵で検証(復号化すること)させる。
ということになり、いずれの場合も秘密鍵は自分のみで使い、公開鍵は他の多数の人々に使わせている。
1と2を比べれば、秘密鍵と公開鍵の使い方が逆になっているこに気がつく。
「認証」では、秘密鍵で暗号化した文章が公開鍵で復号化できたという事実が、本人確認そのものなのだ。
何故なら、本人(秘密鍵を保持している人)にしか暗号化できないのだから。
このように、よく考えもしたものだと思う。頭の中がひっくり返るようだけど面白い。
数独パズル(朝日新聞の毎土曜日のBe紙上にある)にはかなわないかもしれないが。
素数については、近年面白い発見があった。
1990年代、リーマン予想で有名な素数の零点(ゼータ関数の自明でない零点の間隔)と原子核のエネルギーレベルの間隔が一致することが発見されて以来、
素数研究が急速に進んでいるそうだ。
そして、今や「非可換幾何学」という極めて可能性のある学問分野で素数を物理学に取り込む研究や超弦理論などへの応用などの研究が進んでいるとか。
なんでも、「非可換幾何学」とは、宇宙空間が微細構造を持つとして、微細構造を持つ空間を取り扱う幾何学だそうだ。
微細構造を持つとは、空間をミクロな目で眺めれば、そこは滑らかではなく切れ目がある空間ということになるとか。・・・段々面白くなるよね。
中には、こんな予想もあるとか。
リーマン予想が証明されたとき、森羅万象を説明する万物の法則も解明されると。
そんな大発見ではないが、リーマン予想が証明されたとき、暗号通信、即ち、インターネットのセキュリティに大穴が空くだろう。
だが、そんなことで、リーマン予想が証明されないことを願ったりはしない。万物の法則の発見の方が価値があるから。
(参考&引用:講談社学術文庫「暗号」辻井重男著、ソフトバンク パブリッシング「暗号技術入門」結城浩著、など)
コメントはこちらへメールして下さい。その際、文中冒頭に「HPコメント」と記して下さい。
Email
<コメント欄> 当欄は上記のメールをコメントとして掲示するものです。