(57)【要約】【課題】ソースプログラム内の暗号化対象箇所の内容を推定され難くして、ソースプログラムを効果的に保護すること。【解決手段】ソースプログラム保護システムは、ソースプログラム内で指定記号により囲まれた記述を第１の文字列に第１の置換文字列を対応付けた第１の対応付け情報を生成し、第１の対応付け情報に基づいて、ソースプログラム内で第１の文字列を第１の置換文字列に置換して第１の部分暗号化ソースプログラムとして出力し、第１の対応付け情報を暗号化して第１の秘密情報ファイルとして出力する第１の装置と、第１の秘密情報ファイルを復号化して第１の対応付け情報を抽出し、第１の対応付け情報に基づいて、第１の部分暗号化ソースプログラム内で第１の置換文字列を第１の文字列に置換して復号化ソースプログラムを生成し、復号化ソースプログラムから指定記号を除外して所定の処理を行い、当該処理の結果を出力する、第２の装置と、を備える。【選択図】図１
2019053146.tif 000002
【特許請求の範囲】
【請求項１】
任意の文字列が所定の指定記号により囲まれた記述を含むソースプログラムの入力を受け付け、
前記ソースプログラム内で前記指定記号により囲まれた記述を第１の文字列として検出し、
前記第１の文字列に第１の置換文字列を対応付けた第１の対応付け情報を生成し、
前記第１の対応付け情報に基づいて、前記ソースプログラム内で前記第１の文字列を前記第１の置換文字列に置換して第１の部分暗号化ソースプログラムとして出力し、
前記第１の対応付け情報を暗号化して第１の秘密情報ファイルとして出力する、
第１の装置と、
前記第１の部分暗号化ソースプログラムと、前記第１の秘密情報ファイルとの入力を受け付け、
前記第１の秘密情報ファイルを復号化して前記第１の対応付け情報を抽出し、
前記第１の対応付け情報に基づいて、前記第１の部分暗号化ソースプログラム内で前記第１の置換文字列を前記第１の文字列に置換して復号化ソースプログラムを生成し、
前記復号化ソースプログラムから前記指定記号を除外して所定の処理を行い、当該処理の結果を出力する、
第２の装置と、
を備えるソースプログラム保護システム。
【請求項２】
前記第１の装置は、
前記指定記号の入力をさらに受け付け、
前記第１の秘密情報ファイルに前記指定記号をさらに含めて出力し、
前記第２の装置は、
前記第１の部分暗号化ソースプログラム内で、前記受け付けた第１の秘密情報ファイルに含まれる前記指定記号で囲まれた記述を前記第１の置換文字列として検出し、
前記第１の対応付け情報に基づいて、前記第１の部分暗号化ソースプログラム内で前記検出した第１の置換文字列を前記第１の文字列に置換する
請求項１に記載のソースプログラム保護システム。
【請求項３】
前記第２の装置は、所定の秘密鍵を有し、
前記第１の装置は、
前記秘密鍵に対応する公開鍵を前記第２の装置から取得し、
前記公開鍵を用いて前記第１の対応付け情報を暗号化し、
前記第２の装置は、
前記秘密鍵を用いて前記第１の秘密情報ファイルを復号化する
請求項１又は２に記載のソースプログラム保護システム。
【請求項４】
前記第１の装置は、
前記ソースプログラム内で前記指定記号により囲まれた記述が複数個所検出された場合、当該複数個所の文字列同士を比較し、当該文字列同士が一致する場合、共通の前記第１の置換文字列に置換する
請求項１乃至３のいずれか１項に記載のソースプログラム保護システム。
【請求項５】
前記第２の装置は、
前記所定の処理としてコンパイルを行い、当該コンパイルにより生成されたオブジェクトプログラムを前記処理の結果として出力する、
請求項１乃至４のいずれか１項に記載のソースプログラム保護システム。
【請求項６】
前記第２の装置は、
前記コンパイルの前処理により、前記復号化ソースプログラムからコンパイル用のソースプログラムであるプログラムリストを生成し、
前記プログラムリスト内で前記指定記号により囲まれた記述を第２の文字列として検出し、
前記第２の文字列に第２の置換文字列を対応付けた第２の対応付け情報を生成し、
前記第２の対応付け情報に基づいて、前記プログラムリスト内で前記第２の文字列を前記第２の置換文字列に置換して第２の部分暗号化ソースプログラムとして出力し、
前記第２の対応付け情報を暗号化して第２の秘密情報ファイルとして出力する、
請求項５に記載のソースプログラム保護システム。
【請求項７】
前記第２の装置は、
前記第１の秘密情報ファイルを復号化する際に用いた秘密鍵に対応する公開鍵を用いて前記第２の対応付け情報を暗号化する
請求項６に記載のソースプログラム保護システム。
【請求項８】
前記第１の装置は、
前記ソースプログラムを表示し、
編集要求に応じて前記ソースプログラムを更新して再表示し、
保存要求に応じて前記更新後のソースプログラム内の前記指定記号により囲まれた記述を第３の文字列として検出し、
前記第３の文字列に第３の置換文字列を対応付けた第３の対応付け情報を生成し、
前記第３の対応付け情報に基づいて、前記更新後のソースプログラム内で前記第３の文字列を前記第３の置換文字列に置換して第３の部分暗号化ソースプログラムとして出力し、
前記第３の対応付け情報を暗号化して第３の秘密情報ファイルとして出力する、
請求項１乃至４のいずれか１項に記載のソースプログラム保護システム。
【請求項９】
前記第２の装置は、
前記所定の処理として前記復号化ソースプログラムに対して所定の解析を行い、
前記解析の結果内で前記指定記号により囲まれた記述を第４の文字列として検出し、
前記第４の文字列に第４の置換文字列を対応付けた第４の対応付け情報を生成し、
前記第４の対応付け情報に基づいて、前記解析の結果内で前記第４の文字列を前記第４の置換文字列に置換した部分暗号化解析結果を前記処理の結果として出力する
請求項１乃至４のいずれか１項に記載のソースプログラム保護システム。
【請求項１０】
第１の装置において、
任意の文字列が所定の指定記号により囲まれた記述を含むソースプログラムの入力を受け付け、
前記ソースプログラム内で前記指定記号により囲まれた記述を第１の文字列として検出し、
前記第１の文字列に第１の置換文字列を対応付けた第１の対応付け情報を生成し、
前記第１の対応付け情報に基づいて、前記ソースプログラム内で前記第１の文字列を前記第１の置換文字列に置換して第１の部分暗号化ソースプログラムとして出力し、
前記第１の対応付け情報を暗号化して第１の秘密情報ファイルとして出力し、
第２の装置において、
前記第１の部分暗号化ソースプログラムと、前記第１の秘密情報ファイルとの入力を受け付け、
前記第１の秘密情報ファイルを復号化して前記第１の対応付け情報を抽出し、
前記第１の対応付け情報に基づいて、前記第１の部分暗号化ソースプログラム内で前記第１の置換文字列を前記第１の文字列に置換して復号化ソースプログラムを生成し、
前記復号化ソースプログラムから前記指定記号を除外して所定の処理を行い、当該処理の結果を出力する、
ソースプログラム保護方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースプログラム保護システム及び方法に関し、特に、ソースプログラムを部分的に暗号化及び復号化するためのソースプログラム保護システム及び方法に関する。
【背景技術】
【０００２】
コンパイラの保守業務では、利用者から問題（計算違いや動作不正など）が報告された場合、原因究明するために、ソースプログラム及びコンパイラで作成した実行モジュール（オブジェクトプログラム）に対して調査を実施する必要がある。
【０００３】
ここで、調査において、ソースプログラム及び実行モジュールの構成が複雑であり、複数条件に影響される可能性がある。そのため、コンパイラの保守担当者は、利用者のソースプログラムを入手し、調査環境で再現することが望ましい。しかし、利用者のソースプログラムの一部に秘密情報が含まれている場合には入手することができず、調査に影響することがある。
【０００４】
特許文献１には、ロボット制御装置等を制御するためのソースプログラムの提供元において、ソースプログラムの一部のノウハウ等を暗号化し、提供先において部分的に暗号化されたソースプログラムから適切にコンパイルを行うための技術が開示されている。まず、提供元がソースプログラムの一部の暗号化対象行を指定した記述を行う。そして、提供元の変換プログラムが、当該指定後のソースプログラムのうち暗号化対象行について、所定の暗号化を行った暗号化プログラム部に置き換えた部分暗号化ソースプログラムを生成する。その後、提供先は、部分暗号化ソースプログラムの提供を受ける。そして、提供先のコンパイラが、部分暗号化ソースプログラムのうち暗号化プログラム部について復号化を行った上で、コンパイルを行い、オブジェクトプログラムを生成する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−２０２６６３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１には、ソースプログラム内の秘密情報の保護が不十分であるという問題点がある。その理由は、特許文献１では、暗号化対象行と暗号化プログラム部との分量に相関があり、提供先のユーザが部分暗号化ソースプログラムを閲覧した際に、暗号化前の記述内容を推定されるおそれがあるためである。
【０００７】
本発明は、このような問題点を解決するためになされたものであり、ソースプログラム内の暗号化対象箇所の内容を推定され難くして、ソースプログラムを効果的に保護するためのソースプログラム保護システム及び方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の第１の態様にかかるソースプログラム保護システムは、
任意の文字列が所定の指定記号により囲まれた記述を含むソースプログラムの入力を受け付け、
前記ソースプログラム内で前記指定記号により囲まれた記述を第１の文字列として検出し、
前記第１の文字列に第１の置換文字列を対応付けた第１の対応付け情報を生成し、
前記第１の対応付け情報に基づいて、前記ソースプログラム内で前記第１の文字列を前記第１の置換文字列に置換して第１の部分暗号化ソースプログラムとして出力し、
前記第１の対応付け情報を暗号化して第１の秘密情報ファイルとして出力する、
第１の装置と、
前記第１の部分暗号化ソースプログラムと、前記第１の秘密情報ファイルとの入力を受け付け、
前記第１の秘密情報ファイルを復号化して前記第１の対応付け情報を抽出し、
前記第１の対応付け情報に基づいて、前記第１の部分暗号化ソースプログラム内で前記第１の置換文字列を前記第１の文字列に置換して復号化ソースプログラムを生成し、
前記復号化ソースプログラムから前記指定記号を除外して所定の処理を行い、当該処理の結果を出力する、
第２の装置と、
を備える。
【０００９】
本発明の第２の態様にかかるソースプログラム保護方法は、
第１の装置において、
任意の文字列が所定の指定記号により囲まれた記述を含むソースプログラムの入力を受け付け、
前記ソースプログラム内で前記指定記号により囲まれた記述を第１の文字列として検出し、
前記第１の文字列に第１の置換文字列を対応付けた第１の対応付け情報を生成し、
前記第１の対応付け情報に基づいて、前記ソースプログラム内で前記第１の文字列を前記第１の置換文字列に置換して第１の部分暗号化ソースプログラムとして出力し、
前記第１の対応付け情報を暗号化して第１の秘密情報ファイルとして出力し、
第２の装置において、
前記第１の部分暗号化ソースプログラムと、前記第１の秘密情報ファイルとの入力を受け付け、
前記第１の秘密情報ファイルを復号化して前記第１の対応付け情報を抽出し、
前記第１の対応付け情報に基づいて、前記第１の部分暗号化ソースプログラム内で前記第１の置換文字列を前記第１の文字列に置換して復号化ソースプログラムを生成し、
前記復号化ソースプログラムから前記指定記号を除外して所定の処理を行い、当該処理の結果を出力する。
【発明の効果】
【００１０】
本発明により、ソースプログラム内の暗号化対象箇所の内容を推定され難くして、ソースプログラムを効果的に保護するためのソースプログラム保護システム及び方法を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施の形態１にかかるソースプログラム保護システムの構成を示すブロック図である。
【図２】本発明の実施の形態１にかかるソースプログラム保護方法（部分暗号化処理）の流れを示すフローチャートである。
【図３】本発明の実施の形態１にかかるソースプログラム保護方法（復号処理）の流れを示すフローチャートである。
【図４】本発明の実施の形態２にかかるソースプログラム保護システムの構成を示すブロック図である。
【図５】本発明の実施の形態２にかかる部分暗号化処理モジュールの構成を示すブロック図である。
【図６】本発明の実施の形態２にかかる復号処理モジュールの構成を示すブロック図である。
【図７】本発明の実施の形態２にかかる秘密情報リストの例を示す図である。
【図８】本発明の実施の形態２にかかる部分暗号化処理の流れを説明するためのフローチャートである。
【図９】本発明の実施の形態２にかかる復号処理の流れを説明するためのフローチャートである。
【図１０】本発明の実施の形態２にかかるコンパイル処理の流れを説明するためのフローチャートである。
【図１１】本発明の実施の形態２にかかるプログラムリストの部分暗号化処理の流れを説明するためのフローチャートである。
【図１２】本発明の実施の形態３にかかるソースプログラム編集装置の構成を示すブロック図である。
【図１３】本発明の実施の形態３にかかるソースプログラム編集処理の流れを説明するためのフローチャートである。
【図１４】本発明の実施の形態４にかかるソースプログラム解析装置の構成を示すブロック図である。
【図１５】本発明の実施の形態４にかかるソースプログラム解析処理の流れを説明するためのフローチャートである。
【発明を実施するための形態】
【００１２】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
【００１３】
＜実施の形態１＞
図１は、本発明の実施の形態１にかかるソースプログラム保護システム１００の構成を示すブロック図である。ソースプログラム保護システム１００は、第１の装置１０と、第２の装置２０とを備える。第１の装置１０は、ソースプログラム３１に対して本実施の形態１にかかる部分暗号化処理を行う。第１の装置１０は、例えば、ソースプログラム３１の提供元のユーザが操作するコンピュータ等の情報処理装置である。ここで、ソースプログラム３１は、任意の文字列が所定の指定記号により囲まれた記述を含むコンピュータプログラムである。尚、任意の文字列は、プログラムにおける文の集合に限定されず、プログラムコードの一部も含まれるものとする。そして、任意の文字列は、提供元が提供先に開示できない秘密情報を含む記述であるものとする。つまり、任意の文字列は、暗号化対象の情報である。また、指定記号とは、プログラムミング言語における予約語であるか、特定の文字の組合せであり、通常のプログラムコードとは区別可能な文字列であるものとする。また、提供元のユーザは、第１の装置１０を用いてソースプログラム３１の開発を行っても良い。そして、提供元のユーザは、第１の装置１０を用いてソースプログラム３１内の任意の文字列を、所定の指定記号により囲むように追記してもよい。
【００１４】
第１の装置１０は、ソースプログラム３１の入力を受け付ける。そして、第１の装置１０は、ソースプログラム３１内で指定記号により囲まれた記述を第１の文字列として検出する。続いて、第１の装置１０は、第１の文字列に第１の置換文字列を対応付けた第１の対応付け情報を生成する。尚、第１の置換文字列は、少なくとも第１の文字列とは異なる文字列である。また、第１の置換文字列自体は、暗号化されている必要はない。第１の置換文字列は、例えば、所定の桁数の数字列等であってもよい。そして、第１の装置１０は、第１の対応付け情報に基づいて、ソースプログラム３１内で第１の文字列を第１の置換文字列に置換して第１の部分暗号化ソースプログラム３２として出力する。また、第１の装置１０は、第１の対応付け情報を暗号化して第１の秘密情報ファイル３３として出力する。
【００１５】
尚、第１の装置１０は、ハードウェア構成として、制御部（不図示）及び記憶部（不図示）等を備える。第１の装置１０の記憶部には、上述した部分暗号化処理が実装されたコンピュータプログラムが格納されている。第１の装置１０の制御部は、記憶部からコンピュータプログラムを読み出し、実行することにより、部分暗号化処理を実現する。
【００１６】
第２の装置２０は、第１の秘密情報ファイル３３を用いて、第１の部分暗号化ソースプログラム３２に対して本実施の形態１にかかる復号処理を行う。第２の装置２０は、例えば、ソースプログラム３１の提供先のユーザが操作するコンピュータ等の情報処理装置である。第２の装置２０は、例えば、第１の装置１０から提供された第１の部分暗号化ソースプログラム３２を読み込み、コンパイル又は解析等の所定の処理を行う。
【００１７】
第２の装置２０は、第１の部分暗号化ソースプログラム３２と、第１の秘密情報ファイル３３との入力を受け付ける。そして、第２の装置２０は、第１の秘密情報ファイル３３を復号化して第１の対応付け情報を抽出する。その後、第２の装置２０は、第１の対応付け情報に基づいて、第１の部分暗号化ソースプログラム３２内で第１の置換文字列を第１の文字列に置換して復号化ソースプログラムを生成する。そして、第２の装置２０は、復号化ソースプログラムから指定記号を除外して所定の処理を行い、当該処理の結果３４を出力する。
【００１８】
尚、第２の装置２０は、ハードウェア構成として、制御部（不図示）及び記憶部（不図示）等を備える。第２の装置２０の記憶部には、上述した復号処理が実装されたコンピュータプログラムが格納されている。第２の装置２０の制御部は、記憶部からコンピュータプログラムを読み出し、実行することにより、復号処理を実現する。
【００１９】
図２は、本発明の実施の形態１にかかるソースプログラム保護方法における部分暗号化処理の流れを示すフローチャートである。まず、第１の装置１０は、ソースプログラム３１の入力を受け付ける（Ｓ１１１）。次に、第１の装置１０は、ソースプログラム３１内で指定記号により囲まれた記述を第１の文字列として検出する（Ｓ１１２）。そして、第１の装置１０は、第１の文字列に第１の置換文字列を対応付けた第１の対応付け情報を生成する（Ｓ１１３）。
【００２０】
その後、第１の装置１０は、第１の対応付け情報に基づいて、ソースプログラム３１内で第１の文字列を第１の置換文字列に置換する（Ｓ１１４）。そして、第１の装置１０は、置換後のソースプログラムを第１の部分暗号化ソースプログラム３２として出力する（Ｓ１１５）。
【００２１】
併せて、ステップ１１３の後、第１の装置１０は、第１の対応付け情報を暗号化する（Ｓ１１６）。そして、第１の装置１０は、暗号化後の情報を第１の秘密情報ファイル３３として出力する（Ｓ１１７）。
【００２２】
図３は、本発明の実施の形態１にかかるソースプログラム保護方法における復号処理の流れを示すフローチャートである。まず、第２の装置２０は、第１の部分暗号化ソースプログラム３２と、第１の秘密情報ファイル３３との入力を受け付ける（Ｓ１２１）。次に、第２の装置２０は、第１の秘密情報ファイル３３を復号化して第１の対応付け情報を抽出する（Ｓ１２２）。そして、第２の装置２０は、第１の対応付け情報に基づいて、第１の部分暗号化ソースプログラム３２内で第１の置換文字列を第１の文字列に置換して復号化ソースプログラムを生成する（Ｓ１２３）。ここで、復号化ソースプログラムは、ソースプログラム３１と同一の内容である。第２の装置２０は、復号化ソースプログラムから指定記号を除外して所定の処理を行う（Ｓ１２４）。そして、第２の装置２０は、当該処理の結果３４を出力する（Ｓ１２５）。
【００２３】
このように、提供元の第１の装置１０により、ソースプログラム３１内の第１の文字列が、第１の文字列とは異なる第１の置換文字列に置換されており、置換前の第１の文字列と置換後の第１の置換文字列との第１の対応付け情報が暗号化されている。そのため、提供先のユーザは、第１の部分暗号化ソースプログラム３２の記述内容を閲覧しても暗号化対象の文字列を把握することができない。そして、第２の装置２０は、第１の部分暗号化ソースプログラム３２と第１の秘密情報ファイル３３とを取得し、内部の処理のために復号しているが、復号化ソースプログラム自体を出力していない。そのため、提供先のユーザによる暗号化対象箇所の記述内容を推定し難くし、ソースプログラムを効果的に保護することができる。
【００２４】
＜実施の形態２＞
本実施の形態２は、上述した実施の形態１の改良例である。本実施の形態２は、実施の形態１の第２の装置２０をコンパイラ装置に適用したものである。ここで、コンパイラ製品の障害調査において、現象が発生するソースプログラムが必要となる場合がある。しかし、秘密情報を含むソースプログラムを平文のままで提供先に送付すると、以下のリスクにより情報が漏れる可能性が出てくる。
【００２５】
まず、重要な計算方法、数字、及び、定義などと調査が必要なソースプログラム情報を混在表示すると、提供先のユーザが直接目視し、そのまま記憶できてしまう。そのため、当該ユーザにとって不本意であっても目に入ったソースプログラム内の秘密情報を覚えてしまい、情報漏えいに繋がる可能性がある。また、提供先のセキュリティ環境は、提供元によるコントロールの範囲外であるため、絶対的な安全性が保証されない。
【００２６】
そこで、一般的には、秘密情報を含むソースプログラムから秘密情報を除いて送付する方法、または、コンパイル済みの実行モジュールのみ送付する方法により運用されている。これらの方法では、情報漏えいを防ぐことができる。しかし、ソースプログラムの修正による調査対象への影響、または、実行モジュールのみ送付による情報不足のため、原因究明に支障が出る可能性がある。例えば、提供先は、提供されたソースプログラムにデバッグ用のコードを記述するなどの修正をして、実行モジュールを生成し、試行することにより障害調査を行うことが効率的な場合がある。しかし、提供されたソースプログラムは、秘密情報が除外された不完全なプログラムコードであるため、コンパイルすることができない。また、コンパイル済みの実行モジュールのみが送付された場合には、提供先は、デバッグ用のコード等を埋め込むことができない。よって、障害調査の効率が低下する。
【００２７】
そのため、本実施の形態２では、以下の特徴を備えることとした。すなわち、前記第１の装置は、前記指定記号の入力をさらに受け付け、前記第１の秘密情報ファイルに前記指定記号をさらに含めて出力する。そして、前記第２の装置は、前記第１の部分暗号化ソースプログラム内で、前記受け付けた第１の秘密情報ファイルに含まれる前記指定記号で囲まれた記述を前記第１の置換文字列として検出し、前記第１の対応付け情報に基づいて、前記第１の部分暗号化ソースプログラム内で前記検出した第１の置換文字列を前記第１の文字列に置換する。このように、指定記号として任意の文字列を用いることができるため、暗号化対象箇所の指定の自由度を高めることができる。
【００２８】
また、前記第２の装置は、所定の秘密鍵を有するものとする。そして、前記第１の装置は、前記秘密鍵に対応する第１の公開鍵を前記第２の装置から取得し、前記第１の公開鍵を用いて前記第１の対応付け情報を暗号化する。前記第２の装置は、前記秘密鍵を用いて前記第１の秘密情報ファイルを復号化することが望ましい。このように、秘密情報ファイルは、コンパイラ装置（第２の装置２０）内の秘密鍵でしか復号化できないため、第１の部分暗号化ソースプログラム及び秘密情報ファイルをより安全に保護できる。
【００２９】
さらに、前記第１の装置は、前記ソースプログラム内で前記指定記号により囲まれた記述が複数個所検出された場合、当該複数個所の文字列同士を比較し、当該文字列同士が一致する場合、共通の前記第１の置換文字列に置換することが望ましい。これにより、秘密情報リストへの重複登録を抑制し、秘密情報リスト及び秘密情報ファイルのサイズを小さく抑えることができる。
【００３０】
また、前記第２の装置は、前記所定の処理としてコンパイルを行い、当該コンパイルにより生成されたオブジェクトプログラムを前記処理の結果として出力するものである。つまり、第２の装置をコンパイラ装置に適用可能である。
【００３１】
その場合、前記第２の装置は、前記コンパイルの前処理により、前記復号化ソースプログラムからコンパイル用のソースプログラムであるプログラムリストを生成し、前記プログラムリスト内で前記指定記号により囲まれた記述を第２の文字列として検出し、前記第２の文字列に第２の置換文字列を対応付けた第２の対応付け情報を生成し、前記第２の対応付け情報に基づいて、前記プログラムリスト内で前記第２の文字列を前記第２の置換文字列に置換して第２の部分暗号化ソースプログラムとして出力し、前記第２の対応付け情報を暗号化して第２の秘密情報ファイルとして出力することが望ましい。これにより、閲覧用のプログラムリスト内の暗号化対象箇所も適切に保護することができる。
【００３２】
さらに、前記第２の装置は、前記第１の秘密情報ファイルを復号化する際に用いた秘密鍵に対応する公開鍵を用いて前記第２の対応付け情報を暗号化するとよい。これにより、提供先において前記第２の部分暗号化ソースプログラムに対して修正がされた場合であっても、第２の装置２０において、第２の秘密情報ファイル及び第２の部分暗号化ソースプログラムを復号化することができ、障害調査の効率を高めることができる。
【００３３】
図４は、本発明の実施の形態２にかかるソースプログラム保護システム２００の構成を示すブロック図である。ソースプログラム保護システム２００は、ソースプログラム部分暗号化装置４０と、コンパイラ装置５０とを備える。ソースプログラム部分暗号化装置４０は、第１の装置１０の一例であり、部分暗号化処理モジュール４１を備える。ソースプログラム部分暗号化装置４０は、ソースプログラムＣ１、秘密情報指定符Ｃ０及び公開鍵Ｋ１を入力し、部分暗号化処理を行い、ソースプログラムＣ４及び秘密情報ファイルＣ３を出力する。そして、ソースプログラムＣ４及び秘密情報ファイルＣ３は、コンパイラ装置５０に向けて送付される。
【００３４】
ここで、秘密情報指定符Ｃ０は、所定の指定記号の一例である。秘密情報指定符Ｃ０は、開始記号Ｃ０−１と終了記号Ｃ０−２との組である。ここでは、開始記号Ｃ０−１を“［：”、終了記号Ｃ０−２を“：］”として例示している。但し、開始記号Ｃ０−１及び終了記号Ｃ０−２はこれに限定されない。
【００３５】
ソースプログラムＣ１は、ソースプログラム３１の一例であり、ＣＯＢＯＬ言語で記述されたプログラムコードの一部が例示的に記載されている。但し、ソースプログラムＣ１のコンピュータ言語はこれに限定されず、記述されるプログラムコードがこれらに限定されないのは、もちろんである。また、ソースプログラムＣ１は、秘密情報の記述を含み、秘密情報が開始記号Ｃ０−１と終了記号Ｃ０−２との間に記述されているものとする。つまり、秘密情報が開始記号Ｃ０−１と終了記号Ｃ０−２とに囲まれている。尚、ソースプログラムＣ１には、秘密情報が複数個所に記述されていても良く、その場合、各秘密情報が開始記号Ｃ０−１と終了記号Ｃ０−２とに囲まれているものとする。また、ソースプログラムＣ１内の各秘密情報は、異なる情報であっても同一の情報であっても構わない。
【００３６】
公開鍵Ｋ１は、後述するコンパイラ装置５０が内蔵する秘密鍵Ｈ１に対応する公開鍵である。そして、公開鍵Ｋ１は、コンパイラ装置５０側からソースプログラム部分暗号化装置４０側へ予め提供されているものとする。
【００３７】
ソースプログラムＣ４は、第１の部分暗号化ソースプログラム３２の一例であり、ソースプログラムＣ１内の秘密情報の記述が所定の数字列（項目番号）に置換されたものである。秘密情報ファイルＣ３は、第１の秘密情報ファイル３３の一例であり、公開鍵Ｋ１により暗号化された情報である。また、秘密情報ファイルＣ３は、秘密情報と項目番号とを対応付けた情報と、秘密情報指定符Ｃ０とが含まれる。
【００３８】
尚、図４では、ソースプログラムＣ１内の“01 A1 PIC 9(3) USAGE IS DISPLAY.”が秘密情報（第１の文字列）の一例であり、ソースプログラムＣ４内の“000000000000001”が項目番号（第１の置換文字列）の一例であり、秘密情報ファイルＣ３内の“%?$^w$&$o$%h%2&+&Q$”が、第１の対応付け情報“000000000000001:01 A1 PIC 9(3) USAGE IS DISPLAY.”に対して公開鍵Ｋ１により暗号化された情報の一例を示す。
【００３９】
図５は、本発明の実施の形態２にかかる部分暗号化処理モジュール４１の構成を示すブロック図である。部分暗号化処理モジュール４１は、秘密情報リスト作成部４１１と、秘密情報ファイル作成部４１２とを備える。秘密情報リスト作成部４１１は、秘密情報指定符Ｃ０及びソースプログラムＣ１を入力し、秘密情報リストＣ２及びソースプログラムＣ４を生成して、出力する。
【００４０】
具体的には、秘密情報リスト作成部４１１は、ソースプログラムＣ１内で開始記号Ｃ０−１及び終了記号Ｃ０−２に囲まれた記述である秘密情報本文を検出する。そして、秘密情報リスト作成部４１１は、各秘密情報本文に対して異なる項目番号を割り当てて、秘密情報リストＣ２に登録する。つまり、秘密情報リストＣ２は、第１の文字列である秘密情報本文と第１の置換文字列である項目番号とを対応付けた対応付け情報の一例である。また、秘密情報リスト作成部４１１は、開始記号Ｃ０−１及び終了記号Ｃ０−２の組である秘密情報指定符Ｃ０を秘密情報リストＣ２に登録する。
【００４１】
図７は、本発明の実施の形態２にかかる秘密情報リストＣ２の例を示す図である。ここでは、秘密情報リストＣ２の第１レコードに開始記号Ｃ０−１、第２レコードに終了記号Ｃ０−２が登録されていることを示す。但し、秘密情報指定符Ｃ０の登録位置及び登録の仕方はこれに限定されない。また、秘密情報リストＣ２の第３レコード以降は、複数の項目番号Ｃ２−１と複数の秘密情報本文Ｃ２−２とがそれぞれ対応付けて登録されていることを示す。項目番号Ｃ２−１は、秘密情報本文Ｃ２−２ごとに割り当てられる１６桁の一意な番号である。但し、項目番号Ｃ２−１は置換文字列の一例であり、桁数や表記はこれに限定されない。置換文字列は少なくとも秘密情報本文Ｃ２−２とは異なる記述であり、秘密情報リストＣ２内で一意に識別できる情報であればよい。秘密情報本文Ｃ２−２は、提供元のユーザが提供先に開示できない秘密情報を示す文字列である。
【００４２】
図５に戻り説明を続ける。秘密情報リスト作成部４１１は、秘密情報リストＣ２を参照し、ソースプログラムＣ１内で検出された秘密情報本文を、当該秘密情報本文に対応付けられた項目番号に置換する。そして、秘密情報リスト作成部４１１は、置換後のソースプログラムＣ４を出力する。尚、秘密情報リストＣ２は、少なくともソースプログラム部分暗号化装置４０の内蔵メモリ内に記憶されるが、ソースプログラム部分暗号化装置４０の外部には出力されないものとする。一方、ソースプログラムＣ４は、外部の記憶装置等に格納される。
【００４３】
秘密情報ファイル作成部４１２は、公開鍵Ｋ１及び秘密情報リストＣ２を入力し、公開鍵Ｋ１を用いて秘密情報リストＣ２を暗号化して秘密情報ファイルＣ３を生成して、出力する。尚、秘密情報ファイルＣ３は、ソースプログラムＣ４と同様に、外部の記憶装置等に格納される。
【００４４】
図４に戻り説明を続ける。コンパイラ装置５０は、第２の装置２０の一例であり、復号処理モジュール５１と、コンパイル処理モジュール５２と、部分暗号化処理モジュール５３とを備える。また、コンパイラ装置５０は、秘密鍵Ｈ１を内部で保持している。但し、秘密鍵Ｈ１は、コンパイラ装置５０の外部から入力されるものであってもよい。コンパイラ装置５０は、ソースプログラムＣ４、秘密情報ファイルＣ３及び公開鍵Ｋ１を入力し、復号処理、コンパイル処理及び部分暗号化処理を行い、オブジェクトプログラムＣ５、プログラムリストＣ７及び秘密情報ファイルＣ８を出力する。
【００４５】
公開鍵Ｋ１は、上述した通り、コンパイラ装置５０が内蔵する秘密鍵Ｈ１に対応する公開鍵である。
【００４６】
図６は、本発明の実施の形態２にかかる復号処理モジュール５１の構成を示すブロック図である。復号処理モジュール５１は、復号部５１１と、秘密情報結合部５１２とを備える。復号部５１１は、秘密情報ファイルＣ３及び秘密鍵Ｈ１を入力し、秘密鍵Ｈ１を用いて秘密情報ファイルＣ３を復号化して秘密情報リストＣ２を抽出する。尚、秘密情報リストＣ２は、少なくともコンパイラ装置５０の内蔵メモリ内に記憶されるが、コンパイラ装置５０の外部には出力されないものとする。また、上述した通り、公開鍵Ｋ１と秘密鍵Ｈ１とは対応しているため、部分暗号化処理モジュール４１で生成された秘密情報リストＣ２と同一の情報が、復号処理モジュール５１で得られることとなる。
【００４７】
秘密情報結合部５１２は、ソースプログラムＣ４及び秘密情報リストＣ２を入力し、ソースプログラムＣ１及び秘密情報指定符Ｃ０を出力する。具体的には、秘密情報結合部５１２は、秘密情報リストＣ２から秘密情報指定符Ｃ０（開始記号Ｃ０−１及び終了記号Ｃ０−２の組）を抽出し、ソースプログラムＣ４内で開始記号Ｃ０−１及び終了記号Ｃ０−２に囲まれた記述である項目番号を検出する。そして、秘密情報結合部５１２は、秘密情報リストＣ２を参照し、検出された項目番号に対応付けられた秘密情報本文を抽出し、ソースプログラムＣ４内の項目番号を当該抽出した秘密情報本文に置換する。そして、秘密情報結合部５１２は、置換後のソースプログラム、つまり、復号化ソースプログラムであるソースプログラムＣ１を出力する。また、併せて、秘密情報結合部５１２は、秘密情報指定符Ｃ０を出力する。尚、ソースプログラムＣ１及び秘密情報指定符Ｃ０は、少なくともコンパイラ装置５０の内蔵メモリ内に記憶されるが、コンパイラ装置５０の外部には出力されないものとする。また、ソースプログラム部分暗号化装置４０の入力であるソースプログラムＣ１及び秘密情報指定符Ｃ０と同一の情報が、復号化ソースプログラム及び秘密情報指定符Ｃ０としてコンパイラ装置５０内で得られることとなる。
【００４８】
図４に戻り説明を続ける。コンパイル処理モジュール５２は、ソースプログラムＣ１及び秘密情報指定符Ｃ０を入力し、オブジェクトプログラムＣ５及びプログラムリストＣ６を出力する。具体的には、コンパイル処理モジュール５２は、コンパイルの前処理としてソースプログラムＣ１から実際のコンパイル対象のソースプログラムであるプログラムリストＣ６を生成する。例えば、コンパイル処理モジュール５２は、ソースプログラムＣ１内で参照する他のソースプログラムの記述等を取得し、ソースプログラムＣ１内の該当する記述と置換してプログラムリストＣ６として生成し、出力する。尚、プログラムリストＣ６は、少なくともコンパイラ装置５０の内蔵メモリ内に記憶されるが、コンパイラ装置５０の外部には出力されないものとする。
【００４９】
そして、コンパイル処理モジュール５２は、プログラムリストＣ６に対してコンパイルを行い、当該コンパイルにより生成されたオブジェクトプログラムＣ５を出力する。このとき、コンパイル処理モジュール５２は、プログラムリストＣ６内の秘密情報指定符Ｃ０を除外してコンパイルを行う。つまり、コンパイルは実施の形態１の所定の処理の一例であり、オブジェクトプログラムＣ５は実施の形態１の処理の結果の一例である。尚、オブジェクトプログラムＣ５は、外部の記憶装置等に格納される。
【００５０】
部分暗号化処理モジュール５３は、プログラムリストＣ６、秘密情報指定符Ｃ０及び公開鍵Ｋ１を入力し、プログラムリストＣ６に対して部分暗号化処理を行い、プログラムリストＣ７及び秘密情報ファイルＣ８を出力する。具体的には、部分暗号化処理モジュール５３は、プログラムリストＣ６内で秘密情報指定符Ｃ０により囲まれた記述を第２の文字列として検出する。そして、部分暗号化処理モジュール５３は、第２の文字列に第２の置換文字列を対応付けた第２の対応付け情報を生成する。そして、部分暗号化処理モジュール５３は、第２の対応付け情報に基づいて、プログラムリストＣ６内で第２の文字列を第２の置換文字列に置換して第２の部分暗号化ソースプログラムであるプログラムリストＣ７として出力する。また、部分暗号化処理モジュール５３は、公開鍵Ｋ１を用いて第２の対応付け情報を暗号化して第２の秘密情報ファイルＣ８として出力する。尚、プログラムリストＣ７及び秘密情報ファイルＣ８は、外部の記憶装置等に格納される。
【００５１】
尚、図４では、プログラムリストＣ６内の“A1”がソースプログラムＣ１内の“01 A1 PIC 9(3) USAGE IS DISPLAY.”から置換された記述（第２の文字列）の一例であり、プログラムリストＣ７内の“000000000000001”が項目番号（第２の置換文字列）の一例であり、秘密情報ファイルＣ８内の“%2&+&$o%”が、第２の対応付け情報“000000000000001: A1”に対して公開鍵Ｋ１により暗号化された情報の一例を示す。
【００５２】
図８は、本発明の実施の形態２にかかる部分暗号化処理モジュール４１における部分暗号化処理の流れを説明するためのフローチャートである。まず、部分暗号化処理モジュール４１は、公開鍵Ｋ１と、ソースプログラムＣ１と、秘密情報指定符Ｃ０との入力を受け付ける（Ｓ２１１）。次に、秘密情報リスト作成部４１１は、ソースプログラムＣ１から秘密情報を抽出する（Ｓ２１２）。具体的には、秘密情報リスト作成部４１１は、ソースプログラムＣ１内を走査し、開始記号Ｃ０−１を検索する。開始記号Ｃ０−１が検索された場合、秘密情報リスト作成部４１１は、終了記号Ｃ０−２が検索されるまで、開始記号Ｃ０−１の直後の文字列を記憶し続ける。そして、終了記号Ｃ０−２が検索された場合、秘密情報リスト作成部４１１は、その時点までに記憶された文字列を秘密情報（第１の文字列）として抽出する。
【００５３】
続いて、秘密情報リスト作成部４１１は、各秘密情報に項目番号を割り当てて、秘密情報リストＣ２を生成する（Ｓ２１３）。このとき、複数の秘密情報が抽出された場合、秘密情報リスト作成部４１１は、秘密情報同士を比較し、一致する場合、共通の項目番号を割り当てる。つまり、秘密情報リスト作成部４１１は、秘密情報リストＣ２に重複するレコードを登録しない。
【００５４】
そして、秘密情報リスト作成部４１１は、秘密情報リストＣ２を参照し、ソースプログラムＣ１内の各秘密情報を、秘密情報に対応付けられた項目番号に置換する（Ｓ２１４）。そして、秘密情報リスト作成部４１１は、置換後のソースプログラムＣ４を出力する（Ｓ２１５）。
【００５５】
また、秘密情報リスト作成部４１１は、秘密情報リストＣ２に秘密情報指定符Ｃ０を追加する（Ｓ２１６）。そして、秘密情報ファイル作成部４１２は、秘密情報リストＣ２を公開鍵Ｋ１により暗号化して、秘密情報ファイルＣ３を生成する（Ｓ２１７）。その後、秘密情報ファイル作成部４１２は、秘密情報ファイルＣ３を出力する（Ｓ２１８）。
【００５６】
図９は、本発明の実施の形態２にかかる復号処理の流れを説明するためのフローチャートである。まず、復号処理モジュール５１は、ソースプログラムＣ４と、秘密情報ファイルＣ３との入力を受け付ける（Ｓ２２１）。次に、復号部５１１は、秘密情報ファイルＣ３を秘密鍵Ｈ１により復号化して、秘密情報リストＣ２を抽出する（Ｓ２２２）。
【００５７】
続いて、秘密情報結合部５１２は、秘密情報リストＣ２から秘密情報指定符Ｃ０を抽出する（Ｓ２２３）。そして、秘密情報結合部５１２は、秘密情報リストＣ２に基づいて項目番号を秘密情報に置換してソースプログラムＣ１を生成する（Ｓ２２３）。具体的には、秘密情報結合部５１２は、ソースプログラムＣ４内で開始記号Ｃ０−１と終了記号Ｃ０−２とに囲まれた記述を特定する。このとき、特定される記述は、項目番号となる。そのため、秘密情報結合部５１２は、当該特定された項目番号に対応付けられた秘密情報本文を、秘密情報リストＣ２から抽出する。そして、秘密情報結合部５１２は、ソースプログラムＣ４内で特定された項目番号を、抽出した秘密情報本文に置換する。そして、置換後のソースプログラムはソースプログラムＣ１となる。秘密情報結合部５１２は、ソースプログラムＣ１を出力する（Ｓ２２４）。また、秘密情報結合部５１２は、秘密情報指定符Ｃ０を出力する（Ｓ２２６）。
【００５８】
図１０は、本発明の実施の形態２にかかるコンパイル処理の流れを説明するためのフローチャートである。まず、コンパイル処理モジュール５２は、ソースプログラムＣ１と、秘密情報指定符Ｃ０の入力を受け付ける（Ｓ２３１）。次に、コンパイル処理モジュール５２は、ソースプログラムＣ１に対して前処理を行い、コンパイル用のプログラムリストＣ６を生成する（Ｓ２３２）。
【００５９】
そして、コンパイル処理モジュール５２は、プログラムリストＣ６から秘密情報指定符Ｃ０を除外してコンパイルを行う（Ｓ２３３）。その後、コンパイル処理モジュール５２は、コンパイルにより生成されたオブジェクトプログラムＣ５を出力する（Ｓ２３４）。また、コンパイル処理モジュール５２は、プログラムリストＣ６をコンパイラ装置５０内で出力する（Ｓ２３５）。
【００６０】
図１１は、本発明の実施の形態２にかかるプログラムリストの部分暗号化処理の流れを説明するためのフローチャートである。まず、部分暗号化処理モジュール５３は、公開鍵Ｋ１と、プログラムリストＣ６と、秘密情報指定符Ｃ０との入力を受け付ける（Ｓ２４１）。次に、部分暗号化処理モジュール５３は、プログラムリストＣ６から秘密情報を抽出する（Ｓ２４２）。具体的には、部分暗号化処理モジュール５３は、プログラムリストＣ６で開始記号Ｃ０−１と終了記号Ｃ０−２とに囲まれた記述を特定する。このとき、特定される記述は、秘密情報となる。
【００６１】
続いて、部分暗号化処理モジュール５３は、各秘密情報に項目番号を割り当てて、秘密情報リストＣ２を生成する（Ｓ２４３）。そして、部分暗号化処理モジュール５３は、秘密情報リストＣ２を参照し、プログラムリストＣ６内の各秘密情報を、秘密情報に対応付けられた項目番号に置換する（Ｓ２４４）。そして、部分暗号化処理モジュール５３は、置換後のプログラムリストＣ７を出力する（Ｓ２４５）。
【００６２】
また、部分暗号化処理モジュール５３は、秘密情報リストＣ２に秘密情報指定符Ｃ０を追加する（Ｓ２４６）。そして、部分暗号化処理モジュール５３は、秘密情報リストＣ２を公開鍵Ｋ１により暗号化して、秘密情報ファイルＣ８を生成する（Ｓ２４７）。その後、部分暗号化処理モジュール５３は、秘密情報ファイルＣ８を出力する（Ｓ２４８）。
【００６３】
以上のことから、提供先のユーザは、直接、元のソースプログラムの記述内容を参照することができず、秘密情報の漏えいを防ぐことができる。また、情報漏えいのリスクを減らせると同時に、必要なソースロジックを平文プログラムで参照可能なため、効率的且つ安全なソースプログラムを提供先へ送付出来るようになる。
【００６４】
また、本実施の形態については、次のことがいえる。すなわち、予め重要な記述の範囲が指定されたソースプログラムについて、指定範囲のみを暗号化することにより、調査を実施するための提供先へのソースプログラムの送付が可能となる。そして、コンパイラ装置５０の内部でソースプログラムＣ４内の項目番号を元の秘密情報に復号した上で、コンパイルを行うため、正常にオブジェクトプログラムＣ５を生成することができる。そのため、提供先では、ソースプログラムＣ４に対してデバッグ用のコードを埋め込むなどの編集をした上で、コンパイルを行い、デバッグ実行等を行うことができる。
【００６５】
また、秘密情報への復号は、コンパイラ装置５０の内部で完結し、復号後のソースプログラムＣ１は外部に出力されないため、提供先が直接秘密情報を参照することができない。
【００６６】
さらに、公開鍵Ｋ１で暗号化された秘密情報ファイルＣ３は、秘密鍵Ｈ１が取り込まれているコンパイラ装置５０のみで復号できるため、暗号化した秘密情報の安全性が保証される。
【００６７】
また、任意の秘密情報指定符Ｃ０を用いることができるため、平文ソースプログラム内で秘密情報の箇所を容易に指定できる。そして、任意の箇所を指定できるため、隠ぺい箇所を指定するための自由度が高い。
【００６８】
＜実施の形態３＞
本実施の形態３は、上述した実施の形態１又は２の改良例である。本実施の形態３は、実施の形態１の第１の装置１０又は実施の形態２のソースプログラム部分暗号化装置４０をソースプログラム編集装置に適用したものである。例えば、ソースプログラムＣ４のうち秘密情報指定符Ｃ０で囲まれた記述については、提供先では編集することができない。そのような場合には、提供元において秘密情報の記述を編集できることが望ましい。そして、編集後に、再度、部分暗号化処理を行う必要がある。
【００６９】
すなわち、前記第１の装置は、前記ソースプログラムを表示し、編集要求に応じて前記ソースプログラムを更新して再表示し、保存要求に応じて前記更新後のソースプログラム内の前記指定記号により囲まれた記述を第３の文字列として検出し、前記第３の文字列に第３の置換文字列を対応付けた第３の対応付け情報を生成し、前記第３の対応付け情報に基づいて、前記更新後のソースプログラム内で前記第３の文字列を前記第３の置換文字列に置換して第３の部分暗号化ソースプログラムとして出力し、前記第３の対応付け情報を暗号化して第３の秘密情報ファイルとして出力するものである。
【００７０】
図１２は、本発明の実施の形態３にかかるソースプログラム編集装置６０の構成を示すブロック図である。尚、本実施の形態３にかかるソースプログラム保護システム３００は、ソースプログラム編集装置６０の他に、図示しない構成として、第２の装置２０又はコンパイラ装置５０を備えるものである。
【００７１】
ソースプログラム編集装置６０は、通常のソースプログラムに対して、秘密情報指定符Ｃ０の追記が行われた際に、部分暗号化処理を行い、ソースプログラムＣ４及び秘密情報ファイルＣ３を出力することができる。また、ソースプログラム編集装置６０は、秘密情報指定符Ｃ０が記述済みのソースプログラムＣ１に対して、実施の形態１又は２と同様に、部分暗号化処理を行い、ソースプログラムＣ４及び秘密情報ファイルＣ３を出力する。さらに、ソースプログラム編集装置６０は、部分暗号化処理済みのソースプログラムＣ４及び秘密情報ファイルＣ３を入力し、復号処理を行った上で、所定の編集を行ない、その後、編集後のソースプログラムに対して部分暗号化処理を行い、ソースプログラムＣ４及び秘密情報ファイルＣ３を出力する。
【００７２】
ソースプログラム編集装置６０は、入力受付部６１と、表示処理部６２と、編集処理部６３と、部分暗号化処理モジュール６４と、復号処理モジュール６５とを備える。入力受付部６１は、ソースプログラムＣ１、公開鍵Ｋ１、秘密情報指定符Ｃ０、秘密鍵Ｈ１、秘密情報ファイルＣ３、ソースプログラムＣ４の入力を受け付ける。尚、秘密鍵Ｈ１は、コンパイラ装置５０側から事前に取得済みであるものとする。復号処理モジュール６５は、部分暗号化処理済みのソースプログラムＣ４が入力された場合に、復号処理モジュール５１と同様に、秘密鍵Ｈ１と秘密情報ファイルＣ３に基づいて復号処理を行う。表示処理部６２は、入力されたソースプログラムについて画面に表示を行う。但し、表示処理部６２は、部分暗号化処理済みのソースプログラムＣ４については、復号処理モジュール６５による復号処理後の内容を表示する。編集処理部６３は、ユーザからの編集操作に応じて表示対象のソースプログラムの編集処理を行う。部分暗号化処理モジュール６４は、ユーザからの保存要求に応じて表示対象（編集済み）のソースプログラムに対して、部分暗号化処理モジュール４１と同様に、部分暗号化処理を行い、ソースプログラムＣ４及び秘密情報ファイルＣ３を出力する。
【００７３】
図１３は、本発明の実施の形態３にかかるソースプログラム編集処理の流れを説明するためのフローチャートである。まず、入力受付部６１は、ソースプログラムＣ１、公開鍵Ｋ１、秘密情報指定符Ｃ０、秘密鍵Ｈ１、秘密情報ファイルＣ３、ソースプログラムＣ４のうち任意の組合せの入力を、適宜、受け付ける（Ｓ３０１）。次に、復号処理モジュール６５は、入力されたソースプログラムが部分暗号化処理済か否かを判定する（Ｓ３０２）。例えば、ソースプログラムＣ４が入力された場合、復号処理モジュール６５は、ソースプログラムＣ４に対して復号処理を行う（Ｓ３０３）。一例として、復号処理モジュール６５は、図９のステップＳ２２２、Ｓ２２３及びＳ２２４を実行してもよい。
【００７４】
そして、表示処理部６２は、ソースプログラムを画面に表示する（Ｓ３０４）。このとき、画面には、元々、秘密情報指定符Ｃ０の記述がないソースプログラムか、秘密情報指定符Ｃ０の記述があるが復号処理済みのソースプログラムが表示される。そのため、ユーザは、秘密情報を視認することができる。よって、ユーザは、当該ソースプログラムに対して自由に編集を行うことができる。
【００７５】
その後、編集処理部６３は、ユーザから編集要求を受け付けたか否かを判定する（Ｓ３０５）。編集要求を受け付けた場合、編集処理部６３は、編集要求に応じて表示対象のソースプログラムに対して更新を行う（Ｓ３０６）。その後、表示処理部６２は、更新後のソースプログラムを画面に表示する（Ｓ３０４）。
【００７６】
また、編集処理部６３は、ユーザから編集要求ではなく（Ｓ３０５でＮＯ）、保存要求を受け付けた場合（Ｓ３０７でＹＥＳ）、その旨を部分暗号化処理モジュール６４へ通知する。そして、部分暗号化処理モジュール６４は、通知に応じて表示対象のソースプログラムに対して部分暗号化処理を行う（Ｓ３０８）。つまり、部分暗号化処理モジュール６４は、ソースプログラムＣ４に対して更新されていた場合には、更新後のソースプログラムに対して部分暗号化処理を行う。一例として、部分暗号化処理モジュール６４は、図８のステップＳ２１２、Ｓ２１３、Ｓ２１４、Ｓ２１６及びＳ２１７を実行してもよい。その後、部分暗号化処理モジュール６４は、更新後のソースプログラムＣ４及び秘密情報ファイルＣ３を出力する（Ｓ３０９）。
【００７７】
以上のことから、本実施の形態３により、ソースプログラム内の秘密情報を、提供元のみが有する特定のエディタでしか編集できない仕組みを実現できる。そのため、ソースプログラム内の秘密情報の編集が必要な場合であっても、提供元側で安全に更新し、再度、部分暗号化処理されたソースプログラムを提供先に提供できる。
【００７８】
＜実施の形態４＞
本実施の形態４は、上述した実施の形態１から３の改良例である。本実施の形態４は、実施の形態１の第２の装置２０をソースプログラム解析装置に適用したものである。例えば、提供先における調査において、調査対象のソースプログラムを解析する場合がある。ここで、上述した部分暗号化処理済みのソースプログラムＣ４を解析するには、解析装置内で復号処理を行ない、復号後のソースプログラムに対して解析処理を行うこととなる。但し、解析結果に復号後の秘密情報が表示されてしまうと、秘密情報を隠ぺいできないこととなる。そこで、本実施の形態４では、解析結果に対しても部分暗号化処理を行うものである。
【００７９】
すなわち、前記第２の装置は、前記所定の処理として前記復号化ソースプログラムに対して所定の解析を行い、前記解析の結果内で前記指定記号により囲まれた記述を第４の文字列として検出し、前記第４の文字列に第４の置換文字列を対応付けた第４の対応付け情報を生成し、前記第４の対応付け情報に基づいて、前記解析の結果内で前記第４の文字列を前記第４の置換文字列に置換した部分暗号化解析結果を前記処理の結果として出力する。
【００８０】
図１４は、本発明の実施の形態４にかかるソースプログラム解析装置７０の構成を示すブロック図である。尚、本実施の形態４にかかるソースプログラム保護システム４００は、ソースプログラム解析装置７０の他に、図示しない構成として、第１の装置１０、ソースプログラム部分暗号化装置４０又はソースプログラム編集装置６０を備えるものである。
【００８１】
ソースプログラム解析装置７０は、復号処理モジュール７１と、解析処理部７２とを備える。復号処理モジュール７１は、秘密鍵Ｈ１、秘密情報ファイルＣ３及びソースプログラムＣ４を入力し、復号処理モジュール５１と同様に、復号処理を行う。解析処理部７２は、復号後のソースプログラムに対して、解析処理を行い、解析結果に対して部分暗号化処理を行い、部分暗号化解析結果Ｃ９を出力する。
【００８２】
図１５は、本発明の実施の形態４にかかるソースプログラム解析処理の流れを説明するためのフローチャートである。まず、復号処理モジュール７１は、秘密鍵Ｈ１と、秘密情報ファイルＣ３と、ソースプログラムＣ４との入力を受け付ける（Ｓ４０１）。次に、復号処理モジュール７１は、ソースプログラムＣ４に対して復号処理を行う（Ｓ４０２）。一例として、復号処理モジュール７１は、図９のステップＳ２２２、Ｓ２２３及びＳ２２４を実行してもよい。
【００８３】
続いて、解析処理部７２は、復号後のソースプログラムＣ１に対して解析処理を行う（Ｓ４０３）。尚、解析処理は、公知の技術を用いて構わない。そして、解析処理部７２は、解析処理の結果である解析結果を内部で生成する。ここで、解析結果には秘密情報が含まれる場合があるが、ソースプログラム解析装置７０の外部には出力されない。
【００８４】
その後、解析処理部７２は、解析の結果に対して部分暗号化処理を行う（Ｓ４０４）。一例として、解析処理部７２は、図８のステップＳ２１２、Ｓ２１３、Ｓ２１４、Ｓ２１６及びＳ２１７を実行してもよい。その後、解析処理部７２は、部分暗号化処理の処理結果である部分暗号化解析結果Ｃ９を出力する（Ｓ４０５）。ここで、部分暗号化解析結果Ｃ９には、秘密情報指定符Ｃ０で囲まれた記述が含まれる場合があるが、開始記号Ｃ０−１と終了記号Ｃ０−２の間には、置換文字列が記述されていることとなる。
【００８５】
以上のことから、本実施の形態４では、部分暗号化処理がされた秘密情報について、ソースプログラム解析装置７０内でのみ復号化され、復号後のソースプログラムＣ１や秘密情報が含まれる解析結果が外部には出力されない。そのため、提供先のユーザが秘密情報を目視することはなく、ソースプログラム内の秘密情報の情報漏えいを防止することができる。
【００８６】
さらに、部分暗号化解析結果Ｃ９を提供元に送付した場合、提供元においては、実施の形態３のソースプログラム編集装置６０に部分暗号化解析結果Ｃ９を入力させるとよい。これにより、復号処理後の解析結果を画面に表示させ、提供元のユーザが安全に秘密情報を含む解析結果を閲覧することができる。
【００８７】
＜その他の実施の形態＞
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【００８８】
また、上述の実施の形態では、本発明をハードウェアの構成として説明したが、本発明は、これに限定されるものではない。本発明は、任意の処理を、ＣＰＵ（Central Processing Unit）にコンピュータプログラムを実行させることにより実現することも可能である。
【００８９】
上述の例において、プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、ＤＶＤ（Digital Versatile Disc）、ＢＤ（Blu-ray（登録商標） Disc）、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（Random Access Memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【符号の説明】
【００９０】
１００  ソースプログラム保護システム
１０  第１の装置
２０  第２の装置
３１  ソースプログラム
３２  第１の部分暗号化ソースプログラム
３３  第１の秘密情報ファイル
３４  処理の結果
２００  ソースプログラム保護システム
４０  ソースプログラム部分暗号化装置
４１  部分暗号化処理モジュール
４１１  秘密情報リスト作成部
４１２  秘密情報ファイル作成部
５０  コンパイラ装置
５１  復号処理モジュール
５１１  復号部
５１２  秘密情報結合部
５２  コンパイル処理モジュール
５３  部分暗号化処理モジュール
Ｃ０  秘密情報指定符
Ｃ０−１  開始記号
Ｃ０−２  終了記号
Ｃ１  ソースプログラム
Ｃ２  秘密情報リスト
Ｃ２−１  項目番号
Ｃ２−２  秘密情報本文
Ｃ３  秘密情報ファイル
Ｃ４  ソースプログラム
Ｃ５  オブジェクトプログラム
Ｃ６  プログラムリスト
Ｃ７  プログラムリスト
Ｃ８  秘密情報ファイル
Ｃ９  部分暗号化解析結果
Ｋ１  公開鍵
Ｈ１  秘密鍵
３００  ソースプログラム保護システム
６０  ソースプログラム編集装置
６１  入力受付部
６２  表示処理部
６３  編集処理部
６４  部分暗号化処理モジュール
６５  復号処理モジュール
４００  ソースプログラム保護システム
７０  ソースプログラム解析装置
７１  復号処理モジュール
７２  解析処理部
【図１】
2019053146.tif 000003
【図２】
2019053146.tif 000004
【図３】
2019053146.tif 000005
【図４】
2019053146.tif 000006
【図５】
2019053146.tif 000007
【図６】
2019053146.tif 000008
【図７】
2019053146.tif 000009
【図８】
2019053146.tif 000010
【図９】
2019053146.tif 000011
【図１０】
2019053146.tif 000012
【図１１】
2019053146.tif 000013
【図１２】
2019053146.tif 000014
【図１３】
2019053146.tif 000015
【図１４】
2019053146.tif 000016
【図１５】
2019053146.tif 000017