【手続補正書】
【提出日】平成18年6月13日(2006.6.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プログラムを分割して分割プログラムを生成する分割プログラム生成手段と、
前記分割プログラムを暗号化するか、あるいは分割のみ行った状態で記憶する分割プログラム記憶手段と、
前記分割プログラムに分割プログラム属性を設定する分割プログラム属性設定手段と、
暗号化されている場合には復号して前記分割プログラムをメモリ上にロードするオーバレイローダによって前記分割プログラムがロードされるべきメモリ上のロード位置を記憶する領域を備える分割プログラムロード位置記憶手段と、
前記分割プログラム属性により前記分割プログラムのロード位置を決定し、決定した前記ロード位置を前記分割プログラムロード位置記憶手段に記憶する分割プログラムロード位置属性依存決定手段と
を備えることを特徴とする暗号化プログラム生成装置。
【請求項２】
前記暗号化プログラム生成装置は、さらに、
前記オーバレイローダによりロードされる前記分割プログラムのロード履歴を管理する分割プログラムロード履歴管理手段を備え、
前記分割プログラムロード位置属性依存決定手段は、さらに、前記ロード履歴により前記分割プログラムのロード位置を決定する
ことを特徴とする請求項１に記載の暗号化プログラム生成装置。
【請求項３】
前記暗号化プログラム生成装置は、さらに、
前記分割プログラム間の呼び出し関係を木構造で表現した分割プログラムコールツリー情報を保持する分割プログラムコールツリー保持手段を備え、
前記分割プログラムロード位置属性依存決定手段は、さらに、前記分割プログラムコールツリー情報を用いて前記分割プログラムのロード位置を決定する
ことを特徴とする請求項１に記載の暗号化プログラム生成装置。
【請求項４】
前記分割プログラムロード位置属性依存決定手段は、
前記プログラムの実行をシミュレートした結果に従って、前記分割プログラムのロード位置を決定する
ことを特徴とする請求項１に記載の暗号化プログラム生成装置。
【請求項５】
前記分割プログラムロード履歴管理手段は、ロードされた分割プログラムのロード回数、ロード開始時刻、ロード終了時刻、ロードされた分割プログラムを呼び出した分割プログラムの識別子ごとのロード回数、ロードされた分割プログラムのアクセス回数の少なくとも１つを管理する
ことを特徴とする請求項２に記載の暗号化プログラム生成装置。
【請求項６】
前記暗号化プログラム生成装置は、さらに、
前記プログラム中にセキュリティ強度と処理速度とを設定する強度／速度設定手段を備え、
前記分割プログラム生成手段は、前記強度／速度設定手段で設定されているセキュリティ強度と処理速度とに従って前記プログラムを分割する
ことを特徴とする請求項１に記載の暗号化プログラム生成装置。
【請求項７】
暗号化されている場合には復号して分割プログラムをメモリ上にロードするオーバレイローダによって前記分割プログラムがロードされるべきメモリ上のロード位置を記憶する領域を備える分割プログラムロード位置記憶手段を備えるプログラム生成装置において用いられる暗号化プログラム生成方法であって、
プログラムを分割して分割プログラムを生成する分割プログラム生成ステップと、
前記分割プログラムを暗号化するか、あるいは分割のみ行った状態で記憶する分割プログラム記憶ステップと、
前記分割プログラムに分割プログラム属性を設定する分割プログラム属性設定ステップと、
前記分割プログラム属性により前記分割プログラムのロード位置を決定し、決定した前記ロード位置を前記分割プログラムロード位置記憶手段に記憶する分割プログラムロード位置属性依存決定ステップと
を含むことを特徴とする暗号化プログラム生成方法。
【請求項８】
前記暗号化プログラム生成方法は、さらに、
前記オーバレイローダによりロードされる前記分割プログラムのロード履歴を管理する分割プログラムロード履歴管理ステップを含み、
前記分割プログラムロード位置属性依存決定ステップは、さらに、前記ロード履歴により前記分割プログラムのロード位置を決定する
ことを特徴とする請求項７に記載の暗号化プログラム生成方法。
【請求項９】
前記暗号化プログラム生成方法は、さらに、
前記分割プログラム間の呼び出し関係を木構造で表現した分割プログラムコールツリー情報を保持する分割プログラムコールツリー保持ステップを含み、
前記分割プログラムロード位置属性依存決定ステップは、さらに、前記分割プログラムコールツリー情報を用いて前記分割プログラムのロード位置を決定する
ことを特徴とする請求項７に記載の暗号化プログラム生成方法。
【請求項１０】
前記分割プログラムロード位置属性依存決定ステップは、
前記プログラムの実行をシミュレートした結果に従って、前記分割プログラムのロード位置を決定する
ことを特徴とする請求項７に記載の暗号化プログラム生成方法。
【請求項１１】
前記分割プログラムロード履歴管理ステップは、ロードされた分割プログラムのロード回数、ロード開始時刻、ロード終了時刻、ロードされた分割プログラムを呼び出した分割プログラムの識別子ごとのロード回数、ロードされた分割プログラムのアクセス回数の少なくとも１つを管理する
ことを特徴とする請求項８に記載の暗号化プログラム生成方法。
【請求項１２】
前記暗号化プログラム生成方法は、さらに、
前記プログラム中にセキュリティ強度と処理速度とを設定する強度／速度設定ステップを含み、
前記分割プログラム生成ステップは、前記強度／速度設定ステップで設定されているセキュリティ強度と処理速度とに従って前記プログラムを分割する
ことを特徴とする請求項７に記載の暗号化プログラム生成方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】発明の名称
【補正方法】変更
【補正の内容】
【発明の名称】暗号化プログラム生成装置および暗号化プログラム生成方法
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
図３４において、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）アルゴリズムを示す。ロード領域３４０１には、分割プログラムがロードされる。分割プログラム３４０２は、最初にロードされた分割プログラムである。分割プログラム３４０３は、これからロードされる分割プログラムである。このとき、ロード領域３４０１には、分割プログラム３４０３をロードするための十分な空きサイズがないので、最初にロードされた分割プログラム３４０２（図３４の場合は「１」）を最初に削除する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
図３５において、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）アルゴリズムを示す。ロード領域３５０１には、分割プログラムがロードされる。ＬＲＵエントリ３５０２は、アクセスされた分割プログラムの順を記憶する。分割プログラム３５０３は、これからロードされる分割プログラムである。このとき、ロード領域３５０１には、分割プログラム３５０３をロードするための十分な空きサイズがないので、最も過去にアクセスされた分割プログラム３５０４（図３５の場合は「３」）を最初に削除する。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００１２
【補正方法】変更
【補正の内容】
【００１２】
図３６において、ＮＲＵ（Ｎｏｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）アルゴリズムを示す。ロード領域３６０１には、分割プログラムがロードされる。リファレンスビット３６０２は、ある一定間隔で全部リセットし、アクセスされるとビットがセットされる。分割プログラム３６０３は、これからロードされる分割プログラムである。このとき、ロード領域３６０１には、分割プログラム３６０３をロードするための十分な空きサイズがないので、リファレンスビット３６０２がセットされていない分割プログラム３６０４（図３６の場合は、「２」、「３」）を最初に削除する。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００２１
【補正方法】変更
【補正の内容】
【００２１】
（実施の形態１）
図１は、本発明の実施の形態１における暗号化プログラム実行装置の構成を示すブロック図である。図１において、分割プログラム記憶手段１０１は、プログラムを小さい単位に分割した分割プログラムを暗号化するか、あるいは分割のみ行った状態で分割プログラム識別子と対応付けて記憶する。分割プログラムコールツリー保持手段１０２は、分割プログラム記憶手段１０１で記憶しているある分割プログラムから呼び出される他の分割プログラムを含む分割プログラムとの関係を木構造で表現した分割プログラムコールツリー情報を格納する。ロード領域１０３は、メモリ上の領域で分割プログラムが、復号された状態で命令コードの並びやデータとして配置される。オーバレイローダ１０４は、分割プログラム記憶手段１０１に記憶している分割プログラムを、暗号化されている場合は復号して、ロード領域１０３にロードする。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００２２
【補正方法】変更
【補正の内容】
【００２２】
分割プログラムロード位置記憶手段１０５は、オーバレイローダ１０４が分割プログラムをロードするロード領域中の位置を、前記ロード領域１０３の開始アドレスからのオフセットと、分割プログラム識別子を対応付けて記憶する。分割プログラムロード情報管理手段１０６は、オーバレイローダ１０４が分割プログラムをロードしたときの分割プログラムのロード履歴を管理する。例えば、履歴情報は、ロードされた分割プログラムのロード回数、ロードされた分割プログラムのロード開始時刻からの経過時間、ロードされた分割プログラムを呼び出した分割プログラムの識別子ごとのロード回数、ロードされた分割プログラムのアクセス回数などである。これらをカウントするカウンターを持つ。分割プログラムロード情報記憶手段１０７は、分割プログラムロード情報管理手段１０６が管理している履歴情報を記憶する。さらに、ファイルとして外部記憶に書き出す。分割プログラムロード位置決定手段１０８は、分割プログラムコールツリー保持手段１０２が記憶している分割プログラムコールツリーと、分割プログラムロード情報記憶手段１０７で記憶している分割プログラムロード履歴情報を用いて、分割プログラムのロード位置を決定する。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００２６
【補正方法】変更
【補正の内容】
【００２６】
図５は、分割プログラムロード情報管理手段１０６で管理する情報を示す概念図である。分割プログラムロード管理情報テーブル５０１は、各分割プログラムが、ロードされたときに、その分割プログラム識別子５０２と、呼び出した側の分割プログラム識別子５０３を対応付ける。ロード回数５０４を１だけ増加させる。ロード開始時刻５０５を設定する。また、この分割プログラムにアクセスされたときに参照ビット５０７を「ＯＮ」にする。一定時間間隔で、参照ビット５０７はクリアされる。さらに、この分割プログラムがロード領域１０３から削除または上書きされたとき、ロード終了時刻を設定する。説明を簡単にするために、各分割プログラムの処理時間を「９９」とし、復号やメモリ上のコピーなどのロード処理に必要な時間を「０」としている。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００３３
【補正方法】変更
【補正の内容】
【００３３】
（ステップ５）  分割プログラムロード情報管理手段１０６は、図５で示す分割プログラムロード管理情報テーブル５０１に、ロードされた分割プログラムの分割プログラム識別子５０２と、呼び出した側の分割プログラム識別子５０３を対応付けて追加する。ロード回数５０４を１だけ増加させる。ロード開始時刻５０５を設定する。参照ビット５０７を「ＯＮ」にする（Ｓ６０６）。（ステップ７）に進む。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００３４
【補正方法】変更
【補正の内容】
【００３４】
（ステップ６）  （ステップ１）で、分割プログラムがロードされていた場合には、分割プログラムロード管理情報テーブル５０１に、ロードされた分割プログラムの分割プログラム識別子５０２と、呼び出した側の分割プログラム識別子５０３に対応が一致するものに対してロード回数５０４を１だけ増加させる。参照ビット５０７を「ＯＮ」にする（Ｓ６０６）。（ステップ７）に進む。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】００３７
【補正方法】変更
【補正の内容】
【００３７】
（ステップ９）  分割プログラムロード情報記憶手段１０７は、分割プログラムロード情報管理手段１０６で記憶している分割プログラムロード管理情報テーブル５０１をファイルに出力する（Ｓ６０９）。（おわり）
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】００４６
【補正方法】変更
【補正の内容】
【００４６】
（ステップ３）  （ステップ２）で、該当するロードエリアが存在しない場合、新規にロードエリアを作成し（Ｓ７０４）、作成したロードエリアを割り当てる（ステップＳ７０５）。（ステップ４）に進む。該当するロードエリアが存在する場合（Ｓ７０３）、そのロードエリアを割り当てる（Ｓ７０５）。（ステップ４）に進む。
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】００５６
【補正方法】変更
【補正の内容】
【００５６】
＜第２の例の実行順＞
（ステップ１）  図１３で示す分割プログラムロード時間集計結果１３０１により、ロード時間の多い分割プログラムから順にロードエリアを割り当てる（Ｓ１２０１）。分割プログラムの識別子をａとする。分割プログラムａのロードエリアを＃Ｎとする。（ステップ２）に進む。
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】００７７
【補正方法】変更
【補正の内容】
【００７７】
（ステップ５）  分割プログラムロード情報管理手段１０６は、図５で示す分割プログラムロード管理情報テーブル５０１に、ロードされた分割プログラムの分割プログラム識別子５０２と、呼び出した側の分割プログラム識別子５０３を対応付けて追加する。ロード回数５０４を１だけ増加させる。ロード開始時刻５０５を設定する。参照ビット５０７を「ＯＮ」にする。アクセス回数１１０７を更新する。アクセス時刻１８０１を更新する（Ｓ１７０６）。（ステップ７）に進む。
【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】００７８
【補正方法】変更
【補正の内容】
【００７８】
（ステップ６）  （ステップ１）で、分割プログラムがロードされていた場合には、分割プログラムロード管理情報テーブル５０１に、ロードされた分割プログラムの分割プログラム識別子５０２と、呼び出した側の分割プログラム識別子５０３に対応が一致するものに対してロード回数５０４を１だけ増加させる。参照ビット５０７を「ＯＮ」にする（Ｓ１７０６）。（ステップ７）に進む。
【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】００８４
【補正方法】変更
【補正の内容】
【００８４】
図２１は、本発明の実施の形態２における分割プログラムの動的なロード位置決定アルゴリズムを示すフロー図である。
【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】０１１１
【補正方法】変更
【補正の内容】
【０１１１】
（ステップ４）  強度が必要なものを割り当てる。図２のコールツリーから呼び出し先の分割プログラム（子ども）を同じロードエリアに割り当てる。なければ、呼び出し先の呼び出し先（孫）、または、呼び出し元（親）を同じロードエリアに割り当てる（Ｓ２４０４）。この内容を各分割プログラムのロード位置をファイルに書き出して終了する（おわり）。
【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】０１１６
【補正方法】変更
【補正の内容】
【０１１６】
（実施の形態４）
図２５は、本発明の実施の形態４における暗号化プログラム生成装置の構成を示すブロック図である。図２５において、分割プログラム記憶手段１０１、分割プログラムコールツリー保持手段１０２、ロード領域１０３、オーバレイローダ１０４、分割プログラムロード位置記憶手段１０５、分割プログラムロード情報管理手段１０６、分割プログラムロード情報記憶手段１０７は、図１で用いたものと同じものである。分割プログラム属性設定手段２３０１、分割プログラム属性記憶手段２３０２、分割プログラムロード位置属性依存決定手段２３０３は、図２３で用いたものと同じものである。プログラム２５０１は、分割プログラムのもととなるものである。通常、Ｃ言語などのプログラミング言語で記述されている。強度／速度設定手段２５０２は、プログラム２５０１中の一部分に対して、セキュリティ強度が必要な部分や、高速な処理速度が必要な部分にしるしをつける。分割プログラム生成手段２５０３は、プログラム２５０１を小さい処理単位に分割して分割プログラムを生成する。このとき、強度／速度設定手段２５０２で設定されている情報に従って、必要な条件が満たされるようにプログラム２５０１を分割する。また、各分割プログラムの識別子と、設定された強度、速度を対応付けて分割プログラム属性記憶手段２３０２に記憶させる。
【手続補正１９】
【補正対象書類名】明細書
【補正対象項目名】０１２１
【補正方法】変更
【補正の内容】
【０１２１】
上記の構成のような構成の暗号化プログラム生成装置において、分割プログラム生成処理の具体的な流れを図２８、図２９のフロー図を用いて説明する。
【手続補正２０】
【補正対象書類名】明細書
【補正対象項目名】０１２２
【補正方法】変更
【補正の内容】
【０１２２】
＜プログラムの実行順＞
（ステップ１）  強度／速度設定手段２５０２により、プログラム２５０１にセキュリティ強度と、処理速度の属性を設定する（Ｓ２８０１）。（ステップ２）に進む。
【手続補正２１】
【補正対象書類名】明細書
【補正対象項目名】０１３２
【補正方法】変更
【補正の内容】
【０１３２】
（実施の形態５）
図３０は、本発明の実施の形態５における暗号化プログラム実行装置の構成を示すブロック図である。図３０において、分割プログラム記憶手段１０１、ロード領域１０３、分割プログラムロード位置記憶手段１０５は、図１で用いたものと同じものである。プログラム２５０１、分割プログラム生成手段２５０３は、図２５で用いたものと同じである。分割プログラム記憶手段１０１は、分割プログラム生成手段２５０３が生成した分割プログラムの識別子と、サイズと、その実体を対応付けて記憶する。複製分割プログラム生成手段３００１は、前記プログラム２５０１から生成した分割プログラムに対し、同じ結果を得られるが、異なる命令コード群からなる複製分割プログラムを生成する。例えば、分割プログラム中の式に対して、定数式を追加したり、式の恒等変換を行ったりして置換することにより、複製分割プログラムを生成する方法がある。
【手続補正２２】
【補正対象書類名】明細書
【補正対象項目名】０１４６
【補正方法】変更
【補正の内容】
【０１４６】
【図１】本発明の実施の形態１における暗号化プログラム実行装置の構成を示すブロック図
【図２】分割プログラムコールツリー保持手段１０２で記憶している分割プログラムコールツリー
【図３】ロード領域１０３に分割プログラムがロードされる状態を示す概念図
【図４】分割プログラムロード位置記憶手段１０５で記憶しているロード位置を示す概念図
【図５】分割プログラムロード情報管理手段１０６で管理する情報を示す概念図
【図６】本発明の実施の形態１における分割プログラムのロード処理の具体的な流れを示すフロー図
【図７】本発明の実施の形態１における分割プログラムのロード位置決定アルゴリズムを示すフロー図
【図８】分割プログラムロード管理情報テーブル５０１の内容
【図９】分割プログラムロード管理情報テーブル５０１の記憶内容を集計した結果
【図１０】分割プログラムロード位置決定手段１０８で決定したロードエリアの割り当て結果
【図１１】分割プログラムロード情報管理手段１０６で管理する情報を示す概念図
【図１２】本発明の実施の形態１における分割プログラムのロード位置決定アルゴリズムを示すフロー図
【図１３】図１１の分割プログラムロード管理情報テーブル５０１の記憶内容を集計した結果
【図１４】分割プログラムロード位置決定手段１０８で決定したロードエリアの割り当て結果
【図１５】分割プログラムロード情報管理手段１０６で管理する情報を示す概念図
【図１６】本発明の実施の形態２における暗号化プログラム実行装置の構成を示すブロック図
【図１７】本発明の実施の形態２における分割プログラムのロード処理の具体的な流れを示すフロー図
【図１８】分割プログラムロード情報管理手段１０６で管理する情報を示す概念図
【図１９】ロード領域１０３に分割プログラムがロードされる状態を示す概念図
【図２０】分割プログラムロード情報管理手段１０６が管理する情報を示す概念図
【図２１】本発明の実施の形態２における分割プログラムの動的なロード位置決定アルゴリズムを示すフロー図
【図２２】分割プログラムロード情報管理手段１０６が管理する情報を示す概念図
【図２３】本発明の実施の形態３における暗号化プログラム実行装置の構成を示すブロック図
【図２４】本発明の実施の形態３におけるロード位置決定処理の具体的な流れを示すフロー図
【図２５】本発明の実施の形態４における暗号化プログラム生成装置の構成を示すブロック図
【図２６】プログラム中に強度／速度設定手段２５０２でパラメータを設定した状態のプログラム例
【図２７】前記分割プログラム生成手段２５０３で、プログラムから分割プログラムを生成した例
【図２８】生成された分割プログラムを実行時の履歴情報を用いて最適化する処理の流れを示すフロー図
【図２９】本発明の実施の形態４における分割プログラム生成処理の具体的な流れを示すフロー図
【図３０】本発明の実施の形態５における暗号化プログラム実行装置の構成を示すブロック図
【図３１】本発明の実施の形態５における分割プログラムのロード処理の具体的な流れを示すフロー図
【図３２】前記特許文献１に記載された従来の暗号化プログラム実行装置
【図３３】前記非特許文献１に記載された従来のオーバレイローダ
【図３４】前記非特許文献２に記載された従来のアルゴリズム
【図３５】前記非特許文献２に記載された従来のアルゴリズム
【図３６】前記非特許文献２に記載された従来のアルゴリズム
【図３７】分割プログラムロード情報管理手段１０６が管理する情報を示す概念図
【図３８】分割プログラムロード情報管理手段１０６が管理する情報を示す概念図
【図３９】分割プログラムロード情報管理手段１０６が管理する情報を示す概念図
【図４０】分割プログラムロード情報管理手段１０６が管理する情報を示す概念図
【図４１】分割プログラムロード情報管理手段１０６が管理する情報を示す概念図
【図４２】分割プログラムロード情報管理手段１０６が管理する情報を示す概念図
【手続補正２３】
【補正対象書類名】図面
【補正対象項目名】図６
【補正方法】変更
【補正の内容】
【図６】
2005050196.tif 000001
【手続補正２４】
【補正対象書類名】図面
【補正対象項目名】図１３
【補正方法】変更
【補正の内容】
【図１３】
2005050196.tif 000002