(57)【要約】  本発明は、コンピュータプログラムエレメントの実行を保護することを可能にするための前記コンピュータプログラムエレメントの少なくとも一部の暗号化に関し、これは、前記コンピュータプログラムエレメントの少なくとも１つの静的リソースを抽出するステップ（ステップ１０２）、及び第１の鍵（３１４）を用いて前記静的リソースを暗号化するステップ（ステップ１０６）を有し、前記暗号化された静的リソースの復号は、第１のエンティティにおいて、第１の鍵を用いて暗号化された前記静的リソース（４０６）を取得するステップ、前記暗号化された静的リソースを第２のエンティティに提供するステップ（ステップ２０８）、第１の鍵を用いて暗号化された前記静的リソース（４０６）を取得するステップ（ステップ２１８）、第２の鍵（４２２）を取得するステップ（ステップ２１６）、前記第２の鍵を使用して前記暗号化された静的リソースを復号するステップ（ステップ２２２）、前記静的リソースを前記第１のエンティティに提供するステップ（ステップ２２８）及び前記第２のエンティティから前記静的リソースを前記第１のエンティティにより取得するステップ（ステップ２１０）を有する。
2007515723.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータプログラムエレメントの実行を保護することを可能にするように当該コンピュータプログラムエレメントの少なくとも一部を暗号化する方法において、
前記コンピュータプログラムエレメントの少なくとも１つの静的リソースを抽出するステップと、
鍵を用いて前記少なくとも１つの静的リソースを暗号化するステップと、
を有する暗号化する方法。
【請求項２】
前記コンピュータプログラムエレメントに前記少なくとも１つの暗号化された静的リソースを記憶するステップ、
を更に有する、請求項１に記載の暗号化する方法。
【請求項３】
前記鍵が、公開／秘密鍵対の公開鍵である、請求項１に記載の暗号化する方法。
【請求項４】
前記公開鍵をコンピュータプログラムエレメントに記憶するステップ、
を更に有する、請求項３に記載の暗号化する方法。
【請求項５】
対応する秘密鍵を取得するステップと、
前記コンピュータプログラムエレメントが備えられているエンティティとは異なるエンティティに前記秘密鍵を記憶するステップと、
を更に有する、請求項３に記載の暗号化する方法。
【請求項６】
前記抽出するステップが、前記プログラムエレメント内の特定の位置から前記少なくとも１つの静的リソースを抽出するステップを有し、前記記憶するステップが、前記暗号化された静的リソースを前記位置に記憶するステップを有する、請求項１に記載の暗号化する方法。
【請求項７】
コンピュータプログラムエレメントの実行を保護することを可能にするように当該コンピュータプログラムエレメントの少なくとも一部を暗号化するコンピュータプログラム暗号化装置において、
前記コンピュータプログラムエレメントの少なくとも１つの静的リソースを抽出し、
鍵を用いて前記少なくとも１つの静的リソースを暗号化する、
ように構成されたコンピュータプログラム暗号化装置。
【請求項８】
コンピュータプログラムコード手段を持つコンピュータ読取可能媒体を有するコンピュータプログラムプロダクトにおいて、前記コンピュータプログラムコード手段がコンピュータにロードされる場合に、
前記コンピュータプログラムエレメントの少なくとも１つの静的リソースを抽出するステップと、
鍵を用いて前記少なくとも１つの静的リソースを暗号化するステップと、
を前記コンピュータに実行させるコンピュータプログラムプロダクト。
【請求項９】
コンピュータプログラムコード手段を有するコンピュータプログラムエレメントにおいて、前記コンピュータプログラムコード手段がコンピュータにロードされる場合に、
前記コンピュータプログラムエレメントの少なくとも１つの静的リソースを抽出するステップと、
鍵を用いて前記少なくとも１つの静的リソースを暗号化するステップと、
を前記コンピュータに実行させるコンピュータプログラムエレメント。
【請求項１０】
鍵を用いて暗号化された少なくとも１つの静的リソース、
を有するコンピュータプログラムコード手段を持つコンピュータ読取可能媒体を有するコンピュータプログラムプロダクト。
【請求項１１】
前記鍵が、公開／秘密鍵対の公開鍵である、請求項１０に記載のコンピュータプログラムプロダクト。
【請求項１２】
前記コンピュータプログラムコード手段が、
前記公開鍵、
を更に有する、請求項１１に記載のコンピュータプログラムプロダクト。
【請求項１３】
鍵を用いて暗号化された少なくとも１つの静的リソース、
を有するコンピュータプログラムコード手段を有するコンピュータプログラムエレメント。
【請求項１４】
コンピュータプログラムエレメントの実行を可能にするように当該コンピュータプログラムエレメントの少なくとも一部を復号する方法において、
第１のエンティティにおいて、第１の鍵を用いて暗号化された少なくとも１つの静的リソースを取得するステップと、
前記少なくとも１つの暗号化された静的リソースを第２のエンティティに提供するステップと、
前記第１の鍵による暗号化が第２の鍵を使用して復号された場合に、前記第１のエンティティにより前記第２のエンティティから前記少なくとも１つの静的リソースを取得するステップと、
を有する復号する方法。
【請求項１５】
第３の鍵を取得するステップと、
前記第３の鍵を使用することにより前記少なくとも１つの暗号化された静的リソースを復号するステップと、
を更に有し、
前記提供するステップが、前記第３の鍵及び前記少なくとも１つの暗号化された静的リソースを前記第２のエンティティに提供するステップを有し、前記第１のエンティティにより前記第２のエンティティから前記少なくとも１つの静的リソースを取得するステップが、前記コンピュータプログラムエレメントが実行されることができるように前記第３の鍵を用いて暗号化された前記少なくとも１つの静的リソースを取得するステップを有する、請求項１４に記載の復号する方法。
【請求項１６】
前記第３の鍵がランダムセッション鍵である、請求項１４に記載の復号する方法。
【請求項１７】
前記第１の鍵を取得するステップと、
前記第１の鍵を使用することにより前記第３の鍵及び前記少なくとも１つの暗号化された静的リソースを暗号化するステップと、
を更に有し、
前記少なくとも１つの暗号化された静的リソースを第２のエンティティに提供するステップが、前記第１の鍵を使用することにより暗号化された前記第３の鍵及び前記少なくとも１つの暗号化された静的リソースを提供するステップを有する、請求項１４に記載の復号する方法。
【請求項１８】
前記第１の鍵及び前記第２の鍵が、夫々公開／秘密鍵対の公開鍵及び秘密鍵である、請求項１４に記載の復号する方法。
【請求項１９】
コンピュータプログラムエレメントの実行を可能にするように当該コンピュータプログラムエレメントの少なくとも一部を復号する方法において、
少なくとも１つの静的リソースが第１の鍵を使用することにより暗号化された少なくとも１つの暗号化された静的リソースを第１のエンティティから取得するステップと、
第２の鍵を取得するステップと、
前記第２の鍵を使用することにより前記少なくとも１つの暗号化された静的リソースを復号するステップと、
前記少なくとも１つの静的リソースを前記第１のエンティティに提供するステップと、
を有する復号する方法。
【請求項２０】
前記第１のエンティティから第３の鍵を取得するステップと、
前記第３の鍵を使用することにより前記少なくとも１つの静的リソースを暗号化するステップと、
を更に有し、
前記少なくとも１つの静的リソースを前記第１のエンティティに提供するステップが、前記第３の鍵を用いて暗号化された前記少なくとも１つの静的リソースを提供するステップを有する、請求項１９に記載の復号する方法。
【請求項２１】
前記少なくとも１つの暗号化されたリソース及び前記第３の鍵が暗号化された状態で取得され、この暗号化が前記第１の鍵を使用して行われた、請求項２０に記載の復号する方法。
【請求項２２】
前記第２の鍵を使用することにより、前記暗号化された少なくとも１つの暗号化された静的リソース及び前記第３の鍵を復号するステップ、
を更に有する、請求項２１に記載の復号する方法。
【請求項２３】
前記第１の鍵及び前記第２の鍵が、夫々公開／秘密鍵対の公開鍵及び秘密鍵である、請求項１９に記載の復号する方法。
【請求項２４】
前記第３の鍵がランダムセッション鍵である、請求項１９に記載の復号する方法。
【請求項２５】
コンピュータプログラムエレメントの実行を可能にするように当該コンピュータプログラムエレメントの少なくとも一部を復号するコンピュータプログラム復号装置において、
第１の鍵を用いて暗号化された少なくとも１つの静的リソースを取得し、
前記少なくとも１つの暗号化された静的リソースを第２のエンティティに提供し、
前記第１の鍵による暗号化が第２の鍵を使用することにより復号された場合に、前記少なくとも１つの静的リソースを前記第２のエンティティから取得する、
ように構成されたコンピュータプログラム復号装置。
【請求項２６】
コンピュータプログラムエレメントの実行を可能にするように当該コンピュータプログラムエレメントの少なくとも一部を復号するコンピュータプログラム復号装置において、
少なくとも１つの静的リソースが第１の鍵を使用することにより暗号化された少なくとも１つの暗号化された静的リソースを第１のエンティティから取得し、
第２の鍵を取得し、
前記第２の鍵を使用することにより前記少なくとも１つの暗号化された静的リソースを復号し、
前記少なくとも１つの静的リソースを前記第１のエンティティに提供する、
ように構成されたコンピュータプログラム復号装置。
【請求項２７】
コンピュータプログラムコード手段を持つコンピュータ読取可能媒体を有するコンピュータプログラムプロダクトにおいて、前記コンピュータプログラムコード手段がコンピュータにロードされる場合に、
第１のエンティティにおいて、第１の鍵を用いて暗号化された少なくとも１つの静的リソースを取得するステップと、
前記少なくとも１つの暗号化された静的リソースを第２のエンティティに提供するステップと、
前記第１の鍵による暗号化が第２の鍵を使用して復号された場合に、前記第１のエンティティにより前記第２のエンティティから前記少なくとも１つの静的リソースを取得するステップと、
を前記コンピュータに実行させるコンピュータプログラムプロダクト。
【請求項２８】
コンピュータプログラムコード手段を有するコンピュータプログラムエレメントにおいて、前記コンピュータプログラムコード手段がコンピュータにロードされる場合に、
第１のエンティティにおいて、第１の鍵を用いて暗号化された少なくとも１つの静的リソースを取得するステップと、
前記少なくとも１つの暗号化された静的リソースを第２のエンティティに提供するステップと、
前記第１の鍵による暗号化が第２の鍵を使用して復号された場合に、前記第１のエンティティにより前記第２のエンティティから前記少なくとも１つの静的リソースを取得するステップと、
を前記コンピュータに実行させるコンピュータプログラムエレメント。
【請求項２９】
コンピュータプログラムコード手段を持つコンピュータ読取可能媒体を有するコンピュータプログラムプロダクトにおいて、前記コンピュータプログラムコード手段がコンピュータにロードされる場合に、
少なくとも１つの静的リソースが第１の鍵を使用することにより暗号化された少なくとも１つの暗号化された静的リソースを第１のエンティティから取得するステップと、
第２の鍵を取得するステップと、
前記第２の鍵を使用することにより前記少なくとも１つの暗号化された静的リソースを復号するステップと、
前記少なくとも１つの静的リソースを前記第１のエンティティに提供するステップと、
を前記コンピュータに実行させるコンピュータプログラムプロダクト。
【請求項３０】
少なくとも１つの静的リソースが第１の鍵を使用することにより暗号化された少なくとも１つの暗号化された静的リソースを第１のエンティティから取得するステップと、
第２の鍵を取得するステップと、
前記第２の鍵を使用することにより前記少なくとも１つの暗号化された静的リソースを復号するステップと、
前記少なくとも１つの静的リソースを前記第１のエンティティに提供するステップと、
をコンピュータに実行させるコンピュータプログラムコード手段を有するコンピュータプログラムエレメント。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、広くは、コンピュータプログラムコードの実行の防止に関し、特に、アクティブなエンティティ（active entity）を使用することによる静的データの暗号化及び復号に関する。
【背景技術】
【０００２】
強い実行保護（execution protection）方法は、アクティブなエンティティの１つのタイプの一例として、例えば、ＰＣ（パーソナルコンピュータ）のプリンタポート又はＵＳＢ（ユニバーサルシリアルバス）ポートのようなパラレル又はシリアルポートに例えば接続された所謂ハードウェアドングルを使用することができる。ドングルは、典型的には、パッシブな要素であるが、幾つかの暗号化／復号鍵をロードされたプログラム可能なメモリを含むことができる。情報がＰＣとドングルとの間で交換されることができる。このようなドングルは、例えば以下の２つの態様で使用されることができる。
【０００３】
１．ソフトウェアの実行の保護のために、シェルプログラムが、保護されるべきソフトウェアの周りに作成される。シェルを作成するプロセスにおいて、元のソフトウェアは、ドングルからの鍵に依存して完全に又は部分的に暗号化され、この後に暗号化がシェルに埋め込まれる。作成されたシェルは、したがって、ドングルからの鍵に基づくが、ソフトウェアを復号するのに使用されるアルゴリズムにも基づく。シェルが開始される場合、シェルはドングルから鍵を取り出し、暗号化されたソフトウェアを抽出し、前記暗号化されたソフトウェアを復号し、元のソフトウェアを実行する。ドングルが存在しない場合、又は異なる鍵を含む異なるドングルが使用される場合には、復号は失敗する。
【０００４】
２．また、ソフトウェアの実行の保護に対して、元のプログラムのエントリポイントは、プロシージャがエントリポイントで置き換えられることができる。論理ファンクションが備えられ、ドングルから鍵を取り出す。取り出された鍵に基づき、複雑な論理が、ドングルが正しいドングルであるか否かを決定するように構成される。成功したドングル識別の後に、ファンクションは元のプログラムのエントリポイントを呼び出し、これは元のソフトウェアの実行を可能にする。
【０００５】
しかしながら、上述の方法には幾つかの不利点が存在する。
【０００６】
ＰＣとドングルとの間の異なる通信セッションの通信コンテンツは、通常は同じであり、これは、前記通信を盗聴することによりプロトコル及び鍵を取り出し、後で元のドングルを必要とせずにハードウェア又はソフトウェアのいずれかにおいてドングルをエミュレートすることが可能であることを意味する。
【０００７】
ドングルが識別された後に、元のプログラムのエントリポイントが呼び出され、元のプログラムは、そのままメモリ内に備えられる。経験豊富なユーザは、プログラムを前記プログラムのポータブル実行ファイルに書き戻すことができる。
【０００８】
通常は、反転された論理を使用することにより容易に置き換えられることができるドングル確認コード内に１つ又は幾つかのIF命令が存在する。
【０００９】
一般のセキュリティツール及びハードウェアドングルは、G. Hachez, “A comparative study of software
protection tools suited for E-commerce with contributions to software
watermarking and smart cards” Doctor’s Thesis, UCL, Louvain-La-Nueve、ベルギー、2003年３月号において更に記載されている。
【００１０】
この文書によると、近年のハードウェアドングルバージョンは、ＵＳＢポートに接続されることができ、通常は、スマートカードのＣＰＵを埋め込む。これらのバージョンは、各チャレンジに対して異なる値を返す小さなマイクロコントローラを含む。ソフトウェアは、定期的にチャレンジで前記ドングルに問い合わせし、回答が正しいことを確認する。最も進歩したドングルは、少量のメモリを有する小さなマイクロコントローラを含む。この場合、前記ソフトウェアの幾つかの重要な部分は前記ドングル内で実行される。
【００１１】
上述のハードウェアドングルバージョンの方法は、以下の欠点を持つ。第一に、保護されるべきソフトウェア内のドングルの全てのチェックの除去が成功する可能性があるリスクが存在する。第二に、ドングルが侵入者によりエミュレートされるリスクが存在する。
【００１２】
したがって、ソフトウェア内のドングルのようなアクティブなエンティティに対するチェックの除去後でさえソフトウェアが実行されることができないソフトウェア実行保護方法に対する要望が存在する。
【発明の開示】
【発明が解決しようとする課題】
【００１３】
本発明の目的は、コンピュータプログラムエレメントの静的リソースの暗号化を使用することによる当該コンピュータエレメントの実行の保護を提供することである。
【課題を解決するための手段】
【００１４】
本発明の第１の態様によると、この目的は、コンピュータプログラムエレメントの実行を保護することを可能にするように当該コンピュータプログラムエレメントの少なくとも一部を暗号化する方法であって、
前記コンピュータプログラムエレメントの少なくとも１つの静的リソースを抽出するステップと、
鍵を用いて前記少なくとも１つの静的リソースを暗号化するステップと、
を有する方法により達成される。
【００１５】
本発明の第２の態様によると、この目的は、コンピュータプログラムエレメントの実行を保護することを可能にするように当該コンピュータプログラムエレメントの少なくとも一部を暗号化するコンピュータプログラム暗号化装置であって、
前記コンピュータプログラムエレメントの少なくとも１つの静的リソースを抽出し、
鍵を用いて前記少なくとも１つの静的リソースを暗号化する、
ように構成されたコンピュータプログラム暗号化装置によっても達成される。
【００１６】
本発明の第３の態様によると、この目的は、コンピュータプログラムコード手段を持つコンピュータ読取可能媒体を有するコンピュータプログラムプロダクトであって、前記コンピュータプログラムコード手段がコンピュータにロードされる場合に、
前記コンピュータプログラムエレメントの少なくとも１つの静的リソースを抽出するステップと、
鍵を用いて前記少なくとも１つの静的リソースを暗号化するステップと、
を前記コンピュータに実行させるコンピュータプログラムプロダクトによっても達成される。
【００１７】
本発明の第４の態様によると、この目的は、コンピュータプログラムコード手段を有するコンピュータプログラムエレメントであって、前記コンピュータプログラムコード手段がコンピュータにロードされる場合に、
前記コンピュータプログラムエレメントの少なくとも１つの静的リソースを抽出するステップと、
鍵を用いて前記少なくとも１つの静的リソースを暗号化するステップと、
を前記コンピュータに実行させるコンピュータプログラムエレメントによっても達成される。
【００１８】
本発明の第５の態様によると、この目的は、
鍵を用いて暗号化された少なくとも１つの静的リソース、
を有するコンピュータプログラムコード手段を持つコンピュータ読取可能媒体を有するコンピュータプログラムプロダクトによっても達成される。
【００１９】
本発明の第６の態様によると、この目的は、
鍵を用いて暗号化された少なくとも１つの静的リソース、
を有するコンピュータプログラムコード手段を有するコンピュータプログラムエレメントによっても達成される。
【００２０】
本発明の第７の態様によると、この目的は、コンピュータプログラムエレメントの実行を可能にするように当該コンピュータプログラムエレメントの少なくとも一部を復号する方法であって、
第１のエンティティにおいて、第１の鍵を用いて暗号化された少なくとも１つの静的リソースを取得するステップと、
第２のエンティティに対して前記少なくとも１つの暗号化された静的リソースを提供するステップと、
前記第１の鍵による暗号化が第２の鍵を使用することにより復号された場合に、前記第１のエンティティにより前記第２のエンティティから前記少なくとも１つの静的リソースを取得するステップと、
を有する方法によっても達成される。
【００２１】
本発明の第８の態様によると、コンピュータプログラムエレメントの実行を可能にするように当該コンピュータプログラムエレメントの少なくとも一部を復号する方法であって、
少なくとも１つの静的リソースが第１の鍵を使用することにより暗号化された少なくとも１つの暗号化された静的リソースを第１のエンティティから取得するステップと、
第２の鍵を取得するステップと、
前記第２の鍵を使用することにより、前記少なくとも１つの暗号化された静的リソースを復号するステップと、
前記少なくとも１つの静的リソースを前記第１のエンティティに提供するステップと、
を有する方法によっても達成される。
【００２２】
本発明の第９の態様によると、この目的は、コンピュータプログラムエレメントの実行を可能にするように当該コンピュータプログラムエレメントの少なくとも一部を復号するコンピュータプログラム復号装置であって、
第１の鍵を用いて暗号化された少なくとも１つの静的リソースを取得し、
前記少なくとも１つの暗号化された静的リソースを第２のエンティティに提供し、
前記第１の鍵による暗号化が第２の鍵を使用することにより復号された場合に、前記第２のエンティティから前記少なくとも１つの静的リソースを取得する、
ように構成される装置によっても達成される。
【００２３】
本発明の第１０の態様によると、この目的は、コンピュータプログラムエレメントの実行を可能にするように当該コンピュータプログラムエレメントの少なくとも一部を復号するコンピュータプログラム復号装置であって、
少なくとも１つの静的リソースが第１の鍵を使用することにより暗号化された少なくとも１つの暗号化された静的リソースを第１のエンティティから取得し、
第２の鍵を取得し、
前記第２の鍵を使用することにより、前記少なくとも１つの暗号化された静的リソースを復号し、
前記少なくとも１つの静的リソースを前記第１のエンティティに提供する、
ように構成されたコンピュータプログラム復号装置によっても達成される。
【００２４】
本発明の第１１の態様によると、この目的は、コンピュータプログラムコード手段を持つコンピュータ読取可能媒体を有するコンピュータプログラムプロダクトであって、前記コンピュータプログラムコード手段がコンピュータにロードされる場合に、
第１のエンティティにおいて、第１の鍵を用いて暗号化された少なくとも１つの静的リソースを取得するステップと、
第２のエンティティに対して前記少なくとも１つの暗号化された静的リソースを提供するステップと、
前記第１の鍵による暗号化が第２の鍵を使用することにより復号された場合に、前記第１のエンティティにより前記第２のエンティティから前記少なくとも１つの静的リソースを取得するステップと、
を前記コンピュータに実行させるコンピュータプログラムプロダクトによっても達成される。
【００２５】
本発明の第１２の態様によると、この目的は、コンピュータプログラムコード手段を有するコンピュータプログラムエレメントであって、前記コンピュータプログラムコード手段がコンピュータにロードされる場合に、
第１のエンティティにおいて、第１の鍵を用いて暗号化された少なくとも１つの静的リソースを取得するステップと、
第２のエンティティに対して前記少なくとも１つの暗号化された静的リソースを提供するステップと、
前記第１の鍵による暗号化が第２の鍵を使用することにより復号された場合に、前記第１のエンティティにより前記第２のエンティティから前記少なくとも１つの静的リソースを取得するステップと、
を前記コンピュータに実行させるコンピュータプログラムエレメントによっても達成される。
【００２６】
本発明の第１３の態様によると、この目的は、コンピュータプログラムコード手段を持つコンピュータ読取可能媒体を有するコンピュータプログラムプロダクトであって、前記コンピュータプログラムコード手段がコンピュータにロードされる場合に、
少なくとも１つの静的リソースが第１の鍵を使用することにより暗号化された少なくとも１つの暗号化された静的リソースを第１のエンティティから取得するステップと、
第２の鍵を取得するステップと、
前記第２の鍵を使用することにより、前記少なくとも１つの暗号化された静的リソースを復号するステップと、
前記少なくとも１つの静的リソースを前記第１のエンティティに提供するステップと、
を前記コンピュータに実行させるコンピュータプログラムプロダクトによっても達成される。
【００２７】
本発明の第１４の態様によると、この目的は、コンピュータプログラムコード手段を有するコンピュータプログラムエレメントであって、前記コンピュータプログラムコード手段がコンピュータにロードされる場合に、
少なくとも１つの静的リソースが第１の鍵を使用することにより暗号化された少なくとも１つの暗号化された静的リソースを第１のエンティティから取得するステップと、
第２の鍵を取得するステップと、
前記第２の鍵を使用することにより、前記少なくとも１つの暗号化された静的リソースを復号するステップと、
前記少なくとも１つの静的リソースを前記第１のエンティティに提供するステップと、
を前記コンピュータに実行させるコンピュータプログラムエレメントによっても達成される。
【００２８】
本発明の背後にある一般的なアイデアは、コンピュータプログラムコード内の静的リソースのコンピュータプログラムエレメントの暗号化を使用することにより当該コンピュータプログラムコードの実行を保護することである。このアイデアは、暗号化された１つの静的リソースの復号中に２つのエンティティの使用に更に依存し、前記２つの点ティティ間の通信は少なくとも部分的に暗号化されている。
【００２９】
本発明は以下の利点を持つ。
１．これは、コンピュータプログラムコードの実行に欠かせない少なくとも１つの静的リソースを暗号化することにより当該コンピュータプログラムコードの実行の保護を提供する。
２．復号のプロセスが、第１及び第２のエンティティを要する。
３．前記コンピュータプログラムコードは、前記第２のエンティティに対する要求の除去後でさえ前記第１のエンティティ内で実行されることができない。
【００３０】
従属請求項の方向性及び利点は以下のとおりである。
【００３１】
請求項２は、前記コンピュータプログラムエレメント内に少なくとも１つの暗号化された静的リソースを記憶することを対象とする。この請求項は、コンピュータプログラムエレメントの実行中に必要とされるリソースが暗号化されることができるという利点を持つ。
【００３２】
請求項３、１１、１８及び２３は、公開／秘密鍵対の公開鍵及び秘密鍵を使用することを対象とする。利点は、一方の鍵が他方の鍵により暗号化されたデータを復号するのに必要とされることである。
【００３３】
請求項４及び１２は、コンピュータプログラムエレメント及びコンピュータプログラムコード手段夫々において前記公開鍵を持つことを対象とする。これらの請求項は、前記公開鍵を使用することにより暗号化されたデータを復号するために安全な秘密鍵の使用を可能にする利点を持つ。
【００３４】
請求項５は、前記公開鍵に対応する秘密鍵を取得し、コンピュータプログラムエレメントが備えられるエンティティとは異なるエンティティに前記秘密鍵を記憶することを対象とする。この請求項は、前記２つのエンティティの分離を可能にすることにより実行の保護の安全性を格段に高める利点を持つ。
【００３５】
請求項６は、コンピュータプログラムエレメント内の位置から少なくとも１つの静的リソースを抽出し、前記位置に暗号化されたリソースを記憶することを対象とする。これは、第一に、元の情報が利用可能でないので、第二に、他の部分又は要素が前記暗号化されたリソースの記憶により影響を受けないので有利である。
【００３６】
請求項１５及び２０は、第３の鍵を取得し、前記第３の鍵を使用することにより少なくとも１つの静的リソースを暗号化／復号することを対象とする。これらの請求項は、１つのエンティティから他のエンティティに送信された静的リソースが前記第３の鍵を用いて暗号化されることができるという利点を持つ。
【００３７】
請求項１６及び２４は、ランダムセッション鍵である第３の鍵を使用することを対象とする。鍵が対称的である利点は、暗号化及び復号に対して同じ鍵が使用されることができ、これが、使用される鍵の数を制限することである。
【００３８】
請求項１７、２１及び２２は、前記第３の鍵及び前記少なくとも１つの暗号化された静的リソースを暗号化／復号するために前記第１の鍵を更に使用することを対象とする。これは、前記第３の鍵が１つのエンティティから他のエンティティに暗号化されて送信されることができ、前記第３の鍵を使用することにより前記静的データの暗号化の高められた安全性を可能にするという利点を持つ。
【００３９】
本発明のこれら及び他の態様は、以下に記載される実施例を参照して説明され、明らかになる。
【００４０】
本明細書において使用される場合に単語“有する”が、記載されたフィーチャ、整数（integers）、ステップ又は構成要素の存在を特定すると見なされるが、１つ以上の他のフィーチャ、整数、ステップ、構成要素又はこれらのグループの存在又は追加を除外しないことは、強調されるべきである。
【００４１】
本発明は、添付図面と併せて読まれる本発明の好適な実施例の以下の記載からより明らかに理解される。
【発明を実施するための最良の形態】
【００４２】
本発明は、コンピュータプログラムコードの静的リソースを暗号化及び復号することにより前記コンピュータプログラムコードの実行を保護することに関する。
【００４３】
暗号化及び復号には、公開鍵暗号アーキテクチャを使用し、保護されるべきコンピュータプログラムのソースコードにアクセスする必要がある。
【００４４】
本発明の一実施例によると、２つの異なるエンティティが、暗号化された情報を復号するプロセスにおいて使用される。図５は、これらの２つの異なるエンティティの本発明の一実施例を示す。パーソナルコンピュータ５２のようなコンピュータが第１のエンティティを表し、アクティブなドングル５４が第２のエンティティを表す。これら２つのエンティティは、前記プロセスの復号ステップ中に情報を送信／受信するように構成される。
【００４５】
ドングルの代わりに、セキュリティチップが使用されることができる。このセキュリティチップは、コンピュータプラットフォームに一体化されることができる。
【００４６】
前記アクティブなドングルは、典型的には、単純な対称及び非対称な暗号化／復号アルゴリズムを実行することができる小さなプロセッサを備えている。前記２つのエンティティ、ここでは前記コンピュータと前記アクティブなドングルとの間のインターフェースは、ＵＳＢ（ユニバーサルシリアルバス）、ネットワーク又は他の通信チャネルであることができる。前記コンピュータと前記アクティブなドングルとの間の通信は、クライアント−サーバモデルに基づく。
【００４７】
前記保護されるべきコンピュータプログラムコードが市場に流通される前に、静的データの少なくとも一部が抽出され、前記アクティブなドングルの公開鍵を使用することにより暗号化され、暗号化されたデータとして前記ソースコード内で置き換えられる。前記コンピュータプログラムコードをコンパイル及び実行すると、対応する秘密鍵を有するドングルのみが、前記コンピュータプログラムコード内の前記データを使用する前に前記データを復号することができる。
【００４８】
下で述べられるように、暗号化は、典型的には、前記コンピュータから独立して他の場所で実行される。当業者に周知であるように、情報の暗号化及び復号は、鍵及び錠が関連しているのと同様な形で互いに関連している。ここで、暗号化するプロセスは、前記コンピュータと前記ドングルとの間の通信チャネルが、暗号化されたデータを復号するために確立されるように実行される。
【００４９】
本発明の一実施例によると、復号するプロセスは、復号されたプログラムコードをロードされた前記コンピュータ内で開始し、前記通信チャネル上で前記ドングルに情報を送信することにより続行し、前記ドングルにおいて前記復号するプロセスが続行し、続いて、前記ドングルが情報を前記コンピュータに送り返し、前記コンピュータにおいて前記プログラムコードが最終的に実行されることができる。
【００５０】
本発明はここで、コンピュータプログラムコードの暗号化を概略的に図示する図３と一緒に、コンピュータプログラムエレメントの少なくとも一部の暗号化のフローチャートを示す図１を参照することにより始めて、記載される。この暗号化は、典型的には、上述の２つのエンティティと異なる第３のエンティティ内で実行される。
【００５１】
プログラムコードを暗号化するために、ステップ１０２において、少なくとも幾らかの静的データ３０６が元のプログラムコード３０２から抽出される。したがって、ここでプログラムコード３０４により表される、抽出された静的データ３０６を除く元のプログラムコード３０２である、当該元のプログラムコード３０２の残りも作成される。本実施例において、元のプログラムの静的データは、如何なるタイプであってもよく、例えば、ストリング、定義、初期変数値、画像、定数、形式に関する静的データ又は他の静的リソースであることができる。
【００５２】
静的データ３０６を抽出した後に、暗号化／復号鍵対（公開鍵Ｋｐｂ３１４及び秘密鍵Ｋｐｒ３１６）の形式の第１及び第２の鍵は、ステップ１０４において生成される。当業者に周知であるように、前記２つの鍵のいずれか一方がデータを暗号化するのに使用されることができ、同様にこれらの一方がデータを復号するのに使用されることができるが、一度一方の鍵が、例えばデータを暗号化するために選択されると、他方の鍵のみが前記暗号化されたデータを復号するのに使用されることができる。
【００５３】
ここで、静的データ３０６は、ステップ１０６において、暗号化鍵として公開鍵Ｋｐｂ３１４を使用することにより暗号化され、前記公開鍵を用いて暗号化された静的データ（Static data）Ｋｐｂ３１０を作成する。上述の通信チャネルを前記第１のエンティティ、即ち前記コンピュータと、第２のエンティティ、即ち前記ドングルとの間に設けるために、プログラムコード３０４は、ステップ１０８において、修正されたプログラムコード３０８を取得するように変更される。この通信チャネルは、したがって、以下に記載されるデータの復号中に使用される。
【００５４】
本発明の本実施例によると、前記プログラムコードの特定の位置におけるステップ１０２において抽出された静的データの各ピースは、前記データの暗号化されたコピーにより置き換えられる。これは、ステップ１１０において前記元のプログラムコード内に、必ずではないが好ましくは、暗号化されていないデータがステップ１０２において前記元のプログラムコード内に存在した位置に前記暗号化されたデータを記憶する。前記暗号化された静的データを前記プログラムコードに記憶して、公開鍵Ｋｐｂ３１４が、ステップ１１２において、前記プログラムコードに記憶され、ステップ１１６において、保護されたプログラムコード３１２を取得する。
【００５５】
前記公開鍵Ｋｐｂ３１４に対応する秘密鍵Ｋｐｒ３１６は、ドングル３１８に記憶される。
【００５６】
取得された保護されたプログラムコード３１２は、したがって、暗号化された静的データのピースを含み、前記暗号化された静的データは、事前に前記静的データを暗号化せずに前記プログラムコードが実行されることを効率的に防止する。
【００５７】
前記プログラムの実行に欠かせない部分である、前記プログラムコードエレメントの特定の部分のみが暗号化される必要があることは明らかである。これは、全ての静的データが、コンピュータプログラムコードの全部の部分の機能を禁止するために暗号化される必要はないことを意味する。
【００５８】
このように前記コンピュータプログラムコードのピースを復号することにより、前記コンピュータプログラムコードは、単一のIF-THEN文を単にクラックすることにより実行されることはできない。これは、前記プログラムコードが大きな程度で暗号化されずに残されるが、前記プログラムコードの実行を防止するシェルが暗号化される、シェルのような暗号化方法と対照的である。単一のシェルをクラックすることにより、前記シェル内のプログラムの実行は可能にされる。
【００５９】
以下に、暗号化されたプログラムコードを実行する際の暗号化されたコンピュータプログラムコードの復号が記載される。
【００６０】
上述のように、前記ドングルに対するアクセスを持たない不正なパーティによるプログラムコードの実行を防止するためには、決定的なプログラムコードエレメントの暗号化で十分である。前記プログラムコードの鍵となる部分を実行する能力無しでは、前記プログラムコードの機能は、少なくとも完全には実現されない。
【００６１】
決定的な部分のみが暗号化されるので、暗号化されていない部分は、しかしながら、実行されることができる。前記プログラムコードを実行すると、以下に記載される方法が、プログラムコードエレメントの各ピースに対して使用される。夫々のこのようなピースに対して、通信セッションが開始され、情報が、前記コンピュータと前記ドングルとの間の通信チャネル上で通信される。更に、夫々のこのようなセッションに対して、セッション鍵が、以下により詳細に説明されるように生成される。
【００６２】
以下に、コンピュータプログラムコードを実行する際の静的データの復号のより詳細な記載が、図２Ａ、２Ｂ、４及び５を参照して概説される。
【００６３】
本発明の本実施例によると、保護されたコンピュータプログラムコード４０２の実行を動作することは前記コンピュータにおいて開始される。前記保護されたコンピュータプログラムコードにおいて、前記コンピュータは、図３の公開鍵Ｋｐｂ３１４を用いて暗号化された静的データ（Static data）Ｋｐｂ４０６を配置する。また、前記コンピュータは、前記保護されたコンピュータプログラムコードにおいて、記憶された公開鍵Ｋｐｂ４０８を取り出す。
【００６４】
暗号化された静的データに遭遇した後に、ランダムセッション鍵Ｋｓ４０４の形式の第３の鍵は、ステップ２０２において生成される。
【００６５】
暗号化された静的データ４０６は、この場合、ステップ２０４において、生成されたランダムセッション鍵Ｋｓ４０４と結合され、この後に、暗号化された静的データ４０６及びセッション鍵Ｋｓ４０４の結合体は、ステップ２０６において、公開鍵４０６を使用することにより暗号化され、したがって、暗号化された静的データ４０６及び前記セッション鍵Ｋｓ４０４の暗号化された結合体（(Static data)Ｋｐｂ＋Ｋｓ）Ｋｐｂ４１０を生成する。
【００６６】
この暗号化された結合体４１０を生成した後に、前記暗号化された結合体４１０は、ステップ２０８において、ドングル５４に送信される。図４における縦の点線Ａは、コンピュータ５２とドングル５４との間のインターフェースを示す。
【００６７】
前記ドングルは、前記コンピュータのポートを使用することにより、又は如何なる種類のネットワーク、例えばインターネット上の接続を使用することにより前記コンピュータに接続されることができる。
【００６８】
この後に、ステップ２１０において、コンピュータ５２は、ドングル５２＝４１２から、図３の公開鍵Ｋｐｂ３１４から復号されたが、ランダムセッション鍵Ｋｓ４２６を用いて暗号化された静的データ（Static data）Ｋｓ４３０を受信する。前記コンピュータは、この場合、ステップ２１２において、セッション鍵Ｋｓ４３２を使用することにより前記暗号化された静的データを復号する。
【００６９】
前記ランダムセッション鍵が対称鍵であるので、暗号化及び復号は同じ鍵を使用することにより実行される。これは、ランダムセッション鍵４２６、セッション鍵４３２及びランダムセッション鍵Ｋｓ４０４が同じ鍵であることを意味する。
【００７０】
復号すると、静的データ４３４が、ステップ２１４において取得され、静的データ４３４は、プログラムコード４３６の実行中に要求があると使用される。
【００７１】
上に記載されたのは、コンピュータにおいて暗号化された静的データを復号する方法である。ここで以下に記載されるのは、ドングルにおいて暗号化された静的データを復号する方法である。
【００７２】
本発明の本実施例によると、ドングル５４は、第一に、ステップ２１６において、前記静的データを暗号化する方法の間に図３における秘密鍵Ｋｐｒ３１６を取得する。第二に、前記ドングルは、ステップ２１８において、１）前記公開鍵で暗号化された静的データ４０６と、２）セッション鍵Ｋｓ４０４との暗号化された結合体（(Static data)Ｋｐｂ＋Ｋｓ）Ｋｐｂ４１０を受信し、前記結合体は、公開鍵Ｋｐｂ４０８を用いて暗号化されている。ドングル５４から、前記暗号化された結合体（(Static
data)Ｋｐｂ＋Ｋｓ）Ｋｐｂ４１４及び公開鍵Ｋｐｂ４１８が抽出される。ここで、秘密鍵４１６を
使用することにより、暗号化された結合体４１４は、ステップ２２０において復号され、公開鍵Ｋｐｂ４０８を用いて暗号化された静的データ（Static data）Ｋｐｂ４１８及びセッション鍵Ｋｓ４２０を生成する。この復号に続いて、暗号化された静的データ４１８は、ステップ２２２において、秘密鍵４１６に対して述べられたものと同じ鍵である秘密鍵Ｋｐｒ４２２を再び使用することにより復号される。ステップ２２２においてこの復号を行うと、復号された静的データ４２４が、ステップ２２４において取得される。
【００７３】
前記ドングルは、したがって、復号された静的データを取得した。ここで、復号された静的データ４２４は、ステップ２２６において再び暗号化されるが、しかしながらこのステップにおいて、セッション鍵４２６を使用することにより暗号化され、前記鍵は、ステップ２２０において前記暗号化された結合体を復号することから取得される。
【００７４】
したがって、取得されたのは、図３における公開鍵Ｋｐｂ３１４を使用することにより実行された最初の暗号化から復号されたが、セッション鍵４２６を使用することにより暗号化された静的データである。この暗号化された静的データ（Static Data）Ｋｓ４２８は、ここで、ステップ２２８において、図４においてＢにより示されるドングル−コンピュータ間インターフェース上でドングル５４からコンピュータ５２に送信される。
【００７５】
本発明の一実施例によると、このインターフェースＢは、ドングル−コンピュータ間ＵＳＢインターフェースである。このインターフェースは、しかしながら、代替例として、インターネットのようなネットワーク、１つ以上の他のコンピュータを持つ他のネットワーク、又は如何なるタイプの通信チャネルをも含むことができる。
【００７６】
図６は、コンピュータプログラムコード手段が記憶されているコンピュータプログラムプロダクト６２を示す。このコンピュータプログラムプロダクトは、如何なるタイプ、例えばコンパクトディスク（ＣＤ）、ディスケット、デジタル多用途ディスク（ＤＶＤ）、半導体メモリ、又はハードディスクであることができる。
【００７７】
コンピュータプログラムコードの実行の保護は、前記コンピュータプログラムコードにより制御される又は何らかの形で依存するハードウェアに対する不正アクセスを防止するのに使用されることができる。適切なアクティブなエンティティ、即ち適切なドングルを適宜に使用することは、前記ハードウェアに対するアクセスに許可を与える。
【００７８】
本発明は、以下に記載されるように多くの態様で更に変更されることができる。
【００７９】
上述の実施例に対する１つの代替例は、前記第２のエンティティとしてセキュリティチップを使用することである。したがって、たとえ一方が他方の内部に位置することができるとしても、前記セキュリティチップ及び前記コンピュータが２つの相異なるエンティティであると理解される。セキュリティチップを含むセキュリティプラットフォームの一例は、TCPA/Palladiumプラットフォームであり、このプラットフォームは、この代替実施例において使用されるのに適している。
【００８０】
本発明の他の実施例において、コンピュータプログラムコードの実行の保護は、他のコンピュータプログラムコードのタイプのアクティブなエンティティを使用することにより可能にされる。これは、したがって、セキュリティチップ又はドングルが、暗号化された静的リソースの復号に使用される実施例に対する代替例である。
【００８１】
異なる実施例において、前記静的データを暗号化する方法のステップの順序は変更されることができ、幾つかのステップは、本発明の保護の範囲と異なることなく削除されることさえできる。例えば、プログラムコードを変更するステップ、ステップ１０８は、公開及び秘密鍵を生成するステップ、ステップ１０４の前に実行されることができる。
【００８２】
本発明の他の実施例において、前記静的データを復号する方法は、コンピュータにより前記暗号化されたデータをドングルに送信するステップを有し、前記データは秘密鍵を使用することにより復号され、更に前記コンピュータに返される。本実施例において、セッション鍵の使用はない。
【００８３】
本発明の他の実施例において、前記静的データを復号する方法は、前記暗号化されたデータ及びセッション鍵をドングルに対してコンピュータにより送信するステップを有する。前記ドングルは、前記静的データを復号し、前記セッション鍵を使用することにより前記静的データを暗号化し、前記データを前記コンピュータに返す。本実施例は、前記セッション鍵及び前記暗号化された静的データの結合体を暗号化するために前記公開鍵を使用しない。
【００８４】
本発明の他の実施例において、前記静的データを復号する方法において、前記セッション鍵及び前記暗号化された静的データは、前記公開鍵を使用することにより別々に暗号化される。したがって、セッション鍵及び暗号化された静的データの暗号化された結合体は存在しない。
【００８５】
上述の実施例の代替例において、前記セッション鍵のみが前記コンピュータにより暗号化されるのに対し、既に暗号化された静的データは、そのまま前記ドングルに送信される。
【００８６】
他の実施例において、前記コンピュータプログラム復号装置は、幾つかのコンピュータを有する分散型コンピュータ装置である。
【００８７】
本発明の他の実施例において、コンピュータプログラムエレメントの特定の位置において抽出された前記静的データは、同じ又は異なるコンピュータプログラムエレメントの異なる位置に記憶される。暗号化されていない静的データは、前記エレメントから抽出され、もはやその位置において利用可能ではない。
【００８８】
他の実施例において、暗号化された静的データの復号中の前記セッション鍵の生成は、前記プログラムコードからのオーダにしたがって前記コンピュータにより実行される。
【００８９】
他の実施例において、暗号化された静的データの復号中の前記セッション鍵の生成は、暗号化された静的データの新しいピースに遭遇する前に前記プログラムコードにより実行される。
【００９０】
他の実施例において、前記第１のエンティティは、ＰＤＡ（パーソナルデジタルアシスタント）、パームトップコンピュータ、ラップトップコンピュータ、パーソナルコンピュータ、ゲーム用コンピュータ、コンピュータサーバ等のような任意のタイプのコンピュータである。
【００９１】
上述の実施例が本発明を限定するのではなく説明し、当業者が添付の請求項の範囲から外れることなく多くの代替実施例を設計することができることに注意すべきである。
【００９２】
請求項において、括弧間に配置された参照符号は、請求項を限定するように解釈されるべきでない。単語“有する”は、請求項に記載された要素又はステップ以外の要素又はステップの存在を除外しない。要素に先行する単語“１つの”は、複数のこのような要素の存在を除外しない。本発明は、幾つかの別個の要素を有するハードウェアによって、及び適切にプログラムされたコンピュータによって実施されることができる。単一のプロセッサ又は他の（プログラム可能な）ユニットも、前記請求項に記載された幾つかの手段の機能を実行することができる。
【００９３】
幾つかの手段を列挙する装置請求項において、これらの手段の幾つかは、ハードウェアの同一のアイテムにより実施されることができる。特定の方策が相互に異なる従属請求項に記載されているという単なる事実は、これらの方策の組み合わせが有利に使用されることができないことを示さない。
【図面の簡単な説明】
【００９４】
【図１】本発明の好適な実施例による暗号化する方法のフローチャートを示す。
【図２Ａ】コンピュータプログラムコードを持つ装置において実行される、本発明の好適な実施例による復号する方法のフローチャートを示す。
【図２Ｂ】本発明の好適な実施例による復号する方法のフローチャートを示す。
【図３】本発明によるプログラムコードの暗号化を概略的に図示する。
【図４】本発明による保護されたプログラムコードの復号を概略的に図示する。
【図５】暗号化されたデータの復号中に通信する２つのエンティティ、即ちコンピュータ及びドングルを概略的に示す。
【図６】本発明に関するコンピュータプログラムコード手段を持つコンピュータプログラムプロダクトを示す。
【図１】
2007515723.tif 000003
【図２Ａ】
2007515723.tif 000004
【図２Ｂ】
2007515723.tif 000005
【図３】
2007515723.tif 000006
【図４】
2007515723.tif 000007
【図５】
2007515723.tif 000008
【図６】
2007515723.tif 000009
【国際調査報告】
2007515723.tif 000010
2007515723.tif 000011
2007515723.tif 000012