(57)【要約】【課題】秘匿するべきデータを第三者に見付かり難い態様でプログラムに埋め込む。【解決手段】コンピュータに、秘匿対象となるデータを取得するデータ取得ステップＳ１０と、オペコードを含むプログラムコードの少なくともオペコードを残して秘匿対象となるデータを埋め込んで秘匿データコードを生成する秘匿データコード生成ステップＳ１４と、秘匿データコードを含むコンピュータで実行可能なプログラムを生成するプログラム生成ステップＳ１６と、を含む処理を実行させる。これにより上記課題を解決することができる。【選択図】図３
2009211646.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
秘匿対象となるデータを取得するデータ取得ステップと、
オペコードを含むプログラムコードの少なくともオペコードを残して前記秘匿対象となるデータを埋め込んで秘匿データコードを生成する秘匿データコード生成ステップと、
前記秘匿データコードを含むコンピュータで実行可能なプログラムを生成するプログラム生成ステップと、
を含む処理を実行させることを特徴とするデータ秘匿プログラム。
【請求項２】
請求項１に記載のデータ秘匿プログラムにおいて、
前記秘匿データコード生成ステップは、ランダムにプログラムコードを選択し、当該選択されたプログラムコードのフォーマットにおいて少なくともオペコードを残して前記秘匿対象となるデータを埋め込んで秘匿データコードを生成することを特徴とするデータ秘匿プログラム。
【請求項３】
請求項１に記載のデータ秘匿プログラムにおいて、
前記秘匿データコード生成ステップは、オペコードの出現確率に応じてプログラムコードを選択し、当該選択されたプログラムコードのフォーマットにおいて少なくともオペコードを残して前記秘匿対象となるデータを埋め込んで秘匿データコードを生成することを特徴とするデータ秘匿プログラム。
【請求項４】
請求項１に記載のデータ秘匿プログラムにおいて、
前記秘匿データコード生成ステップは、複数のオペコードの並びの出現確率に応じてプログラムコードを選択し、当該選択されたプログラムコードのフォーマットにおいて少なくともオペコードを残して前記秘匿対象となるデータを埋め込んで秘匿データコードを生成することを特徴とするデータ秘匿プログラム。
【請求項５】
請求項１に記載のデータ秘匿プログラムにおいて、
前記秘匿データコード生成ステップは、コンピュータで実行可能なプログラムテンプレートに含まれるプログラムコードのフォーマットにおいて少なくともオペコードを残して前記秘匿対象となるデータを埋め込んで秘匿データコードを生成することを特徴とするデータ秘匿プログラム。
【請求項６】
請求項１〜５のいずれか１つに記載のデータ秘匿プログラムにおいて、
前記プログラム生成ステップは、前記秘匿データコードに埋め込まれたデータを読み出すためのデータ抜き出しコードを含むプログラムを生成することを特徴とするデータ秘匿プログラム。
【請求項７】
請求項１〜６のいずれか１つに記載のデータ秘匿プログラムにおいて、
前記プログラム生成ステップは、コンピュータで実行可能なプログラムコードのフォーマットを登録したコード情報データベースを含むプログラムを生成することを特徴とするデータ秘匿プログラム。
【請求項８】
コンピュータに、
オペコードを含むプログラムコードの少なくともオペコードを残して秘匿対象となるデータを埋め込んだ秘匿データコード、を含むコンピュータで実行可能なプログラムから前記秘匿データコードを読み出す秘匿データコード読出ステップと、
前記秘匿データコードに含まれるオペコードを読み飛ばして、埋め込まれているデータを抽出するデータ抽出ステップと、
を含む処理を実行させることを特徴とするデータ読出プログラム。
【請求項９】
請求項８に記載のデータ読出プログラムにおいて、
前記データ抽出ステップは、前記プログラムに含まれているコンピュータで実行可能なプログラムコードのフォーマットを登録したコード情報データベースを参照して、前記秘匿データコードに含まれるオペコードを読み飛ばして、埋め込まれているデータを抽出することを特徴とするデータ読出プログラム。
【請求項１０】
秘匿対象となるデータを取得するデータ取得手段と、
オペコードを含むプログラムコードの少なくともオペコードを残して前記秘匿対象となるデータを埋め込んで秘匿データコードを生成する秘匿データコード生成手段と、
前記秘匿データコードを含むコンピュータで実行可能なプログラムを生成するプログラム生成手段と、
を備えることを特徴とするデータ秘匿装置。
【請求項１１】
オペコードを含むプログラムコードの少なくともオペコードを残して秘匿対象となるデータを埋め込んだ秘匿データコード、を含むコンピュータで実行可能なプログラムから前記秘匿データコードを読み出す秘匿データコード読出手段と、
前記秘匿データコードに含まれるオペコードを読み飛ばして、埋め込まれているデータを抽出するデータ抽出手段と、
を備えることを特徴とするデータ読出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ秘匿プログラム、データ読出プログラム、データ秘匿装置及びデータ読出装置に関する。
【背景技術】
【０００２】
第三者に知られたくないようなデータをプログラムの中に埋め込んで秘匿する技術が知られている。
【０００３】
特許文献１には、１バイトずつに分割したパスワードデータに対して、第１の連続するメモリ領域に各バイトの保存位置を示す情報を所定の先頭番地からの互いに重複しないオフセット値として記憶させ、１バイトずつに分割したパスワードデータを、その各バイトずつ、先頭番地から始まる十分な長さの第２の連続する記憶領域にオフセット値で決定されるアドレスに従って分散させて記憶させる技術が開示されている。
【０００４】
【特許文献１】特開２００４−４６６４０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
データを分割することなくプログラムに埋め込んだ場合、そのデータの性質を考慮してプログラムコードをスキャンすることによって、プログラムコードのどの場所にデータが埋め込まれたかを容易に調べられてしまうおそれがある。
【０００６】
特に、暗号鍵のような乱数的な性質を有するデータを、プログラムのような秩序的な情報に埋め込んだ場合、その乱数的な性質を利用して秘匿されたデータが埋め込まれた箇所を特定されるおそれがある。
【０００７】
データ自体を暗号化した場合も同様であり、さらに、暗号化されたデータを復号するための復号用の暗号鍵を埋め込む必要も生ずる。
【０００８】
また、データを分割して秘匿した場合、秘匿されたデータに暗号化が適用されているか否かを判定できないという問題がある。
【課題を解決するための手段】
【０００９】
本発明の１つは、コンピュータに、秘匿対象となるデータを取得するデータ取得ステップと、オペコードを含むプログラムコードの少なくともオペコードを残して前記秘匿対象となるデータを埋め込んで秘匿データコードを生成する秘匿データコード生成ステップと、前記秘匿データコードを含むコンピュータで実行可能なプログラムを生成するプログラム生成ステップと、を含む処理を実行させることを特徴とするデータ秘匿プログラムである。
【００１０】
また、本発明の別の１つは、秘匿対象となるデータを取得するデータ取得手段と、オペコードを含むプログラムコードの少なくともオペコードを残して前記秘匿対象となるデータを埋め込んで秘匿データコードを生成する秘匿データコード生成手段と、前記秘匿データコードを含むコンピュータで実行可能なプログラムを生成するプログラム生成手段と、を備えることを特徴とするデータ秘匿装置である。
【００１１】
ここで、前記秘匿データコード生成ステップ又は手段は、ランダムにプログラムコードを選択し、当該選択されたプログラムコードのフォーマットにおいて少なくともオペコードを残して前記秘匿対象となるデータを埋め込んで秘匿データコードを生成するものとしてもよい。
【００１２】
また、前記秘匿データコード生成ステップ又は手段は、オペコードの出現確率に応じてプログラムコードを選択し、当該選択されたプログラムコードのフォーマットにおいて少なくともオペコードを残して前記秘匿対象となるデータを埋め込んで秘匿データコードを生成するものとしてもよい。
【００１３】
また、前記秘匿データコード生成ステップ又は手段は、複数のオペコードの並びの出現確率に応じてプログラムコードを選択し、当該選択されたプログラムコードのフォーマットにおいて少なくともオペコードを残して前記秘匿対象となるデータを埋め込んで秘匿データコードを生成するものとしてもよい。
【００１４】
また、前記秘匿データコード生成ステップ又は手段は、コンピュータで実行可能なプログラムテンプレートに含まれるプログラムコードのフォーマットにおいて少なくともオペコードを残して前記秘匿対象となるデータを埋め込んで秘匿データコードを生成するものとしてもよい。
【００１５】
また、前記プログラム生成ステップ又は手段は、前記秘匿データコードに埋め込まれたデータを読み出すためのデータ抜き出しコードを含むプログラムを生成するものとしてもよい。
【００１６】
また、前記プログラム生成ステップ又は手段は、コンピュータで実行可能なプログラムコードのフォーマットを登録したコード情報データベースを含むプログラムを生成するものとしてもよい。
【００１７】
また、本発明の１つは、コンピュータに、オペコードを含むプログラムコードの少なくともオペコードを残して秘匿対象となるデータを埋め込んだ秘匿データコード、を含むコンピュータで実行可能なプログラムから前記秘匿データコードを読み出す秘匿データコード読出ステップと、前記秘匿データコードに含まれるオペコードを読み飛ばして、埋め込まれているデータを抽出するデータ抽出ステップと、を含む処理を実行させることを特徴とするデータ読出プログラムである。
【００１８】
また、本発明の別の１つは、オペコードを含むプログラムコードの少なくともオペコードを残して秘匿対象となるデータを埋め込んだ秘匿データコード、を含むコンピュータで実行可能なプログラムから前記秘匿データコードを読み出す秘匿データコード読出手段と、前記秘匿データコードに含まれるオペコードを読み飛ばして、埋め込まれているデータを抽出するデータ抽出手段と、を備えることを特徴とするデータ読出装置である。
【００１９】
ここで、前記データ抽出ステップ又は手段は、前記プログラムに含まれているコンピュータで実行可能なプログラムコードのフォーマットを登録したコード情報データベースを参照して、前記秘匿データコードに含まれるオペコードを読み飛ばして、埋め込まれているデータを抽出するものとしてもよい。
【発明の効果】
【００２０】
請求項１及び１０の発明によれば、秘匿するべきデータを第三者に見付かり難い態様でプログラムに埋め込むことができる。
【００２１】
請求項２の発明によれば、秘匿するべきデータを埋め込むプログラムコードをランダムに選択することによって、簡易にデータの秘匿を行うことができる。
【００２２】
請求項３の発明によれば、秘匿するべきデータを埋め込むプログラムコードをコードの使用頻度に応じて選択することによって、第三者により見付かり難い態様でプログラムに埋め込むことができる。
【００２３】
請求項４の発明によれば、秘匿するべきデータを埋め込むプログラムコードをオペコードの並びの確率を示すバイグラムあるいはトライグラムに応じて選択することによって、第三者により見付かり難い態様でプログラムに埋め込むことができる。
【００２４】
請求項５の発明によれば、秘匿するべきデータをプログラムテンプレートに含まれるプログラムコードに埋め込むことによって、第三者により見付かり難い態様でプログラムに埋め込むことができる。
【００２５】
請求項６の発明によれば、生成されたプログラムを実行する際に、そのプログラムから秘匿するべきデータを読み出して利用することができる。
【００２６】
請求項７の発明によれば、コンピュータで実行可能なプログラムコードのフォーマットを登録したコード情報データベースを参照して、プログラムに秘匿されたデータを読み出して利用することができる。
【００２７】
請求項８及び１１の発明によれば、オペコードを含むプログラムコードの少なくともオペコードを残して秘匿対象となるデータを埋め込んだ秘匿データコード、を含むコンピュータで実行可能なプログラムから秘匿されたデータを読み出して利用することができる。
【００２８】
請求項９の発明によれば、コンピュータで実行可能なプログラムコードのフォーマットを登録したコード情報データベースを参照して、プログラムに秘匿されたデータを読み出して利用することができる。
【発明を実施するための最良の形態】
【００２９】
＜装置構成＞
本発明の実施の形態におけるデータ秘匿・読出装置１００は、図１に例示するように、中央処理部１０、記憶部１２、入力部１４、表示部１６及びインターフェース部１８を含んで構成される。これらの構成部は、バスやネットワーク等の情報伝達手段によって相互に情報伝達可能に接続される。
【００３０】
中央処理部１０は、ＣＰＵ（中央制御装置）を含んで構成される。中央処理部１０は、記憶部１２、入力部１４及びインターフェース部１８から情報を受け取り、その情報に対してプログラムに従って演算等の処理を施し、表示部１６及びインターフェース部１８へ出力することによって情報処理を行う。本実施の形態では、中央処理部１０は、記憶部１２に予め格納されているデータ秘匿プログラムを実行することによって、秘匿対象となるデータをプログラムに埋め込む機能を実現する。また、中央処理部１０は、記憶部１２に予め格納されているデータ読出プログラムを実行することによって、秘匿対象としてプログラム内に埋め込まれたデータを読み出す機能を実現する。
【００３１】
記憶部１２は、半導体メモリ、ハードディスク装置、光ディスク装置等の情報記憶装置を含んで構成される。記憶部１２は、データ秘匿・読出装置１００で実行されるデータ秘匿プログラムやデータ読出プログラム、データ秘匿・読出装置１００での処理に供される秘匿対象データ、コード情報データベース等の各種情報を格納及び保持する。
【００３２】
入力部１４は、キーボード等の文字データ入力側装置、マウス等のポインティングデバイス等の情報入力側装置を含んで構成される。入力部１４は、データ秘匿・読出装置１００に対して情報を入力するユーザによって操作され、ユーザからの指示や処理のためのデータを受け付けるために用いられる。入力部１４から入力されたデータは記憶部１２に格納及び保持される。
【００３３】
表示部１６は、ディスプレイ等の表示装置を含んで構成される。表示部１６は、アプリケーションでの処理を行う際にユーザにユーザインターフェース画像や処理対象である情報を呈示するために用いられる。例えば、ユーザに対して、データ秘匿・読出装置１００での処理に必要な情報の入力を促すユーザインターフェース画像を表示する。
【００３４】
インターフェース部１８は、データ秘匿・読出装置１００をＬＡＮ、ＷＡＮ、インターネット等の通信手段を介して他の装置へ情報伝達可能に接続するための装置を含んで構成される。本実施の形態において、データ秘匿・読出装置１００は、インターフェース部１８を用いて外部のコンピュータにアクセス可能であり、外部のコンピュータから処理に必要な情報を入手するものとしてもよい。インターフェース部１８は、例えば、ＴＣＰ／ＩＰ等の既存のプロトコルに則って情報伝達を実現する装置としてもよい。
【００３５】
図２は、本実施の形態におけるデータ秘匿・読出装置１００を機能ブロック図として示したものである。
【００３６】
データ秘匿・読出装置１００は、図２に示すように、メインプログラム生成手段２０、秘匿対象データ取得手段２２、秘匿データコード生成手段２４、プログラム生成手段２６、秘匿データコード読出手段２８、秘匿データコード解析手段３０及びコード情報データベース記憶手段３２を含む装置として機能する。
【００３７】
＜データ秘匿処理＞
データ秘匿・読出装置１００は、記憶部１２に格納されているデータ秘匿プログラムを実行することによって、図３に示すフローチャートに沿ってデータ秘匿処理を実行する。
【００３８】
なお、以下の説明では、コードとはプログラムを構成するコンピュータで実行可能な各命令及びそれらの組み合わせを示すものとし、プログラムとは複数のコードの組み合わせによって全体として一連の処理を行うものを示す。
【００３９】
ステップＳ１０では、メインプログラムが生成される。このステップは、図２におけるメインプログラム生成手段２０に相当する。
【００４０】
中央処理部１０は、プログラムエディタ等のプログラミングツールを実行し、入力部１４からユーザによるプログラムコードの入力を受け付けて、目的とする処理を行うためのメインプログラムを生成する。例えば、表示部１６にプログラムツールのエディタ画面を表示させ、入力部１４によるユーザのコンパイラのソースコードの入力を受け付け、そのソースコードをコンパイリングしてメインプログラムのオブジェクトコードを生成する。
【００４１】
ここで、メインプログラムコードには、データ抜き出しコード及び呼び出しコードが含まれる。データ抜き出しコードとは、以下の処理で秘匿対象となるデータを秘匿データコードとして格納する秘匿データ格納部から秘匿データコードを読み出し、読み出した秘匿データコードを解析して秘匿データを抽出する処理を記述したものである。
【００４２】
また、呼び出しコードとは、メインプログラムにおいてデータ抜き出しコードを呼び出して、データ抜き出しコードを実行させる処理を記述したものである。呼び出しコードは、秘匿データコードを格納する領域である秘匿データ格納部の開始アドレス及びその大きさも含む。
【００４３】
ステップＳ１２では、秘匿対象となるデータが取得される。このステップは、図２における秘匿対象データ取得手段２２に相当する。
【００４４】
中央処理部１０は、入力部１０を介してユーザから、又は、インターフェース部１８を介して外部装置から秘匿対象となるデータを取得する。ただし、データの取得方法はこれに限定されるものではない。
【００４５】
秘匿対象となるデータは、例えば、認証に用いられるパスワード、データの暗号化に用いられる暗号鍵、データの復号に用いられる復号鍵等のセキュアな取り扱いを必要とするものが挙げられる。
【００４６】
ステップＳ１４、秘匿対象となるデータを秘匿データコードに埋め込む処理が行われる。このステップは、図２における秘匿データコード生成手段２４に相当する。
【００４７】
中央処理部１０は、ステップＳ１２で取得した秘匿対象となるデータをコンピュータで実行可能なプログラムコードの一部として埋め込む処理を行う。プログラムコードは、コンパイル処理前はソースコードして記述され、図４に例示するように、オペコード部及びオペランド部から構成される。
【００４８】
オペコード部は、通常、１バイト又は２バイトである。また、オペコード部が命令プリフィックス部を含む場合には３バイト以上となる場合もある。オペコード部は、プログラムにおける各処理（演算）命令の種類を記述する部分である。
【００４９】
オペランド部は、プログラムにおいて処理（演算）の対象となる値や変数を記述する部分である。オペランド部には、処理の対象となるレジスタや即値等を示すデータが含まれる場合もある。また、オペランド部は、アドレス指定部、ディスプレースメント部及び即値部に分けられる場合もある。
【００５０】
例えば、“ｅａｘ”という識別子で特定されるレジスタに“０ｘ１１２２”というデータを格納する処理のソースコードは“Ｍｏｖ  ｅａｘ  ０ｘ１１２２”等と記述される。また、“ｅｂｘ”という識別子で特定されるレジスタに格納されているデータに“０ｘ３３４４”というデータを加算する処理のソースコードは“Ａｄｄ  ｅｂｘ  ０ｘ３３４４”等と記述される。
【００５１】
このようなソースコードをコンパイラで変換処理することによってオブジェクトコードが生成される。オブジェクトコードは、コンピュータの中央処理部１０（ＣＰＵ）によって直接実行可能なビット列である。
【００５２】
中央処理部１０は、実行可能なオペコードを含むプログラムコードに秘匿対象となるデータを埋め込む処理を行う。具体的には、図５に例示するに、実行可能なオペコード、それに対応するオペランドのデータ長を対応付けたコード情報データベースを記憶部１２に予め登録しておき、コード情報データベースからランダムにオペコードを選択して、そのオペコードに対応するオペランドに秘匿対象となるデータを順次埋め込む処理を行う。
【００５３】
例えば、秘匿データとして“０ｘ１１２２３３４４５５６６７７８８”を取得し、コード情報データベースからランダムに抽出されたオペコードが“Ｍｏｖ  ｅａｘ”であった場合、オペコード“Ｍｏｖ  ｅａｘ”に対応するオペランドのデータ長は４バイトであるので、秘匿データの先頭から４バイトのデータ“０ｘ１１２２３３４４”をオペランドとして“Ｍｏｖ  ｅａｘ ０ｘ１１２２３３４４”というソースコードを生成する。秘匿データには４バイトのデータ“０ｘ５５６６７７８８”が残っているので、さらにコード情報データベースからランダムにオペコードを抽出する。抽出されたオペコードが“Ａｄｄ”であった場合、オペコード“Ａｄｄ”に対応するオペランドのデータ長は４バイトであるので、既に埋め込んだデータの次のデータから４バイトのデータ“０ｘ５５６６７７８８”をオペランドとして“Ａｄｄ  ｅａｘ  ０ｘ５５６６７７８８”というソースコードを生成する。これで、秘匿するべき全データをコードとして埋め込んだので処理を終了する。
【００５４】
また、ソースコードを生成するのではなく、後のステップＳ１６でメインプログラムとリンクできる様なファイルフォーマットに従って、直接、Ｂ８Ｈ，４４Ｈ，３３Ｈ，２２Ｈ，１１Ｈ，８８Ｈ，７７Ｈ，６６Ｈ，５５Ｈというオブジェクトコードを生成してもよい。この表現は、リトルエンディアンで数値を表現した例を示したが、対なるデータ列として、Ｂ８Ｈ，４４Ｈ，３３Ｈ，２２Ｈ，１１Ｈ，８８Ｈ，７７Ｈ，６６Ｈ，５５Ｈとして表現することも可能である。
【００５５】
このように、秘匿データの総てのデータが埋め込まれるまで、コード情報データベースからオペコードをランダムに抽出してデータを埋め込む処理を行う。
【００５６】
なお、オペランド部に加えてレジスタなどの情報を含むＭｏｄＲ／Ｍ部の記述を残して秘匿データを埋め込んでもよい。例えば、コード情報データベースからランダムに抽出されたオペコードが“Ｍｏｖ  ｅａｘ”であり、即値としてレジスタｅｂｘからのオフセットをとる命令を用いた場合、オペランドに加えて、ＭｏｄＲ／Ｍを残して、データ“０ｘ１１２２３３４４”を埋め込んで“Ｍｏｖ  ｅａｘ  ０ｘ１１２２３３４４[ｅｂｘ]”というソースコードを生成してもよい。
【００５７】
中央処理部１０は、このようにして秘匿データを埋め込んだソースコードをコンパイルしてオブジェクトコードである秘匿データコードに変換する。コンパイラはデータ秘匿プログラムに組み込まれたものとしてもよいし、記憶部１２や外部装置に予め格納されているコンパイラを読み出して適用するものとしてもよい。なお、ソースコードでなく、オプジェクトコードを直接生成した場合には、このコンパイル作業は不要となる。
【００５８】
なお、本実施の形態ではコード情報データベースからランダムにオペコードを抽出して、それに対応するデータ長でデータを埋め込む処理としたが、プログラムに各オペコードが出現する出現確率に応じた頻度で各オペコードを選択してもよい。プログラムに各オペコードが出現する出現確率は、複数のプログラムを統計的に調査して求めればよい。各オペコードの出現確率は予め記憶部１２に格納しておけばよい。
【００５９】
また、プログラムにおける複数のオペコードの並びの出現確率に応じて各オペコードを選択してもよい。すなわち、オペランドの各々の出現確率ではなく、プログラムに含まれるオペランドをN個単位で分解し、その組み合わせの出現確率に応じてオペコードを選択する。Nの値が2ならバイグラム（ｂｉ−ｇｒａｍ）、3ならトライグラム（ｔｒｉ−ｇｒａｍ）と呼ばれる。
【００６０】
例えば、図６のトライグラムの例のように、２つ前のオペコード、１つ前のオペコードの組み合わせに応じて次に出現するオペコードの出現確率を求めておき、その出現確率に応じた頻度でオペコードが選択されるように選択処理を行う。
【００６１】
また、コード情報データベースを用いず、プログラムのテンプレートに含まれるオペランドに秘匿データを埋め込むものとしてもよい。プログラムのテンプレートは予め準備したものであってもよいし、ステップＳ１０で生成されたメインプログラムの一部をテンプレートとして利用してもよい。
【００６２】
図７（ａ）に例示するプログラムのテンプレートを利用して、 “０ｘ１１２２３３４４５５６６７７８８” という秘匿データを埋め込む場合、１行目の“Ｍｏｖ  ｅａｘ  ０ｘ００００４０３０”というソースコードについてオペコード部“Ｍｏｖ  ｅａｘ”を残して、オペランド部に秘匿データの最初の４バイトを埋め込んで“Ｍｏｖ  ｅａｘ  ０ｘ１１２２３３４４”とし、２行目の“Ａｄｄ ｅｂｘ ０ｘ００００００８ｃ”というソースコードについてオペコード部“Ａｄｄ  ｅｂｘ”を残して、オペランド部に秘匿データの残りの４バイトを埋め込んで“Ａｄｄ  ｅｂｘ  ０ｘ５５６６７７８８”とする。これにより図７（ｂ）に示すようなソースコードが生成される。このように生成されたソースコードをコンパイルすることによってオブジェクトコードである秘匿データコードに変換する。
【００６３】
ステップＳ１６では、メインプログラムコード及び秘匿データコードをリンクさせてプログラムを完成させる。このステップは、図２におけるプログラム生成手段２６に相当する。
【００６４】
中央処理部１０は、ステップＳ１０で生成されたメインプログラムのオブジェクトコードと、ステップＳ１４で生成された秘匿データコードのオブジェクトコードと、をリンカによりリンクさせてロードモジュールであるプログラムを生成する。
【００６５】
生成されたプログラムは、図８に例示されるように、メインプログラムとともに、呼び出しコード、秘匿データコード、データ抜き出しコードがテキストセクションに含まれるものとなる。また、秘匿データコードから読み出された秘匿データを利用するプログラムコードであるデータの利用コードを含むものであってもよい。利用コードはステップＳ１０のメインプログラムの生成ステップで生成すればよい。
【００６６】
また、コード情報データベースの登録内容をプログラム内に含めるようにしてもよい。コード情報データベースは、プログラム内ではなく、記憶部１２に記憶してもよい。これが、コード情報データベース記憶手段３２に相当する。
【００６７】
なお、上記実施の形態及び変形例では、１つのプログラムコード内に１つの秘匿データを埋め込む例を示したが、１つのプログラムに複数の秘匿データを埋め込むことも可能である。その場合には、データ抜き出しコードやオペランド情報データベースは複数の秘匿データに対して共通に設けてもよい。
【００６８】
＜データ読出処理＞
以下、上記データ秘匿処理によって生成されたプログラムに埋め込まれたデータを読み出すデータ読出処理について説明する。
【００６９】
データ秘匿・読出装置１００は、記憶部１２に格納されているデータ読出プログラムを実行することによって、図９に示すフローチャートに沿ってデータ読出処理を実行する。本実施の形態においては、データ読出プログラムは、上記データ秘匿処理において生成されたプログラムである。
【００７０】
ステップＳ２０では、読み出した秘匿データを格納するメモリ領域を確保する。このステップが、図２における秘匿データコード読出手段２８の一部に相当する。
【００７１】
中央処理部１０は、以下の処理で読み出される秘匿データを格納するために記憶部１２の空き領域を確保する。また、確保した空き領域の開始アドレスを求める。
【００７２】
ステップＳ２２では、呼び出しコードをコールして、データ抜き出しコードを呼び出す。このステップが、図２における秘匿データコード読出手段２８の一部に相当する。
【００７３】
中央処理部１０は、プログラムに含まれる呼び出しコードを実行する。呼び出しコードを実行すると、プログラムに含まれるデータ抜き出しコードの処理が呼び出される。このとき、呼び出しコードに含まれる秘匿データ格納部の開始アドレス及び秘匿データ格納部のサイズ、及び、ステップＳ２０で確保されたメモリ領域の開始アドレスがデータ呼び出しコードに引き渡される。
【００７４】
ステップＳ２４では、秘匿データが読み出される。このステップが、図２における秘匿データコード読出手段２８及び秘匿データコード解析手段３０の一部に相当する。
【００７５】
中央処理部１０は、ステップＳ２２で呼び出されたデータ抜き出しコードを実行する。データ抜き出しコードは、プログラムに埋め込まれている秘匿データ格納部にアクセスし、秘匿データ格納部の開始アドレスから秘匿データコードを順次読み出す。中央処理部１０は、秘匿データ格納部に格納されているデータを読み出し、コード情報データベースを参照して、どのオペコードであるかを調べる。そして、該当するオペコードのオペランド部のデータ長を求め、オペコード部とオペランド部との組み合わせからなる秘匿データコードを読み出す。本実施の形態では、秘匿データコードを１つずつ読み出し、次のステップＳ２６における秘匿データの格納処理を行う。
【００７６】
なお、コード情報データベースは、プログラムに組み込んであるものでもよいし、中央処理部１０からアクセス可能に記憶部１２等に格納されているものでもよい。
【００７７】
例えば、ソースコード“Ｍｏｖ  ｅａｘ  ０ｘ１１２２３３４４”に対応する秘匿データコード“Ｂ８Ｈ，４４Ｈ，３３Ｈ，２２Ｈ，１１Ｈ”が格納されている場合、図５に例示するコード情報データベースではオペコード“Ｂ８Ｈ（Ｍｏｖ ｅａｘ）”が１バイト、それに対するオペランドのデータ長は４バイトであるので秘匿データ格納部の先頭アドレスから５バイトのデータを最初の秘匿データコードとして読み出す。
【００７８】
次にステップＳ２４に処理が戻ってきた場合、上記秘匿データコードの後に、ソースコード“Ａｄｄ  ｅａｘ  ０ｘ５５６６７７８８” に対応する秘匿データコード“０５Ｈ，８８Ｈ，７７Ｈ，６６Ｈ，５５Ｈ”が格納されていたとすると、図５に例示するコード情報データベースではオペコード“０５Ｈ（Ａｄｄ  ｅａｘ）”が１バイト、それに対するオペランドのデータ長は４バイトであるので秘匿データ格納部の先頭アドレスから５バイトのデータを２番目の秘匿データコードとして読み出す。
【００７９】
ステップＳ２６では、オペランド部からデータを読出し、確保してあるメモリ領域に格納する。このステップは、図２における秘匿データコード解析手段３０の一部に相当する。
【００８０】
中央処理部１０は、ステップＳ２４で行ったオペコード部とオペランド部との切り分けに応じて、読み出した秘匿データコードから秘匿データのみを抽出して、ステップＳ２０で確保したメモリの空き領域の開始アドレスから順に格納していく。
【００８１】
例えば、上記の例で秘匿データコード“Ｂ８Ｈ，４４Ｈ，３３Ｈ，２２Ｈ，１１Ｈ”が読み出された場合、先頭の１バイトはオペコード“Ｂ８Ｈ（Ｍｏｖ  ｅａｘ）”であるので、その部分を読み飛ばしてデータ長が４バイトであるオペランド部のデータ“０ｘ１１２２３３４４”を抽出し、メモリの空き領域の開始アドレスから４バイト分のメモリ領域に格納する。
【００８２】
次に、秘匿データコード“０５Ｈ，８８Ｈ，７７Ｈ，６６Ｈ，５５Ｈ”が読み出された場合、先頭の１バイトはオペコード“０５Ｈ（Ａｄｄ  ｅａｘ）”であるので、それを読み飛ばしてデータ長が４バイトであるオペランド部のデータ“０ｘ５５６６７７８８”を抽出し、データ“０ｘ１１２２３３４４”が格納領域の後のメモリ領域（先頭アドレスから５バイト目から４バイト分）に格納する。
【００８３】
ステップＳ２８では、総ての秘匿データを読み出したか否かが判定される。このステップは、図２における秘匿データコード解析手段３０の一部に相当する。
【００８４】
中央処理部１０は、秘匿データ格納部に格納されている秘匿データコードを総て読み出したか否かを判定する。具体的には、データ抜き出しコードにおいて、呼び出しコードから引き渡された秘匿データ格納部の開始アドレス及び秘匿データ格納部のサイズを用いて、秘匿データ格納部の最終端まで秘匿データコードを読み出したか否かを判定する。総ての読み出しが終了すればデータの読み出し処理を終了してメインプログラムの処理に戻り、そうでなければステップＳ２４に処理を戻し、新たな秘匿データコードの読み出しを行う。
【００８５】
＜変形例＞
上記実施の形態では、秘匿データコードとしてダミーのプログラムコードをプログラムに組み込むものとしたが、秘匿データコードを実行することによって秘匿データが読み出せるようにしてもよい。
【００８６】
例えば、データを確保したメモリ（レジスタ）に格納するプログラムコードと、そのメモリ（レジスタ）のアドレスを増加させるプログラムコードの組み合わせで秘匿データコードを生成し、その秘匿データコードを実行することでメモリに秘匿データを順次格納することができる。秘匿データは、確保したメモリ（レジスタ）にデータを格納するプログラムコードのデータ部分に埋め込む。
【００８７】
より具体的には、レジスタｅａｘに格納されているアドレス値で示されるメモリ領域に即値データを格納するソースコード“Ｍｏｖｌ  ［ｅａｘ］  即値（４バイト）”と、レジスタｅａｘの値を格納したデータサイズ（４バイト）だけ増加させるソースコード“Ａｄｄ  ｅａｘ  ４”とを組み合わせて、図１０に例示するように、秘匿データの格納に必要な数だけその組み合わせを繰り返す秘匿データコードを生成する。秘匿データは即値として埋め込む。秘匿データコードの最後には、メインルーチンに処理を戻すコードを入れる。
【００８８】
このように生成された秘匿データコードを、秘匿データコードの呼び出しコードを含むメインプログラムとリンクさせてプログラムを生成する。
【００８９】
秘匿データの読み出し処理は、メインプログラムの呼び出しコードにより秘匿データコードを呼び出すことによって行われる。
【００９０】
例えば、上記例の場合、レジスタｅａｘに秘匿データの格納先となるメモリ領域の開始アドレスを格納して秘匿データコードの先頭部分を呼び出すと、秘匿データコード“Ｍｏｖｌ  ［ｅａｘ］  即値（４バイト）”が実行されて、そのコードに含まれる４バイトの即値がレジスタｅａｘで示されるメモリ領域に格納される。続いて、秘匿データコード“Ａｄｄ  ｅａｘ  ４”が実行され、レジスタｅａｘの値が４バイトだけ増加される。続いて、次の“Ｍｏｖ”コードが実行されて、次の秘匿データが４バイト増加されたレジスタｅａｘで示されるメモリ領域に格納される。このような処理が組み合わされることによって確保したメモリ空間に秘匿データが順次格納される。秘匿データコードの最後にメインルーチンに処理を戻すコードを入れておくことによって、秘匿データの読み出しが終了した時点でメインルーチンに処理が戻される。
【図面の簡単な説明】
【００９１】
【図１】本発明の実施の形態におけるデータ秘匿・読出装置の構成を示す図である。
【図２】本発明の実施の形態におけるデータ秘匿・読出装置の機能ブロック図である。
【図３】本発明の実施の形態におけるデータ秘匿処理のフローチャートである。
【図４】プログラムコードの構成例を示す図である。
【図５】プログラムコードにおけるオペコードとオペランドのサイズの関係の例を示す図である。
【図６】本発明の実施の形態におけるトライグラムの例を示す図である。
【図７】本発明の実施の形態におけるテンプレート及びそれから生成される秘匿データコードの例を示す図である。
【図８】本発明の実施の形態におけるプログラムの構成例を示す図である。
【図９】本発明の実施の形態におけるデータ読出処理のフローチャートである。
【図１０】本発明の変形例における秘匿データコードの例を示す図である。
【符号の説明】
【００９２】
１０  中央処理部、１２  記憶部、１４  入力部、１６  表示部、１８  インターフェース部、２０  メインプログラム生成手段、２２  秘匿対象データ取得手段、２４  秘匿データコード生成手段、２６  プログラム生成手段、２８  秘匿データコード読出手段、３０  秘匿データコード解析手段、３２  コード情報データベース記憶手段、１００  データ秘匿・読出装置。
【図１】
2009211646.tif 000003
【図２】
2009211646.tif 000004
【図３】
2009211646.tif 000005
【図４】
2009211646.tif 000006
【図５】
2009211646.tif 000007
【図６】
2009211646.tif 000008
【図７】
2009211646.tif 000009
【図８】
2009211646.tif 000010
【図９】
2009211646.tif 000011
【図１０】
2009211646.tif 000012