現在リニューアル中です。一部ページが正しく表示されない場合がありますが、ご勘弁願います

コピーガードの変遷

 今回は簡単なコラム。『コピーガード』についてだらだらと書いてみたいと思います。
  1. 第一世代: 『シリアルナンバ時代』
  2. 第二世代: 『アクティべーション時代』
  3. 第三世代: 『強化版アクティべーション時代』
  4. コラム: 最強の暗号化と最強の認証方法
  5. コピーガードの未来

第一世代: 『シリアルナンバ時代』

 市販のソフトウェアには多くの場合、コピー防止策がなされています。 これについては今更説明するまでも無いのですが、一応書いておきます。
 市販ソフトというのは当たり前ですが、お金を払って購入するものです。 売る方としても、タダで配っていては経営が成り立ちません。
 しかし、コンピュータという、0 と 1 で構成された世界では、 データのコピーというものは簡単になされてしまいます。 もし誰か一人がソフトを購入し、それをコピーして頒布すれば、 実質販売本数は 1 本で済む、ということになりかねません。 当然これは違法です。 こんなことではソフト会社はたちまち破綻してしまいます。
 データのコピーを防ぐことはできません。 そこで、ソフト会社は考えました。 ようはコピーされても、それが使えなければ良いのです。
 そこで登場したのが『シリアルナンバ』です。『プロダクトキー』などと言われることもあります。 例えデータがコピーされても、この『シリアルナンバ』を入手しないことには、 ソフトをインストールできなくしたのです。
 かくして、違法ユーザとコピーガードを巡る、長い戦いが幕を開けました。

第二世代: 『アクティべーション時代』

 シリアルナンバによるプロテクションを施し、これにて安泰と思ったのもつかの間、 これは違法ユーザによってあっさり突破されてしまいます。
 ようはシリアルナンバさえあれば、ソフトをインストールすることができてしまいます。 つまり、ソフトのデータ+シリアルナンバをコピーすれば良いわけです。 早い話、購入したソフトを箱ごと誰かに貸してやれば、そのユーザも使用できてしまいます。 これではプロテクションの意味がありません。
 シリアルだけではダメだ、ほかに取って代わる方法は無いものかと考えられました。 そして次に生まれたのが『アクティべーション』です。
 アクティべーションは Active の派生語で、『活性化』という意味です。 これはどういうものかというと、一つのシリアルナンバは一つのコンピュータにしか適用できない、 というロジックを実装したものです。
 上では触れませんでしたが、シリアルナンバは一般的に一つのソフトに対して一つしか発行されません。 もし仮に販売されるすべてのソフトに異なるシリアルを割り振ったとしましょう。 しかしながら、ソフト側で入力されたシリアルがそのソフトに対応したシリアルかを検知することはできません (これは後でもう少し深く触れます)。 アクティべーションは、擬似的にこれを実装することに他なりません。
 まず、アクティべーションの流れをみてみましょう。
  1. ソフト出荷前: すべてのパッケージ(まぁソフトの箱といってもいいでしょう)に、異なるシリアルを割り振る
    ただし、シリアルはあるルールに基づいて定められ、いい加減な値は有効なシリアルとして認められない
  2. ソフト購入後: インストールするパソコンの、ユニークな情報を集める
  3. シリアルとユニークな情報を認証サーバに送り、そこからアクティべーションキーを受け取る
  4. 受け取ったキーを使ってアクティべーション完了
 順にみていきましょう。まず 1. の『あるルールに基づいて』の部分です。
次に 4 つのシリアルナンバを挙げます。このうち、3 つは正しいシリアルですが、 一つだけ不正なシリアルが含まれています。 さて、どれが不正なシリアルでしょう?
  1. 4283-9654-1279
  2. 9801-1632-7746
  3. 2196-8803-0165
  4. 8025-1087-3322
  5. 答えはもう少し下方 ▽
































































