(57)【特許請求の範囲】
【請求項１】
コンピュータにおけるソフトウェアの無権限使用を防止する方法であって、
前記ソフトウェアの少なくとも一部を第一のアルゴリズム（g1）、及び第一のキー（k1）に従って暗号化すると同時に、前記コンピュータに接続可能な外部ユニットとの間の通信に関連するオブジェクトコードに対するコールシーケンスを前記ソフトウェアのソースコードに埋め込み、さらに該オブジェクトコードを実行可能なプログラムのデータライブラリに追加するステップであって、前記暗号化が、前記ソフトウェアのソースコードのコンパイル、及びリンクに先立って、前記ソフトウェアのソースコードに対して実施されるステップと、
前記外部ユニットにおいて、前記ソフトウェアの暗号化された部分を前記外部ユニットに格納された第二のアルゴリズム（g2）、及び第二のキー（k2）に従って解読するステップであって、前記第二のキー（k2）が、前記第一のキー（k1）とは異なるものである、解読するステップと
を含み、
前記解読するステップは、前記ソフトウェアの実行可能なプログラムの実行中に前記コンピュータが、前記追加されたオブジェクトコードの対応するエントリポイントへのジャンプを生じさせる前記コールシーケンスに遭遇したときに実施され、それによって、前記コンピュータは、追加された前記オブジェクトコードを使用して前記コンピュータと前記外部ユニットとの間に通信路を確立し、前記ソフトウェアの暗号化された部分を前記外部ユニットのプロセッサにより解読するために第一の転送セッションにおいて前記通信路を通して前記外部ユニットへと転送し、解読された前記ソフトウェアの部分が前記外部ユニットにおいて処理され、その結果が、前記コンピュータにおける更なる使用のために、第二の転送セッションにおいて前記通信路を通じて逆方向に転送されることを特徴とする方法。
【請求項２】
前記第一のアルゴリズム（g1）により暗号化されたソフトウェアの部分が、前記第一の転送セッションに先立って、第三のアルゴリズム（g3）と第三のキー（k3）に従ってスクランブルされ、前記第三のキー（k3）が、それぞれの転送セッションについてランダムに選択され好ましくは外部ユニットにより生成される数に基づいているステップと、
前記第一のアルゴリズム（g1）により暗号化され、前記第三のアルゴリズム（g3）によりスクランブルされ、前記第一の転送セッションにおいて外部ユニットへと転送されたソフトウェアの部分が、外部ユニットにおいて第四のアルゴリズム（g4）と第四のキー（k4）に従って脱スクランブルされ、前記第四のキー（k4）が前記第三のキー（k3）についてランダムに選択された前記数に基づいており、前記第四のアルゴリズム（g4）が前記第三のアルゴリズム（g3）の逆アルゴリズムであるステップと
をさらに含む、請求項１に記載の方法。
【請求項３】
前記第二のアルゴリズム（g2）により解読されたソフトウェアの部分に基づいて外部ユニットで生成された前記結果が、前記第二の転送セッションに先立って、第五のアルゴリズム（g5）と第五のキー（k5）に従ってスクランブルされ、前記第五のキー（k5）が、それぞれの転送セッションについてランダムに選択され好ましくは外部ユニットにより生成される数に基づいているステップと、及び
前記第二のアルゴリズム（g2）により解読されたソフトウェアの部分に基づいて外部ユニットで生成され、前記第五のアルゴリズム（g5）によりスクランブルされ、前記第二の転送セッションにおいてコンピュータへと転送された、前記結果が、コンピュータにおいて第六のアルゴリズム（g6）と第六のキー（k6）に従って脱スクランブルされ、前記第六のキー（k6）が前記第五のキー（k5）についてランダムに選択された前記数に基づいており、前記第六のアルゴリズム（g6）が前記第五のアルゴリズム（g5）の逆アルゴリズムであるステップとをさらに含む、請求項１又は請求項２に記載の方法。
【請求項４】
第三及び第四のキー（k3,k4）についてランダムに選択された前記数と、第五及び第六のキー（k5,k6）についてランダムに選択された前記数が同じ数であることを特徴とする、請求項２又は請求項３に記載の方法。
【請求項５】
ソフトウェア、特に無償で配布されるソフトウェアの、コンピュータにおける権限ある使用を可能にする方法であって、前記ソフトウェアが、ソフトウェアの少なくとも一部を第一のアルゴリズム（g1）、及び第一のキー（k1）に従って暗号化すると同時に、前記コンピュータに接続可能な外部ユニットとの間の通信に関連するオブジェクトコードに対するコールシーケンスを前記ソフトウェアのソースコードに埋め込み、さらに該オブジェクトコードを実行可能なプログラムのデータライブラリに追加するステップを含むソフトウェアの作成方法に従って作成され、前記暗号化が、前記ソフトウェアのソースコードのコンパイル、及びリンクに先立って、前記ソフトウェアのソースコードに対して実施され、前記第一のアルゴリズム（g1）による暗号化に使用される前記第一のキー（k1）が、前記外部ユニットにおける第二のアルゴリズム（g2）による解読に使用される第二のキー（k2）とは異なるものにおいて、
外部ユニットを前記コンピュータに接続するステップを含み、該外部ユニットは、コンピュータ読み取り可能な記憶媒体、及びプロセッサを少なくとも含み、前記第二のアルゴリズム（g2）、及び前記ソフトウェアの暗号化された部分の解読に使用される前記第二のキー（k2）が、前記外部ユニットに格納され、
前記コールシーケンスは、前記ソフトウェアの実行可能なプログラムの実行中に前記コンピュータが前記コールシーケンスに遭遇したときに、前記追加されたオブジェクトコードの対応するエントリポイントへのジャンプを生じさせ、それによって、前記コンピュータは、前記追加されたオブジェクトコードを使用して前記外部ユニットとの間に通信路を確立し、該通信路を通じて前記ソフトウェアの暗号化された部分を第一の転送セッションにおいて前記外部ユニットへと転送し、前記外部ユニットは、前記ソフトウェアの暗号化された部分を前記外部ユニットに格納されている第二のアルゴリズム（g2）、及び第二のキー（k2）に従って前記外部ユニットのプロセッサにより解読し、解読されたソフトウェアの部分を前記外部ユニットにおいて処理し、その結果が、前記コンピュータにおける更なる使用のために、第二の転送セッションにおいて前記通信路を通じて逆方向に転送され、前記第二のキー（k2）は、第一のアルゴリズム（g1）によるソフトウェアの暗号化に使用される前記第一のキー（k10）とは異なるものであることを特徴とする方法。
【請求項６】
前記ソフトウェアが、ソフトウェアの少なくとも一部を第一のアルゴリズム（g1）、及び第一のキー（k1）に従って暗号化すると同時に、前記コンピュータに接続可能な外部ユニットとの間の通信に関連するオブジェクトコードに対するコールシーケンスを前記ソフトウェアのソースコードに埋め込み、さらに該オブジェクトコードを実行可能なプログラムのデータライブラリに追加するステップを含むソフトウェアの作成方法に従って作成され、前記暗号化が、前記ソフトウェアのソースコードのコンパイル、及びリンクに先立って、前記ソフトウェアのソースコードに対して実施され、前記第一のアルゴリズム（g1）による暗号化に使用される前記第一のキー（k1）が、前記外部ユニットにおける第二のアルゴリズム（g2）による解読に使用される第二のキー（k2）とは異なり、前記ソフトウェアの作成方法が、第一のアルゴリズム（g1）に従って暗号化されるソフトウェアの前記部分に第三のキー（k3）が挿入されるステップをさらに含み、前記第三のキー（k3）が、前記外部ユニットに対する転送に先立ってソフトウェアの前記部分をスクランブリングする第三のアルゴリズム（g3）において用いることを意図したものであり、
−  接続された外部ユニットに対する前記第一の転送セッションに先立って、第一のアルゴリズム（g1）により暗号化されたソフトウェアの部分が、前記第三のアルゴリズム（g3）と前記第三のキー（k3）に従ってスクランブルされ、前記第三のキー（k3）が、それぞれの転送セッションについてランダムに選択され好ましくは外部ユニットにより生成される数に基づき、及び
−  第一のアルゴリズム（g1）により暗号化され、前記第三のアルゴリズム（g3）によりスクランブルされ、前記第一の転送セッションにおいて外部ユニットへと転送された、ソフトウェアの前記部分が、外部ユニットにおいて第四のアルゴリズム（g4）と第四のキー（k4）に従って脱スクランブルされ、前記第四のキー（k4）が前記第三のキー（k3）についてランダムに選択された前記数に基づいており、前記第四のアルゴリズム（g4）が前記第三のアルゴリズム（g3）の逆アルゴリズムであることを特徴とする請求項５に記載の方法。
【請求項７】
前記第二のアルゴリズム（g2）により解読されたソフトウェアの前記部分に基づいて外部ユニットで生成された前記結果が、前記第二の転送セッションに先立って、第五のアルゴリズム（g5）と第五のキー（k5）に従ってスクランブルされ、前記第五のキー（k5）が、それぞれの転送セッションについてランダムに選択され好ましくは外部ユニットにより生成される数に基づいているステップと、
前記第二のアルゴリズム（g2）により解読されたソフトウェアの前記部分に基づいて外部ユニットで生成され、前記第五のアルゴリズム（g5）によりスクランブルされ、前記第二の転送セッションにおいてコンピュータへと転送された、前記結果が、コンピュータにおいて第六のアルゴリズム（g6）と第六のキー（k6）に従って脱スクランブルされ、前記第六のキー（k6）が前記第五のキー（k5）についてランダムに選択された前記数に基づいており、前記第六のアルゴリズム（g6）が前記第五のアルゴリズム（g5）の逆アルゴリズムであるステップと
をさらに含むことを特徴とする、請求項６に記載の方法。
【請求項８】
前記第一及び第二のアルゴリズム（g1，g2）並びに前記第一及び第二のキー（k1，k2）が、RSA暗号システムの如き非対称の二重キー暗号構成（公的キー／私的キー暗号システム）に従って決定され、第一のキー（k1）が好ましくは既知のキー（公的キー）であり、第二のキー（k2）が暗号構成の秘密キー（私的キー）であることを特徴とする、請求項１〜７のうちの何れか一項に記載の方法。
【請求項９】
前記第一のアルゴリズム（g1）に従って暗号化されるソフトウェアの前記部分が、コンピュータによるそれぞれのソフトウェアの使用について完全に決定的となるように選択され、好ましくは.COM又は.EXEファイルの如きコマンド又は実行ファイルにある一つ又はより多くの命令を含むことを特徴とする、請求項１〜８のうちの何れか一項に記載の方法。
【請求項１０】
ソフトウェア、特に無償で配布されるソフトウェアの権限ある使用を可能にする装置であって、前記ソフトウェアが、ソフトウェアの少なくとも一部を第一のアルゴリズム（g1）、及び第一のキー（k1）に従って暗号化すると同時に、前記コンピュータに接続可能な外部ユニットとの間の通信に関連するオブジェクトコードに対するコールシーケンスを前記ソフトウェアのソースコードに埋め込み、さらに該オブジェクトコードを実行可能なプログラムのデータライブラリに追加するステップを含むソフトウェアの作成方法に従って作成され、前記暗号化が、前記ソフトウェアのソースコードのコンパイル、及びリンクに先立って、前記ソフトウェアのソースコードに対して実施され、前記第一のアルゴリズム（g1）による暗号化に使用される前記第一のキー（k1）が、前記外部ユニットにおける第二のアルゴリズム（g2）による解読に使用される第二のキー（k2）とは異なるものにおいて、
前記コンピュータに接続するように構成された外部ユニットであって、プロセッサ、並びに第二のアルゴリズム（g2）、及び第二のキー（k2）を格納するためのコンピュータ読み取り可能な記憶媒体を有し、前記第二のアルゴリズム（g2）、及び第二のキー（k2）に従って前記ソフトウェアの暗号化された部分の解読を実行するよう構成された外部ユニットと、
前記第二のアルゴリズム（g2）、及び該第二のアルゴリズム（g2）による前記ソフトウェアの暗号化された部分の解読に使用される前記第二のキー（k2）を生成するための発生手段と、
前記外部ユニットに対してホストコンピュータとして機能するよう構成されたコンピュータと
を含み、
前記外部ユニットは、プロセッサ、及びコンピュータ読み取り可能な記憶媒体を少なくとも含み、前記コンピュータとの間の通信のために、前記ホストコンピュータに接続されるように構成され、
前記外部ユニットは、前記第二のアルゴリズム（g2）、及び前記発生手段により生成された前記第二のキー（k2）に従って解読を実施するように構成された解読手段を含み、
前記コールシーケンスは、前記ソフトウェアの実行可能なプログラムの実行中に前記コンピュータが前記コールシーケンスに遭遇したときに、前記追加されたオブジェクトコードの対応するエントリポイントへのジャンプを生じさせ、それによって、前記コンピュータは、前記追加されたオブジェクトコードを使用して前記外部ユニットとの間に通信路を確立し、前記ソフトウェアの暗号化された部分を前記外部ユニットにおいて解読するために前記通信路を通じて第一の転送セッションにおいて前記外部ユニットへと転送し、前記外部ユニットのプロセッサは、前記ソフトウェアの解読された部分を処理し、その結果を前記コンピュータにおける更なる使用のために、第二の通信セッションにおいて前記通信路を通じて逆方向に転送するように構成されることを特徴とする装置。
【請求項１１】
前記第一のアルゴリズム（g1）、及び前記第一のキー（k1）による暗号化の際に、前記第一のアルゴリズム（g1）に従って暗号化されるソフトウェアの前記部分に、第三のキー（k3）が入力され、これが前記外部ユニットに対する転送に先立ってソフトウェアの前記部分をスクランブリングするために第三のアルゴリズム（g3）において用いることを意図したものであり、
前記外部ユニットが、前記第一のアルゴリズム（g1）により暗号化され、前記第一の転送セッションに先立ってホストコンピュータにより前記第三のアルゴリズム（g3）に従ってスクランブルされ、前記第一の転送セッションにおいて外部ユニットへと転送された、ソフトウェアの前記部分を、第四のアルゴリズム（g4）と第四のキー（k4）に従って脱スクランブルする脱スクランブリング手段を含み、このスクランブリングにおいてホストコンピュータにより使用された前記第三のキー（k3）が、それぞれの転送セッションについてランダムに選択され好ましくは外部ユニットの数発生器により提供される数に基づき、及び外部ユニットにおいて脱スクランブリング手段により用いられる前記第四のキー（k4）が前記第三のキー（k3）についてのものと同じランダムに選択された数に基づいており、前記第四のアルゴリズム（g4）が前記第三のアルゴリズム（g3）の逆アルゴリズムであることを特徴とする、請求項１０に記載の装置。
【請求項１２】
前記外部ユニットがさらに、当該外部ユニットが前記第二のアルゴリズム（g2）に従って解読したソフトウェアの前記部分に基づいて前記外部ユニットで生成された前記結果を、前記第二の転送セッションに先立って、第五のアルゴリズム（g5）と第五のキー（k5）に従ってスクランブルするスクランブリング手段を含み、このスクランブルに際しスクランブリング手段により用いられる前記第五のキー（k5）が、それぞれの転送セッションについてランダムに選択され好ましくは外部ユニットの数発生器により生成される数に基づいており、前記ホストコンピュータが前記外部ユニットで生成された前記結果を、前記ホストコンピュータにおいてさらに使用するために第六のアルゴリズム（g6）と第六のキー（k6）に従って脱スクランブルすることができ、前記結果が前記第二の転送セッションに先立って、前記外部ユニットのスクランブリング手段により前記第五のアルゴリズム（g5）に従ってスクランブルされ、第二の転送セッションにおいてコンピュータへと転送され、前記第六のキー（k6）が前記第五のキー（k5）についてと同じランダムに選択された数に基づいており、前記第六のアルゴリズム（g6）が前記第五のアルゴリズム（g5）の逆アルゴリズムであることを特徴とする、請求項１０又は請求項１１に記載の装置。
【請求項１３】
前記外部ユニットが、好ましくは改竄防止用に作成されたアダプタ手段と別個の物品とを含み、少なくとも外部ユニットのプロセッサとコンピュータ読み取り可能なメモリからなる電子回路がそこに配置され、前記物品がアダプタ手段のスロット内に挿入された場合又は他の仕方によりアダプタ手段と接続された場合に、前記別個の物品の回路と前記ホストコンピュータとの間に通信路を確立可能なように配置され、前記第二のアルゴリズム（g2）と前記第二のキー（k2）が前記メモリ内に、好ましくは別個の物品のプロセッサ以外の手段によっては読み取り不能であり、別個の物品の外部では入手不能となる仕方で格納されていることを特徴とする、請求項１０〜１２のうちの何れか一項に記載の装置。
【請求項１４】
前記別個の物品が、通常のクレジットカードの大きさを有する、プラスチックカードの如き小さな基板プレート、即ちスマートカードの形態を取り、アダプタ手段が前記基板プレートのためのカードリーダステーションからなり、これが任意選択的にホストコンピュータ又はそれに接続された周辺ユニットに取り込まれることを特徴とする、請求項１３に記載の装置。
【請求項１５】
前記別個の物品が、拡張カードのためにホストコンピュータに設けられたカード位置又はスロットに配置されるよう適合された電子回路カードの形態を取り、携帯型ホストコンピュータの場合に、この回路カードがPCMCIA標準の如き、こうした挿入可能なカードのための標準設計の一つに従って構成されることを特徴とする、請求項１３に記載の装置。
【請求項１６】
前記別個の物品が電子的盲プラグなどの形態を取り、前記アダプタ手段がホストコンピュータの入出力端子からなる、請求項１３に記載の装置。
【発明の詳細な説明】
技術分野
本発明は、著作権保有者の許可のない使用に対する、ソフトウェア、特に無償で配布されるアプリケーションソフトウェアの保護に関する。特に、コンピュータにおけるソフトウェアの無権限使用を防止するための方法、相応の権限がある場合にのみコンピュータで使用されるソフトウェアを作成するための方法及び装置、並びに本発明の一側面に従って作成されたソフトウェアのコンピュータにおける権限ある使用を許可するための方法及び装置に関するものである。
ソフトウェア、特にパソコン上で走るよう適合されたソフトウェアについての海賊コピーは、ソフトウェアのベンダにとっては甚大な問題であり、毎年大きな金額についている。例えば、特定のコンピュータプログラム又はプログラムパッケージのインストール又は作動についてパスワードを要求することにより、無権限な使用からソフトウェアを保護するという、従来用いられている方法は、十分なセキュリティをもたらしてはいない。従って、著作権保有者の許可が現実に存在する場合にのみ、特定のコンピュータプログラム又はコンピュータプログラムパッケージを使用することを可能にするような構成は、極めて重要である。
背景技術
必要なパスワードを単に打ち込んだだけでは、プログラムに対してアクセスを行うには不十分であるという構成を確立するために、既に幾つかの試みがなされている。例えば、所与のプログラムを用いることを可能にするために、コンピュータに対して特別のハードウェアユニットが接続されていることを必要とするシステムが提案されている。このユニットは例えば盲プラグ（「ドングル（dongle）」とも呼ばれる）の形態を有し、コンピュータの入出力端子の一つに直接に接続され、内部メモリに格納された固定のテーブル、識別番号その他を有していて、該当するアプリケーションプログラム内にその目的で含まれているプログラムされた追加的なルーチンの要求に応じて、情報がそこから読み出される。このユニットはまた、カードリーダステーションその他の形態を取ることもできる。その場合、カードが差し込まれ、カードに格納されている事項は概ね、上記の盲プラグに格納されているのと類似したものである。通常のチェック手順は、プログラムの追加的なルーチンが、例えばプログラムの識別と、格納されているテーブル中に存在する対応する情報項目を直接に比較することを含む。
こうした構成の一例は、ドイツ特許出願公開第44 19 115号に記載されており、そこではチップカードに格納された事項が読み取られ、予想された内容が存在する場合には、この事実をもって、プログラムを使用するための識別の十分な証拠であるとする。このチェックは、プログラムのインストールの際、或いはその使用中に行うことができる。ドイツ特許出願公開第42 39 865号は類似のシステムを開示しており、これは付加的に、実行されたソフトウェアのインストール回数を記録し、その数を制限することを可能にする構成を提供している。
上記のような公知の装置の全てについて、ソフトウェア中に含まれねばならない付加的なルーチンは、主たる欠点を構成するものとなっている。こうしたルーチンを単に取り除けば、ソフトウェアは通常通り動作し、無権限使用に対する保護は失われる。また、コンピュータのプロセッサと、ユニット又はカードのメモリとの間でデータが交換される間に、その情報を見ることが可能であり、さらにプログラムが使用される度毎にこの情報が交換される経路は同一であるから、外部メモリに格納された事項を暴くことも可能である。メモリの内容が何らかの手法により暗号化されていたとしても、通信インタフェースを介してのこうした種類の繰り返しは、例えば対応するハードウェアユニットをシミュレートすることを可能なものとし、或いは比較的高くはないコンピュータパワーによって「コードを破る」ことを可能にする。
英国特許公開第2 163 577号に記載された構成においては、特定の暗号技術を用い、また幾つかの記憶手段をそれ自体のプロセッサと共に改竄防止ハウジングに収容することにより、上述したタイプのハードウェアユニットの欠点の幾つかが回避されている。ハウジング内のプロセッサは、ハウジング内に格納された解読キーと、やはりハウジング内に格納された命令とを用いて、ハウジングが接続されているホストコンピュータから転送されてくる暗号化されたアプリケーションプログラム又はプログラムモジュールを解読し、それ自体によって実行する。暗号技術それ自体については、英国特許公開第2 163 577号による構成は、アプリケーションソフトウェアの暗号化のために、いわゆるDESアルゴリズム（DES−Data Encryption Standard（データ暗号化標準）、1977年米国標準化局）を用い、またこれを解読するために、対応する逆のDESアルゴリズムを用いているため、暗号化と解読の両方について、全く同じキーが用いられている。よってDES標準は対称的なものであり、セキュリティはキーそれ自体のみに存している。従って、このセキュリティを漏らすことがないように、この英国特許出願においては、このDESキーそれ自体の暗号化も提案されている。その目的のためにこれは、二つの異なるキー、つまり一方は暗号化用で他方は解読用のキーを有する、いわゆるRSAアルゴリズム（RSA−Rivest, Shamir, Adleman）を用いており、一方のキーから他方のキーを推理することは実際的には不可能になっている。かくしてRSA暗号システムは非対称であり、キー二つのシステムであり（公的キー／私的キー暗号システムとも呼ばれる）、この英国特許公開第2 163 577号による構成の場合には、それ自体知られていてもよい一つのキー（公的キー）のみが用いられてDESキーが暗号化され、他方、ユーザが知ってはならない別のキー（私的又は秘密キー）が、DESキーの解読に用いられる。後者のキー、即ち秘密キーは、改竄防止ハウジングのメモリ内に格納され、暗号化されたDESキーの解読に必要とされる場合に、ハウジング内のプロセッサによりフェッチ（取り出し）される。DESキーの各々は、暗号化されたアプリケーションプログラムの実行を可能とする目的でもって、そのアプリケーションプログラムに属している。
しかしながら、英国特許公開第2 163 577号による構成でも、外部ユニットとホストコンピュータとの間の通信をモニタすることが可能であり、また同じ暗号化されたプログラムモジュールが実行される度毎に、通信の経路は同一のものである。プログラムモジュールは全体として暗号化され、こうしたモジュールがソフトウェアの比較的大きな部分を占めることになるので、通信インタフェースを介してのこの種の予測可能な繰り返しは、プログラムモジュールのそれぞれを識別する助けとなる。識別されてしまうと、暗号化されたプログラムモジュールを最終的に解読する目的で、例えばオフラインモードにおいて処理される残りのプログラムから簡単に分離可能である。さらにまた、アプリケーションプログラムモジュール全体を外部で暗号化し、格納し、実行することは、ハウジング内の回路が十分に高いデータ処理能力を有し、プログラムモジュールのソースであるホストコンピュータとの通信が非常に速いのでなければ、受け入れ難いほど長い時間を必要とする。
本発明の一つの目的は、ソフトウェアを無制限にコピーし配布することができるが、必要な許可が存在しなければ使用できないという仕方でもって、ソフトウェアの販売者及び／又は所有者に対し、彼等の製品を無権限な使用から保護するより良い可能性を与え、しかも従来技術の欠点を蒙ることのない暗号化構成を提供することである。
本発明の別の目的は、個々のソフトウェアモジュールだけではなくプログラムパッケージ全体に対処することができ、使用許可を異なるレベルで、例えばプログラムパッケージの選ばれた部分について割り当てることが可能な、一般的な性質の暗号化構成を提供することである。
これらの、及びその他の目的は、添付図面に関連して行われる本発明の好ましい実施形態の例についての、以下の説明からより明らかとなろう。
発明の開示
本発明の第一の一般的な側面は、コンピュータにおけるソフトウェアの無権限使用の防止方法に関し、この方法は、
−  前記ソフトウェアの少なくとも一部を第一のアルゴリズムに従って暗号化するステップと、及び
−  ソフトウェアの暗号化された部分を第二のアルゴリズムに従って解読するステップとからなり、この第二のアルゴリズムがソフトウェアの暗号化された部分の解読に用いられるキーと共に、前記コンピュータに接続されるよう適合された外部ユニットに格納されており、この外部ユニットが少なくともコンピュータ読み取り可能な記憶媒体とそれ自体のプロセッサとからなり、
上記の方法が、第二のアルゴリズムによる前記解読が前記外部ユニットに格納された第二のキーを用いて実行され、この第二のキーが第一のアルゴリズムによるソフトウェアの前記部分の暗号化の実行において用いられた第一のキーと異なることを特徴とする。
本発明の別の側面は、ソフトウェア、特に相応の権限がある場合にのみコンピュータで使用される無償頒布を意図したソフトウェアの作成方法に関するものであり、この方法は、前記ソフトウェアの少なくとも一部を第一のアルゴリズムに従って暗号化し、これを前記コンピュータにおける使用により第二のアルゴリズムに従って解読することからなり、この方法は、第一のアルゴリズムによる前記暗号化に用いられるキーが第一のキーであり、この第一のキーが、第一のアルゴリズムと第一のキーに従って暗号化されるソフトウェアの部分の第二のアルゴリズムに従う解読の実行に用いられる第二のキーと異なることを特徴とする。
この第二の側面において、本発明はまたソフトウェア、特に相応の権限がある場合にのみコンピュータで使用される無償頒布を意図したソフトウェアの作成のための装置にも関するものであり、この装置は、
−  前記ソフトウェアの少なくとも一部の暗号化を第一のアルゴリズムと第一のキーに従って実行する暗号手段と、及び
−  前記コンピュータに接続するよう適合された外部ユニットからなり、この外部ユニットが少なくとも、それ自体のプロセッサと、第二のアルゴリズム及びキーを格納するためのコンピュータ読み取り可能な記憶媒体とを有し、前記第二のアルゴリズム及びキーに従ってソフトウェアの暗号化された部分の解読を実行するよう配置されており、
上記の装置が、第二のアルゴリズムによる前記解読に用いることを意図した前記第二のアルゴリズム及び第二のキーをもたらす発生手段をさらに含み、この第二のキーが第一のアルゴリズムによるソフトウェアの前記部分の暗号化の実行において前記暗号手段により用いられた第一のキーと異なることを特徴とする。
本発明の第三の側面は、本発明の第二の側面の一つのモードに従って作成されたソフトウェア、特に無償で配布されるソフトウェアの、コンピュータにおける権限ある使用を可能にする方法に関するものであり、この方法は、外部ユニットを前記コンピュータに接続し、この外部ユニットが少なくともコンピュータ読み取り可能な記憶媒体とそれ自体のプロセッサとからなり、第二のアルゴリズムとソフトウェアの暗号化された一部の解読に用いられるキーが前記外部ユニットに格納されている。本発明によれば、この方法は、第一のアルゴリズムに従って暗号化されたソフトウェアの部分を実行するに際して、コンピュータがコールシーケンス又は追加のオブジェクトコードに対応するエントリポイントへのジャンプを生じさせる類似の命令に遭遇した場合、このオブジェクトコードがコンピュータにより用いられて外部ユニットへの通信チャンネルを確立し、このチャンネルを通じてソフトウェアの暗号化された部分が第一の転送セッションにおいて外部ユニットへと転送されて前記外部ユニットに格納されている第二のアルゴリズムと第二のキーの両者に従って外部ユニット自体のプロセッサにより解読され、この第二のキーが第一のアルゴリズムによるソフトウェアの前記部分の暗号化の実行に用いられた第一のキーと異なり、次いで解読されたソフトウェアの部分が外部ユニットにおいて処理され、その結果がコンピュータにおいてさらに用いるために通信チャンネルを通じて反対方向へと第二の転送セッションにおいて転送されることを特徴とする。
この第三の側面において本発明はまた、本発明の第二の側面に従う装置により作成されたソフトウェア、特に無償で配布されるソフトウェアの、コンピュータにおける権限ある使用を可能にする装置に関するものであり、この装置は、少なくともそれ自体のプロセッサとコンピュータ読み取り可能な記憶媒体とからなり、ホストコンピュータとの通信のためにホストコンピュータに接続することを意図した外部ユニットのための、ホストコンピュータとして作用するよう適合されたコンピュータを含む。本発明によれば、この装置は、前記外部ユニットが前記発生手段により生成された前記第二のアルゴリズムと前記第二のキーに従って解読を実行するよう適合された解読手段を含み、この第二のキーが、第一のアルゴリズムに従うソフトウェアの前記部分の暗号化の実行において前記暗号手段により用いられた第一のキーと異なることを特徴とする。
本発明による方法及び装置によれば、著作権保有者の許可が存在しなければ、コンピュータプログラム又はコンピュータプログラムパッケージの如き形態のソフトウェアを使用することを極めて困難にする構成が達成される。以下の説明と他の特許請求項から明らかになるように、本発明による無権限使用に対するこの障害はまた、さらにより安全に行うことも可能であり、かくしてこのような本発明のさらなる特徴により処理されたソフトウェアを使用することは、必要な権限がなければ殆ど不可能となる。
【図面の簡単な説明】
以下の説明においては、添付図面に対する参照が行われる。図面中、
図1は本発明による好ましいハードウェア構成を示し、
図2は本発明による簡単化された一般的なソフトウェアのダイヤグラムであり、
図3は一般的なコマンド又は実行ファイル（.EXEファイル）が暗号化なしにどのように発生されるかを概略的に示し、
図4及び5は本発明によりソースコードレベルの暗号化がどのようにして実行されるかを概略的に示し、
図6は磁気記憶ディスク及びランダムアクセスメモリ（RAM）のそれぞれに対するソフトウェアの区分化を概略的に示し、
図7はプロテクトされたソフトウェアのコンピュータにおける使用を概略的に示し、
図8は図4及び5に示したタイプの暗号化プロセスの一例を示し、
図9はプロテクトされたソフトウェアのコンピュータにおける使用を概略的に示し、
図10はアクセスチェック又は認証を含む適用領域を概略的に示し、
図11は本発明の好ましい実施例による暗号化−解読及びスクランブリング−脱スクランブリングを含めて、プロセスの過程を概略的に例示するフローチャートである。
好ましい実施例の説明
最初に図1を参照すると、本発明の好ましいハードウェア構成が示されており、本発明によりホストコンピュータとして作用する、ワーキングステーション又はパーソナルコンピュータ（PC）の形態を有するコンピュータが示されている。この図においては、本発明による外部ユニットは、特にスマートカード用の、市販の集積されたマイクロプロセッサ、例えばCCA12103タイプを備えたカードリーダ又はプロセッサの形態をとるものとして示されており、このユニットは図示のコンピュータに含まれ、或いはシリアル又はパラレル接続によりこのコンピュータに接続される別個の設備ユニットに配置される。
図1はまた、安全保護されたソフトウェアを今や、広域ネットワーク（WAN）、ローカルエリアネットワーク（LAN）、そして特にインターネットのような、コンピュータが接続を確立することのできる種々のタイプのデータネットワークを介して配布可能であることを示している。またこのソフトウェアは実際、通常のように、フレキシブルディスク及び／又はCD-ROM（読み取り専用、コンパクトレーザーディスク）で配布することも可能である。何れの場合でも、このソフトウェアは無制限にコピーし、インストールすることができる。
このソフトウェアは無権限の使用に対して保護されているから、そうでない場合にしばしば必要とされる、ソフトウェアのコピーに対する保護はどのようなものも必要でない。ここで、この権限はスマートカードに埋め込まれており、自分自身で必要な解読アルゴリズムとキーをこのカードにインストールした、ソフトウェアの供給者以外には、この権限は入手不能である。従って、特定のコンピュータプログラムの使用に対する許可は、カード上に見出されるものであり、それぞれのプログラムや、ソフトウェアの別の部分に見出されるものではない。
単純化された一般的なダイヤグラムを示す図2から、本発明による構成が、
1.  無権限の使用に対して保護されたソフトウェア（しかしながらこの保護は、そのコピーを妨げない）、
2.  当該のソフトウェアの解読のためのアルゴリズムとキーを保持したスマートカード（その他）、及び
3.  保護されたソフトウェア（1）とスマートカード（2）との間での通信のための専用ソフトウェア（即ち請求項で特定した追加のオブジェクトコード）からなることが看取される。
保護は、スマートカード、即ちカードに配置された専用ソフトウェアに対するプログラムコール（呼び出し）を、ソフトウェアの種々の個所に挿入することによって行われ、それにより保護されたプログラムの実行に際して、正しく進むために必要な情報が得られる。例えばこの情報は、プログラムが実行される場合に用いられ、自分のソフトウェアを保護しようとすることを望む者によって決定される、ある種のパラメータであることができる。こうした情報はソフトウェアの適切な動作に必要なものであるから、かかるプログラムコールを除去することはできない。
保護されたプログラムとスマートカードとの相互作用は、元のプログラムが暗号化される場合にそのプログラムのデータライブラリに入力される、専用ソフトウェア（オブジェクトコード）によって制御される。この専用ソフトウェアはまた、コンピュータとスマートカードとの間の通信に対するスクランブリングをも提供することができる。
図3は、一般的なコマンド又は実行ファイル（.EXEファイル）が暗号化なしにどのように発生されるかを概略的に示し、図4及び5はそれぞれ独自の仕方でもって、本発明によりソースコードレベルの暗号化がどのようにして実行されるかを概略的に示している。
図6は、ソフトウェアそれ自体は磁気記憶ディスク上にあり、専用ソフトウェア（オブジェクトコード又はデータライブラリ）がコンピュータのランダムアクセスメモリ（RAM）に供給されることを示している。
図7及び9は、プロテクトされたソフトウェアがコンピュータにおいて使用された場合に生ずるプロセスを示している。
図8は、図4及び5に示したタイプの暗号化プロセスの一例を示している。ここで、ソースコードがPascal、C、Modulaのような高級プログラミング言語で存在していると仮定する。暗号化され、かくしていわゆる無権限使用に対して保護されるのは、このソースコードである。ソースコードにおいて、幾つかのパラメータが選択され、暗号化関数gを用いて暗号化される。例えば、保護されていないソースコードのあるコマンド中に存在する式、x:=y+10は、次のように表すことができる。
C:=decrypt（g（10）+t）
x:=y+（C-T）
式中、g（10）は暗号化パラメータであり、Tは変数であり、そのランダム値はこの場合、スマートカードからフェッチされている。
xの正しい値を得るためには、保護されたプログラムは、10+Tに等しいCの値に「到達」しなければならない。その解読プログラムは、保護されたソフトウェアの一部を構成している「専用ソフトウェア」（付加されたオブジェクトコード）に配置されている（図5参照）。この専用ソフトウェアはまた、スマートカードとの通信のためのプログラムと共に、ここではf及びf-1として示されるスクランブリング及び脱スクランブリング関数機能を含んでいる（図7参照）。スマートカードとの通信において、関数f及びf-1はスマートカードからフェッチされるキーを用い、スマートカードそれ自体は、
−  保護されたソフトウェアに配置されている変数Tのランダム値を生成するための数発生器と、
−  解読関数g-1のための秘密キーと、
−  解読関数g-1のためのアルゴリズムと、
−  関数f及びf-1のための一つ又はより多くのキーとを含んでいる。
暗号化関数gと解読関数g-1が、対称的ではない公的キー暗号システムを表すことが重要であることに注意しなければならない。このことは、暗号化関数gが、公知であってもよい公的キーを用いるが、しかしこのキーが、解読関数g-1（そのアルゴリズムにも、そのキーにも）到達するには十分でないことを意味している。こうして解読関数g-1のためのアルゴリズムとキーはスマートカードに配置され、そこから転送されることはない。
関数f,f-1,g,g-1は、可変である（即ち、値を変えることなしに交換可能である）ことが必要とされる。ここではこのことは、それらが次の性質を有していなければならないことを示している。
f-1（g-1（f（g（x））））=x
このようにして保護されたプログラムをコンピュータで使用する際、このプログラムの実行は、通常の通りに開始される（図7）。スマートカードとの通信を介して、変数Tの値と、関数f又はf-1のためのキーが、ソフトウェアに入力される。プログラムの実行は、次いで普通通りに続けられる。実行中に暗号化パラメータ（図示の例ではg（10））に行き着いた時点で、値（g（10）+T）が専用ソフトウェアに送られ、この専用ソフトウェアはさらにf（g（10）+T）-T）をスマートカードに伝える。スマートカードでは、g-1（（10）+T）-T）が計算され、この値が専用ソフトウェアに戻される。専用ソフトウェアにより、次いでf-1（g-1（（10）+T）-T）））が計算され、これはx及びx+Tに等しい。そしてこの結果が、プログラム中で用いるためのパラメータCとして、保護されたプログラムに対して供給される。
本発明によるこの種の暗号化−解読構成を有することにより、以下の利点及び可能性が実現される。
−  スマートカードの使用による多大な融通性。
−  ソフトウェア制作者と契約した輸入者又は代理店により、スマートカード（即ちユーザ）に対してライセンス契約を行う。その場合にスマートカードは、同じ認証フォーマット及びアルゴリズムを有する各種のソフトウェアパッケージについて、数レベルのライセンス、又は許可を含むことができる。
−  第一のレベルの暗号化に、RSA暗号システムのような、非対称の二重キー暗号化構成（公的キー／私的キー暗号システム）を用い、そこにおいて公的キーをソフトウェア制作者のみに入手可能なものとし、私的キーは秘密キーであって、ソフトウェア制作者により与えられる仕様に従って、スマートカードの製造者によりスマートカードのリードオンリーメモリ（ROM）に入力される秘密キーとする。
−  保護されたソフトウェアの実行が開始された時に、非対称な暗号化された認証キーをスマートカードに転送し、これを私的キーNo.0によりスマートカードで解読して、スマートカードにおける認証プロセスを開始させる。
−  ソースコードレベルにおける暗号化により、この構成をオペレーティングシステムに依存しないものとする。コマンドファイルの如きファイルのみの、小部分、又は断片を暗号化することにより、何とかしてこうした部分を攻撃しようとする目的で、暗号化されたソフトウェアのこれらの部分を識別することは困難になる。また、解読アルゴリズム及びキーは、スマートカード上に容易に入力することができる。
−  第二のレベルの暗号化により、ホストコンピュータとスマートカードとの間の通信を、ログをとることによってその通信から何か意味のあるものをトレースしようとすることを困難にするようにできる。用いられるアルゴリズムは、保護されたプログラムとスマートカードの両者に配置され、暗号化キーと解読キーは両方ともスマートカードに配置され、即ちユーザに対して隠される。暗号化アルゴリズムとキーは、種々のタイプのソフトウェアについて異なるものとすることができる。
図10は、本発明による構成の適用領域が、存在するであろうさらなる可能性として、例えばアクセスチェック又は認証をもカバーするように拡げることができることを例証している。本発明のこうした実施例においては、保護されるべきソフトウェアには、いわゆる公的キーを用いて暗号化された認証キーと、当該のソフトウェアパッケージ用の識別番号とが備えられる。この場合に、スマートカードの如き外部ユニットは、好ましくはマスクプログラムされた解読アルゴリズムと、認証キーを解読するのに用いる私的キーNo.0（ROM内）と、さらに以下に示すように構成可能なアクセス又は認証テーブルとを含む。
0004267065.tif 000002
この表において、PIDはソフトウェアの識別番号を表しており、異なるプログラムには違う識別番号が付与され、またこの識別番号は、例えばそれぞれのソフトウェア製品のバージョン番号その他を含むこともできる。AcLは次のようなアクセスレベル又は状態、
−  二つの異なるレベル、即ちアクセス許可とアクセス不許可、
−  それぞれのプログラムを実行することのできる制限された回数、
−  例えば許可満了日のような、プログラムの使用についての時間的期限、
−  例えばいわゆるデモ版（variant）のような、そのプログラムのみの縮小版に対するアクセス
を示している。この表のアクセスレベルの欄のエントリAcLは、例えばソフトウェア製品の輸入者又は代理店が修正することができる。
私的キーPKの欄において、ソフトウェア制作者は、そのソフトウェアの識別番号PIDに基づいて、暗号化されたフラグメントの解読に用いられる秘密キーを特定する。この秘密キーはスマートカードにマスクプログラムされ、誰も入手することはできない。
図11は、本発明の好ましい実施例による、原理的には完結している処理過程を概略的に示すフローチャートであり、
−  ソースコードの暗号化ステップ（g1，k1）と、
−  暗号化されたデータのスクランブリングステップ（g3，k3）と、
−  スクランブルされた暗号化されたデータの外部ユニットに対する転送とその解読ステップ（g4，k4）と、
−  転送された脱スクランブルされたデータの解読ステップ（g2，k2）と、
−  解読されたデータの処理及びその結果のスクランブリングステップ（g5，k5）と、
−  スクランブルされた結果のホストコンピュータに対する転送及びその脱スクランブリングステップ（g6，k6）と、及び
−  さらなる使用のための解読されたデータの出力ステップとからなる。
本発明の図示の実施形態の例においては、スマートカードが以下の請求項に示した外部ユニットの好ましい実現形態を構成している。これは極めて単純に、スマートカード技術が、以下の請求項に従って外部ユニット又は別個の物品中に必然的に格納されねばならないアルゴリズム、キーその他について、最も「改竄防止」保護されていると考えられるからである。こうしたカードの製造業者の数が世界中で少ないこと、そしてなかでもこうしたカード、特に支払い取引カードの形態を有するカードの使用により取り扱われる価値が大きいことは、こうしたスマートカードを偽造するのに必要な知識が、不正な意図を有する人物に容易には入手できないという事実に強く寄与している。しかしながらこのことは、本発明の目的に対して同程度に、或いはより適した新たな技術が開発される可能性を妨げるものではない。従って特許請求の範囲は、今現在好ましいスマートカードと少なくとも同程度のセキュリティをもたらすことのできる、請求項に示されたそうした将来的な外部ユニット及び別個の物品をもカバーすることを意図したものである。
【図１】
0004267065.tif 000003
【図２】
0004267065.tif 000004
【図３】
0004267065.tif 000005
【図４】
0004267065.tif 000006
【図５】
0004267065.tif 000007
【図６】
0004267065.tif 000008
【図７】
0004267065.tif 000009
【図８】
0004267065.tif 000010
【図９】
0004267065.tif 000011
【図１０Ａ】
0004267065.tif 000012
【図１０Ｂ】
0004267065.tif 000013
【図１１】
0004267065.tif 000014