(57)【要約】【課題】プログラムが使用した記憶領域内に含まれる秘密情報を適切に保護し、当該保護処理に起因するプログラム実行時のオーバーヘッドを削減する秘密情報保護装置を提供する。【解決手段】秘密情報保護装置３００は、秘密情報の入力を監視し、秘密情報の入力先である変数と保護規則とを対応付けて監視結果として記録する入力監視部３２０と、伝播規則を用いて、入力監視部３２０による監視結果に基づき、他の変数に保護規則を伝播する保護規則伝播部３４０と、アドレス変換規則を用いて、変数及び他の変数をメモリアドレスへ変換するアドレス変換部３５０と、変換後のアドレスに格納された秘密情報に、保護規則伝播部３４０による伝播後の保護規則に示された保護方法を適用する保護規則適用部３６０とを備える。【選択図】図１
2006065689.tif 000002
【特許請求の範囲】
【請求項１】
プログラムが利用する記憶領域に格納される秘密情報を保護する秘密情報保護装置であって、
前記秘密情報の入力を監視し、前記秘密情報の入力先である変数と前記秘密情報に対する保護方法を示す保護規則とを対応付けて監視結果として記録する入力監視部と、
前記入力先である変数と、当該変数に入力された情報が伝播する他の変数との対応を示す前記伝播規則を用いて、前記入力監視部による監視結果に基づき、前記他の変数に前記保護規則を伝播する保護規則伝播部と、
変数と、当該変数が格納された前記記憶領域におけるアドレスとの対応を示すアドレス変換規則を用いて、前記変数及び前記他の変数を前記記憶領域のアドレスへ変換するアドレス変換部と、
前記変換後のアドレスに格納された秘密情報に、前記保護規則伝播部による伝播後の保護規則に示された保護方法を適用する保護規則適用部と
を備えることを特徴とする秘密情報保護装置。
【請求項２】
前記入力監視部は、プログラムが発行するシステムコールを監視することで、前記秘密情報の入力を監視することを特徴とする請求項１に記載の秘密情報保護装置。
【請求項３】
前記アドレス変換規則は、プログラム実行時に静的に前記記憶領域に格納される変数について、当該変数に一意的に対応する識別子と、当該変数が格納された前記記憶領域におけるアドレスとの対応を示すことを特徴とする請求項１又は２に記載の秘密情報保護装置。
【請求項４】
前記入力監視部は、プログラム実行中に動的に前記記憶領域に格納あるいは解放される変数を監視結果として記録し、
前記アドレス変換規則は、当該変数に一意的に対応する識別子及び当該変数が格納された前記記憶領域におけるアドレスを記録あるいは削除されることを特徴とする請求項１〜３のいずれか１項に記載の秘密情報保護装置。
【請求項５】
前記アドレス変換規則は、プログラム実行中に、スタックの戻りアドレスとスタックポインタが指すアドレスから一時的に前記記憶領域に格納される変数について、当該変数に一意的に対応する識別子と、当該変数が格納された前記記憶領域におけるアドレスとの対応を示すことを特徴とする請求項１〜４のいずれか１項に記載の秘密情報保護装置。
【請求項６】
前記記憶領域はメモリであり、
前記保護規則適用部は、メモリダンプを契機に、前記保護規則に示された保護方法を適用することを特徴とする請求項１〜５のいずれか１項に記載の秘密情報保護装置。
【請求項７】
前記入力監視部は、
プログラム実行前から予め秘密情報の入力が自明である変数に一意的に対応する第一の識別子と、プログラム外部から秘密情報が入力される可能性がある変数に一意的に対応する第二の識別子と、プログラム外部へ秘密情報が出力される可能性がある変数に一意的に対応する第三の識別子と、前記第一の識別子あるいは前記第二の識別子に対応する変数であって、前記第三の識別子に対応する変数へ秘密情報を伝播する変数に一意的に対応する保護規則伝播識別子とを初期監視結果として記録し、
前記第二の識別子に対応する変数への秘密情報の入力を監視し、
前記第三の識別子に対応する保護規則伝播識別子に適用される保護規則を秘密情報の保護規則として記録する
ことを特徴とする請求項１〜６のいずれか１項に記載の秘密情報保護装置。
【請求項８】
前記保護規則伝播部は、前記保護規則の伝播を制御する伝播制御規則が与えられた場合、前記伝播制御規則に従って前記伝播規則を更新し、更新後の伝播規則に従って、前記保護規則を伝播することを特徴とする請求項１〜７のいずれか１項に記載の秘密情報保護装置。
【請求項９】
プログラムが利用する記憶領域に格納される秘密情報を保護する秘密情報保護装置であって、
前記秘密情報の入力を監視し、前記秘密情報と前記秘密情報に対する保護方法を示す保護規則とを対応付けて監視結果として記録する入力監視部と、
前記秘密情報を格納した記憶領域から、前記入力監視部によって入力を監視された秘密情報を検索する秘密情報検索部と、
前記秘密情報検索部によって検索された秘密情報に、前記保護規則に示された保護方法を適用する保護規則適用部と
を備えることを特徴とする秘密情報保護装置。
【請求項１０】
プログラムが利用する記憶領域に格納される秘密情報の入力先である変数と、当該変数に入力された情報が伝播する他の変数との対応を示す伝播規則を導出する伝播規則導出部と、
前記秘密情報に対する保護方法を示す保護規則を適用することにより前記秘密情報を保護する秘密情報保護装置へ、前記伝播規則導出部によって導出された伝播規則を出力する出力部と
を備えることを特徴とする伝播規則導出装置。
【請求項１１】
前記伝播規則は、プログラムソースが存在する箇所について、プログラムソースを解析することで導出されることを特徴とする請求項１０に記載の伝播規則導出装置。
【請求項１２】
前記伝播規則は、複数の変数を参照するプログラムの一部分を一つの変数とみなして導出されることを特徴とする請求項１０又は１１に記載の伝播規則導出装置。
【請求項１３】
前記伝播規則導出部は、前記伝播規則として、プログラム実行前から予め秘密情報の入力が自明である変数に一意的に対応する第一の識別子と、プログラム外部から秘密情報が入力される可能性がある変数に一意的に対応する第二の識別子と、プログラム外部へ秘密情報が出力される可能性がある変数に一意的に対応する第三の識別子と、前記第一の識別子あるいは前記第二の識別子に対応する変数であって、前記第三の識別子に対応する変数へ秘密情報を伝播する変数に一意的に対応する保護規則伝播識別子とを更に導出することを特徴とする請求項１０〜１２のいずれか１項に記載の伝播規則導出装置。
【請求項１４】
前記伝播規則導出部は、前記保護規則の伝播を制御する伝播制御規則を更に導出することを特徴とする請求項１０〜１３のいずれか１項に記載の伝播規則導出装置。
【請求項１５】
プログラムが利用する記憶領域に格納される秘密情報を保護する秘密情報保護方法であって、
前記秘密情報の入力を監視し、前記秘密情報の入力先である変数と前記秘密情報に対する保護方法を示す保護規則とを対応付けて監視結果として記録するステップと、
前記入力先である変数と、当該変数に入力された情報が伝播する他の変数との対応を示す前記伝播規則を用いて、前記監視結果に基づき、前記他の変数に前記保護規則を伝播するステップと、
変数と、当該変数が格納された前記記憶領域におけるアドレスとの対応を示すアドレス変換規則を用いて、前記変数及び前記他の変数を前記記憶領域のアドレスへ変換するステップと、
前記変換後のアドレスに格納された秘密情報に、前記伝播後の保護規則に示された保護方法を適用するステップと
を含むことを特徴とする秘密情報保護方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、秘密情報保護装置、伝播規則導出装置及び秘密情報保護方法に関する。
【背景技術】
【０００２】
稼働中の計算機に障害が発生した際に、計算機が有する記憶領域を解析し、障害内容を調べることは、プログラムのデバッグや今後の障害発生の防止に効果的である。特に、メモリダンプにより、障害発生時のメモリの内容が不揮発性の記憶領域に出力されたメモリダンプ情報には、障害発生時直前の様々なデータや処理がそのまま記録されているため、正確な障害内容の解析が可能である。
【０００３】
一方で、計算機上でプログラムが実行される際、メモリには秘密情報が格納される場合がある。例えば、パスワードの入力を促すプログラムや、コンテンツの暗号化を行うプログラムでは、入力されたパスワードや暗号化前のコンテンツなどがメモリに展開される。秘密情報がメモリに格納されている際にメモリダンプが発生した場合、これらの秘密情報はそのまま不揮発性の記憶装置へと出力される。このため、第三者が出力されたメモリダンプ情報にアクセスすることで、これらの秘密情報が漏えいしてしまう可能性がある。また、ユーザがメモリダンプ情報の解析を行う場合、プログラムの秘密情報がユーザに漏えいしてしまう可能性がある。さらに、プログラム開発者がメモリダンプ情報を収集し、プログラムのデバッグを行う場合は、プログラム開発者にユーザの秘密情報が漏えいしてしまう可能性がある。
【０００４】
このような問題に対して、メモリダンプ情報に含まれる秘密情報を保護するための技術がいくつか考案されている。例えば、メモリダンプ発生時に、各プログラムが生成したプロセスのうち、秘密情報を扱うプロセスを選択し、選択されたプロセスが使用していた全てのメモリ領域を暗号化することで、秘密情報の保護を実現する方法が開示されている（例えば、特許文献１参照）。メモリの各ページについて、そのページがどのプロセスにより利用されていたかという情報は容易に取得することができるため、プロセスの選択に間違いがなければ、この技術により確実に秘密情報を保護することが可能である。
【０００５】
また、上述した従来技術のようにプロセスが使用するメモリ領域全体を保護するのではなく、その領域に含まれる秘密情報をピンポイントに保護することができる技術も開示されている（例えば、非特許文献１参照）。ここでは、プログラム実行前にあらかじめ秘密情報が格納される変数を指定し、さらにプログラムソースの静的解析を行うことで、その秘密情報がプログラム実行中に、プログラム内の変数をどのように伝播していくかを導出する。プログラム実行中には、秘密情報を格納するための特別なメモリ領域を設け、指定した秘密情報が格納される変数は、その領域に格納する。メモリダンプ時に、その領域に格納されている変数を出力する際、それらの変数を保護することで、それらの変数に格納される秘密情報を保護する。
【特許文献１】特開２００３−１８６７４９号公報
【非特許文献１】P.Broadwell, M.Harren, and N.Sastry, SCrash: A System for Generating Secure Crash Information, In Proceedings of Usenix Security Symposium 2003, August 2003.
【発明の開示】
【発明が解決しようとする課題】
【０００６】
あるプロセスが使用していたメモリ領域から得られたメモリダンプ情報には、様々な主体の秘密情報が含まれる場合がある。例えば、プロセスを生成した秘密鍵等プログラム特有の秘密情報以外にも、キーボードやファイルを介して入力されるユーザの秘密情報がある。また、計算機内、あるいは計算機間におけるプロセス間の通信により他プロセスから入力される秘密情報も存在する。また、メモリダンプ情報を解析する側にも様々な主体が存在する。例えば、プログラムのユーザが計算機上でメモリダンプを行いプログラムの動作を解析する場合や、プログラム開発者がメモリダンプ情報を収集し、デバッグのために解析を行う場合などが考えられる。
【０００７】
特許文献１のようにプロセスが使用するメモリ全体を暗号化するアプローチでは、単一の主体の秘密情報の保護しか実現できないため、ある主体がメモリダンプ情報を解析した場合に、その主体に対して他の主体の秘密情報を保護することはできない。例えば、ユーザがメモリダンプ情報を解析する場合、メモリダンプ情報に含まれるプログラムの秘密情報は、ユーザに漏えいしてしまう。この問題を解決するためには、プロセスのメモリ領域全体を画一的に保護するのではなく、各主体の秘密情報に対して、各解析者の権限に応じた細粒度の保護を実現する必要がある。
【０００８】
しかし、メモリダンプ情報は、一般に数ＭＢから数十ＭＢに及ぶ巨大なデータであり、メモリダンプ時にメモリに格納されている各データに対して、秘密情報かそうでないかを判断し保護していくのは現実的ではない。この問題について、非特許文献１では、プログラム実行前にあらかじめ秘密情報を格納する変数を全て記録しておき、メモリダンプ時にこの記録を利用することで秘密情報の保護を実現している。しかし、非特許文献１では、プログラム実行前から自明な秘密情報については保護可能であるが、プログラム実行中にユーザや他プロセスにより入力される秘密情報については保護することはできない。
【０００９】
プログラム実行中に入力される秘密情報の保護を実現するためには、秘密情報の入力を常に監視し、秘密情報が入力された際は、その秘密情報が格納された変数を記録し、さらに、その秘密情報がその後どの変数へ伝播されるかについて監視・記録の処理を行う必要がある。しかし、最悪の場合、秘密情報の伝播はプログラムが参照する全ての変数に対して行われるため、秘密情報のＮ回の入力に対し、全ての変数の数をＭとするとＮ×Ｍ回の処理が発生する。このようなメモリに対する入力の監視、あるいは監視結果のメモリへの記録は、メモリへのアクセス頻度やメモリの使用量を極度に増大させるため、結果的に計算機全体のパフォーマンスの低下に繋がる懸念がある。
【００１０】
そこで、本発明は、上記の課題に鑑み、プログラムが使用した記憶領域内に含まれる秘密情報を適切に保護し、当該保護処理に起因するプログラム実行時のオーバーヘッドを削減する秘密情報保護装置、伝播規則導出装置及び秘密情報保護方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するため、本発明の第１の特徴は、プログラムが利用する記憶領域に格納される秘密情報を保護する秘密情報保護装置であって、（ａ）秘密情報の入力を監視し、秘密情報の入力先である変数と秘密情報に対する保護方法を示す保護規則とを対応付けて監視結果として記録する入力監視部と、（ｂ）入力先である変数と、当該変数に入力された情報が伝播する他の変数との対応を示す伝播規則を用いて、入力監視部による監視結果に基づき、他の変数に保護規則を伝播する保護規則伝播部と、（ｃ）変数と、当該変数が格納された記憶領域におけるアドレスとの対応を示すアドレス変換規則を用いて、変数及び他の変数を記憶領域のアドレスへ変換するアドレス変換部と、（ｄ）変換後のアドレスに格納された秘密情報に、保護規則伝播部による伝播後の保護規則に示された保護方法を適用する保護規則適用部とを備える秘密情報保護装置であることを要旨とする。
【００１２】
第１の特徴に係る秘密情報保護装置によると、プログラム実行中に変数に入力される秘密情報を保護することが可能である。また、記憶領域内における秘密情報の伝播規則をあらかじめ導出しておくことにより、プログラム実行中は秘密情報の入力先変数のみを監視することで、監視処理に起因するオーバーヘッドを削減可能となる。
【００１３】
又、第１の特徴に係る秘密情報保護装置の入力監視部は、プログラムが発行するシステムコールを監視することで、秘密情報の入力を監視してもよい。
【００１４】
この秘密情報保護装置によると、システムコールを監視することで秘密情報の入力を厳密に監視することが可能である。
【００１５】
又、第１の特徴に係る秘密情報保護装置において、アドレス変換規則は、プログラム実行時に静的に記憶領域に格納される変数について、当該変数に一意的に対応する識別子と、当該変数が格納された記憶領域におけるアドレスとの対応を示してもよい。
【００１６】
この秘密情報保護装置によると、プログラム実行中に静的に記憶領域に格納される変数が、記憶領域のどこに格納されているかを知ることが可能である。
【００１７】
又、第１の特徴に係る秘密情報保護装置において、入力監視部は、プログラム実行中に動的に記憶領域に格納あるいは解放される変数を監視結果として記録し、アドレス変換規則は、当該変数に一意的に対応する識別子及び当該変数が格納された記憶領域におけるアドレスを記録あるいは削除されてもよい。
【００１８】
この秘密情報保護装置によると、プログラム実行中に動的に記憶領域に格納される変数が、記憶領域のどこに格納されているかを知ることが可能である。
【００１９】
又、第１の特徴に係る秘密情報保護装置において、アドレス変換規則は、プログラム実行中に、スタックの戻りアドレスとスタックポインタが指すアドレスから一時的に記憶領域に格納される変数について、当該変数に一意的に対応する識別子と、当該変数が格納された記憶領域におけるアドレスとの対応を示してもよい。
【００２０】
この秘密情報保護装置によると、保護規則適用時に一時的に記憶領域に格納されている変数が記憶領域のどこに格納されているかを知ることが可能である。
【００２１】
又、第１の特徴に係る秘密情報保護装置において、記憶領域はメモリであり、保護規則適用部は、メモリダンプを契機に、保護規則に示された保護方法を適用してもよい。
【００２２】
この秘密情報保護装置によると、メモリダンプ情報に含まれる秘密情報を保護可能である。
【００２３】
又、第１の特徴に係る秘密情報保護装置において、入力監視部は、プログラム実行前から予め秘密情報の入力が自明である変数に一意的に対応する第一の識別子と、プログラム外部から秘密情報が入力される可能性がある変数に一意的に対応する第二の識別子と、プログラム外部へ秘密情報が出力される可能性がある変数に一意的に対応する第三の識別子と、第一の識別子あるいは第二の識別子に対応する変数であって、第三の識別子に対応する変数へ秘密情報を伝播する変数に一意的に対応する保護規則伝播識別子とを初期監視結果として記録し、第二の識別子に対応する変数への秘密情報の入力を監視し、第三の識別子に対応する保護規則伝播識別子に適用される保護規則を秘密情報の保護規則として記録してもよい。
【００２４】
この秘密情報保護装置によると、第二の識別子に対応する変数への秘密情報の入力を監視することにより、秘密情報保護装置の監視処理コストを削減可能である。又、第三の識別子に対応する保護規則伝播識別子に適用される保護規則を秘密情報の保護規則として記録することにより、プログラム外部へ出力される秘密情報を保護可能である。
【００２５】
又、第１の特徴に係る秘密情報保護装置において、保護規則伝播部は、護規則の伝播を制御する伝播制御規則が与えられた場合、伝播制御規則に従って伝播規則を更新し、更新後の伝播規則に従って、保護規則を伝播してもよい。
【００２６】
この秘密情報保護装置によると、伝播制御規則で指定することにより、プログラムや保護規則の性質を考慮した、厳密な保護規則の伝播が可能である。
【００２７】
本発明の第２の特徴は、プログラムが利用する記憶領域に格納される秘密情報を保護する秘密情報保護装置であって、（ａ）秘密情報の入力を監視し、秘密情報と秘密情報に対する保護方法を示す保護規則とを対応付けて監視結果として記録する入力監視部と、（ｂ）秘密情報を格納した記憶領域から、入力監視部によって入力を監視された秘密情報を検索する秘密情報検索部と、（ｃ）秘密情報検索部によって検索された秘密情報に、保護規則に示された保護方法を適用する保護規則適用部とを備える秘密情報保護装置であることを要旨とする。
【００２８】
第２の特徴に係る秘密情報保護装置によると、第１の特徴に係る秘密保護装置のように、伝播規則、及びアドレス変換規則が入力されなかった場合でも、記憶領域に入力された秘密情報を保護することが可能である。
【００２９】
本発明の第３の特徴は、（ａ）プログラムが利用する記憶領域に格納される秘密情報の入力先である変数と、当該変数に入力された情報が伝播する他の変数との対応を示す伝播規則を導出する伝播規則導出部と、（ｂ）秘密情報に対する保護方法を示す保護規則を適用することにより秘密情報を保護する秘密情報保護装置へ、伝播規則導出部によって導出された伝播規則を出力する出力部とを備える伝播規則導出装置であることを要旨とする。
【００３０】
第３の特徴に係る伝播規則導出装置によると、秘密情報保護に必要な伝播規則を生成することが可能である。
【００３１】
又、第３の特徴に係る伝播規則導出装置において、伝播規則は、プログラムソースが存在する箇所について、プログラムソースを解析することで導出されてもよい。
【００３２】
この伝播規則導出装置によると、プログラムソースを有する任意の主体が、任意の時期に伝播規則を導出することが可能であり、他主体が作成した関数を使用する場合などプログラムソースの一部が存在しない場合でも伝播規則を導出することが可能である。
【００３３】
又、第３の特徴に係る伝播規則導出装置において、伝播規則は、複数の変数を参照するプログラムの一部分を一つの変数とみなして導出されてもよい。
【００３４】
この伝播規則導出装置によると、プログラムソースの一部が存在しない場合など、変数ごとの詳細な伝播規則を生成することができない場合でも、伝播規則を導出することが可能である。
【００３５】
又、第３の特徴に係る伝播規則導出装置において、伝播規則導出部は、伝播規則として、プログラム実行前から予め秘密情報の入力が自明である変数に一意的に対応する第一の識別子と、プログラム外部から秘密情報が入力される可能性がある変数に一意的に対応する第二の識別子と、プログラム外部へ秘密情報が出力される可能性がある変数に一意的に対応する第三の識別子と、第一の識別子あるいは第二の識別子に対応する変数であって、第三の識別子に対応する変数へ秘密情報を伝播する変数に一意的に対応する保護規則伝播識別子とを更に導出してもよい。
【００３６】
この伝播規則導出装置によると、第一の識別子を導出することにより、プログラム実行前からあらかじめ存在する秘密情報の保護が可能である。又、第二の識別子を導出することにより、プログラム実行中に監視対象となる変数を絞ることができ、実行時の監視処理コストを削減することが可能である。又、第三の識別子及び保護規則伝播識別子を導出することにより、プログラム外部へ出力される秘密情報を保護可能である。
【００３７】
又、第３の特徴に係る伝播規則導出装置において、伝播規則導出部は、保護規則の伝播を制御する伝播制御規則を更に導出してもよい。
【００３８】
この伝播規則導出装置によると、例えばプログラムの性質など、プログラム実行前からあらかじめ分かっている情報により、伝播規則の更新をし、それを出力することが可能となる。
【００３９】
本発明の第４の特徴は、プログラムが利用する記憶領域に格納される秘密情報を保護する秘密情報保護方法であって、（ａ）秘密情報の入力を監視し、秘密情報の入力先である変数と秘密情報に対する保護方法を示す保護規則とを対応付けて監視結果として記録するステップと、（ｂ）入力先である変数と、当該変数に入力された情報が伝播する他の変数との対応を示す伝播規則を用いて、監視結果に基づき、他の変数に保護規則を伝播するステップと、（ｃ）変数と、当該変数が格納された記憶領域におけるアドレスとの対応を示すアドレス変換規則を用いて、変数及び他の変数を記憶領域のアドレスへ変換するステップと、（ｄ）変換後のアドレスに格納された秘密情報に、伝播後の保護規則に示された保護方法を適用するステップとを含む秘密情報保護方法であることを要旨とする。
【００４０】
第４の特徴に係る秘密情報保護方法によると、プログラム実行中に変数に入力される秘密情報を保護することが可能である。また、記憶領域内における秘密情報の伝播規則をあらかじめ導出しておくことにより、プログラム実行中は秘密情報の入力先変数のみを監視することで、監視処理に起因するオーバーヘッドを削減可能となる。
【発明の効果】
【００４１】
本発明によると、プログラムが使用した記憶領域内に含まれる秘密情報を適切に保護し、当該保護処理に起因するプログラム実行時のオーバーヘッドを削減する秘密情報保護装置、伝播規則導出装置及び秘密情報保護方法を提供することができる。
【発明を実施するための最良の形態】
【００４２】
次に、図面を参照して、本発明の第１〜第４の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には、同一又は類似の符号を付している。ただし、図面は模式的なものであることに留意すべきである。
【００４３】
＜第１の実施の形態＞
（秘密情報保護システム）
第１の実施の形態に係る秘密情報保護システムは、図１に示すように、伝播規則を秘密情報保護装置３００へ導出する伝播規則導出装置２００と、プログラムが利用する記憶領域に格納される秘密情報を保護する秘密情報保護装置３００とを備える。又、以下の説明において、記憶領域はメモリとして説明するが、これに限られるわけではない。
【００４４】
伝播規則導出装置２００は、伝播規則導出部２１０と、出力部２２０とを備える。
【００４５】
伝播規則導出部２１０は、例えば、プログラムソースが存在する箇所について、プログラムソースを解析することにより伝播規則２０を導出する。ここで、「伝播規則」とは、プログラムが利用するメモリに格納される秘密情報の入力先である変数と、当該変数に入力された情報が伝播する他の変数との対応を示す。又、伝播規則導出部２１０は、複数の変数を参照するプログラムの一部分を一つの変数とみなして伝播規則を導出してもよい。
【００４６】
出力部２２０は、伝播規則２０を秘密情報保護装置３００へ出力する。
【００４７】
秘密情報保護装置３００は、伝播規則取得部３１０と、入力監視部３２０と、アドレス変換規則生成部３３０と、保護規則伝播部３４０と、アドレス変換部３５０と、保護規則適用部３６０とを備える。
【００４８】
伝播規則取得部３１０は、伝播規則導出装置２００から伝播規則２０を取得する。
【００４９】
入力監視部３２０は、秘密情報の入力を監視し、秘密情報の入力先である変数と保護規則とを対応付けて監視結果として記録する。ここで、「保護規則」とは、秘密情報に対する保護方法を示したものである。例えば、入力監視部３２０は、プログラムが発行するシステムコールを監視することで、秘密情報の入力を監視し、監視結果の記録を行う。又、入力監視部３２０は、プログラム実行中に動的にメモリに格納あるいは解放される変数を監視結果として記録する。
【００５０】
アドレス変換規則生成部３３０は、プログラム実行時に静的にメモリに格納される変数について、当該変数に一意的に対応する識別子と、当該変数が格納されたメモリにおけるアドレスとの対応を示すアドレス変換規則２１を生成する。又、アドレス変換規則生成部３３０は、プログラム実行中に、動的にメモリに格納あるいは解放される変数が、監視結果として記録された場合、当該変数に一意的に対応する識別子及び当該変数が格納されたメモリにおけるアドレスをアドレス変換規則２１に記録あるいはアドレス変換規則２１から削除する。更に、アドレス変換規則生成部３３０は、プログラム実行中に、スタックの戻りアドレスとスタックポインタが指すアドレスから一時的にメモリに格納される変数について、当該変数に一意的に対応する識別子と、当該変数が格納されたメモリにおけるアドレスとの対応を示すアドレス変換規則２１を生成する。
【００５１】
保護規則伝播部３４０は、入力先である変数と、当該変数に入力された情報が伝播する他の変数との対応を示す伝播規則を用いて、入力監視部３２０による監視結果に基づき、他の変数に保護規則を伝播する。
【００５２】
アドレス変換部３５０は、アドレス変換規則２１を用いて、変数をメモリのアドレスへ変換する。
【００５３】
保護規則適用部３６０は、アドレス変換部３５０による変換後のアドレスに格納された秘密情報に、保護規則伝播部３４０による伝播後の保護規則に示された保護方法を適用する。
【００５４】
又、第１の実施の形態に係る伝播規則導出装置２００は、処理制御装置（ＣＰＵ）を有し、上述した伝播規則導出部２１０、出力部２２０などをモジュールとして、ＣＰＵに内蔵する構成とすることができる。同様に、秘密情報保護装置３００は、処理制御装置（ＣＰＵ）を有し、上述した伝播規則取得部３１０、入力監視部３２０、アドレス変換規則生成部３３０、保護規則伝播部３４０、アドレス変換部３５０、保護規則適用部３６０などをモジュールとして、ＣＰＵに内蔵する構成とすることができる。これらのモジュールは、パーソナルコンピュータ等の汎用コンピュータにおいて、所定のプログラム言語を利用するための専用プログラムを実行することにより実現することができる。
【００５５】
又、図示していないが、伝播規則導出装置２００及び秘密情報保護装置３００は、伝播規則導出処理、保護規則伝播処理、アドレス変換処理、保護規則適用処理などをＣＰＵに実行させるためのプログラムを蓄積するプログラム保持部をそれぞれ備えてもよい。プログラム保持部は、例えば、ＲＡＭ、ＲＯＭ、ハードディスク、フレキシブルディスク、コンパクトディスク、ＩＣチップ、カセットテープなどの記録媒体である。このような記録媒体によれば、プログラムの蓄積、運搬、販売などを容易に行うことができる。
【００５６】
（秘密情報保護方法）
次に、第１の実施の形態に係る秘密情報保護方法について、図２〜図１０を用いて説明する。
【００５７】
まず、上述した伝播規則導出装置２００などにより、プログラムソースの解析などにより導出される、プログラム内で参照される変数間の関係を表す伝播規則２０を予め用意する。
【００５８】
伝播規則２０は、例えば、図３左に示すような有向グラフで記述される。図３の伝播規則において、各ノードは、プログラム内で参照される各変数を表し、Ｘn（ｎ＝１，２，…）は、それらの変数を一意に識別する識別子である。識別子は、例えば、プログラムソース内における変数の登場順に自然数を割り当てる。各エッジは、エッジの先にある変数が、エッジの元にある変数から導出されることを表している。例えば、図３右に示すように、複数の変数からの四則演算結果や代入演算結果が、別の変数に代入される場合などが相当する（ここでは、説明の簡単のため、変数名ではなく識別子をプログラムソース内で使用している。）。
【００５９】
また、図４に示したように、伝播規則２０は、例えば、関数などプログラムの一部分を一つの変数のように扱う場合もある。図４の例では、ソースが明らかでない関数unknown_func()がある保護規則を有する因数ｘ1をとり、その返り値がｘ2であった場合に、不明部分全体を一つの変数のように扱い、ｘ2にはｘ1から保護規則が伝播される。これにより、プログラムソースが与えられない他プログラム開発者やあらかじめＯＳに用意されたライブラリ等の関数を使用する場合などで、プログラムの一部について詳細な伝播規則が生成できない場合にも伝播規則の生成が可能となる。
【００６０】
以下、例示した伝播規則２０が入力されたものとし、監視ステップ（図２のステップＳ１０１）及び保護規則適用ステップ（図２のステップＳ１０２〜１０４）の動作について説明する。ステップＳ１０１に示す監視ステップでは、秘密情報の入力を監視し、ステップＳ１０２〜１０４に示す保護規則適用ステップでは、例えばメモリダンプによりメモリを不揮発性の二次記憶装置に出力する場合に、出力されるメモリダンプ情報を保護する目的で実行される。
【００６１】
まず、ステップＳ１０１において、プログラムの実行によりプロセスが使用するメモリに対する秘密情報の入力を監視し、プロセス毎に監視結果の記録を行う。監視方法としては、例えば、図５に示すように、プロセスが発行するシステムコールを監視することで実現可能である。なぜなら、秘密情報が入力される契機として、ユーザによるキーボード入力、計算機に保存されているファイルの入力、あるいは他プロセスとの通信（他プロセスからの入力）が考えられるが、これらは必ず、プログラムによる、計算機を管理するカーネルに対するシステムコールの発行を伴うからである。システムコールの監視により検出された、プロセスへの外部からの入力が秘密情報であった場合、カーネル処理監視機構は、入力先変数の識別子と、秘密情報をどのように保護すべきかを規定する保護規則とを、図５に示すような監視結果として記録する。
【００６２】
ここで、「保護規則」とは、各秘密情報に割り当てられ、具体的には、図６に示すように、“０で塗りつぶす”、あるいは“ある主体の公開鍵で暗号化する”等、実際に秘密情報を隠蔽する際の方法を表す。
【００６３】
保護規則は、例えば、図７上に示すように、キーボードやファイル等から入力し、計算機ユーザが予めセキュリティレベルの設定を行うことで設定することができる。例えば、キーボードからの入力保護設定について、入力全てを暗号化、パスワード入力時などのキー入力結果が表示されない場合に暗号化、暗号化無しなどのレベルが存在し、ユーザは利用するメールソフト、テキストエディタ、ゲーム等それぞれのプログラムにおいてキーボード入力が発生した場合に、入力した結果に対するセキュリティのレベルを設定する。また、ファイルの保護設定については、ユーザの鍵で暗号化、ユーザとプログラム開発者が共有する鍵で暗号化、暗号化無しなどのレベルが存在し、ユーザはパスワードファイル、設定ファイル、個人ファイルに対するセキュリティレベルを設定する。
【００６４】
これらのセキュリティ設定は、図７下に示すように、キーボードやファイルからに応じて発生するシステムコールを検出した場合に参照され、対応する保護規則へと変換される。また、これらのシステムコールは必ず、入力先となる変数を引数に有するため、当該変数に対応する識別子は保護規則と共に監視結果として記録される。
【００６５】
プログラムの秘密情報に対応する保護規則については、プログラム開発者があらかじめ指定することが可能であるので、プログラム実行時に初期値として監視結果に登録する。また、他プロセスからの入力については、他プロセスの監視結果から保護規則を取得することにより実現可能である。これらの保護規則の具体的な取得方法については、第３の実施の形態において述べる。
【００６６】
次に、ステップＳ１０２において、図８に示すように、監視結果を伝播規則に入力し、保護規則を伝播させることで、各変数の識別子に対応する保護規則を導出する。伝播規則は、ある変数がどの変数から導出されるかを表すため、導出元の変数に対応する保護規則は、導出先の変数に対して伝播される。図８で示した例では、監視結果のうちｘ1に対応する保護規則Policy １、識別子ｘ4に対応する保護規則Policy ４が伝播規則に従ってｘ3に継承されるため、保護規則伝播結果には、ｘ3がPolicy １、及びPolicy ４に従って保護されるという規則が追加される。このように、複数の保護規則が継承された場合は、全ての保護規則が適用される。この場合、Policy １は０による塗りつぶし、Policy ４は主体Ｄの公開鍵で暗号化するという規則を表すため（図６参照）、結果的にはｘ3は０で塗りつぶされることになる。また、ある主体の公開鍵で暗号化するという規則が重なった場合は、暗号化結果をさらに暗号化することで、全ての保護規則を適用することが可能である。
【００６７】
次に、ステップＳ１０３において、変数に対応する識別子をメモリ内のアドレスへと変換する。即ち、保護規則伝播結果に記録されている識別子に対応する変数は、実際にはメモリのどの部分に格納されているかを導出する。そのためには、識別子とメモリのアドレスとを変換するアドレス変換規則２１が必要である。
【００６８】
アドレス変換規則２１は、例えば、図９に示すようなテーブルで表現され、識別子、識別子に対応する変数のメモリ先頭アドレス、及びデータサイズが登録される。現在のオペレーティングシステムの設計では、メモリに格納される変数は、プロセス生成時に静的に割り当てられる変数、プロセス実行中に動的に割り当てられる変数、及び関数呼び出しなどにより一時的にスタック領域に積まれる変数があるため、図９で示すように、アドレス変換規則２１を表すテーブルはプロセスの実行状態に従い動的に変化する。プロセス生成時の初期テーブルでは、プロセス生成時から静的に割り当てられる静的な変数が登録される。これらは、プロセスが終了するまで常にテーブルに保持される。プロセス実行時に、動的にメモリに割り当てられる変数については、プロセス実行中に、動的なメモリ割り当て、あるいは開放を監視し、それに従ってテーブルを動的に更新する。例えば、識別子ｘ4、ｘ5に対応する変数が動的にメモリに割り当てられた場合、メモリ割り当て後のテーブルでは、図９に示すようにｘ4、ｘ5が登録されるが、その後ｘ5の開放が行われた場合は、それに伴い動的割り当て解放後テーブルでは、ｘ5のエントリがテーブルから削除される。また、スタックに積まれる変数については、レジスタに格納されているスタックポインタ、及びリターンアドレスを見ることで現在積まれている変数を特定可能であるため、保護規則適用時にテーブルを更新する。例えば、識別子ｘ6に対応する変数がスタックに積まれている場合は、保護規則適用時テーブルに示すように、ｘ6のエントリを追加する。
【００６９】
ステップＳ１０３では、ステップＳ１０２で得られた保護規則伝播結果、及びアドレス変換規則２１を用いて、識別子をメモリアドレスに変換する。
【００７０】
次に、ステップＳ１０４において、保護規則を実際に記憶領域３０に格納された秘密情報に対して適用し、保護済み記憶領域３１を出力する。具体的には、図１０に示すように、識別子と保護規則の対応関係を、アドレスと保護規則の対応関係に変換し、各アドレスに格納されている秘密情報へ適用していく。
【００７１】
（作用及び効果）
第１の実施の形態に係る秘密情報保護装置３００及び秘密情報保護方法によると、プログラム実行中に変数に入力される秘密情報を保護することが可能である。また、記憶領域内における秘密情報の伝播規則をあらかじめ導出しておくことにより、プログラム実行中は秘密情報の入力先変数のみを監視することで、監視処理に起因するオーバーヘッドを削減可能となる。
【００７２】
又、秘密情報保護装置３００の入力監視部３２０は、プログラムが発行するシステムコールを監視することで、秘密情報の入力を厳密に監視することが可能である。
【００７３】
又、アドレス変換規則２１は、プログラム実行時に静的に記憶領域に格納される変数について、当該変数に一意的に対応する識別子と、当該変数が格納された記憶領域におけるアドレスとの対応を示すことができる。このため、プログラム実行中に静的に記憶領域に格納される変数が、記憶領域のどこに格納されているかを知ることが可能である。
【００７４】
又、入力監視部３２０は、プログラム実行中に動的に記憶領域に格納あるいは解放される変数を監視結果として記録し、アドレス変換規則２１は、当該変数に一意的に対応する識別子及び当該変数が格納された記憶領域におけるアドレスを記録あるいは削除されることができる。このため、プログラム実行中に動的に記憶領域に格納される変数が、記憶領域のどこに格納されているかを知ることが可能である。
【００７５】
又、アドレス変換規則２１は、プログラム実行中に、スタックの戻りアドレスとスタックポインタが指すアドレスから一時的に記憶領域に格納される変数について、当該変数に一意的に対応する識別子と、当該変数が格納された記憶領域におけるアドレスとの対応を示すことができる。このため、保護規則適用時に一時的に記憶領域に格納されている変数が記憶領域のどこに格納されているかを知ることが可能である。
【００７６】
又、記憶領域はメモリであり、保護規則適用部３６０は、メモリダンプを契機に、保護規則に示された保護方法を適用することができる。このため、メモリダンプ情報に含まれる秘密情報を保護可能である。
【００７７】
又、第１の実施の形態に係る伝播規則導出装置２００によると、秘密情報保護に必要な伝播規則を生成することが可能である。
【００７８】
又、伝播規則２０は、プログラムソースが存在する箇所について、プログラムソースを解析することで導出することができる。このため、プログラムソースを有する任意の主体が、任意の時期に伝播規則を導出することが可能であり、他主体が作成した関数を使用する場合などプログラムソースの一部が存在しない場合でも伝播規則を導出することが可能である。
【００７９】
又、伝播規則２０は、複数の変数を参照するプログラムの一部分を一つの変数とみなして導出することができる。このため、プログラムソースの一部が存在しない場合など、変数ごとの詳細な伝播規則を生成することができない場合でも、伝播規則を導出することが可能である。
【００８０】
＜第２の実施の形態＞
本発明の第２の実施形態では、プログラム実行前から入力が自明である秘密情報、及びプログラム外部へ出力される秘密情報の保護について述べる。
【００８１】
（秘密情報保護システム）
第２の実施の形態に係る秘密情報保護システムは、図１１に示すように、伝播規則を秘密情報保護装置３００へ導出する伝播規則導出装置２００と、プログラムが利用する記憶領域に格納される秘密情報を保護する秘密情報保護装置３００とを備える。又、以下の説明において、記憶領域はメモリとして説明するが、これに限られるわけではない。
【００８２】
伝播規則導出装置２００は、伝播規則導出部２１０と、出力部２２０とを備える。
【００８３】
伝播規則導出部２１０は、第１の実施の形態において説明した伝播規則２０に加え、プログラム実行前から予め秘密情報の入力が自明である変数に一意的に対応する第一の識別子４０と、プログラム外部から秘密情報が入力される可能性がある変数に一意的に対応する第二の識別子４１と、プログラム外部へ秘密情報が出力される可能性がある変数に一意的に対応する第三の識別子４２と、第一の識別子あるいは第二の識別子に対応する変数であって、第三の識別子に対応する変数へ秘密情報を伝播する変数に一意的に対応する保護規則伝播識別子４３とを更に含む、第二の伝播規則２５を導出する。
【００８４】
出力部２２０は、第二の伝播規則２５を秘密情報保護装置３００へ出力する。
【００８５】
伝播規則導出部２１０のその他の機能は、第１の実施の形態と同様であるので、ここでは説明を省略する。
【００８６】
秘密情報保護装置３００は、伝播規則取得部３１０と、入力監視部３２０と、アドレス変換規則生成部３３０と、保護規則伝播部３４０と、アドレス変換部３５０と、保護規則適用部３６０とを備える。
【００８７】
伝播規則取得部３１０は、伝播規則導出装置２００から第二の伝播規則を取得する。
【００８８】
入力監視部３２０は、第一の識別子４０、第二の識別子４１、第三の識別子４２、保護規則伝播識別子４３を初期監視結果として記録する。又、入力監視部３２０は、第二の識別子４１に対応する変数への秘密情報の入力を監視する。更に、入力監視部３２０は、第三の識別子４２に対応する保護規則伝播識別子に適用される保護規則を秘密情報の保護規則として記録する。
【００８９】
入力監視部３２０のその他の機能、アドレス変換規則生成部３３０、保護規則伝播部３４０、アドレス変換部３５０、保護規則適用部３６０については、第１の実施の形態と同様であるのでここでは説明を省略する。
【００９０】
（秘密情報保護方法）
次に、第２の実施の形態に係る秘密情報保護方法について、図１２及び図１３を用いて説明する。
【００９１】
第２の実施の形態では、伝播規則が、プログラムの秘密情報であり、プログラム実行前から秘密情報の入力が自明である変数に対応する識別子を第一の識別子、及びキーボード入力、ファイル入力、あるいはプロセス間通信における入力などに用いられ、プログラム実行中に秘密情報が入力される可能性がある変数に対応する識別子を第二の識別子、プロセス間通信における出力などに用いられ、プログラム実行中に秘密情報が出力される可能性がある変数に対応する識別子を第三の識別子、第一または第二の識別子に対応する変数であって、第三の識別子に対応する変数へ秘密情報を伝播する変数に対応する識別子を、第三の識別子に対応する保護規則伝播識別子とし、これら第一から第三の識別子、及び保護規則伝播識別子をあらかじめ記録している。
【００９２】
図１３では、ｘ1は第一の識別子、ｘ3は第三の識別子、ｘ4は第二の識別子であり、さらにｘ3へ保護規則を伝播する保護規則伝播識別子でもある。
【００９３】
まず、図１２のステップＳ２００において、第二の伝播規則２５が取得される。そして、実際にプログラムが実行されプロセスが生成される際、第一から第三の識別子が初期値として登録された初期監視結果が生成される。また、第三の識別子のエントリには、ｘ3へ秘密情報を伝播する保護規則伝播識別子であるｘ4が伝播識別子として登録される。ここで、第一の識別子に対応する保護規則はこの時点で自明であるためすでに登録されている。保護規則は、例えばプログラム開発者が、プログラムソース内において変数宣言時にプログラムのコメントとしてあらかじめ指定するなどの方法が考えられる。伝播規則導出時にプログラムソースの解析が行われるため、変数宣言場所に記述されたコメントを取得することで、当該変数を第一の識別子に対応する変数とし、同時に記述された保護規則と共に監視結果の初期値とする（例えば、“int x1;/*Policy(x1):Policy 1 */”のように記載）。
【００９４】
次に、ステップＳ２０１において、プログラムの実行によりプロセスが使用するメモリに対する秘密情報の入力を監視し、プロセス毎に監視結果の記録を行う。第二の識別子に対応する保護規則は、プログラム実行中に秘密情報が入力された場合に、ステップＳ２０１において記録される。
【００９５】
第三の識別子に対応する秘密情報がプログラム外部へ出力される際に、その秘密情報を保護するためには、当該秘密情報にどのような保護規則が適用されるべきか知る必要がある。しかし、ステップＳ２０１では、当該秘密情報に対応する保護規則は監視結果に登録されていないため、実際に伝播規則により保護規則を伝播する必要がある。ここで、第三の識別子に対応する秘密情報に保護規則を伝播する可能性があるのは、保護規則伝播識別子に対応する秘密情報のみであるため、監視結果の伝播識別子のエントリに登録されている保護規則を、その時点での第三の識別子に対応する秘密情報の保護規則とし出力する。これにより例えば、識別子ｘ3に対応する秘密情報が別プロセスへ渡された場合でも、別プロセスの監視結果に上記の過程で出力されたｘ3に対応する秘密情報の保護規則を登録することで、プロセス間をまたいだ秘密情報の保護が実現可能である。
【００９６】
上記の手順で得られた伝播規則、監視結果に基づいて、ステップＳ２０２〜２０４の処理が行われる。ステップＳ２０２〜２０４については、第１の実施の形態と同様であるので、ここでは説明を省略する。
【００９７】
（作用及び効果）
第２の実施の形態に係る秘密情報保護装置３００及び秘密情報保護法法によると、第二の識別子に対応する変数への秘密情報の入力を監視することにより、秘密情報保護装置の監視処理コストを削減可能である。
【００９８】
又、第三の識別子に対応する保護規則伝播識別子に適用される保護規則を秘密情報の保護規則として記録することにより、プログラム外部へ出力される秘密情報を保護可能である。
【００９９】
又、第２の実施の形態に係る伝播規則導出装置２００によると、第一の識別子、第二の識別子、第三の識別子、保護規則伝播識別子を導出することができる。又、第一の識別子を導出することにより、プログラム実行前からあらかじめ存在する秘密情報の保護が可能である。
【０１００】
＜第３の実施の形態＞
第３の実施の形態では、秘密情報保護装置３００に、伝播規則２０に加え、伝播制御規則２２が入力される場合について記述する。伝播制御規則２２は、保護規則が伝播規則２０に従って伝播する場合に、変数間の関係、あるいは各ノードに対応する保護規則を元に、伝播規則２０の更新を行うための規則である。
【０１０１】
（秘密情報保護システム）
第３の実施の形態に係る秘密情報保護システムは、図１４に示すように、伝播規則２０及び伝播制御規則２２を秘密情報保護装置３００へ導出する伝播規則導出装置２００と、プログラムが利用する記憶領域に格納される秘密情報を保護する秘密情報保護装置３００とを備える。又、以下の説明において、記憶領域はメモリとして説明するが、これに限られるわけではない。
【０１０２】
伝播規則導出装置２００は、伝播規則導出部２１０と、出力部２２０とを備える。
【０１０３】
伝播規則導出部２１０は、伝播規則２０及び保護規則の伝播を制御する伝播制御規則２２を導出する。更に、伝播規則導出部２１０は、伝播制御規則２２に従って、伝播規則２０を更新する。
【０１０４】
出力部２２０は、伝播規則２０及び伝播制御規則２２を秘密情報保護装置３００へ出力する。
【０１０５】
伝播規則導出部２１０のその他の機能は、第１の実施の形態と同様であるので、ここでは説明を省略する。
【０１０６】
秘密情報保護装置３００は、伝播規則取得部３１０と、入力監視部３２０と、アドレス変換規則生成部３３０と、保護規則伝播部３４０と、アドレス変換部３５０と、保護規則適用部３６０とを備える。
【０１０７】
伝播規則取得部３１０は、伝播規則導出装置２００から伝播規則２０及び伝播制御規則２２を取得する。
【０１０８】
保護規則伝播部３４０は、伝播制御規則２２が与えられた場合、保護規則を適用する際、伝播制御規則２２に従って伝播規則２０を更新し、更新後の伝播規則に従って、保護規則を伝播する。
【０１０９】
入力監視部３２０、アドレス変換規則生成部３３０、保護規則伝播部３４０のその他の機能、アドレス変換部３５０、保護規則適用部３６０については、第１の実施の形態と同様であるのでここでは説明を省略する。
【０１１０】
（秘密情報保護方法）
次に、第３の実施の形態に係る秘密情報保護方法について、図１５及び図１６を用いて説明する。
【０１１１】
変数間の関係やあるノードに対応する保護規則を元に伝播規則２０の更新が起こる例を図１６に示す。図１６左上には、伝播規則更新の第一の例として、変数間の関係により、伝播規則が更新されるプログラム例を示した。この例では、ｘ2とｘ5には、演算によるつながりがないため、図１６左下の伝播規則に示すように、ｘ2からｘ5へのエッジは存在しない。しかし、ｘ2に対応する保護規則が存在した場合、ｘ5へ伝播されるのが妥当である。なぜなら、ｘ5はｘ2の値による条件分岐により決定されているため、ｘ2に代入されている値を取得できた場合に、ｘ5まで取得できてしまうためである。
【０１１２】
図１６右上には、伝播規則更新の第二の例として、保護規則伝播時に、伝播規則が更新されるプログラム例を示した。この例では、ｘ3にはｘ1、ｘ3、ｘ4の積が代入されるため、伝播規則では、ｘ1、ｘ2、ｘ4からｘ3へのエッジが存在する。しかし、ｘ1、ｘ4の保護規則が同じであった場合、この保護規則は必ずしもｘ3へ伝播される必要はない。なぜなら、仮にｘ2、ｘ3に代入されている値を取得できた場合でも、保護規則によりｘ1、ｘ4にアクセスできなければ、この式一つだけでは、ｘ1、ｘ4を導出することはできないためである。逆に、この場合ｘ2の保護規則は伝播されなければならない。なぜなら、もしｘ1、ｘ4に代入されている値を取得可能な主体がさらにｘ3に代入されている値も取得可能であった場合、ｘ2に代入されている値も取得可能となるからである。上記に示したような例により、伝播規則は、図１６右下に示すように更新され、またｘ3にはｘ2からのみ保護規則が伝播される。伝播制御規則は、上記に示したような、伝播規則に対して保護規則の伝播を正誤する規則を記述する。
【０１１３】
図１５のステップＳ３００において、伝播規則２０及び伝播制御規則２２が取得される。このとき、伝播規則２０は、伝播制御規則２２により、予め更新されていてもよい。ここでの更新は、例えば上記第一の例で示したように、プログラムソースの解析時に行われる。
【０１１４】
次に、ステップＳ３０１は、第１の実施の形態と同様であるので、ここでは説明を省略する。
【０１１５】
次に、ステップＳ３０２において、伝播制御規則２２により、さらに伝播規則２０を更新する。ここでの更新は、例えば上記第二の例で示したように、保護規則の伝播時に動的に行われる。
【０１１６】
ステップＳ３０３及びＳ３０４は、第１の実施の形態と同様であるので、ここでは説明を省略する。
【０１１７】
（作用及び効果）
第３の特徴に係る秘密情報保護装置３００及び秘密情報保護方法において、保護規則伝播部３４０は、保護規則の伝播を制御する伝播制御規則が与えられた場合、伝播制御規則に従って伝播規則を更新し、更新後の伝播規則に従って、保護規則を伝播することができる。このため、伝播制御規則で指定することにより、プログラムや保護規則の性質を考慮した、厳密な保護規則の伝播が可能である。
【０１１８】
又、第３の実施の形態に係る伝播規則導出装置２００において、伝播規則導出部２１０は、保護規則の伝播を制御する伝播制御規則２２を更に導出することができる。このため、例えばプログラムの性質など、プログラム実行前からあらかじめ分かっている情報により、伝播規則の更新をし、それを出力することが可能となる。
【０１１９】
＜第４の実施の形態＞
第４の実施の形態では、第１〜第３の実施の形態において述べた伝播規則２０、アドレス変換規則２１等が入力されなかった場合に、入力された秘密情報を保護することについて述べる。
【０１２０】
（秘密情報保護システム）
第４の実施の形態に係る秘密情報保護装置３００は、入力監視部３２０と、秘密情報検索部３７０と、保護規則適用部３６０とを備える。
【０１２１】
入力監視部３２０は、秘密情報の入力を監視し、秘密情報と秘密情報に対する保護方法を示す保護規則とを対応付けて監視結果として記録する。
【０１２２】
秘密情報検索部３７０は、秘密情報を格納した記憶領域から、入力監視部３２０によって入力を監視された秘密情報を検索する。
【０１２３】
保護規則適用部３６０は、秘密情報検索部３７０によって検索された秘密情報に、保護規則に示された保護方法を適用する。
【０１２４】
（秘密情報保護方法）
次に、第４の実施の形態に係る秘密情報保護法法について、図１８及び図１９を用いて説明する。
【０１２５】
まず、ステップＳ４０１において、秘密情報の入力を監視し、秘密情報と対応する保護規則を監視結果として記録する。入力は、図１９に示すように、図５に示す第１の実施の形態と同様に、例えばシステムコールを監視することで可能である。図５と異なる点は、記録されるものが変数の識別子ではなく、実際の秘密情報という点である。例えば、ここではユーザが入力したパスワードである文字列“passwd”と対応する保護規則Policy １が登録されている。
【０１２６】
次に、ステップＳ４０２において、ステップＳ４０１による監視結果を取得し、メモリに対して登録された秘密情報の検索を行う。
【０１２７】
次に、ステップＳ４０３において、検索された秘密情報に対して個々に、監視結果で記録されている保護規則を適用していく。例えば、“passwd”という文字列を文字列検索し、ヒットし次第、保護規則Policy １により、主体Ａの公開鍵で暗号化していく（図６参照）。
【０１２８】
（作用及び効果）
第４の実施の形態に係る秘密保護装置３００及び秘密保護方法によると、伝播規則、及びアドレス変換規則が入力されなかった場合でも、記憶領域に入力された秘密情報を保護することが可能である。
【０１２９】
＜その他の実施形態＞
本発明は上記の実施形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施形態、実施例及び運用技術が明らかとなろう。
【０１３０】
例えば、本発明の実施の形態において、秘密情報保護装置３００は、伝播規則取得部３１０、入力監視部３２０、アドレス変換規則生成部３３０、保護規則伝播部３４０、アドレス変換部３５０、保護規則適用部３６０をモジュールとして一つのＣＰＵに備えてもよいと説明したが、それぞれ異なるＣＰＵに備えられ、異なる装置としてもよい。その場合、複数の装置間をバスなどで接続するものとする。
【０１３１】
このように、本発明はここでは記載していない様々な実施形態等を含むことは勿論である。従って、本発明の技術的範囲は上記の説明から妥当な特許請求の範囲に係る発明特定事項によってのみ定められるものである。
【図面の簡単な説明】
【０１３２】
【図１】第１の実施の形態に係る秘密情報保護システムの構成ブロック図である。
【図２】第１の実施の形態に係る秘密情報保護方法を示すフローチャートである。
【図３】第１の実施の形態に係る伝播規則の一例である（その１）。
【図４】第１の実施の形態に係る伝播規則の一例である（その２）。
【図５】第１の実施の形態に係る秘密情報の監視方法を説明する図である。
【図６】第１の実施の形態に係る保護規則の一例である。
【図７】第１の実施の形態に係る保護規則の設定方法を説明する図である。
【図８】第１の実施の形態に係る保護規則の伝播を説明する図である。
【図９】第１の実施の形態に係るアドレス変換規則の一例である。
【図１０】第１の実施の形態に係る保護規則の適用を説明する図である。
【図１１】第２の実施の形態に係る秘密情報保護システムの構成ブロック図である。
【図１２】第２の実施の形態に係る秘密情報保護方法を示すフローチャートである。
【図１３】第２の実施の形態に係る監視結果による推移を説明する図である。
【図１４】第３の実施の形態に係る秘密情報保護システムの構成ブロック図である。
【図１５】第３の実施の形態に係る秘密情報保護方法を示すフローチャートである。
【図１６】第３の実施の形態に係る伝播制御規則の適用例を説明する図である。
【図１７】第４の実施の形態に係る秘密情報保護システムの構成ブロック図である。
【図１８】第４の実施の形態に係る秘密情報保護方法を示すフローチャートである。
【図１９】第４の実施の形態に係る秘密情報の監視方法を説明する図である。
【符号の説明】
【０１３３】
２０…伝播規則
２１…アドレス変換規則
２２…伝播制御規則
２５…伝播規則
３０…記憶領域
３１…保護済み記憶領域
４０…第一の識別子
４１…第二の識別子
４２…第三の識別子
４３…保護規則伝播識別子
２００…伝播規則導出装置
２１０…伝播規則導出部
２２０…出力部
３００…秘密情報保護装置
３１０…伝播規則取得部
３２０…入力監視部
３３０…アドレス変換規則生成部
３４０…保護規則伝播部
３５０…アドレス変換部
３６０…保護規則適用部
３７０…秘密情報検索部
【図１】
2006065689.tif 000003
【図２】
2006065689.tif 000004
【図３】
2006065689.tif 000005
【図４】
2006065689.tif 000006
【図５】
2006065689.tif 000007
【図６】
2006065689.tif 000008
【図７】
2006065689.tif 000009
【図８】
2006065689.tif 000010
【図９】
2006065689.tif 000011
【図１０】
2006065689.tif 000012
【図１１】
2006065689.tif 000013
【図１２】
2006065689.tif 000014
【図１３】
2006065689.tif 000015
【図１４】
2006065689.tif 000016
【図１５】
2006065689.tif 000017
【図１６】
2006065689.tif 000018
【図１７】
2006065689.tif 000019
【図１８】
2006065689.tif 000020
【図１９】
2006065689.tif 000021