答え: 2 番
 『ナンデダヨ!』とお思いの方が多いと思います。 実は、この 4 つのシリアルにはとある規則があります。 すべての数字(4 桁ごとでは無く 1 桁ごと)をすべて足して 10 で割ってみてください。 すると、1, 3, 4 番はあまりが 0、つまり 10 で割り切れる数になったと思います。 2 番だけが 10 で割り切れない数となっています。 つまり、この『10 で割り切れる』というのが、このシリアルの『ルール』ということになります。
 今回は例題のため、ルールは非常に簡単ですが、実際にはユーザが考えもしないようなルールになっていると思われます。
 次にいきましょう。『インストールするパソコンの、ユニークな情報を集める』という部分です。 パソコンは、CPU、マザーボード、メモリ、HDD、DVD ドライブなどなどの色々な『ハードウェア』で構成されています。 これらのハードウェアは、通常の使用においては、 パソコンを買い換えない限りあまり追加や取り外しは行われないものです。 アクティべーションでは、この『追加や取り外しは行われない』点を睨んで、 これらのハードウェアから『ユニークな情報』を作り出します。
 ハードウェアには必ず製造元があり、バージョンがあります。 これらの情報をかき集め、データブロックを作ります。 このデータは、ユーザには何を意味するのか分からない暗号化したデータと思ってください。
 このユニークな情報とシリアルを用いて、続いてのステップ、『アクティべーションキー』を作成します。 シリアルを S、ユニークな情報を P、アクティべーションキーを K として説明をします。
 まず、S, K は公開された情報であり、P は非公開情報です。 K は S と P により暗号化関数 F を通して生成されます。この F は認証サーバにあり、内部は非公開です。 ソフト側は、S から K が正しい情報であるかを判別することができます。 流れとしては、S と P を認証サーバに送り、認証サーバは F(S, P) で K を生成し、クライアントに K を返します。 そして、S を使って K が正しいキーなら、アクティべーション完了、という訳です。わかったでしょうか?
 もし、シリアルを他人にコピーしてアクティべーションしようとするとどうなるでしょう。 コピー先のパソコンのユニークな情報を集め、S と共に送るところまでは一緒です。 実は、認証サーバは S と P に関するデータベースを持っています。 S はユニークな値、即ちプライマリキーとなります。 最初に認証を行う場合、S に対する P の情報は空です。 そこで、認証時に送信する P の情報をデータベースに書き込みます。
 次に、ほかのパソコンから S を使って認証しようとした場合を考えます。 今度は先ほどと違い、P の情報がデータベースに登録されています。 もし、送信した P(P' としましょう)と、登録されている P のデータが等しければ、 認証サーバは『再インストールしたんだろう』と解釈します。 この場合は正しく K の情報を返します。
 あるいは、P' に含まれる情報のうち、少しだけ P と違う場合、 認証サーバ『ハードを増設したのかな?』と、まぁ多めにみて認証を行います。 これにより、大幅なハードウェアの入れ替えを行わなければ正しく認証されます。
 ところが、まったく別のパソコンから S と P' を送ったとします。 こうなると、P と P' の内容ががらりと変わるでしょう。 つまり、別のパソコンと解釈できるわけです。 これには認証サーバも黙ってはいられません。 『不正コピーだろ!』と解釈して、K は返してあげません。 つまり、認証できないことになります。
 以上のような流れで、アクティべーションは行われています。
 このアクティべーションは、いわば『公開鍵暗号』に近いものです。重要なのは、どのデータが公開情報で、 どのデータが非公開情報かということです。
 このアクティべーションをクラックするには、S と K の二つが必要となります。 つまり、S のルール、K のルールも非公開なため、両方の生成ルールを解析しなければなりません。
 シリアルナンバ一つを用いる場合に対し、アクティべーション方式では『シリアルがユニーク』な点が強みなのです。
 こうして、違法コピーを食い止めることができたと思われました。 ですが、実際にはそうはいきません。

第三世代: 『強化版アクティべーション時代』

 データがメモリ上に展開される限り、クラッカたちの飽くなき挑戦は続きます。 このアクティべーションの例では、『S から K が正しいか判断する』ことができなければなりません。 裏を返せば、S を使って K を検証するコードが、アクティべーションを行うプログラム中に無ければならないのです。 そして、その部分を解読すれば、P なしで S から K を生成することなど造作も無いことです。
 S についても同様です。S が正しいキーか判別するコードを解析して、ハイお終いです。 こうなるともうハードウェアなど蚊帳の外です。認証サーバに接続することなく K を入手できます。
 これを打開すべく、Windows Vista ではさらにアクティべーションシステムを強化しました。 現段階では私の知識はそれほど無いので詳しいことは書けませんが、BIOS と何か関係があるそうです。 Vista クラックを主とする掲示板をのぞいてみると、色々なクラック方法が示唆されています。

コラム: 最強の暗号化と最強の認証方法

 暗号化についてはこちらに、入門程度に書いてあります。 ところで、強力な強度を誇ると言われる公開鍵暗号、RSA とかそういうやつですが、 理論上、破ることは不可能ではありません。
 最強の暗号化と呼ばれるものがあります。 それは、もとのデータに対してユニークな、データと同じ長さの鍵を用いる方法です。 実は、これが最強の認証方法につながってきます。
 第一世代で、シリアルは基本一つと言いましたが、 もし仮に販売されるすべてのパッケージに異なるシリアルを割り振り、 またソフト側にもそのシリアルしか受け付けないようにし、 かつアクティべーションを必要とするとなるとどうでしょう。
 ただし、この方法では、生産面で苦労することになります。 何せ、インストールするためのメディア(CD や DVD)に焼く際に、 そのシリアルしか受け付けないようにしたソフトを書き込む必要があるからです。 これは、簡単に言うとメディアをコピーする形で生産出来ないため、非常にコストがかかります。

コピーガードの未来

 先ほども書きましたが、メモリ上にデータが展開される限り、クラックできないものは無い、というのが現状です。 どんな難解なアルゴリズムを使用しようと、永い年月とタフな精神、そして何より技量と直感を以てすれば、 いつかは破られる日が来るでしょう。
 作曲ソフトやプラグイン式エフェクタ(とでも言えばいいのか)である VST を提唱した、 ドイツの Steinberg というメーカは、独自のプロテクションとして『USB ドングルプロテクション』なるものを採用しています。 これは、そのソフトを立ち上げる際には、特殊な USB ハードを接続し、 その中に使用するソフトの情報をあらかじめ書き込んでおかなければ起動できないというプロテクションです。 外部ハードが必要となるため、一見クラックが難しいように思えますが、 USB とやりとりをするドライバ自体をクラックしてやることで、 プロテクションを回避できるみたいです。
 もし、データのコピー自体を抑制できたのならば、コピーガード戦争に終止符が打たれることでしょうが、 それは果てしなく不可能に近いことです。
 もう一歩譲って、EXE ファイル(Windows の実行ファイル)のバイナリをのぞけなくする、 あるいは思い切ってデバッガを廃止する(ソフト開発者にとっては地獄となる)をすれば、 クラックにもかなり歯止めがかかるでしょう。 ですが、仮に将来の Windows Version X でこれらが対策されたとしても、 現行の Windows に持って行って解析すれば済む話。
 クラッカと開発者との戦争は未だ終焉を迎える気配は無さそうです。