(57)【要約】【課題】  バリエーションのあるソフトウェアを、提供者に過大な負荷を課すことなく、かつ安全に、ユーザに提供することが課題である。【解決手段】  提供者システムは、暗号化されたソース７１、プログラムの最適化のためのプロファイル情報７２、コンパイラ７３等をパックして、パッケージ７４をユーザシステムに送る。ユーザシステムは、パッケージ７４をメモリ上に展開し、コンパイラ７３を用いて、プロファイル情報７２に従ってソース７１の翻訳処理を行い、カスタマイズされた実行可能モジュール７６を生成する。【選択図】      図１０
2007012090.tif 000002
【特許請求の範囲】
【請求項１】
提供者システムとユーザシステムを有し、該提供者システムから該ユーザシステムにソースファイルを提供するシステムであって、
前記提供者システムは、
前記ソースファイル、コンパイラ、およびカスタマイズ情報を含むパッケージ情報を生成する手段と、
前記パッケージ情報を出力する手段とを備え、
前記ユーザシステムは、
メモリと、
前記パッケージ情報を展開して、前記ソースファイル、コンパイラ、およびカスタマイズ情報を前記メモリに格納する手段と、
前記コンパイラを用いて、前記カスタマイズ情報に従って前記ソースファイルの翻訳処理を行い、カスタマイズされた実行可能モジュールを生成する手段とを備えることを特徴とするシステム。
【請求項２】
ソースファイル、コンパイラ、およびカスタマイズ情報を含むパッケージ情報を入力する機能と、
前記パッケージ情報を展開して、前記ソースファイル、コンパイラ、およびカスタマイズ情報をメモリに格納する機能と、
前記コンパイラを用いて、前記カスタマイズ情報に従って前記ソースファイルの翻訳処理を行い、カスタマイズされた実行可能モジュールを生成する機能と
をコンピュータに実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項３】
提供者システムからユーザシステムにソースファイルを提供する方法であって、
前記提供者システムが、前記ソースファイル、コンパイラ、およびカスタマイズ情報を含むパッケージ情報を生成し、
前記ユーザシステムが、前記パッケージ情報を展開して、前記ソースファイル、コンパイラ、およびカスタマイズ情報をメモリに格納し、
前記コンパイラを用いて、前記カスタマイズ情報に従って前記ソースファイルの翻訳処理を行い、カスタマイズされた実行可能モジュールを生成する
ことを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、提供者システムから該ユーザシステムにソースファイルを提供するシステムおよびその方法に関する。
【背景技術】
【０００２】
近年、コンピュータネットワーク等を利用したソフトウェアの分散開発等が盛んになり、それに伴って情報を隠蔽するための暗号に関する技術も多くなってきている。例えば、開発者Ａから開発者Ｂに、ある情報Ｉをネットワーク等を利用して伝達したい場合、Ａが情報Ｉを暗号化し、それをネットワークを介して転送し、Ｂが受信した情報を復元するという技術が広く使用されている。
【０００３】
しかし、Ａが保有する情報Ｉを、Ｂが持っている処理Ｐのために使用したいが、処理Ｐの外部（オペレータ等）に対しては、情報Ｉの内容を隠蔽したいような場合がある。例えば、情報Ｉに相当する新製品のプログラムソースを、関係者以外の人も使用できるような環境上でコンパイルする必要がある場合が、これに相当する。このような場合、ソースファイルを暗号化してＢに転送しても、コンパイルの前にそれを復号化してしまうと、それが他に洩れる可能性があり、ソースファイルの内容を完全に隠蔽することはできない。
【０００４】
従来、暗号による情報の隠蔽とは、情報提供者Ａと情報受取り者Ｂ以外の第三者に対して情報を隠蔽することを意図している。例えば、特許文献１に記載された「データ転送方法」では、暗号化データの復号化処理を行うモジュールを、一定時間毎に変更して再コンパイルし、そのオブジェクトコードを暗号化データのユーザに転送する。これにより、第三者が暗号化データを復号化することが困難になる。
【０００５】
しかしながら、このデータ転送方法は第三者に対する防衛策であって、暗号化データを受け取る側は、復号化モジュールのオブジェクトコード（復号鍵を含む）を用いて、暗号化前の情報を簡単に取り出すことができる。
【０００６】
また、暗号化されたソースファイルを転送する場合、受け取り側で暗号復元のコマンドＣ１と既存のコンパイラコマンドＣ２とをつなげて実行すれば、ソースファイルをコンパイルして、オブジェクトコード（実行可能モジュール）を生成することができる。しかし、コマンドＣ１とＣ２をただ単につなげて使用するだけでは、ＯＳ（オペレーションシステム）やそのコマンドに精通しているエンジニアにとって、コマンドＣ１の実行結果を取り出すことは容易であり、ソースファイルの内容を受け取り側に対して隠蔽することは困難である。
【特許文献１】特開平７−１６２４０９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上述したように、従来のデータ転送方法ではソース情報が洩れる可能性があることから、ソフトウェアの提供者は、コンパイル後の実行可能モジュールをユーザに配布している。そして、ユーザのシステムにおいては、与えられた実行可能モジュールを直接操作することによって、ソフトウェアのカスタマイズを行っている。
【０００８】
しかし、この操作では、結局、豊富なオプションを含む元の実行可能モジュールの一部分を使用しているに過ぎず、配布される実行可能モジュールには、ユーザにとって不要な部分も多く含まれている。このため、必要以上に大きなサイズの実行可能モジュールをシステムに実装しなければならないという問題がある。
【０００９】
また、提供者がユーザの希望に応じてカスタマイズした実行可能モジュールを用意し、それを配布することも考えられるが、ユーザの数が増大すると提供者の作業が煩雑になり、過大な負荷が生じる。
【００１０】
本発明の課題は、バリエーションのあるソフトウェアを、提供者に過大な負荷を課すことなく、かつ安全に、ユーザに提供することのできるシステムおよびその方法を提供することである。
【課題を解決するための手段】
【００１１】
図１は、本発明の翻訳装置の原理図である。図１の翻訳装置は、入力手段１、復元手段２、翻訳手段３、および出力手段４を備える。
本発明の第１の原理によれば、入力手段１は、暗号化情報を複数の部分に分割して入力し、復元手段２は、その暗号化情報の各部分毎に元の情報を復元する。そして、翻訳手段３は、元の情報を翻訳し、出力手段４は、翻訳結果を出力する。
【００１２】
入力される暗号化情報は、例えば、暗号化されたソースファイルであり、復元手段２は、それを復号化して、暗号化前のソースファイルを復元し、翻訳手段３は、復元されたソースファイルをコンパイルして実行可能モジュールを生成する。
【００１３】
このとき、復元手段２は、暗号化情報を一度に全部復号化するのではなく、分割された各部分毎に少しずつ復号化する。そして、翻訳手段３は、復元された各部分毎に元の情報を翻訳する。
【００１４】
このような処理によれば、元の情報は各部分毎に復元されるのみであり、その全体が一度に再現されることはない。したがって、翻訳装置のユーザが元の情報の全体を得ることは困難になり、元の情報の機密を保持したまま、翻訳することが可能になる。
【００１５】
また、多くのオプションを含むソフトウェアを、簡単かつ安全に、ユーザに提供することができ、ユーザのシステム上で翻訳のオプションを指定して、翻訳結果をカスタマイズすることが可能になる。
【００１６】
また、本発明の第２の原理によれば、入力手段１は、暗号化情報を入力し、翻訳手段３は、その暗号化情報から元の情報を復元する処理を翻訳処理の内部で行い、元の情報を外部に与えることなく翻訳する。そして、出力手段４は、翻訳結果を出力する。
【００１７】
翻訳装置は、暗号化情報の全体を一旦復号化してから翻訳するのではなく、翻訳処理の内部で復号化を行う。このとき、翻訳手段３は、復元処理と翻訳処理が融合した処理を行って、暗号化情報から翻訳結果を生成する。
【００１８】
このような処理によれば、元の情報は翻訳手段３の内部で復元されるのみであり、それが翻訳装置の外部に洩れることはない。したがって、翻訳装置のユーザが元の情報を得ることは困難になり、元の情報の機密を保持したまま、翻訳することが可能になる。
【００１９】
また、多くのオプションを含むソフトウェアを、簡単かつ安全に、ユーザに提供することができ、ユーザのシステム上で翻訳のオプションを指定して、翻訳結果をカスタマイズすることが可能になる。
【００２０】
例えば、図１の入力手段１は、後述する図２の読込み部２１に対応し、復元手段２は図２の復号部２２に対応し、翻訳手段３は図２の解析部２３およびバックエンド１２に対応し、出力手段４は図２のバックエンド１２に対応する。
【００２１】
本発明の別のシステムは、提供者システムとユーザシステムを有し、提供者システムからユーザシステムにソースファイルを提供する。
提供者システムは、ソースファイル、コンパイラ、およびカスタマイズ情報を含むパッケージ情報を生成する手段と、パッケージ情報を出力する手段とを備える。
【００２２】
ユーザシステムは、メモリと、パッケージ情報を展開して、ソースファイル、コンパイラ、およびカスタマイズ情報をメモリに格納する手段と、コンパイラを用いて、カスタマイズ情報に従ってソースファイルの翻訳処理を行い、カスタマイズされた実行可能モジュールを生成する手段とを備える。
【発明の効果】
【００２３】
本発明によれば、暗号の復元処理を翻訳処理と融合させることにより、バリエーションのあるソフトウェアを、簡単かつ安全に、ユーザに提供することができる。したがって、ユーザのシステムにおいて、提供者から配布されるアプリケーションをカスタマイズすることが可能になり、アプリケーションのサイズが縮小される。
【発明を実施するための最良の形態】
【００２４】
以下、図面を参照しながら、本発明を実施するための最良の形態を詳細に説明する。
ソフトウェアをユーザのコンピュータシステム上でカスタマイズするためには、ソースファイルの情報をユーザに安全に配布し、ユーザの希望に応じた翻訳（コンパイル）を行うことが必要になる。この場合、ソースファイルを何らかの方法で暗号化して配布することが望ましい。
【００２５】
さらに、暗号化された情報の復号鍵を持っている受け取り側であっても、ある処理（または装置）の外からは、元の情報を取り出すことができないようにする必要があり、ソースファイルの復号化機能は、コンパイル処理（または装置）内に含まれることが望ましい。本発明は、このような要望に答えるものであり、産業上の利用分野は広い。
【００２６】
図２は、本実施形態の言語コンパイラの構成図である。図２のコンパイラは、フロントエンド１１とバックエンド１２から構成され、フロントエンド１１は、読込み部２１、復号部２２、および解析部２３を含む。
【００２７】
読込み部２１が暗号化データ２４（暗号化ソースファイル）を読み込むと、復号部２２は、一定の単位毎に暗号を復元し、解析部２３に入力する。そして、復号部２２に保持されている復元情報は、解析部２３に入力された後に、自動的に破棄される。解析部２３は、入力された情報から順に、トークン解析（字句解析）、構文解析、意味解析等の解析処理を行う。そして、復号部２２および解析部２３は、暗号化データ２４の入力がなくなるまで、同様の処理を繰り返す。
【００２８】
暗号化データ２４の入力がなくなり、フロントエンド１１から中間言語のプログラムである中間テキスト２５が出力されると、バックエンド１２は、それに基づいて、最適化およびコード生成を行う。
【００２９】
このようなコンパイラによれば、入力された暗号化ソースファイルは、復号部２２により、決められた最小単位ごとに復号化される。この復号化処理はコンパイラの内部処理であり、所定の単位を復号化したら、その情報は直ちに破棄されるため、たとえユーザが復号鍵を保持していても、復号化されたソースファイル全体の情報をコンパイラの外部から得ることはできない。
【００３０】
図３は、図１のコンパイラにおけるデータの流れを示している。図３において、読込み部２１は、暗号化ソースファイル２４を一定単位毎に暗号化データバッファ３１に入力し、復号部２２は、暗号化データバッファ３１のデータを復号化して、非暗号化データバッファ３２に入力する。暗号化データバッファ３１および非暗号化データバッファ３２は、メモリ上に設けられる。
【００３１】
そして、解析部２３は、非暗号化データバッファ３２のデータを順に解析して、メモリ上に中間テキスト２５を生成し、バックエンド１２は、中間テキスト２５から実行可能ファイル３３を生成する。
【００３２】
図４は、図１のコンパイラによる翻訳処理（コンパイル処理）のフローチャートである。まず、読込み部２１は、与えられた入力データ４１が暗号化データかどうかを、入力データ４１のファイルが持っているマジックナンバーで判定する（ステップＳ１）。それが暗号化データであった場合は、あらかじめ定められたバイト数Ｎだけ暗号化データバッファ３１に入力する。復号部２２は、暗号化データバッファ３１に入力されたデータからソースデータを復元して、非暗号化データバッファ３２に転送する（ステップＳ２）。
【００３３】
次に、解析部２３は、非暗号化データバッファ３２からソースデータを読み込み、読み込んだ部分だけを解析して、中間テキスト２５に展開し（ステップＳ３）、読込み部２１は、入力データ４１が終了したかどうかを判定する（ステップＳ４）。読込み部２１によるＮバイト転送と、復号部２２による復元処理と、解析部２３による解析処理は、入力データ４１がなくなるまで繰り返される。
【００３４】
この繰り返しにおいて、暗号化データバッファ３１および非暗号化データバッファ３２のデータは、常に、新たな入力データによって上書きされて消去される。したがって、非暗号化データバッファ３２にソースファイルの全体が再現されることはない。そして、入力データ４１がなくなったとき、自動的に、入力全体に相当する中間テキスト２５が生成される。
【００３５】
一方、入力データ４１が元々機密性の低いソースファイルであり、ステップＳ１において暗号化されていない場合は、読込み部２１は、入力全体を非暗号化データバッファ３２に転送し、解析部２３は、それを中間テキスト２５に変換する。この場合、一回の転送で入力データ４１がなくなることになる。
【００３６】
ステップＳ４において入力データ４１がなくなれば、バックエンド１２は、生成された中間テキスト２５を最適化し（ステップＳ５）、レジスタ割り付け、命令スケジューリングを経て、コード生成を行う（ステップＳ６）。そして、図３の実行可能ファイル３３に対応するオブジェクトプログラム４２（実行可能プログラム）を出力する。
【００３７】
図５は、図４のステップＳ２、Ｓ３、およびＳ４で行われる処理の一例を示すフローチャートである。例えば、ソースファイルの提供者側において、次のような１６バイトのオリジナルデータが、ｄａｔａ１というファイルに格納されているとする。
【００３８】
ＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰ
このデータを暗号化して、ｄａｔａ２というファイルに格納すると、その内容は次のようになる。
【００３９】
ＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱ
ここでは、シーザ暗号を用いているが、他の暗号を用いてもよい。ファイルｄａｔａ２が暗号化ソースファイル２４としてコンパイラに入力されると、まず、読込み部２１は、そのファイルを開き（ステップＳ１１）、４バイト分の暗号化データを暗号化データバッファ３１に読み込む（ステップＳ１２）。上述の例では、最初の４バイトである“ＢＣＤＥ”が暗号化データバッファ３１に読み込まれる。
【００４０】
次に、復号部２２は、その暗号化データを復号化し、非暗号化データバッファ３２に転送する（ステップＳ１３）。ここでは、“ＢＣＤＥ”が復号化されて、オリジナルデータである“ＡＢＣＤ”が非暗号化データバッファ３２に転送される。
【００４１】
次に、解析部２３は、非暗号化データバッファ３２のデータに対して、トークン解析を行い、トークンが認識されると、順次、中間テキスト２５に変換する（ステップＳ１４）。ここでは、データ“ＡＢＣＤ”のトークン解析が行われる。
【００４２】
そして、ステップＳ１２、Ｓ１３、およびＳ１４の処理は、暗号化ソースファイル２４のデータがなくなるまで繰り返される（ステップＳ１５）。暗号化ソースファイル２４のデータがなくなると、フロントエンドの処理が終了し、読込み部２１は、そのファイルを閉じる。
【００４３】
このような復元処理によれば、非暗号化データバッファ３２のデータは次々に消去されるため、オリジナルデータ“ＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰ”の全体が再現されることはない。したがって、その機密を保持しながら翻訳処理を行うことが可能になる。
【００４４】
図６は、図４のステップＳ３で行われる解析処理の他の例を示すフローチャートである。ここでは、解析部２３がソースファイルの文字を読み込むとき、ソースファイルが暗号化されているかどうか、つまり、復号部２２を経由するかどうかによって、入力の要求先が異なってくる。暗号化されたソースファイルの場合は、解析部２３は、復号部２２からの出力を保持する非暗号化データバッファ３２から文字を読み込み、暗号化されていないソースファイルの場合は、ソースファイル自身から直接文字を読み込む。
【００４５】
まず、解析部２３は、入力ファイルが暗号化ソースファイルかどうかを判定し（ステップＳ２１）、それが非暗号化ソースファイルであれば、ファイルを開く（ステップＳ２２）。このとき、ファイルポインタＦｐは、ファイルの先頭を指している。
【００４６】
次に、再び、ファイルが暗号化ソースファイルかどうかを判定し（ステップＳ２３）、それが暗号化ソースファイルであれば、非暗号化データバッファ３２から１文字読み込み（ステップＳ２４）、そのバッファが空かどうかを判定する（ステップＳ２５）。
【００４７】
非暗号化データバッファ３２が空であれば、復号部２２を起動して、暗号化ソースファイルの一部を復元させ（ステップＳ２６）、ステップＳ２４以降の処理を繰り返す。非暗号化データバッファ３２が空でなければ、これまでに読み込んだ文字列のトークン解析を行い（ステップＳ２７）、ステップＳ２３以降の処理を繰り返す。
【００４８】
一方、ステップＳ２３においてファイルが非暗号化ソースファイルであれば、ポインタＦｐが指す位置から１文字読み込み（ステップＳ２８）、ステップＳ２７以降の処理を行う。このとき、ポインタＦｐは、次の文字の位置に設定される。
【００４９】
このような解析処理によれば、ソースファイルが暗号化されている場合は、非暗号化データバッファ３２から文字が読み取られ、バッファ内の文字がなくなる度に復号部２２が起動される。したがって、所定のバイト数以上のソースデータが非暗号化データバッファ３２上に再現されることはない。
【００５０】
ところで、本実施形態では、暗号の復元処理として、例えば、共通鍵や公開鍵をコンパイラの外部に復号鍵として保持するような公知の仕組みを使用することができる。しかし、実際には、暗号アルゴリズムを独自に持たない限り、転送情報が別の復号装置によって復号化されてしまう可能性が高い。
【００５１】
また、復号鍵を外部のみに持つ方法だと、その鍵とコンパイラの復号化アルゴリズムを利用して、他の任意の入力データを暗号化することもでき、コンパイラが目的外に使用されてしまうという危険性もある。したがって、コンパイラをある目的だけに限定して使用したいような場合は、この方法は好ましくない。
【００５２】
そこで、ここでは、復号鍵をコンパイラ内に持つことによって、特定のソースファイルをコンパイルする以外の目的にコンパイラが使用されることを防止する。
図７は、このような暗号化／復号化の構成例を示している。図７において、ソースファイル（ＳＲＣ）を送信する暗号化側は、暗号化装置５１と暗号化装置５２を備え、復元側のコンパイラは、内部復元装置５３と復元装置５４を持っている。暗号化装置５１と内部復元装置５３には、それぞれ、共通鍵ＣＦがバイナリコードとして埋め込まれており、外部からは見えないようになっている。暗号アルゴリズムとしては、例えば、ＤＥＳ（Data Encryption Standard）が用いられる。
【００５３】
まず、暗号化装置５２は、ＣＦとは別の共通鍵ＣＴ１を使用して、ソースファイルを暗号化し、暗号化ソースファイルを生成する。また、暗号化装置５１は、内部に持っている共通鍵ＣＦを使用して、共通鍵ＣＴ１を暗号化し、暗号化共通鍵ＣＴ２を生成する。暗号化ソースファイルとＣＴ２は、暗号化側から復元側に転送される。
【００５４】
内部復元装置５３は、ＣＴ２を受け取ると、内部に持っている共通鍵ＣＦを使用して、ＣＴ２から共通鍵ＣＴ１を復元し、復元装置５４に渡す。復元装置５４は、共通鍵ＣＴ１を使用して、暗号化ソースファイルを復号化し、ソースファイルを復元する。
【００５５】
ここでは、共通鍵をコンパイラの内部に持つという方法を用いているが、必ずしもこれに限定する必要はない。また、ソースファイル全体を暗号化して転送する代わりに、ソースファイルを複数の部分に分割して、各部分をそれぞれ暗号化して転送することもできる。この場合、コンパイラにおける復元単位を分割単位として用いると便利である。さらに、共通鍵システムのみに限らず、公開鍵システムでも同じような処理を行うことができる。
【００５６】
図８は、公開鍵システムに基づく暗号化の構成例を示しており、図９は、その復号化の構成例を示している。ここでは、共通鍵システムであるＤＥＳと公開鍵システムであるＲＳＡ（Rivest-Shamir-Adleman ）を組み合わせて使用し、ＲＳＡの秘密鍵／公開鍵の組は２組使用する。
【００５７】
図８において、暗号化側のエンコーダ６１は、ソースコード（ＳＣ）を、共通鍵Ｃ１を使用してＤＥＳにより暗号化し、暗号化ソースコード（ＥＳＣ）を生成する。また、エンコーダ６２は、秘密鍵Ｉｓを使用して、ＲＳＡにより共通鍵Ｃ１を暗号化し、暗号化共通鍵Ｃ２を生成し、さらに、公開鍵Ｆｐを使用して、ＲＳＡによりＣ２を暗号化し、暗号化共通鍵Ｃ３を生成する。暗号化ソースコードとＣ３は、暗号化側から復元側に転送される。
【００５８】
図９において、復元側のデコーダ６３は、Ｃ３を受け取ると、内部に埋め込まれている秘密鍵Ｆｓを使用して、ＲＳＡによりＣ３からＣ２を復元し、内部バッファに格納する。デコーダ６３は、さらに、公開鍵Ｉｐを使用して、ＲＳＡによりＣ２からＣ１を復元し、内部バッファに格納する。次に、デコーダ６４は、復元された共通鍵Ｃ１を使用して、暗号化ソースコードを復号化し、ソースコードを復元する。
【００５９】
そして、ソースコードはコンパイラ６５によりコンパイルされて、オブジェクトコード（ネイティブコード）に変換される。実際には、ソースコードの復元は一定単位毎に行われるため、デコーダ６４は、コンパイラ６５のフロントエンドから繰り返し呼び出されることになる。
【００６０】
図８、９に示した例では、共通鍵Ｃ１、暗号化側の秘密鍵Ｉｓ、暗号化側の公開鍵Ｉｐ、復元側の秘密鍵Ｆｓ、復元側の公開鍵Ｆｐの５個の鍵が用いられている。このうち、ＩｓとＩｐ、ＦｐとＦｓが、ＲＳＡの暗号鍵と復号鍵の組になっており、公開鍵Ｉｐはあらかじめ暗号化側から復元側に配布されている。このような方法によれば、同じ暗号化ソースコードを複数のユーザに配布する場合、ユーザ毎に異なるＩｓとＩｐの組を用いることで、暗号の安全性を向上させることができる。
【００６１】
以上説明したようなコンパイラを利用することにより、ユーザのシステムにおいて、提供者から配布されるアプリケーションをカスタマイズし、アプリケーションサイズの縮小化を図ることが可能になる。
【００６２】
例えば、情報発信元Ａ（提供者）と情報受信先Ｂ（ユーザ）は、それぞれ独立したシステムであり、発信元Ａは、複数の情報を持ち、その一部または全部を暗号化して、受信先Ｂのシステムに送り、そこで翻訳が行われるものとする。このような処理によれば、発信元Ａが保持するソースの機密が保たれたまま、受信先Ｂにおいて、それを利用した独自のカスタマイズを行うことができる。
【００６３】
図１０は、このようなカスタマイズ処理の一例を示している。図１０において、提供者Ａは、暗号化されたソース７１、プロファイル情報７２、コンパイラ７３等をパックして、パッケージ７４をユーザＢに送る。プロファイル情報とは、処理の分岐確率やサブルーチンの指定（関数呼出しの飛び先）を含む、プログラムの最適化のための情報である。
【００６４】
ユーザＢのインストーラ７５は、パッケージ７４をメモリ上に展開し、ユーザの指示に従ってカスタマイズを行う。このとき、コンパイラ７３は、指示に従ってソース７１、プロファイル情報７２等を処理し、カスタマイズされた実行可能モジュール７６を生成する。なお、コンパイラ７３がすでにユーザＢのシステムに存在する場合は、パッケージ７４から除かれる。
【００６５】
図１１は、カスタマイズ処理のフローチャートである。まず、提供者Ａのシステムは、暗号化されたソース７１、プロファイル情報７２、コンパイラ７３等のカスタマイズに必要な情報と、カスタマイズ手続き指示ファイルとを、あらかじめ決められたフォーマット／名前に従って、パックする（ステップＳ３１）。そして、パッケージ７４を、ネットワークまたはＣＤ−ＲＯＭ（compact disk read only memory ）等の記録媒体を介して、ユーザＢに転送する。
【００６６】
ユーザＢのシステムでは、インストーラ７５がパッケージ７４をメモリ上のワーク領域に展開し（ステップＳ３２）、ユーザＢは、カスタマイズ手続き指示ファイルにより表示されるシステムメニューに従って、翻訳オプションを指定する（ステップＳ３３）。ここでは、例えば、次のようなオプションが選択される。
【００６７】
１．使用するプロファイル情報ファイルの選択
（ａ）用途１：用途１に対応するプロファイル情報ファイルを利用する。
（ｂ）用途２：用途２に対応するプロファイル情報ファイルを利用する。
【００６８】
・・・・・
（ｎ）用途ｎ：用途ｎに対応するプロファイル情報ファイルを利用する。
２．最適化オプションの選択
（ａ）Ｏ１：生成されるオブジェクトコード（バイナリコード）の大きさをできるだけ小さくする。
（ｂ）Ｏ２：実行スピードを一定以上に保ちながら、生成されるオブジェクトコードの大きさを小さくする。
（ｃ）Ｏ３：実行スピードをできるだけ速くする。
【００６９】
３．結合するクラスライブラリの選択（複数選択可能）
ＬＩＢ１，ＬＩＢ２，ＬＩＢ３，．．．
そして、インストーラ７５は、これらの選択入力とシステムのアーキテクチャ情報（中央処理装置情報／メモリサイズ等）から、ユーザに適したコンパイラオプション情報７７を生成する。このオプション情報７７には、コンパイラ７３に対するコマンド等が記述されている。
【００７０】
次に、コンパイラ７３は、オプション情報７７を使用して、図４の翻訳処理を行い、ソース７１から実行可能モジュール７６を生成する（ステップＳ３４）。こうして生成された実行可能モジュール７６は、カスタマイズ時の指定に従って最適化されているため、ユーザＢにとっては必要最小限の大きさになっている。
【００７１】
次に、インストーラ７５は、ワーク領域に展開されたソース７１等のデータを消去し、さらに、メンテナンスの予定がないか、またはワーク領域が少ない場合には、コンパイラ７３も消去して（ステップＳ３５）、処理を終了する。
【００７２】
また、ソース７１の代わりにその一部分に対応する暗号化パッチファイルを送り、カスタマイズ手続き指示ファイルにパッチの展開指示を記述することによって、同様の手順でソフトウェアのメンテナンスも行うことができる。この場合、主としてバイナリパッチが用いられる。また、情報発信元でパスワード設定の機能を組み込んでおけば、カスタマイズ時に、その機能を有効にするかどうかを指定することも可能である。
【００７３】
本発明は、上述したようなソースファイルのコンパイル処理のみに限らず、ある言語で記述された情報を別の言語に変換する任意の翻訳処理に適用することができる。例えば、英語の文書を日本語に翻訳したり、あるプログラミング言語で書かれたプログラムを他の言語に変換したりする処理が、これに相当する。
【００７４】
また、提供者およびユーザの各システムは、例えば、図１２に示すような情報処理装置（コンピュータ）を用いて構成することができる。図１２の情報処理装置は、ＣＰＵ（中央処理装置）８１、メモリ８２、入力装置８３、出力装置８４、外部記憶装置８５、媒体駆動装置８６、およびネットワーク接続装置８７を備え、それらはバス８８により互いに接続されている。
【００７５】
メモリ８２には、処理に用いられるプログラムとデータが格納される。メモリ８２としては、例えばＲＯＭ（read only memory）、ＲＡＭ（random access memory）等が用いられる。ＣＰＵ８１は、メモリ８２を利用してプログラムを実行することにより、必要な処理を行う。
【００７６】
入力装置８３は、例えば、キーボード、ポインティングデバイス、タッチパネル等であり、オペレータからの指示や情報の入力に用いられる。出力装置８４は、例えば、ディスプレイやプリンタ等であり、オペレータへの問い合わせや処理結果等の出力に用いられる。
【００７７】
外部記憶装置８５は、例えば、磁気ディスク装置、光ディスク装置、光磁気ディスク（magneto-optical disk）装置等である。この外部記憶装置８５に、上述のプログラムとデータを保存しておき、必要に応じて、それらをメモリ８２にロードして使用することもできる。
【００７８】
媒体駆動装置８６は、可搬記録媒体８９を駆動し、その記録内容にアクセスする。可搬記録媒体８９としては、メモリカード、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、光ディスク、光磁気ディスク等、任意のコンピュータ読み取り可能な記録媒体が用いられる。この可搬記録媒体８９は、提供者からユーザに情報を配布するために用いられる。また、可搬記録媒体８９に上述のプログラムとデータを格納しておき、必要に応じて、それらをメモリ８２にロードして使用することもできる。
【００７９】
ネットワーク接続装置８７は、ＬＡＮ（local area network）等の任意のネットワーク（回線）を介して提供者またはユーザの装置と通信し、通信に伴うデータ変換を行う。これにより、提供者からユーザに情報を転送することができる。また、必要に応じて、上述のプログラムとデータを外部の装置から受け取り、それらをメモリ８２にロードして使用することもできる。
【００８０】
図１３は、図１２の情報処理装置にプログラムとデータを供給することのできるコンピュータ読み取り可能な記録媒体を示している。可搬記録媒体８９や外部のデータベース９０に保存されたプログラムとデータは、メモリ８２にロードされる。そして、ＣＰＵ８１は、そのデータを用いてそのプログラムを実行し、必要な処理を行う。
【図面の簡単な説明】
【００８１】
【図１】本発明の翻訳装置の原理図である。
【図２】コンパイラの構成図である。
【図３】データの流れを示す図である。
【図４】翻訳処理のフローチャートである。
【図５】復元処理のフローチャートである。
【図６】解析処理のフローチャートである。
【図７】第１の暗号化／復号化を示す図である。
【図８】第２の暗号化を示す図である。
【図９】第２の復号化を示す図である。
【図１０】カスタマイズ処理を示す図である。
【図１１】カスタマイズ処理のフローチャートである。
【図１２】情報処理装置の構成図である。
【図１３】記録媒体を示す図である。
【符号の説明】
【００８２】
１  入力手段
２  復元手段
３  翻訳手段
４  出力手段
１１  フロントエンド
１２  バックエンド
２１  読込み部
２２  復号部
２３  解析部
２４  暗号化データ
２５  中間テキスト
３１  暗号化データバッファ
３２  非暗号化データバッファ
３３  実行可能ファイル
４１  入力データ
４２  オブジェクトプログラム
５１、５２  暗号化装置
５３  内部復元装置
５４  復元装置
６１、６２  エンコーダ
６３、６４  デコーダ
６５、７３  コンパイラ
７１  ソース
７２  プロファイル情報
７４  パッケージ
７５  インストーラ
７６  実行可能モジュール
７７  オプション情報
８１  ＣＰＵ
８２  メモリ
８３  入力装置
８４  出力装置
８５  外部記憶装置
８６  媒体駆動装置
８７  ネットワーク接続装置
８８  バス
８９  可搬記録媒体
９０  データベース
【図１】
2007012090.tif 000003
【図２】
2007012090.tif 000004
【図３】
2007012090.tif 000005
【図４】
2007012090.tif 000006
【図５】
2007012090.tif 000007
【図６】
2007012090.tif 000008
【図７】
2007012090.tif 000009
【図８】
2007012090.tif 000010
【図９】
2007012090.tif 000011
【図１０】
2007012090.tif 000012
【図１１】
2007012090.tif 000013
【図１２】
2007012090.tif 000014
【図１３】
2007012090.tif 000015