目次
DVDのコピーガード|CSS
IT世界でネットセキュリティを支える暗号技術。
たとえば、Web上のSSL通信は共通鍵暗号と公開鍵暗号を組み合わせて行われています。暗号技術を支えるのが数学、中でも整数論です。整数論のメインテーマが素数です。
本コラムで紹介する素数は、同じセキュリティでも少々様相が異なるDVDのセキュリティです。
DVDには無断複製を防止するためにコピーガードがかけられています。多くのDVDソフトに採用されているのがCSS(Content Scramble SystemまたはContent Scrambling System)と呼ばれるコンテンツ暗号システムです。
その仕組みのポイントは、映像コンテンツを暗号化しその暗号鍵を複製できないエリアに記録することです。
そのためDVDをパソコンで単純にコピーしても暗号鍵自体はコピーされないので、DVD再生ができない仕組みになっています。
DVD暗号解読プログラム|DeCSS
そうなると世の中にはDVDの暗号を解読してDVDが再生できるようにしようとする者が現れます。
はたして1999年に解読方法がインターネット上に現れ始めました。
中でも有名なのが、15歳のヨハンセンが開発したDeCSSと呼ばれるDVDコピーガードを破るコンピュータープログラムです。
匿名でインターネット上に公開されました。プログラムを印刷したTシャツを売り出す業者まで現れました。
この状況に黙っていなかったのがアメリカ映画協会です。
デジタルミレニアム著作権法を根拠に、このプログラムの配布を止めるようにと裁判を起こしました。2001年にアメリカの裁判所はプログラムの使用および公開までも違法とする判断をしました。
この判断に対して言論の自由に反するとして抗議活動が行われるのですが、うまい方法でプログラムを公開できることを思い付いた人がいました。
コンピュータープログラムは、01010010011のような数列としてコンピューターの中に記録されています。コンピュータープログラムであるDeCSSも数列ですが、それ自体特別意味のある数ではありません。
DeCSSを公開する
コンピュータープログラムに手を加えて特別な意味のある数列に表すこと(数値化)ができるのではないか。
数学者カーモディが選んだ意味ある数こそ、素数でした。カーモディは数学をふんだんに使って、巧妙にプログラムデータを数値化して一つの素数に仕上げました。
まずC言語で書かれたDeCSSを圧縮ソフトgzipを用いて圧縮します。圧縮されたデータは1つの数(0と1からなる数列)です。
それを十進数で表した数をkとします。圧縮して得られたkを元に戻せば(解凍すれば)DeCSSになるのは当たり前です。
さてこのkに無駄な数列を付け加えて得られるk'も元に戻せばDeCSSになるようなk'を考えることができます。
カーモディは、この新たに作り出されるk'という数を素数に変換できないかと考えたのです。カーモディは算術級数定理を使うことを考え付きました。
算術級数定理(1837年、ドイツの数学者ディリクレが証明)
初項と公差が互いに素(最大公約数が1)である算術級数(等差数列)には無限の素数が存在する。
言い換えると、互いに素である自然数aとbに対して、ak+b(kは自然数)と書ける素数が無限に存在するということです。kに対してk'を作る方法がk'=ak+bということです。
すなわち、
k → 解凍 → DeCSS
k'=ak+b → 解凍 → DeCSS
ということです。
圧縮ソフトの都合からk'=k×256n+bの形にします。カーモディはk×256n+bが素数になるようにnとbを決めることに成功します。
それが次の二つです。
- k×2562+2083
- k×25611+99
このときに用いられた素数判定法が楕円曲線素数判定法です。
楕円曲線素数判定法は、1986年頃にゴールドワッサーとキリアンおよびエトケンによって提案されたもので、楕円曲線上における有理点の群の位数を用いるという現代的な素数判定法です。
公開の鍵は素数
こうして2001年に見つかった素数はk×2562+2083を用いた1401桁です。
実は、カーモディがDeCSSを素数で表すことを決意したきっかけになったウェブサイトがありました。
Caldwell氏制作の素数情報サイトThe Prime Pagesです。ここには史上最大素数Top20をはじめ、様々な素数の計算結果の記録がまとめられています。
カーモディが考える意味ある数とは単なる素数であるだけでなく、The Prime Pagesのランキングに掲載される素数でなければならないということでした。
2001年当時、カーモディが最初に見つけた1401桁の素数ではThe Prime Pagesに掲載される素数としては小さすぎました。
そこで、次に見つけたのが1905桁の素数k×25611+99だったのです。これはThe Prime Pagesにおける楕円曲線素数判定法で証明された素数ランキング10位として載るほどの大きい素数でした。
カーモディは暗号解読プログラムそれ自身を公開できないとすれば素数であれば公開してもいいだろうと考え、素数を見つけ出したのです。
この素数はある規則で変換すればDVDコピーガードを破るコンピュータープログラムになります。このプログラムはアメリカでは違法とされたので、素数も“違法な素数(illegal prime number)”と呼ばれています。
数が違法とは一見奇妙に思えますが、それは私たちの社会が数とともにあることを教えてくれます。
"裸" は罪!?
公然わいせつ罪という罪があります。
裸で生まれてきた私たち人間は、その姿を公衆面前でさらしてはいけないとするものです。人間以外の動物にはあり得ないことで、人間社会が動物のそれとは異なることを意味しています。
秘密こそ人間社会を特徴づけるキーワードです。
私たち人間は個人から国家まで秘密とともに生きています。秘密に支えられているといってもいい社会にとって、いかに秘密を作り、いかに秘密を守り、いかに秘密を暴くかは大問題です。
人間社会同様に人間が作り出したインターネットの世界も、公開と秘密が混在する空間です。
公開と秘密をつなぐのが言葉です。インターネットにおけるプリミティブ(primitive)な言葉こそ数です。
すべてが数に変換される数空間がコンピューターとインターネットの世界です。そして、数の世界のプリミティブ(primitive)な存在が素数(prime)です。
秘密、公開、インターネット、コンピューター、プログラム、規範、暗号、数そして素数。
それらを作り出し考える人間とは実に不思議な存在です。
1401桁の “違法な素数”
k×2562+2083=
4 85650 78965 73978 29309 84189 46942 86137 70744 20873 51357 92401 96520 73668 69851 34010 47237 44696 87974 39926 11751 09737 77701 02744 75280 49058 83138 40375 49709 98790 96539 55227 01171 21570 25974 66699 32402 26834 59661 96060 34851 74249 77358 46851 88556 74570 25712 54749 99648 21941 84655 71008 41190 86259 71694 79707 99152 00486 67099 75923 59606 13207 25973 79799 36188 60631 69144 73588 30024 53369 72781 81391 47979 55513 39994 93948 82899 84691 78361 00182 59789 01031 60196 18350 34344 89568 70538 45208 53804 58424 15654 82488 93338 04747 58711 28339 59896 85223 25446 08408 97111 97712 76941 20795 86244 05471 61321 00500 64598 20176 96177 18094 78113 62200 27234 48272 24932 32595 47234 68800 29277 76497 90614 81298 40428 34572 01463 48968 54716 90823 54737 83566 19721 86224 96943 16227 16663 93905 54302 41564 73292 48552 48991 22573 94665 48627 14048 21171 38124 38821 77176 02984 12552 44647 44505 58346 28144 88335 63190 27253 19590 43928 38737 64073 91689 12579 24055 01562 08897 87163 37599 91078 87084 90815 90975 48019 28576 84519 88596 30532 38234 90558 09203 29996 03234 47114 07760 19847 16353 11617 13078 57608 48622 36370 28357 01049 61259 56818 46785 96533 31007 70179 91614 67447 25492 72833 48691 60006 47585 91746 27812 12690 07351 83092 41530 10630 28932 95665 84366 20008 00476 77896 79843 82090 79761 98594 93646 30938 05863 36721 46969 59750 27968 77120 57249 96666 98056 14533 82074 12031 59337 70309 94915 27469 18356 59376 21022 20068 12679 82734 45760 93802 03044 79122 77498 09179 55938 38712 10005 88766 68925 84487 00470 77255 24970 60444 65212 71304 04321 18261 01035 91186 47666 29638 58495 08744 84973 73476 86142 08805 29443