(57)【特許請求の範囲】
【請求項１】
複数の機能部分のうちの少なくとも一の機能部分が暗号化されたプログラムに対し、当該暗号化された少なくとも一の機能部分は実行形式に変換されず、暗号化されていない機能部分が実行形式に変換される、当該プログラムの実行形式ファイル化を可能とする実行形式ファイル化可能化処理であって、前記暗号化された少なくとも一の機能部分につき、形式的な演算を行う機能を有するコード及び当該機能部分をコメントとして認識させる機能を有するコードを挿入する実行形式ファイル化可能化処理を施す実行形式ファイル化可能化部、及び
前記実行形式ファイル化可能化処理が施されたプログラムに対し、前記暗号化された少なくとも一の機能部分の復号に際し、前記実行形式ファイル化可能化処理において挿入された前記形式的な演算を行う機能を有するコード及び当該機能部分をコメントとして認識させる機能を有するコードを除去して前記実行形式ファイル化可能化処理による影響を除去する処理を施す除去処理部を有するプログラム処理装置。
【請求項２】
実行形式ファイル化可能化部が、複数の機能部分のうちの少なくとも一の機能部分が暗号化されたプログラムに対し、当該暗号化された少なくとも一の機能部分は実行形式に変換されず、暗号化されていない機能部分が実行形式に変換される、当該プログラムの実行形式ファイル化を可能とする実行形式ファイル化可能化処理であって、前記暗号化された少なくとも一の機能部分につき、形式的な演算を行う機能を有するコード及び当該機能部分をコメントとして認識させる機能を有するコードを挿入する実行形式ファイル化可能化処理を施す段階、及び
除去処理部が、前記実行形式ファイル化可能化処理が施されたプログラムに対し、前記暗号化された少なくとも一の機能部分の復号に際し、前記実行形式ファイル化可能化処理において挿入された前記形式的な演算を行う機能を有するコード及び当該機能部分をコメントとして認識させる機能を有するコードを除去して前記実行形式ファイル化可能化処理による影響を除去する処理を施す段階を有するプログラム処理方法。
【請求項３】
暗号化部が、複数の機能部分を含むプログラムにつき、前記複数の機能部分のうちの少なくとも一の機能部分を暗号化する段階と、
実行形式ファイル化可能化部が、前記複数の機能部分のうちの少なくとも一の機能部分が暗号化されたプログラムに対し、前記暗号化された少なくとも一の機能部分は実行形式に変換されず、暗号化されていない機能部分が実行形式に変換される、当該プログラムの実行形式ファイル化を可能とする実行形式ファイル化可能化処理であって、前記暗号化された少なくとも一の機能部分につき、形式的な演算を行う機能を有するコード及び当該機能部分をコメントとして認識させる機能を有するコードを挿入する実行形式ファイル化可能化処理を施す段階とを有するプログラム処理方法。
【請求項４】
複数の機能部分のうちの少なくとも一の機能部分が暗号化されたプログラムに対し、前記暗号化された少なくとも一の機能部分は実行形式に変換されず、暗号化されていない機能部分が実行形式に変換される、当該プログラムの実行形式ファイル化を可能とする実行形式ファイル化可能化処理であって、前記暗号化された少なくとも一の機能部分につき、形式的な演算を行う機能を有するコード及び当該機能部分をコメントとして認識させる機能を有するコードを挿入する実行形式ファイル化可能化処理を施す手段、及び
前記実行形式ファイル化可能化処理が施されたプログラムに対し、前記暗号化された少なくとも一の機能部分の復号に際し、前記実行形式ファイル化可能化処理において挿入された前記形式的な演算を行う機能を有するコード及び当該機能部分をコメントとして認識させる機能を有するコードを除去して前記実行形式ファイル化可能化処理による影響を除去する処理を施す手段としてコンピュータを動作させる命令を有するプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム処理装置、プログラム処理方法及びプログラムに係り、特にプログラム製品を提供する際の処理に係るプログラム処理装置、プログラム処理方法及びプログラムに関する。
【背景技術】
【０００２】
ソフトウエアプログラム（以下単に「プログラム」と称する）の提供方式として、実行形式のファイルを提供し、そのファイルの実行を許可するための特別な番号（キーコード）により当該実行形式のファイルを実行装置に実装（インストール）することを可能とする方式がある。
【０００３】
このような方式において、近年のプログラムの機能の拡大に伴い、プログラム製品の提供を受けるユーザ毎に、当該プログラムによって提供する機能を管理する必要性が生じている。
【０００４】
このような場合、ユーザ毎に、所望の機能部分の集合としてのソースプログラムを作成し、これを実行形式のファイル（所謂オブジェクトプログラムのファイルであり、以下単に「実行形式ファイル」と称する）に変換（コンパイル）して提供する。そしてこのようにして提供されたプログラムにつき、提供先の複数のユーザ毎に、その後に発生し得るプログラム更新等に関する管理を行う。
【０００５】
またプログラム製品の提供後にユーザから機能追加の要求等が生じた場合、対応する新たなソースプログラムファイルを作成し、これを上記同様実行形式に変換して提供する。
【特許文献１】特開２００３−２８０７５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
このようなプログラム製品の提供に係るシステムでは、複数のユーザ毎に、提供対象としての異なる機能仕様のプログラムを個々に管理する必要があり、管理が煩雑となる可能性がある。
【０００７】
またユーザからの機能追加の要求等に応じ、その都度当該機能に対応する部分を追加したソースプログラムを作成してこれを実行形式に変換した上でユーザに提供し直す場合、余分な手間を要する。
【０００８】
このような問題点を解決するため予め全ての機能部分を含む一のソースプログラムを作成しておく方法が考えられる。この場合、各ユーザ毎に、所望機能部分以外の部分を暗号化して提供する。しかしながらこの方法の場合、暗号化部分された部分を含んだ状態のソースプログラムは、これを実行形式ファイルに変換する際に当該暗号化部分によりエラーを生ずるため、実行形式ファイルに変換することが困難となることが考えられる。
【０００９】
本発明はこのような問題点に鑑みてなされたものであり、異なる機能を所望する複数のユーザに対して提供するプログラムの管理の一元化を可能とし、かつ新たに機能追加の要求等が生じた場合であっても、その都度対応するソースプログラムを作成することを要しないようなプログラム提供システムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明によれば、少なくとも一部分が暗号化されたプログラムに対し、当該暗号化部分が暗号化された状態で当該プログラムを実行形式ファイル化可能とするための所定の実行形式ファイル化可能化処理を施す構成、或いは少なくとも一部分が暗号化された後に当該暗号化部分が暗号化された状態で当該プログラムを実行形式ファイル化可能とするための所定の実行形式ファイル化可能化処理が施されたプログラム製品に対して当該暗号化部分の復号に際し前記所定の処理による影響を除去するための所定の除去処理を施す構成を設けた。
【００１１】
このように本発明ではプログラム製品の提供時、暗号化部分を含んだ状態での実行形式ファイル化を可能にするための処理を予め行っておく。このような方式を適用することにより、プログラム提供者は予め全ての機能を含んだ一のソースプログラムを作成しておけばよい。そして各ユーザにプログラム製品を提供する際には、上記一のソースプログラム中、当該ユーザが所望する機能に関する部分以外の部分を暗号化する。そしてその後、上記実行形式ファイル化可能化処理を行った上でユーザに対してプログラム製品を提供する。
【００１２】
ユーザはこのように所望の機能部分以外の部分が暗号化され後更に実行形式ファイル化可能化処理が施されたソースプログラムの提供を受ける。このように実行形式ファイル化可能化処理が施されているため、ユーザは所望の機能部分以外の部分が暗号化された状態で当該提供に係るソースプログラムを実行形式ファイルに変換することが可能となる。
【００１３】
その結果ユーザはこのように実行形式に変換されて得られたオブジェクトプログラムを自己の情報処理装置、例えばパーソナルコンピュータ等にインストールして実行することができるようになる。そして当該オブジェクトプログラムに含まれている、当該所望の機能部分の実行が可能となる。
【００１４】
この場合当該オブジェクトプログラムの当該所望の機能部分以外の部分については上記の如くユーザに提供される前に暗号化されているため、当該ユーザはこれを実行することができない。
【００１５】
またユーザから更に他の機能も使用したい旨の要求がなされることが考えられる。そのような場合、プログラム提供者は当該ユーザに対し、当該他の機能部分を復号するための復号化キーを提供する。これを受けたユーザは当該復号化キーを使用して前記当初の提供に係るプログラムに含まれる当該他の機能部分を復号することができる。その結果、当該ユーザは当該他の機能部分についても実行が可能となる。
【発明の効果】
【００１６】
本発明によれば上記の如くプログラム提供者は予め全ての機能部分を含む一のソースプログラムを作成しておく。そして異なる機能部分に対する要求を有する複数のユーザに対し、該当する機能部分以外の部分を暗号化した上で実行形式ファイル化可能化処理を行って当該ソースプログラムを提供する。
【００１７】
その結果プログラム提供者は、複数のユーザからの異なる機能部分に対する要求に応じて対応する異なる機能のみを有する複数のプログラムをそれぞれ提供して個別に管理する必要がなくなる。
【００１８】
すなわちプログラム提供者は複数のユーザからの異なる機能部分に対する要求に対しても、上記全ての機能部分を含む一のソースプログラムを提供すればよい。但しその際、上記の如く所望の機能部分以外の部分を予め暗号化した上で実行形式ファイル化可能化処理を行っておく。その結果各ユーザは所望の機能部分のみ実行可能となり、その意味では各ユーザ毎に所望の機能部分のみを含むプログラムを個別に提供する場合と同様の効果が得られる。
【００１９】
またプログラム提供者は、複数のユーザによる異なる機能部分に対する要求に対し、全ての機能部分を含む一のソースプログラムを提供して管理する。したがってプログラム提供者におけるプログラム作成及びその後の管理に要する手間が効果的に削減可能となる。
【図面の簡単な説明】
【００２０】
【図１】参考例によるプログラム処理システムを説明するための図（その１）である。
【図２】図１に示す参考例によるプログラム処理システムを説明するための図（その２）である。
【図３】本発明の実施例によるプログラム処理システムを説明するための図（その１）である。
【図４】図３の実施例によるプログラム処理システムを説明するための図（その２）である。
【図５】本発明の実施例によるプログラム処理システムにおける暗号化処理の処理フローチャートである。
【図６】図５の実施例によるプログラム処理システムにおける復号化処理の処理フローチャートである。
【図７】プログラム処理システムを実施可能なコンピュータの一例を示すブロック図である。
【符号の説明】
【００２１】
１０  暗号化前のソースプログラム
１１  復号化後のソースプログラム
２０  暗号化後のソースプログラム
１００  プログラム暗号化システム
２００  プログラム復号化システム
【発明を実施するための形態】
【００２２】
本発明の実施の形態によれば、プログラム提供方式において、ユーザは機能単位に暗号化されたソースプログラムを受取り、必要となる機能に関する復号化キーを入手し、その部分のみの復号化を行うことが可能となる。その結果、その機能が使用可能な状態で含まれたソースプログラムを得ることができる。
【００２３】
このようなシステムによれば、プログラム提供者はユーザごとにソースプログラムを管理する必要がなくなり、ソースプログラムの一元管理が可能となり、ファイルの管理環境の簡便化が可能となる。
【００２４】
本発明の実施の形態によるプログラム暗号化システムは、暗号化されていないソースプログラムを、機能単位に暗号化したソースプログラムに変換する機能を有する。
【００２５】
またこのプログラム暗号化システムは、このように機能単位に暗号化されたソースプログラムを、実行形式ファイルに変換時にエラーが発生しないよう、予め所定の実行形式ファイル作成制御コードを機能単位に埋め込む機能を有する。
【００２６】
このシステムによれば、このようにしてユーザに対して提供された暗号化ソースプログラムが仮に第三者の手に渡った場合であっても、当該第三者は所定の復号化キーを手に入れない限り暗号化部分の復号化はできない。したがって当該第三者が該当する機能を利用することはできない。
【００２７】
このように本発明の実施の形態によれば、ユーザ毎に個別にプログラムを作成してこれを管理する方式に代えて、全てのユーザに対し一つのプログラムを提供するように方式を提供する。
【００２８】
この場合ユーザに対して提供されるのは全機能を実装したソースプログラムであり、そのソースプログラムをユーザ環境で実行形式ファイル化することにより、ユーザによる当該機能の実行が可能となる。
【００２９】
上記プログラム暗号化システムはユーザ毎に実行可能な機能を制限する機能を有する。
【００３０】
このプログラム暗号化システムによれば、全機能搭載のプログラムが、その各機能部分毎に異なった暗号化キーにより暗号化されるようになる。
【００３１】
またこのようにして得られた各暗号化部分には、当該暗号化部分を含むソースプログラムの実行形式ファイルへの変換時にエラーを生じないよう、予め所定の制御文字列（上記所定の実行形式ファイル作成制御コード）が自動的に埋め込まれる。
【００３２】
その結果ユーザはこのように機能単位に暗号化されたソースプログラムを受取る。そして必要な機能部分について、上記暗号化キーに対応する復号化キーを入手することにより、その部分のみについて復号化を行うことが可能となる。その結果、当該機能部分が実行可能な状態で含まれたソースプログラムを得ることができる。そしてこのソースプログラムを実行形式ファイルに変換することにより、ユーザは該当機能を使うことが可能となる。
【００３３】
以下図と共に参考例に係るプログラム提供システムにつき、図１，図２とともに説明する。
【００３４】
図１は参考例に係る、暗号化されたソースプログラムを提供する方式について説明するための図である。
【００３５】
この方式では最初にソースプログラム１０の中に機能Ａ，Ｂ，Ｃにそれぞれ対応した機能部分１０Ａ，１０Ｂ，１０Ｃを作り込む。
【００３６】
そしてこれをプログラム暗号化システム１００にて暗号化する。
【００３７】
具体的にはソースプログラム１０の機能単位、すなわち機能部分１０Ａ，１０Ｂ，１０Ｃ毎に暗号化を行い、各々に該当する復号化キー３０Ａ，３０Ｂ，３０Ｃよりなる復号化キー情報３０を生成する。
【００３８】
このように３種類の機能部分１０Ａ，１０Ｂ，１０Ｃを含むソースプログラムを入力した場合に当該プログラム暗号化システム１００によって生成されるのは、対応する３種類の復号化キー３０Ａ，３０Ｂ，３０Ｃと、機能部分毎に異なる３種類の暗号化によって得られた、暗号化されたソースプログラムの機能部分２０Ａ，２０Ｂ及び２０Ｃとを含む、ユーザ提供用のソースプログラム２０である。
【００３９】
又図１に示す如く、当該暗号化後のソースプログラム２０には上記暗号化された機能部分２０Ａ，２０Ｂ及び２０Ｃ以外に、各機能部分毎に、実行ファイル作成制御コード２５Ａ，２５Ｂ及び２５Ｃが埋め込まれている。これらの実行ファイル作成制御コード２５Ａ，２５Ｂは上記実行形式ファイル作成時にエラーを生じないように埋め込まれる制御文字列に該当するものである。
【００４０】
次に図２とともに、図１とともに上述した如くにプログラム暗号化システム１００の機能によって暗号化されたソースプログラム２０を受領したユーザが実際にこれを利用する際の処理について説明する。
【００４１】
まずユーザは、ソースプログラム提供者に対し、必要機能部分に係る復号化キー情報を要求する。
【００４２】
ここでは一例として、ユーザが機能Ａに係る機能部分２０Ａを所望しているとする。この場合、該当する復号化キー情報３０Ａをプログラム提供者に対し要求する。
【００４３】
その結果ユーザが当該復号化キー情報３０Ａを受領した場合、当該復号化キー情報３０Ａとともに、上記暗号化されたソースプログラム２０をプログラム復号化システム２００に入力する。
【００４４】
その結果プログラム復号化システム２００では、該当する機能部分２０Ａのみを復号化する。その結果、当該機能部分２０Ａ及び対応する実行形式ファイル作成制御コード２５Ａ以外の部分、すなわち暗号化された機能部分２０Ｂ及び２０Ｃ並びにそれぞれに対応する実行形式ファイル作成制御コード２５Ｂ及び２０Ｃはそのままの状態の、復号化処理後のソースプログラム１１が得られる。
【００４５】
次にユーザは同ソースプログラム１１を実行形式ファイルに変換する。その結果当該復号化された機能部分１０Ａの実行が可能となり、該当する機能Ａを得ることができる。
【００４６】
以下図３乃至６とともに、本発明の実施例に係るプログラム提供システムにつき説明する。
【００４７】
図３はプログラム提供者がユーザに提供するためのソースプログラムを暗号化する処理を説明するための図である。
【００４８】
暗号化前のソースプログラム１０は、異なる機能を提供する３個の機能部分１０Ａ，１０Ｂ，１０Ｃよりなる。
【００４９】
ここで各機能部分１０Ａ，１０Ｂ，１０Ｃによる機能Ａ、Ｂ，Ｃは、それぞれ図示の如く、整数ａ、ｂ、ｃの入力を受け、その加算演算結果ｄ＝ａ＋ｂ＋ｃを出力（機能Ａ）、減算演算結果ｄ＝ａ−ｂ−ｃを出力（機能Ｂ）、及び乗算演算結果ｄ＝ａ＊ｂ＊ｃを出力（機能Ｃ）するものである。
【００５０】
なおこの実施例では暗号化するべき機能部分は上記３個の機能部分１０Ａ，１０Ｂ，１０Ｃのうち、機能部分１０Ｂを除いた他の機能部分１０Ａ，１０Ｃである。
【００５１】
暗号化は暗号化キーとしてのキー情報４０を用いてなされる。当該キー情報４０は、暗号化する機能部分１０Ａ，１０Ｃの各々に対し、異なる態様にて暗号化を行うための情報を含むものとされる。
【００５２】
これら機能部分１０Ａ，１０Ｃそれぞれの暗号化を行うための情報は、キー識別情報Ｋｅｙ−ｘｘｘ１及びＫｅｙ−ｘｘｘ２によってそれぞれ識別される。そして後述する図４に示される復号化キー情報７０も、これに対応して暗号化する機能部分１０Ａ，１０Ｃ毎に異なる内容の復号化キー情報を含むものとされる。その結果この復号化キー情報７０のうち、機能部分１０Ａに係る復号化キー情報（Ｋｅｙ−ｘｘｘ１）によっては機能部分１０Ａに係る復号化は可能だが、機能部分１０Ｃについては復号化ができない。同様に機能部分１０Ｃに係る復号化キー情報（Ｋｅｙ−ｘｘｘ１）によっては機能部分１０Ｃに係る復号化は可能だが、機能部分１０Ａについては復号化ができない。したがってユーザに対する情報開示の範囲を必要最小限度の範囲に留めることが可能となる。
【００５３】
これら暗号化前のソースプログラム１０とキー情報４０とに対して暗号化・キー生成処理５０がなされ、暗号化後のソースプログラム２０が得られる。
【００５４】
図示の如く、当該暗号化後のソースプログラ２０は、上記暗号化前のソースプログラム１０に含まれていた機能部分１０Ｂ；同じく上記暗号化前のソースプログラム１０に含まれていた機能部分１０Ａ，１０Ｃがそれぞれ該当するキー情報４０の部分（Ｋｅｙ−ｘｘｘ１、Ｋｅｙ−ｘｘｘ２）により暗号化された暗号化機能部分２０Ａ―２，２０Ｃ―２；それら暗号化機能部分２０Ａ−２，２０Ｃ−２のそれぞれの暗号化に係るキー識別情報２０Ａ−１，２０Ｃ−１；上記暗号化機能部分２０Ａ−２，２０Ｃ−２及びキー識別情報２０Ａ−１，２０Ｃ−１を「コメント」として認識させるための記号部分２５Ａ−１，２５Ｃ−１；並びに上記各暗号化機能部分２０Ａ−２，２０Ｃ−２に係る機能Ａ，Ｃにそれぞれ対応する実行形式ファイル作成制御コード２５Ａ―１，２５Ｃ−１よりなる。
【００５５】
プログラム提供者はここで得られた、暗号化されたソースプログラム２０を、この状態でユーザに提供する。
【００５６】
ユーザは同暗号化されたソースプログラム２０を、その状態で実行形式ファイルへ変換することが可能である。
【００５７】
すなわち同暗号化されたソースプログラム２０には、上記の如く実行形式ファイル作成制御コード２５Ａ−１，２５Ｃ−１が付加されている。
【００５８】
これらはスタブ関数と称されるものであり、その形式上、暗号化前のソースプログラム１０の対応する機能部分１０Ａ，１０Ｃの、各々の１行目と同様とされている。その結果、当該暗号化後のソースプログラム２０は、形式上、暗号化前のソースプログラム１０と同様のものとなっている。
【００５９】
すなわち暗号化後のソースプログラム２０はこれらスタブ関数としての記号部分２５Ａ−１，２５Ｃ−１内に、暗号化前のソースプログラム１０の各機能部分１０Ａ，１０Ｃのそれぞれの一行目「int sub001(int a,int b,int c){」、「int sub003(int a,int b,int c){」に対応する部分「int sub001(int a,int b,int c){」、「int sub003(int a,int b,int c){」を有し、引き続き形式的な演算機能部分(return(0))を有する。このため、当該暗号化後のソースプログラム２０は暗号化前のソースプログラム１０同様、実行形式ファイルへの変換の際にエラーを生ずることなく、同変換の実施が可能となる。
【００６０】
しかしながらこの場合、機能部分１０Ａ，１０Ｃは暗号化された２０Ａ−１，２０Ｃ−１の状態であるため、実行形式ファイルへ変換後もこれらに対応する機能を実行させることはできない。したがって実施形式ファイルへ変換後は、暗号化前の機能部分１０Ａ，１０Ｃの代わりに、それぞれスタブ関数としての記号部分２５Ａ−１，２５Ｃ−１の機能により、各々、整数ａ、ｂ、ｃの入力を受けて０を出力する形式的な演算機能（return(0)）が実行される。
【００６１】
すなわち、上記の如くこれら機能部分１０Ａ，１０Ｃに対応する暗号化機能部分２０Ａ−２，２０Ｃ−２及び対応するキー識別情報２０Ａ−１，２０Ｃ−１は、これらをコメントとして認識させるための記号２５Ａ−２，２５Ｃ−２によってコメント化されている。その結果、これらは実行形式ファイルへの変換の際も、そのままコメントとして残される。このようにすることにより、実行形式ファイルへ変換時にエラーの発生が防止される。したがってこの暗号化ソースプログラム２０の実行形式ファイルへの変換の結果、機能部分１０Ｂのみが実行形式ファイルへと変換されることとなり、対応する機能Ｂのみの実行が可能となる。
【００６２】
このように本発明の実施例においては、暗号化機能部分２０Ａ−２，２０Ｃ−２の前後の部分における、上記スタブ関数としての記号部分２５Ａ−１，２５Ｃ−１、及び暗号化機能部分２０Ａ−１，２０Ｃ−１をコメントとして認識させるための記号２５Ａ−２，２５Ｃ―２の挿入がなされている。その結果、当該暗号化ソースプログラム２０は暗号化機能部分を含んだ状態での実行形式ファイルへの変換、すなわち実行ファイル化が可能とされている。
【００６３】
ここでマスターキー情報ファイル３０とは、このようにして暗号化された、暗号化機能部分２０Ａ−２，２０Ｃ−２をそれぞれ復号化するための情報が書き込まれたものであり、それらはそれぞれ上記キー識別情報Ｋｅｙ−ｘｘｘ１，Ｋｅｙ−ｘｘｘ２に対応する。
【００６４】
プログラム提供者はソースプログラム１０を暗号化した際に得られるこのマスターキー情報ファイル３０を保持し、暗号化後のソースプログラム２０をユーザに提供する際、或いは提供後、ユーザの依頼に係る機能に対応するキー情報を抽出して後述する復号化キー情報ファイル７０に書き込み、これを当該ユーザに提供する。ユーザは該当するキー情報を使用して対応する機能部分を復号することによりその機能が利用可能となる。他方当該キー情報ではそれ以外の機能部分を復号してその機能を利用することはできない。
【００６５】
次に、図４とともに、このようにして作成され提供された暗号化ソースコード２０をユーザが利用する際の手順について説明する。
【００６６】
ここでは一例として、ユーザは、上記の如く元々暗号化されておらずそのまま利用可能な機能部分１０Ｂの機能Ｂ以外に、機能Ａの利用を希望しているものと仮定する。
【００６７】
したがってこの場合、当該ユーザはプログラム提供者に対し、機能Ａの利用を可能とするための復号化キー情報ファイル７０を要求する。そしてこのようにしてプログラム提供者から得られた復号化キー情報ファイル７０と、上記暗号化ソースプログラム２０とに対し、復号化処理６０を行う。
【００６８】
上記の如くユーザが要求して得た復号化キー情報ファイル７０には機能Ａを有効にするためのキー情報、すなわち機能部分２０Ａ−２を復号化するために必要となる、Ｋｅｙ−ｘｘｘ１で識別されるキー情報が書き込まれている。したがってこの復号化処理６０では該当する暗号化機能部分２０Ａ−２が復号化され、その結果復号化ソースプログラム１１が得られる。
【００６９】
同復号化ソースプログラム１１では、今回の復号化によって得られた機能部分１０Ａが、実行形式ファイル作成制御コード２５Ａ−１、暗号化機能部分２０Ａ−２、キー情報２０−１及びそれらの前後のコメント化記号２５−２に置き換わっている。その結果、当該復号化後のソースプログラム１１は上記同様、元のソースプログラム１０と同様の形式を有する。
【００７０】
すなわちこの復号化ソースプログラム１１は、元のソースプログラム１０の各機能部分１０Ａ，１０Ｂ，１０Ｃのそれぞれの一行目「int sub001(int a,int b,int c){」、「int sub002(int a,int b,int c){」、「int sub003(int a,int b,int c){」に対応する部分「int sub001(int a,int b,int c){」、「int sub002(int a,int b,int c){」、「int sub003(int a,int b,int c){」をそれぞれ有し、引き続き対応する実質的な演算機能部分を有する。このため当該復号化ソースプログラム１１は元のソースプログラム１０同様、実行形式ファイルへの変換が、エラーを生ずることなく実施可能となる。
【００７１】
この復号化ソースプログラム１１においてはこのように復号化によって得られた機能部分１０Ａが、元々暗号化されていなかった機能部分１０Ｂとともに有効な機能部分として含まれている。
【００７２】
これら有効な機能部分１０Ａ，１０Ｂは、同ソースプログラム１１が実行形式ファイル化される際に実行形式に変換され、実行可能となる。他方暗号化機能部分２０Ｃ−２は復号化ソースプログラム１１においても暗号化されたままとされ、上記の如くコメント化記号２５Ｃ−２によってコメントとして認識される状態となっている。その結果暗号化ソースプログラム２０における場合同様、当該ソースプログラム１１の実行形式ファイル化の際にはコメントとして認識されることにより、そのままの状態が維持される。その結果、当該機能部分２０Ｃ−２は実行され得ず、該当する機能Ｃは得られない。
【００７３】
このように本発明の実施例によれば、プログラム提供者は全てのユーザに対して一のソースプログラム１０を用意し、各機能部分を暗号化した状態で各ユーザに提供する。そしてユーザ毎に所望の機能が異なる場合には、該当する機能に対応する機能部分の復号化に必要なキー情報を併せて提供する。
【００７４】
これを受けたユーザは当該キー情報により、当初提供された暗号化ソースプログラム中、自己が必要とする機能部分を復号することができる。そしてこのようにして得られた復号化ソースプログラムでは、暗号化機能部分に対応して実行形式ファイル作成制御コード及びコメント化記号２５Ｃ−２が挿入されている。その結果暗号化機能部分を含んでいても実行形式ファイル化の際にエラーを生ずることがない。その結果ユーザは、当該復号化ソースプログラムが実行形式ファイル化されたオブジェクトプログラムにより、必要としている機能が得られる。
【００７５】
またその後同じユーザが、他の暗号化されたままの機能部分に係る機能についても所望するようになった場合、プログラム提供者に対し該当する復号化キー情報を要求してこれを入手する。その結果上記同様、当初提供された暗号化ソースプログラム中、該当する機能部分を更に復号することができる。
【００７６】
そしてこのようにして得られた復号化ソースプログラムにおいても、残存する暗号化機能部分に対応して実行形式ファイル作成制御コード及びコメント化記号が挿入されており、上記同様実行形式ファイル化の際にエラーを生ずることがない。その結果ユーザは当該復号化ソースプログラムが実行形式ファイル化されたオブジェクトプログラムにより、必要としている機能を得られる。
【００７７】
次に、図３とともに上述した、プログラム提供者においてソースプログラム１０を暗号化する際の手順につき、図５とともに詳細に説明する。
【００７８】
ステップＳ１では図１に示されるプログラム暗号化システム１００に対し、当該ソースプログラム１０に含まれる機能部分のうち、暗号化する機能部分を選択するための指示を入力する。これを受けた同システム１００は、指示された選択機能部分を検索し（ステップＳ２）、その結果該当部分が得られた場合（ステップＳ３のＹｅｓ）、ステップＳ４に移行する。
【００７９】
ステップＳ４では上記スタブ関数（２５Ａ−１，２５Ｃ−１等）を作成し、これを該当機能部分の手前部分に埋め込む（ステップＳ５）。その結果スタブ関数が埋め込まれたソースプログラムファイル２０−２が得られる。次に、キー情報４０が提供され、これに基づいてマスターキー情報を作成し（ステップＳ６）、これをマスターキー情報ファイル３０に書き込む（ステップＳ７）。
【００８０】
次にステップＳ８では、当該マスターキーのキー識別情報（２０Ａ−１，２０Ｃ−１等）を、現在処理中のソースプログラムの、上記スタブ関数に続く部分に書き込む。そしてステップＳ９では当該マスターキー情報に対応するキー情報４０を適用して上記該当機能部分を暗号化する。そしてここで得られた暗号化機能部分（２０Ａ−２，２０Ｃ−２等）を、処理中のソースプログラムファイルに埋め込む（ステップＳ１０）。そしてこのようにして得られた暗号化ソースプログラム２０のファイルが得られる。
【００８１】
また、ステップＳ１にて入力された指示中に、更に暗号化するべき機能部分の指定があった場合、これに応じてステップＳ２乃至Ｓ１０を繰り返す。
【００８２】
ステップＳ３にて暗号化するべき機能部分を全て処理し終わったと判定された場合、或いは該当部分が処理中のソースプログラムファイル１０中に見つからなかった場合、当該暗号化処理を終了する（ステップＳ１１）。
【００８３】
次に、図４とともに上述した、ユーザにおいて暗号化ソースプログラム２０を復号化する際の手順について、図６とともに詳細に説明する。
【００８４】
ユーザはプログラム提供者に要求して受け取った、当初提供された暗号化ソースプログラム２０中の必要とする機能に係る機能部分を復号化するためのキー情報が書き込まれた復号化キー情報ファイル７０を、プログラム復号化システム２００に入力する。
【００８５】
同復号化システム２００は、ステップＳ３１にて当該復号化キー情報ファイル７０の判定を行う。すなわち、ステップＳ３２にて当該ファイルのデータ形式等をチェックし、所定の復号化キー情報ファイル７０の形式的条件を満たしいているか否かを判定する。
【００８６】
その結果問題がない場合（ステップＳ３２のＹｅｓ）、次にステップＳ３３にて、ユーザから更に提供される暗号化ソースプログラム２０―３の内容に基づき、上記復号化キー情報ファイル７０に書き込まれているキー情報に該当する機能部分が含まれるか否かを判定する（ステップＳ３３）。ここでは図４に示されるキー識別情報Ｋｅｙ−ｘｘｘ１、２０Ａ−１，Ｋｅｙ−ｘｘｘ２、２０Ｃ−１等により、同判定を下す。
【００８７】
その判定の結果、該当機能部分が存在する場合（ステップＳ３３のＹｅｓ）、復号化キー情報ファイル７０に書き込まれたキー情報を使用して該当機能部分（２０Ａ−２，２０Ｃ−２等）を復号化する（ステップＳ３４）。その結果、元の機能部分（１０Ａ，１０Ｃ等）が得られる。
【００８８】
次に、ここで復号化した機能部分に対応して設けられていた実行形式ファイル作成制御コードとしてのスタブ関数（２５Ａ−１、２５Ｃ−１等）を除去し除去後のソースプログラム２０−４を得る（ステップＳ３５）。同スタブ関数は対応する機能部分が暗号化され無効化された状態で所定のプログラム形式を維持するために設けられたものであり、当該機能部分がこのように復号化され有効化された段階では最早不要である。またこのとき、同様に最早不要なキー識別情報（２０Ａ−１，２０Ｃ−１等）及びコメント化記号２５Ａ−２，２５Ｃ−２等）も削除して復号化データを作成する（ズテップＳ３６）。
【００８９】
そしてこのようにして作成された、復号化された機能部分（１０Ａ，１０Ｃ等）は、処理中のソースプログラム中の、元の暗号化機能部分（２０Ａ−２，２０Ｃ−２等）と置き換えられる（ステップＳ３７）。その結果、復号化されたソースプログラム１１のファイルが得られる。
【００９０】
他にも復号化キー情報ファイル７０に書き込まれた復号化キー情報に対応する暗号化機能部分が上記復号化されたソースプログラム１１中に残存している場合、これについてステップＳ３３乃至Ｓ３８を繰り返す。
【００９１】
他方、ステップＳ３２又はステップＳ３３の判定結果がＮｏとなった場合、この処理を終了する（ステップＳ３８）。
【００９２】
次に図７とともに、上記プログラム暗号化システム１００或いはプログラム復号化システム２００として適用可能なコンピュータにつき説明する。
【００９３】
図７のコンピュータは、情報処理の制御を実施するＣＰＵ１；ＣＰＵ１により記憶手段として利用されるメモリ２；ユーザに対する情報の表示を行うディスプレイ４；ユーザが各種指示入力等を行うための操作部３；プログラム、各種データを格納するためのハードディスク装置５；可搬情報記録媒体としてのＣＤ−ＲＯＭ６Ａを媒介として外部とのプログラム、各種データの授受をおこなうためのＣＤ−ＲＯＭドライブ６；インターネット、ＬＡＮ等の通信網９を介して外部サーバとのプログラム、各種データの授受をおこなうためのモデム７よりなる。
【００９４】
上記プログラム暗号化システム１００或いはプログラム復号化システム２００としてこのコンピュータを適用する際、まず図１乃至６とともに説明した同システム１００又は２００の動作をコンピュータに実行させるための命令よりなるプログラムを作成する。
【００９５】
次に、このプログラムをＣＤ−ＲＯＭ６Ａに書き込み、ＣＰＵ１の制御の下、ＣＤ−ＲＯＭドライブ６を介してハードディスク装置５に転送することにより、同コンピュータにロードする。
【００９６】
或いは外部サーバから通信網９を介し、同プログラムを、ＣＰＵ１の制御の下、ハードディスク装置５に転送することにより、同コンピュータにロードする。
【００９７】
その後、ＣＰＵ１がユーザによる操作部３を介した指示入力等に応じ、ハードディスク装置５から同プログラムをメモリ２にロードし、その命令を順次実行する。その結果、上記プログラム暗号化システム１００或いはプログラム復号化システム２００として同コンピュータが動作する。
【００９８】
なお本発明の実施例は上述のものに限られず、本発明の基本的な技術思想を具現化した他の様々な形態の実施例が可能であることは言うまでもない。
【図１】
0004818279.tif 000002
【図２】
0004818279.tif 000003
【図３】
0004818279.tif 000004
【図４】
0004818279.tif 000005
【図５】
0004818279.tif 000006
【図６】
0004818279.tif 000007
【図７】
0004818279.tif 000008