(57)【要約】【課題】  オリジナルコードを複数の難読化手法でそれぞれ異なる複数のコードを生成する方法と、別の認証過程を必要としないプログラムアップグレード方法と、これらの方法のための装置を提供する。【解決手段】  プログラムの耐タンパ手法は、オリジナルコードを、複数の難読化手法を用いて複数の難読化されたコードを生成し、プログラム固有番号を生成した後、固有番号別に前記生成した難読化されたコードの中の一つを決定して使用者に提供する。アップグレード方法は、アップグレードコードを、前記難読化手法で複数の難読化されたコードを生成し、既存の難読化されたコードと比較し、その差で複数のパッチコードを生成する。パッチコードは、使用者から入力された固有番号により選択される。【選択図】  図２
2004348710.tif 000002
【特許請求の範囲】
【請求項１】
(a)オリジナルコードを、それぞれ異なるＮ個の難読化手法を用いて難読化された第１〜第Ｎのコードを生成するステップと、
(b)固有番号を生成するステップと、
(c)前記固有番号を所定の計算方法で計算し、計算された値に対応する使用者に提供すべき難読化されたコードを決定するステップとを含むことを特徴とするプログラムの耐タンパ手法。
【請求項２】
前記(c)ステップは、固有番号の一部または全体桁数の和をＮに割った残りを基準として、Ｎ個の難読化されたコードの中の一つを選択することを特徴とする請求項１に記載のプログラムの耐タンパ手法。
【請求項３】
それぞれ異なるＮ個の難読化手法を用いて生成された難読化された第１〜第Ｎのコードのうち、固有番号を用いて選択した難読化されたコードをアップグレードするプログラムアップグレード方法において、
(a)アップグレードコードを、前記Ｎ個の難読化手法で難読化された第１〜第Ｎのアップグレードコードを生成するステップと、
(b)前記(a)ステップの難読化された第１〜第Ｎのアップグレードコードと、前記難読化された第１〜第Ｎのコードとを比較し、比較により得られたそれぞれ異なるコードで第１〜第Ｎのパッチコードを生成するステップと、
(c)使用者の固有番号を受け、所定の計算方法で計算し、計算された値に対応する使用者に提供すべきパッチコードを決定するステップとを含むことを特徴とするプログラムアップグレード方法。
【請求項４】
前記(c) ステップは、固有番号の一部または全体桁数の和をＮに割った残りを基準として、Ｎ個のパッチコードの中の一つを選択することを特徴とする請求項３に記載のプログラムアップグレード方法。
【請求項５】
前記使用者の固有番号を受ける回数が一定の回数を超えると、前記固有番号に対応する使用者に提供すべきパッチコードを提供しないことを特徴とする請求項３に記載のプログラムアップグレード方法。
【請求項６】
オリジナルコードを、それぞれ異なるＮ個の難読化手法を用いて難読化し、それぞれ異なるＮ個の難読化されたコードを生成する難読化部と、
前記難読化されたコードを格納するコードテーブルと、
配布される個々のプログラムを識別するための固有番号を生成する固有番号生成器と、
前記固有番号生成器で生成された固有番号を受け、所定の方式で計算し、計算された値に対応する前記コードテーブルに格納されている使用者に提供すべき難読化されたコードを決定するマッピング部とを備えることを特徴とするプログラムの耐タンパ装置。
【請求項７】
前記マッピング部は、前記固有番号生成器で生成された固有番号の一部または全体桁数の和をＮに割った残りを基準として、前記コードテーブルに格納されているＮ個の難読化されたコードの中の一つを選択することを特徴とする請求項６に記載のプログラムの耐タンパ装置。
【請求項８】
それぞれ異なるＮ個の難読化手法で生成された難読化された第１〜第Ｎのコードのうち、固有番号を用いて選択した難読化されたコードをアップグレードするプログラムアップグレード装置において、
アップグレードコードを、前記Ｎ個の難読化手法を用いて難読化された第１〜第Ｎのアップグレードコードを生成する難読化部と、
前記難読化された第１〜第Ｎのコードと、前記難読化された第１〜第Ｎのアップグレードコードとを比較し、比較により得られたそれぞれ異なるコードで第１〜第Ｎのパッチコードを生成する比較部と、
前記第１〜第Ｎのパッチコードを格納するコードテーブルと、
入力された固有番号を所定の方法で計算し、計算された値に対応する前記コードテーブルに格納されている使用者に提供すべきパッチコードを決定するマッピング部とを備えることを特徴とするプログラムアップグレード装置。
【請求項９】
前記マッピング部は、前記入力された固有番号の一部または全体桁数の和をＮに割った残りを基準として、前記コードテーブルに格納されているＮ個のパッチコードの中の一つを選択することを特徴とする請求項８に記載のプログラムアップグレード装置。
【請求項１０】
同一の固有番号の入力回数が一定回数を超えると、前記固有番号に対応する使用者にパッチコードを提供しないようにするために、入力される固有番号の入力回数をカウンティングするカウンターをさらに備えることを特徴とする請求項８に記載のプログラムアップグレード装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの耐タンパ(tamper resist)のための方法及びこのための装置に関し、より詳しくは、プログラムの固有番号を用いた耐タンパ手法、及び耐タンパ性を持つプログラムのアップグレードのための方法、並びにこれらのための装置に関する。
【背景技術】
【０００２】
最近、インターネットの発達に伴い、インターネットを介して様々なコンテンツを提供するコンテンツプロバイダが大幅に増加している。コンテンツとは、元来、書籍、論文などの内容や目次を称する言葉であったが、現在は、主に種々の有無線通信網を介して提供されるデジタル情報を通称する言葉として使われている。例えば、インターネットやパソコン通信などにより提供される種々のプログラムや情報内容物、ＣＤ-ＲＯＭなどに書き込まれた映像や音楽などのマルチメディアコンテンツ、ゲームソフトウェアなどがこれに属している。
【０００３】
インターネットの普及初期には、インターネットを介してコンテンツを無料に提供していたが、この頃は、コンテンツ提供サービスの有料化が進んでいる。このような傾向により、オンライン上の無形の資産のデジタルコンテンツを保護し管理する方法、例えば、デジタル著作権管理(Digital Rights Management：以下、「ＤＲＭ」と称する)に関し、様々な論議が行われている。
【０００４】
ＤＲＭは、ウェブを介した有料コンテンツの安全な配布を保証し、特に、不正な配布を防止するために開発されたサーバソフトウェアの一種の意味もある。ＤＲＭ技術は、例えば、ナップスタのような使用者間のファイル交換プログラムの広範な使用により急激に増加された常用コンテンツのオンライン上でのプライバシー保護の手段として開発されている。
【０００５】
ＤＲＭは、オンラインコンテンツが著作権法により保護されてはいるものの、ウェブでの不正なアクセスを防ぎ、不正使用者を捜し出すのは、現実的に極めて難しいという点で、必要性が高まっている。また、ＤＲＭ技術は、インターネット上でハッカーが犯行を起した後に逮捕するというとりとめのない対応策でなく、より確実な問題解決への接近方式であり、最初からウェブコンテンツをハッキングすることそのものを不可能にしている。多くの企業では、様々な接近方法や技術に基づいた様々なＤＲＭ製品を市販している。一般に、ＤＲＭ 製品は、サーバソフトウェアや使用者用のプラグインなど、運営に必要な全てのものが含まれている一括パッケージ型になっている。 
【０００６】
このようなＤＲＭ技術の一つとして、プログラムが耐タンパ性を持たせるための難読化(Obfuscation)手法がある。
難読化とは、難読化される前のソースコード、 オブジェクトコード、または 実行ファイルなどのプログラムコード(以下、「オリジナルコード)と称する)と同一の機能を持つが、不必要な演算などを付加し、リバースエンジニアリングが難しくなるようにコードを変更することをいう。
【０００７】
例えば、下記のようなコードがあると仮定する。
i=1;
while (i<100) {
中略
i++;
}
前記コードは、下記のように変更してもその機能の差はない。
i=1; j=100;
while ((i<100) && (((j*j*(j+1)*(j+1))%4) == 0)) {
中略
i++;
j=j*i+3;
}
即ち、j*j*(j+1)*(j+1)は、jが奇数でも偶数でも常に４の倍数となり、従って、((j*j*(j+1)*(j+1))%4) == 0は、常に真となる。
【０００８】
このように、ループに条件を挿入する方式で難読化する方法があり、その他にも様々な難読化手法がある。
【０００９】
難読化手法に関する論文の例として、非特許文献１〜３などが挙げられる。実際に、難読化のための様々な方法があり、以下に、具体的な難読化手法に関する説明は省略し、ただ、様々な難読化手法があることを前提として説明する。
【００１０】
図１Ａは、従来の技術において、プログラムが耐タンパ性を持たせる過程を説明するための図である。
従来の技術においては、プログラムが耐タンパ性を持たせるために、ソースコード、またはオブジェクトコードなどの難読化される前のオリジナルコードを、既存の一つまたは複数の難読化手法を組み合わせて難読化し、難読化されたコードを生成している。
【００１１】
難読化されたコードは、各使用者に配布される。このとき、主にオンラインを介して配布されるが、その他にもＣＤやフロッピディスクなどで配布することもできる。
しかし、難読化手法は、オリジナルコードを完全に隠せず、理解し難く生成することにより、リバースエンジニアリングに対抗する方法であるが、充分な時間や努力があれば、オリジナルコードを見つけ出すことができる。即ち、頻繁なアップグレードを必要とするプログラムであれば、悪意の使用者は、難読化されたコードからオリジナルコードを見つけてアップグレードファイルを他の全ての使用者に不法的に提供することができる。このような問題点を解決するために、一つの難読化手法でなく、複数の難読化手法を用いることにより、一つの難読化手法を用いて難読化されたコードからオリジナルコードを見つけ出す場合でも、異なる難読化手法で難読化されたプログラムの使用者に対しては、アップグレードファイルを不正に提供できなくなるようにする方法が開発されていた。
【００１２】
図１Ｂは、複数の難読化手法を行い、プログラムが耐タンパ性を持たせる従来の方法を示している。
即ち、一つのオリジナルコードを、複数の難読化手法を用いてそれぞれ異なるコードを生成し、使用者に提供する。もし、誰かが特定のコードに対する難読化手法を見つけることになり、これを用いてアップグレードファイルを不正に提供しようとしても、異なる難読化手法で難読化されたプログラムの使用者には、アップグレードファイルを提供することができなくなる。
【００１３】
しかし、このような方法を用いる場合に、アップグレードをしようとすると、使用者がどのような難読化されたプログラムを持っているかが把握できないため、プログラムをアップグレードしようとすると、アップグレードされたコードを新たに受け、アップグレードしなければならないという煩わしさがあり、特に、オンラインゲームのように、頻繁にパッチファイルを提供してアップグレードされるプログラムに関わるものである場合には、一層不便になる。また、使用者は、既存のプログラムを持っていない場合でも、アップグレードを要求することにより、新しくアップグレードされたプログラムの提供を受けることができるため、これに対する解決策としてアップグレードを求める使用者に対しては、正当な使用者であるか否かを別に認証しなければないという問題点があった。
【非特許文献１】http://www.cs.arizona.edu/~collberg/Research/Publications/CollbergThomborsonLow97c/index.html、
【非特許文献２】http://www.cs.arizona.edu/~collberg/Research/Publications/CollbergThomborsonLow97d/index.html、
【非特許文献３】http://www.cs.arizona.edu/~collberg/Research/Publications/CollbergThomborsonLow97a/index.html
【発明の開示】
【発明が解決しようとする課題】
【００１４】
本発明は、上記問題点に鑑みなされたものであり、不正なアップグレードを防止するために、オリジナルコードをベースに、複数の難読化手法でそれぞれ異なる複数のコードを生成する方法と、複数の難読化されたコードをアップグレードするために、別の認証過程を必要としないプログラムアップグレード方法を提供し、またこれらの方法のための装置を提供することを目的とする。
【課題を解決するための手段】
【００１５】
上記の目的を達成するため、本発明によるプログラムの耐タンパ手法は、オリジナルコードを、それぞれ異なるＮ個の難読化手法で難読化し、難読化された第１〜第Ｎのコードを生成するステップと、固有番号を生成するステップと、前記固有番号を所定の計算方法で計算し、計算された値に対応する使用者に提供すべき難読化されたコードを決定するステップとを含む。Ｎ個の難読化されたコードの中から一つを選択することは、固有番号の一部または全体桁数の和をＮに割った残りを基準として行うことができる。
【００１６】
また、本発明によるプログラムアップグレード方法は、それぞれ異なるＮ個の難読化手法で生成された難読化された第１〜第Ｎのコードの中から固有番号を用いて選択された難読化されたコードをアップグレードする方法であって、アップグレードコードを前記Ｎ個の難読化手法で難読化し、難読化された第１〜第Ｎのアップグレードコードを生成するステップと、前記難読化された第１〜第Ｎのアップグレードコードと、前記難読化された第１〜第Ｎのコードとを比較し、比較により得られたそれぞれ異なるコードで第１〜第Ｎのパッチコードを生成するステップと、使用者の固有番号を受け、所定の計算方法で計算し、計算された値に対応する使用者に提供すべきパッチコードを決定するステップとを含む。Ｎ個のパッチコードの中から一つを選択することは、固有番号の一部または全体桁数の和をＮに割った残りを基準として行うことができる。一方、無断で複製された特定の固有番号に多数のプログラムのアップグレードを防止するために、前記使用者の固有番号を受ける回数が一定の回数を超えると、前記固有番号に対応する使用者に提供するパッチコードが提供されないようにすることができる。
【００１７】
また、本発明によるプログラムの耐タンパ装置は、オリジナルコードをそれぞれ異なるＮ個の難読化手法で難読化し、それぞれ異なるＮ個の難読化されたコードを生成する難読化部と、前記難読化されたコードを格納するコードテーブルと、配布される個々のプログラムを識別するための固有番号を生成する固有番号生成器と、前記固有番号生成器で生成された固有番号を受け、所定の方式で計算し、計算された値に対応する前記コードテーブルに格納されている使用者に提供すべき難読化されたコードを決定するマッピング部とを備えている。前記マッピング部は、前記固有番号生成器で生成された固有番号の一部または全体桁数の和をＮに割った残りを基準として、前記コードテーブルに格納されたＮ個の難読化されたコードの中の一つを選択することができる。 
【００１８】
また、本発明によるプログラムアップグレード装置は、それぞれ異なるＮ個の難読化手法で生成された難読化された第１〜第Ｎのコードのうち、固有番号を用いて選択した難読化されたコードをアップグレードするプログラムアップグレード装置において、アップグレードコードを、前記Ｎ個の難読化手法で難読化して難読化された第１〜第Ｎのアップグレードコードを生成する難読化部と、前記難読化された第１〜第Ｎのコードと、前記難読化された第１〜第Ｎのアップグレードコードとを比較し、比較により得られたそれぞれ異なるコードで第１〜第Ｎのパッチコードを生成する比較部と、前記第１〜第Ｎのパッチコードを格納するコードテーブルと、入力された固有番号を受けて所定の方法で計算し、計算された値に対応する前記コードテーブルに格納されている使用者に提供すべきパッチコードを決定するマッピング部とを備えている。前記マッピング部は、前記入力した固有番号の一部または全体桁数の和をＮに割った残りを基準として前記コードテーブルに格納されているＮ個のパッチコードの中から一つを選択することができる。一方、同一の固有番号の入力回数が一定の回数を超えると、前記固有番号に対応する使用者にパッチコードを提供しないようにするために、入力される固有番号の入力回数をカウンティングするカウンターをさらに備えてもよい。
【発明の効果】
【００１９】
以上のように、本発明によると、一つのオリジナルコードをベースに、複数の難読化手法を用いて生成された複数の難読化されたコードを、使用者に配布しているため、使用者に配布された何れか一つの難読化されたコードに対し、競争者や悪意の使用者が難読化されたコードを解読する方法を見つけた場合でも、他の使用者に配布された難読化されたコードには、適用することができない。
【００２０】
また、頻繁なアップグレードを必要とするプログラムにおいて、複数の難読化手法を用いて難読化されたコードを使用者に配布する場合、従来技術では、現在使用中のプログラムがどのような難読化手法を用いたコードであるかを把握しにくく、アップグレードすることが難しかったが、本発明によると、使用者が使用しているプログラムの固有番号が決定されると、使用された難読化手法も判断されるため、アップグレードを容易に行うことが可能となる。
【００２１】
一方、本発明によると、不正な複製が行われる場合に、特定の固有番号を持つプログラムに対するパッチ回数を制限し、ある程度不正な複製を防ぐことができるという効果がある。
【発明を実施するための最良の形態】
【００２２】
以下、本発明の好ましい実施の形態を、添付図面に基づいて詳しく説明する。
図２は、本発明の一実施の形態のシステム環境を示す図である。
プログラムのタンパ防止及びアップグレードのためのＤＲＭサーバ１００は、オリジナルコードまたはアップグレードコードを難読化するための難読化部１１０と、難読化されたコードを格納するコードテーブル１２０と、固有番号を生成する固有番号生成器１３０と、固有番号を受け、コードテーブルに格納されている難読化されたコードを決定するマッピング部１４０と、アップグレードコードが新たに難読化した場合に、これと既存の難読化されたコードと比較してパッチコードを生成し、これをコードテーブルに送る比較部１６０と、インターネット(図示せず)またはその他の媒体を介して使用者のコンピュータ２００とデータをやりとりできる入出力部１５０と、アップグレードを要求するために、使用者のコンピュータ２００から入出力部１５０に転送した固有番号の転送回数をカウンティングするためのカウンター１７０とを備えている。
【００２３】
先ず、図３及び図４を参照してプログラムの耐タンパ手法を説明する。
図３は、本発明の一実施の形態によるプログラムが耐タンパ性を持たせるために、難読化のためのコードテーブルを生成する過程を示す図であり、図４は、図３に示す過程で生成されたコードテーブルを用いて、プログラムが耐タンパ性を持たせる方法を示す図である。
【００２４】
先ず、難読化部１１０は、オリジナルコードを、Ｎ個の難読化手法を用いてＮ個の難読化されたコードを生成する。本発明において、オリジナルコードとは、難読化されていないプログラムのソースコード、オブジェクトコード、または実行ファイルを意味する。難読化された第１〜第Ｎのコードは、コードテーブル１２０に格納される。また、コードテーブルとは、難読化されたコードを格納する空間の意味であるが、難読化されたコードの集合の意味もある。
【００２５】
図４を参照して、先ず、固有番号生成器１３０は、使用者に配布される各プログラムの固有番号、例えば、シリアル番号を生成する。マッピング部１４０は、固有番号を受け、所定の計算方法で難読化されたコードを決定するマッピング番号を生成する。例えば、固有番号が「123456789012」という１２桁の数であるとし、難読化されたコードの数が１６であるとすれば、123456789012 mod 16を計算すると、「1」となり、従って、難読化された第１のコードが前記固有番号 「123456789012」に対して配布するコードとなる。配布するコードは、第１のコードに決定されたので、固有番号「123456789012」や難読化された第１のコードを使用者に配布する。一方、前記所定の計算方法は、上記の例に限定されるものでなく、ハッシュ関数を用いる方法などを適用することもできる。このとき、使用者に配布する方法は、入出力部１５０を介してインターネットで使用者のコンピュータ２００に転送したり、決定された第１のコード及び固有番号「123456789012」をＣＤやその他の格納媒体に格納し、これを使用者に提供したりすることができる。
【００２６】
次に、図５及び図６を参照してプログラムアップグレード方法について説明する。
図５は、本発明の一実施の形態のプログラムのアップグレードのためのコードテーブルを生成する過程を示す図であり、図６は、図５の過程で生成されたコードテーブルを用いてプログラムアップグレードする方法を示す図である。
【００２７】
難読化部１１０は、アップグレードのためのアップグレードコードを、Ｎ個の難読化手法を用いて難読化されたＮ個のアップグレードコードを生成する。この難読化されたアップグレードコードは、既存のコードテーブル１２０に格納されている既存の難読化されたコードと、比較部１６０で比較される。比較部１６０は、難読化されたアップグレードコードと、既存の難読化されたコードとを比較し、Ｎ個のパッチコードを生成する。生成された第１〜第Ｎのパッチコードは、コードテーブル１２０に格納される。
【００２８】
オンラインで使用者のコンピュータ２００のプログラムをアップグレードしようとすると、先ず、ＤＲＭサーバ１００に固有番号を転送する必要がある。カウンター１７０は、無断で複製されたプログラムに対するアップグレードを遮断するために、受信した固有番号に対するアップグレードの要求回数をカウンティングする。マッピング部１４０は、受信した固有番号に該当するパッチコードを決定し、決定されたパッチコードは、使用者のコンピュータ２００に転送される。一方、カウンティング回数が所定の回数、例えば、５回以上である場合には、該当の固有番号は、無断で複製されたプログラムの固有番号である可能性が高いため、固有番号に該当するパッチコードを転送せず、ＤＲＭサーバ１００の担当者に問い合わせろというメッセージなどを代わって転送する。
【００２９】
本発明は、これに限定されるものでなく、このような本発明の基本的な技術的思想を逸脱しない範囲内で、当業界の通常の知識を有する者にとっては、他の多くの変更が可能であろう。例えば、以上の実施の形態においては、Ｎ個の異なる 難読化手法を中心にして説明してきたが、本発明は、これに限定されるものでなく、Ｎより小さい数の難読化手法を組み合わせて、Ｎ個の難読化手法を生成できる。つまり、Ｎが１０である場合、難読化手法が五つあれば、五つのうち、二つを組み合わせたもので十の難読化手法を生成することができる。
【００３０】
一方、本発明の実施の形態の各構成要素は、ハードウェアで具現できるが、本発明は、これに限定されるものでなく、ソフトウェアモジュール、またはソフトウェアモジュールとハードウェアモジュールとの組み合わせとして具現したものも本発明の基本的な技術的思想を逸脱しない。
【００３１】
以上のように、上記実施の形態を参照して詳細に説明され図示されたが、本発明は、これに限定されるものでなく、このような本発明の基本的な技術的思想を逸脱しない範囲内で、当業界の通常の知識を有する者にとっては、他の多くの変更が可能であろう。また、本発明は、添付の特許請求の範囲により解釈されるべきであることは言うまでもない。
【図面の簡単な説明】
【００３２】
【図１Ａ】従来の技術において、プログラムが耐タンパ性を持たせる過程を説明するための図である。
【図１Ｂ】複数の難読化手法を行い、プログラムが耐タンパ性を持たせる従来の方法を説明するための図である。
【図２】本発明の一実施の形態のシステム環境を示す図である。
【図３】本発明の一実施の形態によりプログラムが耐タンパ性を持たせるために、難読化のためのコードテーブルを生成する過程を説明するための図である。
【図４】本発明の一実施の形態によりプログラムが耐タンパ性を持たせる過程を説明するための図である。
【図５】本発明の一実施の形態によりプログラムのアップグレードのためのコードテーブルを生成する過程を説明するための図である。
【図６】本発明の一実施の形態によりプログラムのアップグレードを行う過程を説明するための図である。
【符号の説明】
【００３３】
１００    ＤＲＭサーバ
１１０    難読化部
１２０    コードテーブル
１３０    固有番号生成器
１４０    マッピング部
１５０    入出力部
１６０    比較部
１７０    カウンター
２００    使用者のコンピュータ
【図１Ａ】
2004348710.tif 000003
【図１Ｂ】
2004348710.tif 000004
【図２】
2004348710.tif 000005
【図３】
2004348710.tif 000006
【図４】
2004348710.tif 000007
【図５】
2004348710.tif 000008
【図６】
2004348710.tif 000009