(57)【要約】【課題】コンピュータだけでなく、一般の家電製品にも使われる組込ソフトウェアについて、不正コピーによって作られたソフトウェアの使用を防止する。【解決手段】認証処理プログラム23が組込ソフトウェア21を使用するハードウェア内のCPU 10を認証することによって、そのソフトウェア21がコピーされたものか否かを判断する。また、そのソフトウェア21がコピーされたものと判断された場合、不正処理プログラム24を実行し、そのあと必ずソフトウェア21を実行させる。しかし、ソフトウェア21は不正処理プログラム24の実行により、本来の機能が存分に発揮されることはなく、またユーザは両プログラム23・24の存在にも気づきにくい。【選択図】図１
2006099411.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアを所定のハードウェアで実行する前に、該所定のハードウェアが特定の種類のハードウェアに固有の構成を有するか否かを確認する工程と、
前記所定のハードウェアが前記固有の構成を有することが確認されると、前記ソフトウェアを前記所定のハードウェアで実行する工程とを有し、
これによって、ソフトウェアを前記特定の種類のハードウェアでしか正常に実行させないことを特徴とするソフトウェア使用制限方法。
【請求項２】
請求項１に記載のソフトウェア使用制限方法において、該方法はさらに、
前記固有の構成が前記所定のハードウェアにない場合は前記ソフトウェアの実行に前記特定の種類のハードウェアが要する時間より長い時間をかけて前記ソフトウェアを前記所定のハードウェアで実行する工程を有し、
これによってソフトウェア使用制限方法の存在自体を隠蔽することを特徴とするソフトウェア使用制限方法。
【請求項３】
請求項１に記載のソフトウェア使用制限方法において、該方法はさらに、
前記固有の構成が前記所定のハードウェアにない場合は前記ソフトウェアを実行し該実行中に該実行以外の動作をさせる工程を有し、
これによってソフトウェア使用制限方法の存在自体を隠蔽することを特徴とするソフトウェア使用制限方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアの不正使用を防止するソフトウェア使用制限方法に関するものである。
【背景技術】
【０００２】
一般に、コンピュータ用に販売されているソフトウェアは、購入した者が使用する権利を有する。しかし、汎用性があるため、このソフトウェアを不正にコピーして、他のコンピュータ上で使用することが可能である。
【０００３】
コンピュータはキーボードのような、ユーザからの入力を受け付ける入力装置を有している。
【０００４】
一方、冷蔵庫や電子レンジなど、様々な形態の入力装置を有しているか、あるいは入力装置を全く有していない家電製品に、あらかじめ組み込まれているソフトウェア（以下「組込ソフト」と略す）も存在する。
【０００５】
また、広い意味では、コンピュータにプリインストールされているソフトウェアも組込ソフトとも言える。
【０００６】
こうした組込ソフトは、通常、あらかじめ組み込まれるハードウェアのみでの使用が想定されている。つまり、特定のメーカ製のハードウェア上で使用することは許可されているが、それ以外のメーカ製のハードウェア上で使用することは禁止されている。しかし、特定のメーカ製のハードウェアにプリインストールされた組込ソフトに汎用性があれば、これを不正にコピーして、他の種類のハードウェア上で不正に使用することも可能な場合がある。仮にそのような不正使用が明らかになった場合は、上記特定のメーカは法的措置をとって、不正使用者に対し然るべき損害賠償請求ができる。しかし、このような不正使用の摘発は通常、困難な場合が多い。
【０００７】
そこで昨今ソフトウェアの不正使用防止方法には様々なものが提案されている。その具体例として、特許文献１、特許文献２および特許文献３などに記載のソフトウェアプロテクト方法が挙げられる。例えば特許文献１では、入力装置であるキーボードからキーワードを入力し、正当なキーコードと判断されれば、ソフトウェアを使用可能となる。
【特許文献１】特開平７−２１９７６１号公報
【特許文献２】特開２００２−２５８９６３号公報
【特許文献３】特開２００４−１７１５００号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかし、上記のような従来のソフトウェアのプロテクト方法では入力装置の存在およびその入力装置からパスワードなどが入力可能なことが前提となっている。したがって、一般の家電製品や電子機器など、入力装置に様々な形態があるハードウェアや入力装置そのものを有しないハードウェアに使われる組込ソフトウェアには適用できない。
【０００９】
また、上記のようなソフトウェアのプロテクト方法では不正使用であると判明すると、ソフトウェアの機能を制限する、またはソフトウェアの使用そのものを禁止するなどの処置を行う。するとユーザには、ソフトウェアプロテクトが発動されていることが分かってしまうため、ソフトウェアの機能が制限された場面、もしくは動作しなくなった場面の直前にプロテクト用プログラムが存在することが推測されてしまう。つまり実行履歴を追っていけばプロテクト用プログラムの解析は比較的容易に行える。そしてユーザは時間をかければ、そのプログラムを無効化してしまうことが可能な場合もある。これでは完全に不正使用を防止することはできない。
【００１０】
本発明は以上のような従来技術の欠点を解消し、とりわけ、入力装置を有しない家電製品などのハードウェアに使われる組込ソフトウェアの不正使用を防止し、しかもプロテクトの存在そのものを隠蔽して、プロテクトの無効化に対抗するソフトウェア使用制限方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明によるソフトウェア使用制限方法は課題を解決するために、ソフトウェアを所定のハードウェアで実行する前に、所定のハードウェアが特定の種類のハードウェアに固有の構成を有するか否かを確認する工程と、所定のハードウェアが固有の構成を有することが確認された場合のみソフトウェアを所定のハードウェアで実行する工程とを有し、これによって、ソフトウェアを特定の種類のハードウェアでしか正常に実行させないことを特徴とする。
【発明の効果】
【００１２】
本発明によれば、ソフトウェアの不正使用が判明した場合でも、ソフトウェアは実行される。すなわち、不正使用であるか否かの認証処理の存在が隠蔽されているため、使用制限措置が行われていることに不正使用者は気づきにくい。また使用制限措置が行われた場合は、不正コピーされたソフトウェアは本来の機能を発揮できないため、不正使用を行った者に、ソフトウェア自体に欠陥（バグ）があると誤認させる効果が期待できる。
【００１３】
さらに本発明では、ユーザが何らハードウェアの操作を行わなくとも、組込ソフトウェアの実行に先立って、自動的に不正使用であるか否かの認証処理が行なわれる。したがって、入力装置を有しない家電製品等のハードウェアの組込ソフトウェアについても、不正使用が防止できる。
【発明を実施するための最良の形態】
【００１４】
次に添付図面を参照して本発明による組込ソフトウェアを不正使用から保護する方法の実施例を詳細に説明する。
【００１５】
図１は本発明を適用するCPU(Central Processing Unit) 10とCPUの外部にある汎用メモリ29とを例示する構成図である。CPU 10は、例えばコンピュータや携帯電話機などのハードウェアに含まれる制御部である。ただし、本発明の特徴は、ユーザからの入力がなくとも組込ソフトウェア（ファームウェア）を実行するハードウェアにおいて、組込ソフトウェアの不正使用を防止することである。したがって、CPU 10は、ユーザが入力を行うための入力装置を有しない、家電製品などのハードウェアに内蔵されるものでもよい。CPU 10に含まれるプログラムメモリ20は組込ソフトウェア21とソフトウェアモジュール22とを有する。ソフトウェアモジュール22は認証処理プログラム23および不正処理プログラム24を有し、信号線26から送られてくる信号に従って、組込ソフトウェア21・認証処理プログラム23・不正処理プログラム24を信号線28に送信する。
【００１６】
汎用メモリ29は信号線30より送られてくる任意の情報を保管しておく記憶装置である。
【００１７】
CPUコア31はCPU 10に含まれ、アドレス生成器32とデコーダ34とを含む。アドレス生成器32は信号線36、外部バス・インターフェイス38および信号線30を介して汎用メモリ42に格納されている命令を取り出し、その命令を信号線44、外部バス・インターフェイス38および信号線46とを介してデコーダ34に送ることができる。また、同様にアドレス生成器32は信号線26を介してプログラムメモリ20から命令を取り出し信号線28を介してデコーダ34に送ることもできる。さらにアドレス生成器32はデコーダ34から信号線48を介してアドレスを受け取り、プログラムメモリ20または汎用メモリ24からそのアドレスの場所にある命令を取り出すこともできる。
【００１８】
デコーダ34はアドレス生成器32が取り出してきた命令を信号線28、または信号線46から受け取り、解釈する。解釈した命令が別のアドレスを示す内容であれば、デコーダ34は信号線48を介してアドレス生成器32にそのアドレスを送る。解釈した命令が演算であれば、信号線50を介して演算器52にその内容を送る。
【００１９】
データ・パス51はCPU 10に含まれ、演算器52、固有レジスタ54および汎用レジスタ56を含む。演算器52は信号線50より送られた演算内容にそって演算を行う。固有レジスタ54および汎用レジスタ56はいずれも演算器52が演算した途中の結果を保存する記憶装置である。したがって、演算器52は演算を行うとき、計算の途中の結果を信号線58と信号線60とを介して固有レジスタ54および汎用レジスタ56に送り保存しておくことができる。また、両レジスタ54，56の保存内容を信号線62と信号線64とを介して演算器52に送ることもできる。さらに両レジスタ54，56の内容は信号線66と信号線68とを介して汎用メモリに転送可能であり、汎用メモリの内容を信号線66と信号線68とを介して両レジスタ54，56に転送することもできる。
【００２０】
図１に示す固有レジスタ54はCPU 10に固有のものであり、CPU 10を製造したメーカ以外の者が製造したCPUには固有レジスタ54は存在しない。したがって、固有レジスタ54が存在することによって、CPU 10は他の種類のCPUと識別可能である。なお、CPU 10を他の種類のCPUと識別するための特徴は固有レジスタ54には限られない。他のCPUと異なる固有の構成であれば、どのようなものでもよい。
【００２１】
図２は本発明を適用するCPUとCPUの外部にある汎用メモリ29とを例示する他の構成図であり、図１から固有レジスタ54を除いたものである。図１と図２との違いはその点のみで、他の構成は図１と同様である。固有レジスタ54がないため、図２のCPU 12は図１のCPU 10とは種類が異なる。本発明の目的は、後述するように、図１のCPU 10では組込ソフトウェア21を実行可能とするが、図２のCPU 12では組込ソフトウェア21を事実上実行不能にすることである。
【００２２】
図３は図１の変形例であり、プログラムメモリ20がCPU 10の外部にある場合を示す。この場合において、アドレス生成器32がプログラムメモリ20から命令を取り出すときは、外部バス・インターフェイス38と信号線70とを介してプログラムメモリ20から命令を取り出し、信号線72に送る。
【００２３】
図４は図１に示すソフトウェアモジュール22が行う、本発明によるソフトウェア使用制限方法を示すフローチャートである。図１には図示していないが、図１のCPU 10に入力装置が接続されている場合、入力装置から組込ソフトウェア21を実行させる命令が入力されると、アドレス生成器32は汎用メモリ29から組込ソフトウェア21を実行させる命令を取り出し、デコーダ34に送る。また、入力装置の有無に関わらず、図１に記載のCPU 10および汎用メモリ29を有するハードウェアが組込ソフトウェア21の機能を必要としたとき、自動的にアドレス生成器32は汎用メモリ29から組込ソフトウェア21を実行させる命令を取り出し、デコーダ34に送る。デコーダ34での解釈の結果が組込ソフト実行命令S20と判断されると、デコーダ34はその解釈した命令をアドレス生成器32に送る。アドレス生成器32はプログラムメモリ20内にあるソフトウェアモジュール22の認証処理プログラム23を取り出してデコーダ34に送り、認証処理80内の認証判断S22に進む。デコーダ34は認証処理プログラム23を解釈して演算器53に解釈した命令を送り、演算器53はその命令に則して演算を開始し、その演算の際に固有レジスタ54、汎用レジスタ56および汎用メモリ29を使用する。その演算には、例えば任意の数字を固有レジスタ54に保存する演算を含む。その保存された内容を汎用メモリ29にコピーし、アドレス生成器32は汎用メモリ29にコピーされた内容を確認する。上記任意の数字が正しく汎用メモリ29に記録されていれば、固有レジスタ54の存在が確認できる。なお、認証判断S22で行う処理は、このような固有レジスタ54の有無を確認する処理であればどのようなものでもよく、他の方法によって固有レジスタ54の存在を確認してもよい。
【００２４】
固有レジスタ54があると判断した場合は、組込ソフト実行S24に進む。アドレス生成器32は汎用メモリ29から組込ソフトウェア21を実行させる命令を取り出し、その命令をデコーダ34が解釈し、アドレス生成器32に送る。アドレス生成器32はプログラムメモリ20にある組込ソフトウェア21を取り出してデコーダ34に送り、組込ソフトウェア21を実行させる。
【００２５】
固有レジスタ54がないと判断した場合は、認証処理80内の使用制限措置S26に進む。この措置S26では、アドレス生成器32は汎用メモリ29から不正処理プログラム24を実行させる命令を取り出し、その命令をデコーダ34が解釈し、アドレス生成器32に送る。アドレス生成器32はプログラムメモリ20のソフトウェアモジュール22から不正処理プログラム24を取り出し、デコーダ34に送り、不正処理プログラム24を実行させる。不正処理プログラム24は組込ソフトウェア21が実行されたとき不具合を起こさせるようなプログラム、もしくは組込ソフトウェア21が実行されたとき処理速度を低下させるプログラムである。この不正処理プログラム24はソフトウェアモジュール22の実行の間に織り交ぜてある。不正処理プログラム24はソフトウェアモジュール22の実行中に実行され、前述のような不具合を起こさせるもしくは処理速度を低下させるといったペナルティを課す。このように、不正処理プログラム24が実行される使用制限措置S26は図４に示すとおり、組込ソフト21の実行S24の前工程として行えばよい。
【００２６】
一方、図４の使用制限措置S26は、組込ソフト21の実行S24に織り交ぜる方法で実行してもよい。すなわち、不正処理プログラム24が課すペナルティとして、固有レジスタを有するCPU 10が組込ソフト21の実行に要する時間より長い時間をかけて、組込ソフト21をCPU 12で実行する、という方法があるが、これは具体的には、組込ソフト21の実行S24中に、遅延時間を織り交ぜればよい。ユーザは、長い時間がかかるものの組込ソフト21は実行されるため、使用制限措置S26がなされていることに気付きにくい。しかも組込ソフト21の実行には無意味に長い時間がかかるため、組込ソフト21を実質的に使用不能にすることができる。
【００２７】
また不正処理プログラム24は、例えば、組込ソフトウェア21の実行S24中に、組込ソフト21以外の動作をさせてもよい。ユーザは、組込ソフト21が実行されるものの、時折、組込ソフト21とは全く関係のない動作が行なわれるため、使用制限措置S26が行なわれているとは気付かず、組込ソフト21自体にバグがあるものと誤認することが期待される。仮にユーザが使用制限措置S26が実行されていることに気付いたとしても、組込ソフト21そのものは実行され、実行中に無限ループに陥ったり異常終了したりすることがないため、不正処理プログラム24の所在を明らかにしてそれを無効化させることは困難である。
【００２８】
このようなペナルティとして課されるプログラムを有するソフトウェアモジュール22はバイナリー形式、もしくはライブラリ形式と呼ばれるもので配布される。これらは機械語と呼ばれる数字の羅列であり、一般のプログラム開発に用いられるC言語やフォートランなどの高級言語と違って可読性が非常に悪い。このため、ペナルティを課している箇所を特定しにくくする。そして、使用制限措置S26のあとはいかなる場合でも必ず組込ソフト実行S24に進む。そして、前述の組込ソフト実行S24と同様の動作を行う。しかし、組込ソフトウェア21が実行されても不正処理プログラム24が同時に実行されているため、不具合の様な動作や速度低下が起こり、実質的に使い物にならない。また、ペナルティが課されたことがユーザに分かったとしても、ペナルティが課されたあとは必ず組込ソフト実行S24に進むため、プログラムが途中で止まることはない。このため、ペナルティが課されたプログラムのプロテクトを破るには可読性の悪いプログラムをすべて確認しなければならない。プロテクト破りに費やす時間と、それで得られるプログラムの価値とのトレードオフを考えれば、その行為は無駄であると考えられる。
【００２９】
一方、図５に記載の従来の不正使用防止方法では、組込ソフト実行命令S28が出たあと、認証処理82内の認証判断S30が行われ、組込ソフトウェアを実行してもよい判断が下されれば組込ソフト実行S32となる。しかし、認証判断によって組込ソフトウェアを実行させてはならないとの判断が下された場合、認証処理82内の使用禁止措置S34として同じ処理を無限に繰り返す、またはシステムを暴走させるなどの処理を実行し、いかなる場合でも組込ソフトウェアが実行されることはない。したがって、使用禁止措置S34が実行されている箇所を、プログラムの中から特定しやすく、プロテクト破りしやすいという欠点がある。
【００３０】
図６および図７は本発明の他の実施例であり、図７に示す認証側PC（Personal Computer） 100内のUSB通信モジュール101から被認証側PC 102にUSB（Universal Serial Bus）ケーブル104を介して組込ソフトウェア21を送るときの例である。すなわち本実施例では被認証側PC 102で組込ソフトウェア21を使用可能か否かが認証される。図６に示すPCからのコマンド受信S50において、認証側PC 100は被認証側PC 102から組込ソフトウェア21の送信命令をUSBケーブル104を介して受信する。その命令を受信した認証側PC 100は、即座に組込ソフトウェア21を送ることはせずに、まず認証処理プログラム23および不正処理プログラム24の送信S52をする。被認証側PC 102は両プログラム23・24を受信し、認証処理プログラム23を実行させ、被認証側PC 102内で図１の実施例と同様の方法で認証処理84内で認証判断S54を行い、被認証側PC 102が有するCPU 103が特定のCPUか否かを判断する。
【００３１】
被認証側PC 102が有するCPU 103が特定のCPUと判断されたとき、被認証側PC 102は認証側PC 100にその結果を送信し、認証側PC 100は組込ソフトウェア21の送信S56を開始する。
【００３２】
被認証側PC 102が有するCPU 103が特定のCPUではないと判断されたとき、被認証側PC 102は使用制限措置S58で不正処理プログラム24を実行し、その結果を認証側PC 100に送信し、認証側PC 100は組込ソフトウェア21の送信S56を行う。しかし、被認証側PC 102では不正処理プログラム24が実行されているため、通常の転送速度より極端に遅い転送速度で転送される。
【００３３】
以上のように構成された本実施例の動作について、以下説明する。まず図１に示すCPU 10の内部にプログラムメモリ20がある動作を説明する。図１には図示していないが、図１のCPU 10に入力装置が接続している場合、組込ソフトウェアを実行するには、入力装置から組込ソフトウェア21を実行させる命令が入力されると、アドレス生成器32は汎用メモリ29から組込ソフトウェア21を実行させる命令を取り出し、デコーダ34に送ればよい。また、入力装置の有無に関わらず、図１に記載のCPU 10および汎用メモリ29を有するハードウェアが組込ソフトウェア21の機能を必要としたとき、自動的にアドレス生成器32は汎用メモリ29から組込ソフトウェア21を実行させる命令を取り出し、デコーダ34に送ることによって組込ソフトウェア21を実行してもよい。デコーダ34での解釈の結果が組込ソフト実行命令S20であると判断されると、デコーダ34はその解釈した命令をアドレス生成器32に送る。アドレス生成器32はプログラムメモリ20内にあるソフトウェアモジュール22の認証処理プログラム23を取り出してデコーダ34に送り、認証処理82内の認証判断S22を行う。デコーダ34は認証処理プログラム23を解釈して演算器53に解釈した命令を送り、演算器53はその命令に則して演算を開始し、その演算の際に固有レジスタ54、汎用レジスタ56および汎用メモリ29を使用する。その演算には、例えば任意の数字を固有レジスタ54に保存する演算を含む。その保存された内容を汎用メモリ29にコピーし、アドレス生成器32は汎用メモリ29にコピーされた内容を確認する。上記任意の数字が正しく汎用メモリ29に記録されていれば、固有レジスタ54の存在が確認できる。
【００３４】
固有レジスタ54があると判断した場合は、組込ソフトウェア21は不正にコピーされたものでないと分かるため、組込ソフト実行S24をする。アドレス生成器32は汎用メモリ29から組込ソフトウェア21を実行させる命令を取り出し、その命令をデコーダ34が解釈し、アドレス生成器32に送る。アドレス生成器32はプログラムメモリ20にある組込ソフトウェア21を取り出してデコーダ34に送り、組込ソフトウェア21を実行させる。
【００３５】
固有レジスタ54がないと判断した場合は、組込ソフトウェア21は不正にコピーされたものであると分かるため、認証処理80内の使用制限措置S26をする。アドレス生成器32は汎用メモリ29から不正処理プログラム24を実行させる命令を取り出し、その命令をデコーダ34が解釈し、アドレス生成器32に送る。アドレス生成器32はプログラムメモリ20のソフトウェアモジュール22から不正処理プログラム24を取り出し、デコーダ34に送り、不正処理プログラム24を実行させる。これにより組込ソフトウェア21が実行されたとき不具合を起こさせ、もしくは処理速度を低下させる。そして、使用制限措置S26のあとはいかなる場合でも必ず組込ソフト実行S24に進む。そして、前述の組込ソフト実行S24と同様の動作を行う。しかし、組込ソフトウェア21が実行されても不正処理プログラムが同時に実行されているため、本来の機能が存分に発揮されることはない。
【００３６】
図３のようにプログラムメモリ20がCPU 10の外部にある実施例の動作も図１と同様である。ただし、アドレス生成器32がプログラムメモリ20から命令を取り出し、その命令をデコーダ34に送る場合には外部バス・インターフェイス38を経由しなければならない。
【００３７】
次に図６および図７に示す本発明をUSB通信へ応用した実施例の動作について説明する。認証側PC 100は被認証側PC 102から組込ソフトウェア21の送信命令をUSBケーブル104を介して受信する。その命令を受信した認証側PC 100は、即座に組込ソフトウェア21を送ることはせずに、まず認証処理プログラム23および不正処理プログラム24の送信S52をする。被認証側PC 102は両プログラム23・24を受信し、認証処理プログラム23を実行させ、被認証側PC 102内で前記図１の動作の場合と同様に認証処理84内で認証判断S54を行い、被認証側PC 102が有するCPU 103が特定のCPUか否かを判断する。
【００３８】
被認証側PC 102が有するCPU 103が特定のCPUと判断されると、組込ソフトウェアの不正使用でないと分かるため、被認証側PC 102は認証側PC 100にその結果を送信し、認証側PC 100は組込ソフトウェア21の送信S56を開始する。
【００３９】
被認証側PC 102が有するCPU 103が特定のCPUではないと判断されると、不正使用と分かるため、被認証側PC 102は使用制限措置S58で不正処理プログラム24を実行し、その結果を認証側PC 100に送信し、認証側PC 100は組込ソフトウェア21の送信S56を行う。しかし、被認証側PC 102では不正処理プログラム24が実行されているため、通常の転送速度より極端に遅い転送速度で転送される。これによって、被認証側PC 102でのソフトウェア21の使用は事実上不能になる。
【図面の簡単な説明】
【００４０】
【図１】本発明を適用するCPUとCPUの外部にある汎用メモリとを含む実施例を示す構成図である。
【図２】本発明を適用するCPUとCPUの外部にある汎用メモリとを例示する他の実施例の構成図であり、図１から固有レジスタを除いたものである。
【図３】図１の変形例を示す図であり、プログラムメモリがCPUの外部にある実施例を示す。
【図４】図１に示すソフトウェアモジュールが行う、本発明の不正使用保護方法の例を示すフローチャートである。
【図５】従来の不正使用保護方法を示すフローチャートである。
【図６】図７に示す応用例のフローを示した図である。
【図７】本発明の応用であり、認証側PC内のUSB通信モジュールから被認証側PCにUSBケーブルを介して組込ソフトウェアを送るときの例で、その構成を示した図である。
【符号の説明】
【００４１】
10、12  CPU
21  組込ソフトウェア
23  認証処理プログラム
24  不正処理プログラム
29  汎用メモリ
32  アドレス生成器
33  デコーダ
52  演算器
54  固有レジスタ
【図１】
2006099411.tif 000003
【図２】
2006099411.tif 000004
【図３】
2006099411.tif 000005
【図４】
2006099411.tif 000006
【図５】
2006099411.tif 000007
【図６】
2006099411.tif 000008
【図７】
2006099411.tif 000009