(57)【要約】【課題】ＯＳとプロセス間の通信に対してセキュリティ機能を実現し、プロセスの保護を図る。【解決手段】実施形態の情報処理装置は、プロセス管理部で管理されるプロセスを有する情報処理装置であって、前記プロセスは、鍵生成部と、認証コード生成部と、出力部と、を備える。鍵生成部は、前記プロセス管理部が割り当てたプロセス固有情報を用いて第１メッセージ認証鍵を生成する。認証コード生成部は、前記第１メッセージ認証鍵と第１メッセージを用いて第１メッセージ認証コードを生成する。出力部は、前記第１メッセージと前記第１メッセージ認証コードを前記プロセス管理部に送信する。【選択図】図２
2019050507.tif 000002
【特許請求の範囲】
【請求項１】
プロセス管理部で管理されるプロセスを有する情報処理装置であって、
前記プロセスは、
前記プロセス管理部が割り当てたプロセス固有情報を用いて第１メッセージ認証鍵を生成する第１鍵生成部と、
前記第１メッセージ認証鍵と第１メッセージを用いて第１メッセージ認証コードを生成する第１認証コード生成部と、
前記第１メッセージと前記第１メッセージ認証コードを前記プロセス管理部に送信する第１出力部と、を備える
情報処理装置。
【請求項２】
前記プロセス固有情報は、前記プロセスの実行ファイルがマッピングされるメモリ上の位置を示すベースアドレスであり、
前記第１鍵生成部は、前記ベースアドレスと所定の鍵導出関数とを用いて前記第１メッセージ認証鍵を生成する
請求項１に記載の情報処理装置。
【請求項３】
前記第１鍵生成部は、前記ベースアドレスと該ベースアドレスをもとに特定されるメモリ領域に格納された乱数とから生成されるデータを前記鍵導出関数に入力して前記第１メッセージ認証鍵を生成する
請求項２に記載の情報処理装置。
【請求項４】
前記プロセスは、
第２メッセージと第２メッセージ認証コードを前記プロセス管理部から受信する第１入力部と、
前記第１メッセージ認証鍵と前記第２メッセージ認証コードを用いて前記第２メッセージを検証する第１認証コード検証部と、をさらに備える
請求項１乃至３のいずれか一項に記載の情報処理装置。
【請求項５】
前記プロセスは、
前記第１認証コード検証部により前記第２メッセージの異常が発見された場合に異常を示すログを出力するログ出力部をさらに備える
請求項４に記載の情報処理装置。
【請求項６】
前記プロセス管理部は、
前記プロセス固有情報を用いて第２メッセージ認証鍵を生成する第２鍵生成部と、
前記第１メッセージと前記第１メッセージ認証コードを前記プロセスから受信する第２入力部と、
前記第２メッセージ認証鍵と前記第１メッセージ認証コードを用いて前記第１メッセージを検証する第２認証コード検証部と、を備える
請求項１乃至５のいずれか一項に記載の情報処理装置。
【請求項７】
前記プロセス管理部は、
前記第２メッセージ認証鍵と第２メッセージを用いて第２メッセージ認証コードを生成する第２認証コード生成部と、
前記第２メッセージと前記第２メッセージ認証コードを前記プロセスに送信する第２出力部と、をさらに備える
請求項６に記載の情報処理装置。
【請求項８】
前記プロセスは、他のプロセスの実行を制御する管理プロセスであり、
前記第２メッセージは、前記他のプロセスを特定する情報を含み、
前記管理プロセスは、前記第２メッセージと、実行を許可するプロセスの実行ファイルのリストとに基づいて、前記他のプロセスの実行可否を判定する実行判定部をさらに備え、
前記第１メッセージは、前記実行判定部による判定結果を含む
請求項７に記載の情報処理装置。
【請求項９】
前記プロセス管理部は、前記第１メッセージに含まれる判定結果に基づいて、前記他のプロセスの実行を制御するプロセス実行制御部をさらに備える
請求項８に記載の情報処理装置。
【請求項１０】
前記第１メッセージは、前記他のプロセスを特定する情報をさらに含み、
前記プロセス実行制御部は、前記第１メッセージに含まれる前記他のプロセスを特定する情報が、前記第２メッセージに含まれる前記他のプロセスを特定する情報と異なる場合に、前記他のプロセスを停止させる
請求項９に記載の情報処理装置。
【請求項１１】
プロセス管理部で管理されるプロセスを有する情報処理装置であって、
前記プロセスは、
前記プロセス管理部が割り当てたプロセス固有情報に基づいて特定されるメモリ領域から第１メッセージ認証鍵を取得する鍵取得部と、
前記第１メッセージ認証鍵と第１メッセージを用いて第１メッセージ認証コードを生成する第１認証コード生成部と、
前記第１メッセージと前記第１メッセージ認証コードを前記プロセス管理部に送信する第１出力部と、を備える
情報処理装置。
【請求項１２】
プロセス管理部で管理されるプロセスを有する情報処理装置において実行される情報処理方法であって、
前記プロセスが、
前記プロセス管理部が割り当てたプロセス固有情報を用いて第１メッセージ認証鍵を生成し、
前記第１メッセージ認証鍵と第１メッセージを用いて第１メッセージ認証コードを生成し、
前記第１メッセージと前記第１メッセージ認証コードを前記プロセス管理部に送信する
情報処理方法。
【請求項１３】
プロセス管理部で管理されるプロセスを有する情報処理装置において実行されるプログラムであって、
前記プロセスに、
前記プロセス管理部が割り当てたプロセス固有情報を用いて第１メッセージ認証鍵を生成する機能と、
前記第１メッセージ認証鍵と第１メッセージを用いて第１メッセージ認証コードを生成する機能と、
前記第１メッセージと前記第１メッセージ認証コードを前記プロセス管理部に送信する機能と、を実現させる
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
一般的な計算機システムでは、ハードウェア資源を管理するＯＳ（Operating  System）が動作し、ＯＳによって管理されるプロセス群が動作することで、処理を実行する。プロセス内のバグやプロセスへの攻撃により想定外の挙動が生じたときに、その影響がＯＳに及んでしまうと計算機システム全体に影響が及ぶ虞があるため、ＯＳが管理する資源に対するプロセスによるアクセスは制限するように設計されている。そのため、ＯＳとプロセス間でデータを交換する場合には、これらの間の通信機能が必要となる。また、ＯＳとプロセス間の通信を保護し、安全なシステムを構築するためには、通信機能に通信データの完全性、通信相手のなりすまし防止、通信データの秘匿などのセキュリティ機能が必要となる。
【０００３】
一般的なネットワークにおける機器間の通信では、ＳＳＬ（Secure  Sockets  Layer）やＴＬＳ（Transport  Layer  Security）により通信のセキュリティが保たれている。一方、ＯＳとプロセス間の通信について、ＳＳＬやＴＬＳなどの技術は、これらの技術を利用するための設定の観点で適しておらず、セキュリティ機能を実現するための技術は存在していなかった。そのため、ＯＳとプロセス間の通信に対してセキュリティ機能を実現し、プロセスの保護を図ることが求められている。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】RFC  6101  The  Secure  Sockets  Layer（SSL）Protocol  Version  3.0
【非特許文献２】RFC  5246  The  Transport  Layer  Security（TLS）Protocol  Version  1.2
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、ＯＳとプロセス間の通信に対してセキュリティ機能を実現し、プロセスの保護を図ることができる情報処理装置、情報処理方法およびプログラムを提供することである。
【課題を解決するための手段】
【０００６】
実施形態の情報処理装置は、プロセス管理部で管理されるプロセスを有する情報処理装置であって、前記プロセスは、鍵生成部と、認証コード生成部と、出力部と、を備える。鍵生成部は、前記プロセス管理部が割り当てたプロセス固有情報を用いて第１メッセージ認証鍵を生成する。認証コード生成部は、前記第１メッセージ認証鍵と第１メッセージを用いて第１メッセージ認証コードを生成する。出力部は、前記第１メッセージと前記第１メッセージ認証コードを前記プロセス管理部に送信する。
【図面の簡単な説明】
【０００７】
【図１】情報処理装置の概略構成を示すブロック図。
【図２】第１実施形態のＯＳおよびプロセスの機能的な構成例を示すブロック図。
【図３】アドレス情報の一例を示す図。
【図４】ベースアドレスを取得する方法の一例を説明する図。
【図５】プロセス生成部による処理手順の一例を示すフローチャート。
【図６】メッセージ送信時におけるＯＳの処理手順の一例を示すフローチャート。
【図７】メッセージ受信時におけるプロセスの処理手順の一例を示すフローチャート。
【図８】メッセージ送信時におけるプロセスの処理手順の一例を示すフローチャート。
【図９】メッセージ受信時におけるＯＳの処理手順の一例を示すフローチャート。
【図１０】変形例のＯＳおよび管理プロセスの機能的な構成例を示すブロック図。
【図１１】管理プロセス判定部による処理手順の一例を示すフローチャート。
【図１２】実行判定部による処理手順の一例を示すフローチャート。
【図１３】プロセス実行制御部による処理手順の一例を示すフローチャート。
【図１４】第２実施形態のＯＳおよびプロセスの機能的な構成例を示すブロック図。
【図１５】第３実施形態のＯＳおよびプロセスの機能的な構成例を示すブロック図。
【図１６】第４実施形態のＯＳおよびプロセスの機能的な構成例を示すブロック図。
【図１７】第５実施形態のＶＭＭおよびＯＳの機能的な構成例を示すブロック図。
【図１８】メッセージ送信時におけるＶＭＭの処理手順の一例を示すフローチャート。
【図１９】メッセージ受信時におけるＯＳの処理手順の一例を示すフローチャート。
【図２０】メッセージ送信時におけるＯＳの処理手順の一例を示すフローチャート。
【図２１】メッセージ受信時におけるＶＭＭの処理手順の一例を示すフローチャート。
【発明を実施するための形態】
【０００８】
以下、実施形態の情報処理装置、情報処理方法およびプログラムについて、図面を参照して詳細に説明する。なお、以下の説明において、同様の機能を持つ構成要素については同一の符号を付して、重複した説明を適宜省略する。
【０００９】
＜第１実施形態＞
図１は、本実施形態に係る情報処理装置１０の概略構成を示すブロック図である。情報処理装置１０は、図１に示すように、プロセッサ回路、メモリ、ストレージなどのハードウェア１１と、ハードウェア１１の機能を操作するＯＳ１２（「プロセス管理部」の一例）と、ＯＳ１２の機能を利用して動作するプロセス１３とを有する。ＯＳ１２上では１つ以上のプロセス１３が動作し、ＯＳ１２は複数のプロセス１３が並列・並行動作できるように、ハードウェア１１のプロセッサ回路やメモリなどを適切に割り当てて、プロセス１３を管理する。なお、ＯＳ１２とハードウェア１１の間にＸｅｎ，ＫＶＭ、Ｈｙｐｅｒ−ＶなどのＶＭＭ（Virtual  Machine  Monitor）・ハイパーバイザが動作してもよく、ＯＳ１２から見えるハードウェア１１は仮想ハードウェアでもよい。また、ＯＳ１２などのプロセス管理部は情報処理装置１０の外部にあり、外部のプロセス管理部によって情報処理装置１０内のプロセス１３が管理される構成であってもよい。
【００１０】
図２は、ＯＳ１２およびプロセス１３の機能的な構成例を示すブロック図である。ＯＳ１２はプロセス１３を起動させるために、実行ファイルをメモリに割り当ててプロセス１３を生成する。プロセス１３は、プロセスの識別情報であるｐｉｄにより管理される。プロセス１３が起動すると、ＯＳ１２とプロセス１３はデータを交換するための通信を行う。図２は、主に、このＯＳ１２とプロセス１３間の通信を安全に行うための機能的な構成例を示している。
【００１１】
まず、ＯＳ１２の機能について説明する。ＯＳ１２は、図２に示すように、プロセス生成部１０１と、アドレス情報保存部１０２と、ベースアドレス取得部１０３と、鍵生成部１０４と、鍵保存部１０５と、認証コード生成部１０６と、出力部１０７と、入力部１０８と、認証コード検証部１０９と、プロセス起動確認部１１０とを備える。
【００１２】
プロセス生成部１０１は、プロセス１３の生成処理を行う。例えばプロセス生成部１０１は、プロセス１３の実行ファイルをメモリにマッピングするためのベースアドレスを設定し、設定したベースアドレスを含むアドレス情報を生成して、アドレス情報保存部１０２に格納する。また、プロセス生成部１０１は、生成したプロセス１３の起動確認メッセージの送信要求を出力部１０７に送るといった処理を行う。
【００１３】
図３は、アドレス情報保存部１０２に格納されるアドレス情報の一例を示す図である。図３に例示するアドレス情報は、実行ファイル“/bin/test”のコード領域をメモリにマッピングする場合に生成されるアドレス情報の例であり、プロセス１３のｐｉｄに対応付けて、「実行ファイル」、「ファイルオフセット」、「サイズ」、「ベースアドレス」および「マッピングフラグ」の各項目を含む。「実行ファイル」は、メモリにマッピングする実行ファイルのファイル名、「ファイルオフセット」は、マッピングする実行ファイルのオフセット値、「サイズ」は、マッピングする実行ファイルのサイズ、「ベースアドレス」は、実行ファイルをマッピングするために確保したメモリの開始アドレス、「マッピングフラグ」は、メモリのアクセス権限をそれぞれ示している。図３の例において、プロセス生成部１０１は実行ファイル“/bin/test”のコード領域をマッピングするために、実行・読取りの権限を付与し、ベースアドレス“0x0000555555554000”でサイズ“0x2000”のメモリ領域を確保する。
【００１４】
ここでメモリとは、ＭａｓｋＲＯＭ（Mask  Read  Only  Memory）、ＰＲＯＭ（Programmable  Read  Only  Memory）、ＥＰＲＯＭ（Erasable  Programmable  Read  Only  Memory）、ＥＥＰＲＯＭ（Electrically  Erasable  Programmable  Read  Only  Memory）、ＮＡＮＤ型フラッシュメモリ、ＮＯＲ型フラッシュメモリ、ＭＲＡＭ（Magnetoresistive  Random  Access  Memory：磁気抵抗メモリ）、ＰＲＡＭ（Phase  change  Random  Access  Memory：相変化メモリ）、ＲｅＲＡＭ（Resistive  Random  Access  Memory：抵抗変化型メモリ）、ＦｅＲＡＭ（Ferroelectric  Random  Access  Memory：強誘電体メモリ）、ＳＲＡＭ（Static  Random  Access  Memory）、ＤＲＡＭ（Dynamic  Random  Access  Memory）を含み、またその他の半導体メモリや量子メモリでもよい。
【００１５】
実行ファイルがコード領域、データ領域、スタック領域などの複数の領域を持つ場合、複数のベースアドレスが設定されてもよい。実行ファイルをマッピングするメモリアドレスは仮想アドレスでも物理アドレスでもよい。また、実行ファイルは再配置可能な形式であり、プロセス生成部１０１は一定のランダム性を持ってベースアドレスを設定する。ベースアドレスはＯＳ１２が管理するため、ベースアドレスを生成して起動しようとしているプロセス１３のベースアドレスは、その他のプロセス１３から盗聴することはできない。
【００１６】
ベースアドレス取得部１０３は、鍵生成部１０４からの要求に応じて、通信対象のプロセス１３のｐｉｄをキーとしてアドレス情報保存部１０２を検索し、通信対象のプロセス１３に対応するベースアドレスを取得して鍵生成部１０４に返す。なお、通信対象のプロセス１３に対して複数のベースアドレスが設定されている場合は、例えばコード領域に対応するベースアドレスなど、取得するベースアドレスの種類が予め決められているものとする。
【００１７】
鍵生成部１０４は、認証コード生成部１０６あるいは認証コード検証部１０９からの要求に応じて、ベースアドレス取得部１０３により取得されたベースアドレス（「プロセス固有情報」の一例）を用いて、後述のメッセージ認証コードを生成・検証するためのメッセージ認証鍵（「第２メッセージ認証鍵」の一例）を生成する。例えば鍵生成部１０４は、ＰＢＫＤＦ２やＡｒｇｏｎ２などの鍵導出関数を使用・併用し、予め定められた方法で、ベースアドレス取得部１０３により取得されたベースアドレスを鍵導出関数に入力してメッセージ認証鍵を生成する。また、鍵生成部１０４は、ＴＰＭ（Trusted  Platform  Module）、ＨＳＭ（Hardware  Security  Module）などのＨＷ鍵生成モジュールを使用した構成であってもよい。鍵生成部１０４が生成したメッセージ認証鍵は、要求元の認証コード生成部１０６あるいは認証コード検証部１０９に渡されるとともに、ｐｉｄと対応付けて鍵保存部１０５に格納される。
【００１８】
認証コード生成部１０６は、出力部１０７からの要求に応じて、鍵生成部１０４により生成されたメッセージ認証鍵と、通信対象のプロセス１３に送信するメッセージ（「第２メッセージ」の一例）とを用いて、このメッセージに付与するメッセージ認証コードを生成する。例えば認証コード生成部１０６は、出力部１０７から通信対象のプロセス１３のｐｉｄとメッセージを受け取り、鍵保存部１０５を参照して通信対象のプロセス１３のｐｉｄに対応するメッセージ認証鍵が保存されているかを確認する。そして、通信対象のプロセス１３のｐｉｄに対応するメッセージ認証鍵が保存されていればそのメッセージ認証鍵を取得し、保存されていなければ鍵生成部１０４にメッセージ認証鍵の生成を依頼して、鍵生成部１０４からメッセージ認証鍵を取得する。そして、認証コード生成部１０６は、取得したメッセージ認証鍵と、出力部１０７から受け取ったメッセージとを用いてメッセージ認証コードを生成し、メッセージ認証コードをメッセージに付与して出力部１０７に返す。
【００１９】
出力部１０７は、認証コード生成部１０６により生成されたメッセージ認証コードが付与されたメッセージを、通信対象のプロセス１３に送信する。例えば出力部１０７は、プロセス生成部１０１からプロセス１３の起動確認メッセージの送信要求を受け取ると、プロセス１３のｐｉｄをメッセージとして、認証コード生成部１０６にメッセージ認証コードの生成を要求する。そして、認証コード生成部１０６からメッセージ認証コードが付与されたメッセージを受け取ると、このメッセージ認証コードが付与されたメッセージをプロセス１３に送信する。
【００２０】
なお、ここではプロセス１３の起動確認のために起動確認メッセージを送信する場合を例に挙げたが、通信対象のプロセス１３に対して他のメッセージを送信する場合も同様に、出力部１０７は、メッセージ認証コードが付与されたメッセージを送信する。この場合もメッセージに付与されるメッセージ認証コードは、上述のように、プロセス１３の固有情報であるベースアドレスを用いて生成されたメッセージ認証鍵を用いて、認証コード生成部１０６により生成される。
【００２１】
入力部１０８は、通信対象のプロセス１３からメッセージ認証コード（「第１メッセージ認証コード」の一例）が付与されたメッセージ（「第１メッセージ」の一例）を受信する。
【００２２】
認証コード検証部１０９は、入力部１０８からの要求に応じて、鍵生成部１０４により生成されたメッセージ認証鍵と、入力部１０８が受信したメッセージに付与されたメッセージ認証コードとを用いて、入力部１０８が受信したメッセージを検証する。例えば認証コード検証部１０９は、入力部１０８から通信対象のプロセス１３のｐｉｄとメッセージ認証コードが付与されたメッセージを受け取り、鍵保存部１０５を参照して通信対象のプロセス１３のｐｉｄに対応するメッセージ認証鍵が保存されているかを確認する。そして、通信対象のプロセス１３のｐｉｄに対応するメッセージ認証鍵が保存されていればそのメッセージ認証鍵を取得し、保存されていなければ鍵生成部１０４にメッセージ認証鍵の生成を依頼して、鍵生成部１０４からメッセージ認証鍵を取得する。そして、認証コード検証部１０９は、取得したメッセージ認証鍵と、入力部１０８から受け取ったメッセージ認証コードとを用いて、入力部１０８が受信したメッセージが、通信対象のプロセス１３が送信した正当なデータであるかどうかを検証し、検証結果を入力部１０８に返す。
【００２３】
入力部１０８がプロセス１３から受信したメッセージが後述の起動応答メッセージである場合、入力部１０８は、プロセス１３から受信した起動応答メッセージと認証コード検証部１０９による検証結果をプロセス起動確認部１１０に渡す。プロセス起動確認部１１０は、起動応答メッセージと認証コード検証部１０９による検証結果をもとに、プロセス生成部１０１が生成したプロセス１３が正常に起動したかどうかを確認する。
【００２４】
次に、プロセス１３の機能について説明する。プロセス１３は、図２に示すように、ベースアドレス取得部２０１と、鍵生成部２０２と、鍵保存部２０３と、認証コード生成部２０４と、出力部２０５と、入力部２０６と、認証コード検証部２０７と、起動応答部２０８とを備える。
【００２５】
ベースアドレス取得部２０１は、鍵生成部２０２からの要求に応じて、自プロセスの生成時にＯＳ１２のプロセス生成部１０１により設定されたベースアドレスを取得して鍵生成部２０２に返す。ベースアドレスは、上述のように、自プロセスの実行ファイルをメモリにマッピングするために確保されたメモリの開始アドレスである。自プロセスに対して、コード領域のベースアドレス、データ領域のベースアドレス、スタック領域のベースアドレスといったように複数のベースアドレスが設定されている場合は、例えばコード領域に対応するベースアドレスなど、予め決められた種類のベースアドレスを取得すればよい。
【００２６】
図４は、プロセス１３のベースアドレス取得部２０１がベースアドレスを取得する方法の一例を説明する図であり、プログラムカウンタからベースアドレスを取得する例を示している。
【００２７】
図４中の（１）では、ｍｏｖ命令により、プログラムカウンタが格納されているｒｉｐレジスタからプログラムカウンタを取得し、ｒａｘレジスタに格納している。プログラムカウンタを取得する命令はｃａｌｌ命令でもよく、プログラムカウンタできれば命令の種類は問わない。また、プログラムカウンタを格納するレジスタはｒａｘレジスタ以外でもよく、メモリに格納してもよい。
【００２８】
図４中の（２）では、ｍｏｖ命令により、プログラムカウンタを取得した命令のファイル内オフセット０×１００をｒｂｘレジスタに格納している。実行ファイル内のアドレスはコンパイル時に決定するため、実行ファイルの実行前でも、プログラムカウンタを取得した命令の実行ファイル内オフセットは計算できる。また、定数値を格納する命令であれば、プログラムカウンタを取得した命令のファイル内オフセットを格納する命令の種類は問わない。プログラムカウンタを取得した命令のファイル内オフセットを格納するレジスタはｒｂｘレジスタ以外でもよく、メモリに格納してもよい。
【００２９】
図４中の（３）では、ｓｕｂ命令により、（１）で取得したプログラムカウンタから、プログラムカウンタを取得した命令の実行ファイル内オフセットを引くことで、ベースアドレスを取得している。レジスタやメモリ間で減算できる命令であれば、ｓｕｂ命令以外の命令でも良い。
【００３０】
上記の方法以外でも、実行ファイルのシンボル情報を実行・起動時に解決する動的リンカを利用して、ベースアドレスを取得してもよい。プロセスが再配置可能な動的リンクライブラリを呼び出す場合、動的リンクライブラリもベースアドレスを持つ。プロセス１３のベースアドレス取得部２０１は、動的リンクライブラリのベースアドレスを取得してもよい。
【００３１】
鍵生成部２０２は、認証コード生成部２０４あるいは認証コード検証部２０７からの要求に応じて、ベースアドレス取得部２０１により取得されたベースアドレス（「プロセス固有情報」の一例）を用いて、ＯＳ１２の鍵生成部１０４が生成するメッセージ認証鍵と共通のメッセージ認証鍵（「第１メッセージ認証鍵」の一例）を生成する。例えば鍵生成部２０２は、ＯＳ１２の鍵生成部１０４と同じ鍵導出関数を用い、ベースアドレス取得部２０１により取得されたベースアドレスを鍵導出関数に入力してメッセージ認証鍵を生成する。また、鍵生成部２０２は、ＯＳ１２の鍵生成部１０４と同様に、ＴＰＭやＨＳＭなどのＨＷ鍵生成モジュールを使用した構成であってもよい。鍵生成部２０２が生成したメッセージ認証鍵は、要求元の認証コード生成部２０４あるいは認証コード検証部２０７に渡されるとともに、鍵保存部２０３に格納される。
【００３２】
認証コード生成部２０４は、出力部２０５からの要求に応じて、鍵生成部２０２により生成されたメッセージ認証鍵と、ＯＳ１２に送信するメッセージ（「第１メッセージ」の一例）とを用いて、このメッセージに付与するメッセージ認証コードを生成する。例えば認証コード生成部２０４は、出力部２０５からＯＳ１２に送信するメッセージを受け取ると、鍵保存部２０３を参照してメッセージ認証鍵が保存されているかを確認する。そして、鍵保存部２０３にメッセージ認証鍵が保存されていればそのメッセージ認証鍵を取得し、保存されていなければ鍵生成部２０２にメッセージ認証鍵の生成を依頼して、鍵生成部２０２からメッセージ認証鍵を取得する。そして、認証コード生成部２０４は、取得したメッセージ認証鍵と、出力部２０５から受け取ったメッセージとを用いてメッセージ認証コードを生成し、メッセージ認証コードをメッセージに付与して出力部２０５に返す。
【００３３】
出力部２０５は、認証コード生成部２０４により生成されたメッセージ認証コードが付与されたメッセージを、ＯＳ１２に送信する。例えば出力部２０５は、後述の起動応答部２０８から起動応答メッセージの送信要求を受け取ると、例えば、起動成功を示す“ｓｕｃｃｅｓｓ”あるいは起動失敗を示す“ｆａｉｌ”といった文字列をプロセス１３のｐｉｄに付加したものをメッセージとして、認証コード生成部２０４にメッセージ認証コードの生成を要求する。そして、認証コード生成部２０４からメッセージ認証コードが付与されたメッセージを受け取ると、このメッセージ認証コードが付与されたメッセージをＯＳ１２に送信する。この起動応答メッセージは、起動の成功と失敗を区別できるものであれば、内容・形式は問わない。
【００３４】
なお、ここでは起動応答メッセージを送信する場合を例に挙げたが、ＯＳ１２に対して他のメッセージを送信する場合も同様に、出力部２０５は、メッセージ認証コードが付与されたメッセージを送信する。この場合もメッセージに付与されるメッセージ認証コードは、上述のように、プロセス１３の固有情報であるベースアドレスを用いて生成されたメッセージ認証鍵を用いて、認証コード生成部２０４により生成される。
【００３５】
入力部２０６は、ＯＳ１２からメッセージ認証コード（「第２メッセージ認証コード」の一例）が付与されたメッセージ（「第２メッセージ」の一例）を受信する。
【００３６】
認証コード検証部２０７は、入力部２０６からの要求に応じて、鍵生成部２０２により生成されたメッセージ認証鍵と、入力部２０６が受信したメッセージに付与されたメッセージ認証コードとを用いて、入力部２０６が受信したメッセージを検証する。例えば認証コード検証部２０７は、入力部２０６からメッセージ認証コードが付与されたメッセージを受け取ると、鍵保存部２０３を参照してメッセージ認証鍵が保存されているかを確認する。そして、メッセージ認証鍵が鍵保存部２０３に保存されていればそのメッセージ認証鍵を取得し、保存されていなければ鍵生成部２０２にメッセージ認証鍵の生成を依頼して、鍵生成部２０２からメッセージ認証鍵を取得する。そして、認証コード検証部２０７は、取得したメッセージ認証鍵と、入力部２０６から受け取ったメッセージ認証コードとを用いて、入力部２０６が受信したメッセージが、ＯＳ１２が送信した正当なデータであるかどうかを検証し、検証結果を入力部２０６に返す。
【００３７】
入力部２０６がＯＳ１２から受信したメッセージが起動確認メッセージである場合、入力部２０６は、ＯＳ１２から受信した起動確認メッセージと認証コード検証部２０７による検証結果を起動応答部２０８に渡す。起動応答部２０８は、プロセス１３の起動に成功したかどうかをＯＳ１２に通知するために、上述の起動応答メッセージの送信を出力部２０５に要求する。
【００３８】
以上のように、本実施形態の情報処理装置１０では、ＯＳ１２とプロセス１３間で通信を行う場合に、ＯＳ１２がプロセス１３に割り当てた固有情報であるベースアドレスを用いて、ＯＳ１２とプロセス１３の双方で共通のメッセージ認証鍵を生成し、このメッセージ認証鍵を用いてメッセージ認証コードの生成やメッセージの検証を行う。したがって、ＯＳ１２とプロセス１３間でセキュアな通信が可能となる。なお、図２においては１つのプロセス１３のみを図示しているが、ＯＳ１２と通信するプロセス１３は複数存在してもよい。
【００３９】
次に、プロセス１３の起動時にＯＳ１２からプロセス１３に起動確認メッセージを送信し、その応答としてプロセス１３からＯＳ１２に起動応答メッセージを送信するシーンを想定して、本実施形態の情報処理装置１０の動作をフローチャートに沿って説明する。
【００４０】
まず、ＯＳ１２のプロセス生成部１０１の処理について説明する。図５は、プロセス生成部１０１による処理手順の一例を示すフローチャートである。この図５のフローチャートで示す一連の処理は、再配置可能な実行ファイルに基づいたプロセス１３の生成要求があった場合に開始される。
【００４１】
再配置可能な実行ファイルに基づいたプロセス１３の生成要求があると、プロセス生成部１０１は、実行ファイルをメモリにマッピングするためのベースアドレスを設定する（ステップＳ１０１）。そして、プロセス生成部１０１は、ステップＳ１０１で設定したベースアドレスをもとに、実行ファイルをメモリにマッピングしてプロセス１３を生成する（ステップＳ１０２）。さらに、プロセス生成部１０１は、ステップＳ１０１で設定したベースアドレスを含むプロセス１３のアドレス情報を生成し、アドレス情報保存部１０２に格納する（ステップＳ１０３）。
【００４２】
次に、ＯＳ１２からプロセス１３にメッセージを送信する際の処理について説明する。図６は、メッセージ送信時におけるＯＳ１２の処理手順の一例を示すフローチャートである。
【００４３】
まず、プロセス生成部１０１は、自身が生成したプロセス１３が正常に起動できたことを確認するために、生成したプロセス１３のｐｉｄを出力部１０７に渡してメッセージの送信を要求する（ステップＳ２０１）。なお、メッセージ送信要求は、プロセス１３が起動したときやプロセス１３がシステムコールを発行したときに発生してもよい。また、ハードウェア１１からの割込みが発生したときやハードウェア１１の状態に変化が発生したときにメッセージ送信要求が発生してもよく、任意のタイミングや任意の操作でメッセージ送信要求が発生してもよい。また、ここでは起動確認メッセージにプロセス１３のｐｉｄを用いることを想定するが、ｐｉｄの代わりにプロセス１３を識別できる特徴を持つ他の情報を用いてもよい。また、起動確認メッセージは、ｐｉｄあるいはこれを代用する情報に加えて、プロセス１３の起動時刻や情報処理装置１０の位置情報などのコンテキスト情報を含んでいてもよい。
【００４４】
出力部１０７は、ＯＳ１２からプロセス１３へのメッセージ送信をセキュアにするために、通信対象のプロセス１３に送信するメッセージを認証コード生成部１０６に渡してメッセージ認証コードの生成を要求する（ステップＳ２０２）。認証コード生成部１０６は、まず、通信対象のプロセス１３に対応するメッセージ認証鍵が鍵保存部１０５に保存されているか否かを確認する（ステップＳ２０３）。ここで、通信対象のプロセス１３に対応するメッセージ認証鍵が鍵保存部１０５に保存されていれば（ステップＳ２０３：Ｙｅｓ）、認証コード生成部１０６は、そのメッセージ認証鍵を鍵保存部１０５から取得する（ステップＳ２０４）。
【００４５】
一方、通信対象のプロセス１３に対応するメッセージ認証鍵が鍵保存部１０５に保存されていなければ（ステップＳ２０３：Ｎｏ）、認証コード生成部１０６は、鍵生成部１０４にメッセージ認証鍵の生成を要求する（ステップＳ２０５）。鍵生成部１０４は、ベースアドレス取得部１０３に対して通信対象のプロセス１３に対応するベースアドレスの取得を要求する（ステップＳ２０６）。ベースアドレス取得部１０３は、アドレス情報保存部１０２を検索して通信対象のプロセス１３に対応するベースアドレスを取得し（ステップＳ２０７）、取得したベースアドレスを鍵生成部１０４に返す。鍵生成部１０４は、ベースアドレス取得部１０３から受け取ったベースアドレスを用いてメッセージ認証鍵を生成し（ステップＳ２０８）、生成したメッセージ認証鍵を認証コード生成部１０６に返すとともに、鍵保存部１０５に格納する。
【００４６】
次に、認証コード生成部１０６は、ステップＳ２０２で出力部１０７から受け取ったメッセージと、ステップＳ２０４で鍵保存部１０５から取得したメッセージ認証鍵あるいはステップＳ２０８で鍵生成部１０４により生成されたメッセージ認証鍵とを用い、メッセージ認証コードを生成する（ステップＳ２０９）。そして、生成したメッセージ認証コードをメッセージに付加して出力部１０７に返す。このとき、メッセージは、メッセージ認証鍵を用いて暗号化されてもよい。出力部１０７は、認証コード生成部１０６から受け取ったメッセージ認証コードが付加されたメッセージを、通信対象のプロセス１３に送信する（ステップＳ２１０）。
【００４７】
次に、プロセス１３がＯＳ１２からメッセージを受信する際の処理について説明する。図７は、メッセージ受信時におけるプロセス１３の処理手順の一例を示すフローチャートである。
【００４８】
プロセス１３の入力部２０６は、ＯＳ１２の出力部１０７から送信されたメッセージ認証コードが付与されたメッセージを受信すると（ステップＳ３０１）、受信したメッセージの安全性を確認するために、メッセージ認証コードが付与されたメッセージを認証コード検証部２０７に渡してメッセージの検証を要求する（ステップＳ３０２）。認証コード検証部２０７は、まず、ＯＳ１２と共通のメッセージ認証鍵が鍵保存部２０３に保存されているか否かを確認する（ステップＳ３０３）。ここで、ＯＳ１２と共通のメッセージ認証鍵が鍵保存部２０３に保存されていれば（ステップＳ３０３：Ｙｅｓ）、認証コード検証部２０７は、そのメッセージ認証鍵を鍵保存部２０３から取得する（ステップＳ３０４）。
【００４９】
一方、ＯＳ１２と共通のメッセージ認証鍵が鍵保存部２０３に保存されていなければ（ステップＳ３０３：Ｎｏ）、認証コード検証部２０７は、鍵生成部２０２にメッセージ認証鍵の生成を要求する（ステップＳ３０５）。鍵生成部２０２は、ベースアドレス取得部２０１に対してベースアドレスの取得を要求する（ステップＳ３０６）。ベースアドレス取得部２０１は、例えば、上述したようにプログラムカウンタからベースアドレスを取得し（ステップＳ３０７）、取得したベースアドレスを鍵生成部２０２に返す。鍵生成部２０２は、ベースアドレス取得部２０１から受け取ったベースアドレスを用いてメッセージ認証鍵を生成し（ステップＳ３０８）、生成したメッセージ認証鍵を認証コード検証部２０７に返すとともに、鍵保存部２０３に格納する。
【００５０】
次に、認証コード検証部２０７は、ステップＳ３０２で入力部２０６から受け取ったメッセージに付与されたメッセージ認証コードと、ステップＳ３０４で鍵保存部２０３から取得したメッセージ認証鍵あるいはステップＳ３０８で鍵生成部２０２により生成されたメッセージ認証鍵とを用い、ステップＳ３０２で入力部２０６から受け取ったメッセージを検証する（ステップＳ３０９）。具体的には認証コード検証部２０７は、例えば、メッセージ認証鍵を用いて入力部２０６から受け取ったメッセージをもとにメッセージ認証コードを生成し、生成したメッセージ認証コードがメッセージに付加されたメッセージ認証コードと一致するか否かにより、入力部２０６が受信したメッセージが、ＯＳ１２が送信した正当なデータであるか否かを確認し、メッセージの改ざんやなりすましを検知する。なお、検証時にメッセージが暗号化されていた場合、メッセージ認証鍵によってメッセージを復号してもよい。
【００５１】
認証コード検証部２０７は、入力部２０６が受信したメッセージに対する検証結果を入力部２０６に返す。入力部２０６は、認証コード検証部２０７から検証結果を受け取ると、メッセージと検証結果を起動応答部２０８に渡す（ステップＳ３１０）。
【００５２】
次に、プロセス１３からＯＳ１２にメッセージを送信する際の処理について説明する。図８は、メッセージ送信時におけるプロセス１３の処理手順の一例を示すフローチャートである。
【００５３】
まず、起動応答部２０８は、プロセス１３が正常に起動できたかどうかをＯＳ１２に知らせるために、プロセス１３のｐｉｄと起動の成否を示す情報を出力部２０５に渡してメッセージの送信を要求する（ステップＳ４０１）。
【００５４】
出力部２０５は、プロセス１３からＯＳ１２へのメッセージ送信をセキュアにするために、ＯＳ１２に送信するメッセージを認証コード生成部２０４に渡してメッセージ認証コードの生成を要求する（ステップＳ４０２）。認証コード生成部２０４は、上述の認証コード検証部２０７と同様に、まず、ＯＳ１２と共通のメッセージ認証鍵が鍵保存部２０３に保存されているか否かを確認するが、ここでは起動確認メッセージの受信時にメッセージ認証鍵が生成されて鍵保存部２０３に格納されている。このため、認証コード生成部２０４は、鍵保存部２０３からメッセージ認証鍵を取得する（ステップＳ４０３）。
【００５５】
なお、出力部２０５がＯＳ１２に送信するメッセージが、起動確認メッセージに対する応答である起動応答メッセージのような応答メッセージではなく、プロセス１３が主体的にＯＳ１２に送信するメッセージである場合は、ＯＳ１２と共通のメッセージ認証鍵が鍵保存部２０３に保存されていない場合もある。この場合は、上述の例と同様に、認証コード生成部２０４が鍵生成部２０２に対してメッセージ認証鍵の生成を要求し、鍵生成部２０２がベースアドレス取得部２０１により取得されたベースアドレスを用いて生成したメッセージ認証鍵を、鍵生成部２０２から受け取ればよい。
【００５６】
次に、認証コード生成部２０４は、ステップＳ４０２で出力部２０５から受け取ったメッセージと、ステップＳ４０３で鍵保存部２０３から取得したメッセージ認証鍵とを用い、メッセージ認証コードを生成する（ステップＳ４０４）。そして、生成したメッセージ認証コードをメッセージに付加して出力部２０５に返す。このとき、メッセージは、メッセージ認証鍵を用いて暗号化されてもよい。出力部２０５は、認証コード生成部２０４から受け取ったメッセージ認証コードが付加されたメッセージを、ＯＳ１２に送信する（ステップＳ４０５）。
【００５７】
次に、ＯＳ１２がプロセス１３からメッセージを受信する際の処理について説明する。図９は、メッセージ受信時におけるＯＳ１２の処理手順の一例を示すフローチャートである。
【００５８】
ＯＳ１２の入力部１０８は、プロセス１３の出力部２０５から送信されたメッセージ認証コードが付与されたメッセージを受信すると（ステップＳ５０１）、受信したメッセージの安全性を確認するために、メッセージ認証コードが付与されたメッセージを認証コード検証部１０９に渡してメッセージの検証を要求する（ステップＳ５０２）。認証コード検証部１０９は、上述の認証コード生成部１０６と同様に、まず、メッセージを送信したプロセス１３（通信対象のプロセス１３）のｐｉｄに対応するメッセージ認証鍵が鍵保存部１０５に保存されているか否かを確認するが、ここでは起動確認メッセージの送信時にメッセージ認証鍵が生成されて鍵保存部１０５に格納されている。このため、認証コード検証部１０９は、鍵保存部１０５からメッセージ認証鍵を取得する（ステップＳ５０３）。
【００５９】
なお、入力部１０８がプロセス１３から受信するメッセージが応答メッセージではなく、プロセス１３が主体的にＯＳ１２に送信するメッセージである場合は、プロセス１３のｐｉｄに対応するメッセージ認証鍵が鍵保存部１０５に保存されていない場合もある。この場合は、上述の例と同様に、認証コード検証部１０９が鍵生成部１０４に対してメッセージ認証鍵の生成を要求し、鍵生成部１０４がベースアドレス取得部１０３により取得されたベースアドレスを用いて生成したメッセージ認証鍵を、鍵生成部１０４から受け取ればよい。
【００６０】
次に、認証コード検証部１０９は、ステップＳ５０２で入力部１０８から受け取ったメッセージに付与されたメッセージ認証コードと、ステップＳ５０３で鍵保存部１０５から取得したメッセージ認証鍵とを用い、ステップＳ５０２で入力部１０８から受け取ったメッセージを検証する（ステップＳ５０４）。具体的には認証コード検証部１０９は、例えば、メッセージ認証鍵を用いて入力部１０８から受け取ったメッセージをもとにメッセージ認証コードを生成し、生成したメッセージ認証コードがメッセージに付加されたメッセージ認証コードと一致するか否かにより、入力部１０８が受信したメッセージが、プロセス１３が送信した正当なデータであるか否かを確認し、メッセージの改ざんやなりすましを検知する。なお、検証時にメッセージが暗号化されていた場合、メッセージ認証鍵によってメッセージを復号してもよい。また、認証コード検証部１０９による検証と併せて、出力部１０７が送信したメッセージに含まれるｐｉｄなどのプロセス１３を特定する情報と、このメッセージに対する応答としてプロセス１３から送信されて入力部１０８が受信したメッセージに含まれるｐｉｄなどのプロセス１３を特定する情報とが一致するか否かにより、メッセージの改ざんやなりすましを検出する処理を行ってもよい。
【００６１】
認証コード検証部１０９は、入力部１０８が受信したメッセージに対する検証結果を入力部１０８に返す。入力部１０８は、認証コード検証部１０９から検証結果を受け取ると、メッセージと検証結果をプロセス起動確認部１１０に渡す（ステップＳ５０５）。プロセス起動確認部１１０は、入力部１０８から受け取ったメッセージと検証結果をもとに、プロセス生成部１０１が生成したプロセス１３が正常に起動したかどうかを確認する（ステップＳ５０６）。
【００６２】
以上、具体的な例を挙げながら詳細に説明したように、本実施形態によれば、ＯＳ１２がプロセス１３に割り当てたプロセス固有情報であるベースアドレスを用いて、ＯＳ１２とプロセス１３間で共通のメッセージ認証鍵を生成する。そして、ＯＳ１２とプロセス１３との間で通信を行う際に、このメッセージ認証鍵を用いてメッセージ認証コードの生成およびメッセージ認証コードを用いたメッセージの検証を行うようにしている。したがって、ＯＳ１２とプロセス１３間の通信に対してセキュリティ機能を実現し、プロセス１３の保護を図ることができる。
【００６３】
特に本実施形態では、メッセージ認証鍵の生成にＯＳ１２がプロセス１３に割り当てたプロセス固有情報であるベースアドレスを用いるため、一般的なネットワークにおける機器間でセキュアな通信を実現するための技術として普及しているＳＳＬやＴＬＳなどのように、認証付鍵交換処理を必要とせずに、ＯＳ１２とプロセス１３間で共通のメッセージ認証鍵を生成することができる。このため、認証付鍵交換処理にかかる通信オーバヘッドを軽減することができる。また、ＯＳ１２のイメージやプロセス１３の基となる実行ファイルの内部に事前に鍵を埋め込む必要がないため、ストレージに格納したＯＳ１２のイメージやプロセス１３の基となる実行ファイルの内部に埋め込んだ鍵が漏洩、改ざんされる攻撃を考慮しなくてもよい。
【００６４】
（変形例）
次に、上述の第１実施形態の変形例について説明する。本変形例は、ホワイトリスト実行制御を行うプロセス１３とＯＳ１２間においてセキュアな通信を実現するものである。ホワイトリスト実行制御は、実行が許可された実行ファイルのリスト（ホワイトリスト）に基づいて、ホワイトリストに記述されていない実行ファイルの起動を防止する技術である。本変形例では、ＯＳ１２が実行ファイルを基にしたプロセス１３の起動を検知し、ホワイトリスト実行制御を行うプロセス１３において、起動が検知されたプロセス１３の実行可否を判定する。以下では、ＯＳ１２により管理されるプロセス１３のうち、ホワイトリスト実行制御を行うプロセス１３を管理プロセス１３Ａと表記し、起動が検知されたプロセス１３を起動プロセス１３Ｂと表記する。
【００６５】
図１０は、本変形例のＯＳ１２および管理プロセス１３Ａの機能的な構成例を示すブロック図である。図２に示した構成例と比較して、ＯＳ１２に管理プロセス判定部１１１が追加され、プロセス起動確認部１１０がプロセス実行制御部１１２に置き換わっている。また、起動プロセス１３Ｂの実行判定を行うためにＯＳ１２と通信を行う管理プロセス１３Ａには、ホワイトリスト取得部２０９が追加され、起動応答部２０８が実行判定部２１０に置き換わっている。なお、起動プロセス１３Ｂの構成は図２に示したプロセス１３の構成と同様であるため、図示を省略する。
【００６６】
管理プロセス判定部１１１は、プロセス生成部１０１が生成するプロセス１３が管理プロセス１３Ａであるか否か、管理プロセス１３Ａではない場合には管理プロセス１３Ａはすでに起動されているか否かを判定する。
【００６７】
プロセス実行制御部１１２は、プロセス生成部１０１が生成するプロセス１３が管理プロセス１３Ａではない、つまり起動プロセス１３Ｂであり、管理プロセス１３Ａはすでに起動されていると管理プロセス判定部１１１により判定された場合に、管理プロセス１３Ａの実行判定部２１０の判定結果に応じて、起動プロセス１３Ｂの実行を制御する。
【００６８】
ホワイトリスト取得部２０９は、実行が許可された実行ファイルのリスト（ホワイトリスト）を取得する。
【００６９】
実行判定部２１０は、ホワイトリスト取得部２０９により取得されたホワイトリストに基づいて、起動プロセス１３Ｂの実行可否を判定する。
【００７０】
図１１は、管理プロセス判定部１１１による処理手順の一例を示すフローチャートである。管理プロセス判定部１１１は、予め管理プロセス１３Ａの実行ファイルのパス名とハッシュ値を持つ。実行ファイルのパス名はｉｎｏｄｅ番号とデバイス番号のセットでもよく、ファイルを一意に特定できる特徴を持つ情報であれば内容・形式は問わない。
【００７１】
本変形例では、プロセス生成部１０１は、プロセス１３の生成要求に応じて生成処理を開始すると、生成するプロセス１３の実行ファイルのパス名を管理プロセス判定部１１１に渡す。管理プロセス判定部１１１は、プロセス生成部１０１から受け取ったパス名で特定される実行ファイルのハッシュ値を計算し、得られたハッシュ値が予め持っているハッシュ値と一致するか否かにより、プロセス生成部１０１が生成するプロセス１３が管理プロセス１３Ａであるか否かを判定する（ステップＳ５０１）。
【００７２】
プロセス生成部１０１が生成するプロセス１３が管理プロセス１３Ａであると判定した場合（ステップＳ５０１：Ｙｅｓ）、管理プロセス判定部１１１は、管理プロセス１３Ａが起動済みかどうかを確認する（ステップＳ５０２）。そして、管理プロセス１３Ａが起動していなければ（ステップＳ５０２：Ｎｏ）、管理プロセス判定部１１１は、ベースアドレス取得部１０３に管理プロセスのｐｉｄを記録する（ステップＳ５０３）。ここでベースアドレス取得部１０３に登録する情報は、管理プロセス１３Ａを識別できる情報であれば、ｐｉｄ以外の情報であってもよい。そして、管理プロセス判定部１１１は、プロセス生成部１０１に処理を戻し、プロセス生成部１０１による管理プロセス１３Ａの生成処理を継続させる（ステップＳ５０４）。
【００７３】
一方、管理プロセス１３Ａが起動済みであれば（ステップＳ５０２：Ｙｅｓ）、管理プロセス判定部１１１は、ｐｉｄの登録などの処理を行わずにプロセス生成部１０１に処理を戻し、管理プロセス１３Ａの生成処理を中止させる（ステップＳ５０５）。
【００７４】
また、プロセス生成部１０１が生成するプロセス１３が管理プロセス１３Ａではなく、起動プロセス１３Ｂであると判定した場合（ステップＳ５０１：Ｎｏ）、管理プロセス判定部１１１は、管理プロセス１３Ａが起動済みかどうかを確認する（ステップＳ５０６）。そして、管理プロセス１３Ａが起動していなければ（ステップＳ５０６：Ｎｏ）、プロセス生成部１０１に処理を戻し、起動プロセス１３Ｂの生成処理を中止させる（ステップＳ５０７）。なお、本変形例では、管理プロセス１３Ａの起動前には全ての起動プロセス１３Ｂの実行を禁止する構成を採用したが、管理プロセス１３Ａが起動していない場合でも起動プロセス１３Ｂの実行を許可するように構成してもよい。この場合、ステップＳ５０６の判定結果がＮｏの場合に、管理プロセス判定部１１１は、プロセス生成部１０１に処理を戻し、プロセス生成部１０１による起動プロセス１３Ｂの生成処理を継続させる。
【００７５】
一方、管理プロセス１３Ａが起動済みであれば（ステップＳ５０６：Ｙｅｓ）、管理プロセス判定部１１１は、起動プロセス１３Ｂのｐｉｄや実行ファイルのパス名など、起動プロセス１３Ｂに関する情報をプロセス実行制御部１１２に渡し（ステップＳ５０８）、処理を終了する。この場合、プロセス実行制御部１１２は、起動プロセス１３Ｂの実行可否を問い合わせるために、出力部１０７に起動プロセス１３Ｂのｐｉｄや実行ファイルのパス名を送り、管理プロセス１３Ａへのメッセージの送信を要求する。出力部１０７は、起動プロセス１３Ｂのｐｉｄと実行ファイルのパス名をメッセージとし、上述の第１実施形態と同様にメッセージ認証コードが付与されたメッセージを管理プロセス１３Ａに送信する。なお、実行ファイルのパス名はｉｎｏｄｅ番号とデバイス番号のセットでもよく、起動プロセス１３Ｂの実行ファイルを一意に特定できる特徴を持つ情報であれば内容・形式は問わない。また、管理プロセス１３Ａに送信するメッセージは、時刻、ユーザＩＤ、グループＩＤ、実行回数、位置などのコンテキスト情報を含んでもよい。
【００７６】
次に、管理プロセス１３Ａにメッセージを送信する際のＯＳ１２の処理手順について説明する。なお、以下で説明する処理手順は、メッセージの送信要求がプロセス生成部１０１ではなくプロセス実行制御部１１２から発行され、送信するメッセージが起動プロセス１３Ｂのｐｉｄと実行ファイルのパス名からなる以外は、図６のフローチャートを用いて説明した上述の処理手順と同様である。
【００７７】
まず、プロセス実行制御部１１２は、起動プロセス１３Ｂの実行が許可されているか否かを確認するために、起動プロセス１３Ｂのｐｉｄと実行ファイルのパス名とを出力部１０７に渡して、管理プロセス１３Ａへのメッセージの送信を出力部１０７に要求する。
【００７８】
出力部１０７は、ＯＳ１２から管理プロセス１３Ａへのメッセージ送信をセキュアにするために、管理プロセス１３Ａに送信するメッセージ、つまり、起動プロセス１３Ｂのｐｉｄと実行ファイルのパス名とを含んだメッセージを認証コード生成部１０６に渡してメッセージ認証コードの生成を要求する。
【００７９】
認証コード生成部１０６は、まず、管理プロセス１３Ａに対応するメッセージ認証鍵が鍵保存部１０５に保存されているか否かを確認し、管理プロセス１３Ａに対応するメッセージ認証鍵が鍵保存部１０５に保存されていれば、管理プロセス１３Ａに対応するメッセージ認証鍵を鍵保存部１０５から取得する。一方、管理プロセス１３Ａに対応するメッセージ認証鍵が鍵保存部１０５に保存されていなければ、認証コード生成部１０６は、鍵生成部１０４にメッセージ認証鍵の生成を要求する。
【００８０】
鍵生成部１０４は、ベースアドレス取得部１０３に対して管理プロセス１３Ａに対応するベースアドレスの取得を要求する。ベースアドレス取得部１０３は、管理プロセス１３Ａの起動時に管理プロセス判定部１１１によって登録されたｐｉｄをキーとしてアドレス情報保存部１０２を検索し、管理プロセス１３Ａに対応するベースアドレスを取得して鍵生成部１０４に返す。鍵生成部１０４は、ベースアドレス取得部１０３から受け取ったベースアドレスを用いてメッセージ認証鍵を生成し、生成したメッセージ認証鍵を認証コード生成部１０６に返すとともに、鍵保存部１０５に格納する。
【００８１】
次に、認証コード生成部１０６は、出力部１０７から受け取ったメッセージと、鍵保存部１０５から取得したメッセージ認証鍵あるいは鍵生成部１０４により生成されたメッセージ認証鍵とを用い、メッセージ認証コードを生成する。そして、生成したメッセージ認証コードをメッセージに付加して出力部１０７に返す。このとき、メッセージは、メッセージ認証鍵を用いて暗号化されてもよい。出力部１０７は、認証コード生成部１０６から受け取ったメッセージ認証コードが付加されたメッセージを、管理プロセス１３Ａに送信する。
【００８２】
次に、ＯＳ１２からメッセージを受信する際の管理プロセス１３Ａの処理手順について説明する。なお、以下で説明する処理手順は、受信するメッセージが起動プロセス１３Ｂのｐｉｄと実行ファイルのパス名からなり、メッセージと検証結果が起動応答部２０８ではなく実行判定部２１０に渡される以外は、図７のフローチャートを用いて説明した上述の処理手順と同様である。
【００８３】
管理プロセス１３Ａの入力部２０６は、ＯＳ１２の出力部１０７から送信されたメッセージ認証コードが付与されたメッセージを受信すると、受信したメッセージの安全性を確認するために、メッセージ認証コードが付与されたメッセージを認証コード検証部２０７に渡してメッセージの検証を要求する。
【００８４】
認証コード検証部２０７は、まず、ＯＳ１２と共通のメッセージ認証鍵が鍵保存部２０３に保存されているか否かを確認する。ここで、ＯＳ１２と共通のメッセージ認証鍵が鍵保存部２０３に保存されていれば、認証コード検証部２０７は、そのメッセージ認証鍵を鍵保存部２０３から取得する。一方、ＯＳ１２と共通のメッセージ認証鍵が鍵保存部２０３に保存されていなければ、認証コード検証部２０７は、鍵生成部２０２にメッセージ認証鍵の生成を要求する。
【００８５】
鍵生成部２０２は、ベースアドレス取得部２０１に対してベースアドレスの取得を要求する。ベースアドレス取得部２０１は、例えば、上述したようにプログラムカウンタからベースアドレスを取得し、取得したベースアドレスを鍵生成部２０２に返す。鍵生成部２０２は、ベースアドレス取得部２０１から受け取ったベースアドレスを用いてメッセージ認証鍵を生成し、生成したメッセージ認証鍵を認証コード検証部２０７に返すとともに、鍵保存部２０３に格納する。
【００８６】
次に、認証コード検証部２０７は、入力部２０６から受け取ったメッセージに付与されたメッセージ認証コードと、鍵保存部２０３から取得したメッセージ認証鍵あるいは鍵生成部２０２により生成されたメッセージ認証鍵とを用い、入力部２０６から受け取ったメッセージを検証する。具体的には認証コード検証部２０７は、例えば、メッセージ認証鍵を用いて入力部２０６から受け取ったメッセージをもとにメッセージ認証コードを生成し、生成したメッセージ認証コードがメッセージに付加されたメッセージ認証コードと一致するか否かにより、入力部２０６が受信したメッセージが、ＯＳ１２が送信した正当なデータであるか否かを確認し、メッセージの改ざんやなりすましを検知する。なお、検証時にメッセージが暗号化されていた場合、メッセージ認証鍵によってメッセージを復号してもよい。
【００８７】
認証コード検証部２０７は、入力部２０６が受信したメッセージに対する検証結果を入力部２０６に返す。入力部２０６は、認証コード検証部２０７から検証結果を受け取ると、メッセージと検証結果を実行判定部２１０に渡す。
【００８８】
図１２は、実行判定部２１０による処理手順の一例を示すフローチャートである。実行判定部２１０は、起動プロセス１３Ｂのｐｉｄと実行ファイルのパス名とからなるメッセージとそのメッセージの検証結果を入力部２０６から受け取る（ステップＳ６０１）。そして、実行判定部２１０は、まず入力部２０６から受け取った検証結果を参照し、入力部２０６から受け取ったメッセージが、改ざんやなりすましなどによる不正なメッセージでないかを確認する（ステップＳ６０２）。
【００８９】
ここで、入力部２０６から受け取ったメッセージが不正なメッセージであれば（ステップＳ６０２：Ｙｅｓ）、そのメッセージに関する処理を終了する。一方、入力部２０６から受け取ったメッセージが不正なメッセージでなければ（ステップＳ６０２：Ｎｏ）、実行判定部２１０は、ホワイトリスト取得部２０９からホワイトリストを受け取り、ホワイトリストによる実行判定処理を行う。
【００９０】
ホワイトリストは、例えばファイルの形式でファイルシステム上に存在し、ホワイトリスト取得部２０９はホワイトリストのファイルを読み込むことでホワイトリストを取得することができる。また、ホワイトリストを管理プロセス１３Ａの実行ファイルに予め組み込んでおき、プロセス起動時に読込まれるようにしておいてもよい。ホワイトリストは、例えば、実行が許可されるプロセス１３の実行ファイルのパス名とハッシュ値をカラムとした表形式で記録される。ホワイトリストは、時刻、ユーザＩＤ、グループＩＤ、実行回数、位置などの実行ファイルを起動してもよい条件や禁止条件のコンテキスト情報をカラムに加えた構成であってもよい。
【００９１】
ホワイトリストによる実行判定処理では、実行判定部２１０は、まず、入力部２０６から受け取ったメッセージに含まれる起動プロセス１３Ｂの実行ファイルのパス名が、ホワイトリストに記載されたパス名と一致するか否かを確認する（ステップＳ６０３）。ここでパス名が一致しない場合（ステップＳ６０３：Ｎｏ）、実行判定部２１０は想定外の実行ファイルが起動したと判断し、実行禁止メッセージの送信を出力部２０５に要求して（ステップＳ６０４）、処理を終了する。
【００９２】
一方、パス名が一致した場合（ステップＳ６０３：Ｙｅｓ）、実行判定部２１０は、次に起動プロセス１３Ｂの実行ファイルを読込んでそのハッシュ値を計算し、得られたハッシュ値がホワイトリストに記載されたハッシュ値と一致するか否かを確認する（ステップＳ６０５）。ここでハッシュ値が一致しない場合（ステップＳ６０５：Ｎｏ）、実行判定部２１０は、実行ファイルが想定外に書き換わったと判断し、実行禁止メッセージの送信を出力部２０５に要求して（ステップＳ６０６）、処理を終了する。
【００９３】
一方、ハッシュ値が一致した場合（ステップＳ６０５：Ｙｅｓ）、実行判定部２１０は、正常な実行ファイルが起動したと判断し、実行許可メッセージの送信を出力部２０５に要求して（ステップＳ６０７）、処理を終了する。なお、ホワイトリストにコンテキスト情報が加えられている場合、実行判定部２１０は、情報処理装置１０の実行中のコンテキストを取得し、実行中のコンテキストとホワイトリストから取得したコンテキストとの比較処理を追加してもよい。コンテキストに違反している場合、実行判定部２１０は、実行禁止メッセージの送信を出力部２０５に要求してもよい。
【００９４】
実行判定部２１０が出力部２０５に送信を要求するメッセージは、例えば、実行可否の判定の対象となった起動プロセス１３Ｂのｐｉｄと、実行許可メッセージであれば０、実行禁止メッセージであれば−１などの実行可否を示す情報とを含む。また、このメッセージには、ランダムに生成した値やメッセージごとにインクリメントするメッセージシーケンス番号などがさらに含まれていてもよい。また、このメッセージには、実行可否の判定の対象となった起動プロセス１３Ｂの実行ファイルのパス名がさらに含まれていてもよい。また、ＯＳ１２から受信したメッセージを全てこのメッセージに加えてもよい。
【００９５】
次に、ＯＳ１２にメッセージを送信する際の管理プロセス１３Ａの処理手順について説明する。なお、以下で説明する処理手順は、メッセージの送信要求が起動応答部２０８ではなく実行判定部２１０から発行され、送信するメッセージが実行許可メッセージまたは実行禁止メッセージである以外は、図８のフローチャートを用いて説明した上述の処理手順と同様である。
【００９６】
実行判定部２１０は、起動プロセス１３Ｂの実行可否をＯＳ１２に知らせるために、起動プロセス１３Ｂのｐｉｄと実行可否を示す情報を出力部２０５に渡して実行許可メッセージまたは実行禁止メッセージの送信を要求する。
【００９７】
出力部２０５は、管理プロセス１３ＡからＯＳ１２へのメッセージ送信をセキュアにするために、ＯＳ１２に送信するメッセージを認証コード生成部２０４に渡してメッセージ認証コードの生成を要求する。認証コード生成部２０４は、鍵保存部２０３からメッセージ認証鍵を取得し、出力部２０５から受け取ったメッセージと、鍵保存部２０３から取得したメッセージ認証鍵とを用い、メッセージ認証コードを生成する。そして、生成したメッセージ認証コードをメッセージに付加して出力部２０５に返す。このとき、メッセージは、メッセージ認証鍵を用いて暗号化されてもよい。出力部２０５は、認証コード生成部２０４から受け取ったメッセージ認証コードが付加されたメッセージを、ＯＳ１２に送信する。
【００９８】
次に、管理プロセス１３Ａからメッセージを受信する際のＯＳ１２の処理手順について説明する。なお、以下で説明する処理手順は、受信するメッセージが実行許可メッセージまたは実行禁止メッセージであり、メッセージと検証結果がプロセス起動確認部１１０ではなくプロセス実行制御部１１２に渡される以外は、図９のフローチャートを用いて説明した上述の処理手順と同様である。
【００９９】
ＯＳ１２の入力部１０８は、管理プロセス１３Ａの出力部２０５から送信されたメッセージ認証コードが付与されたメッセージを受信すると、受信したメッセージの安全性を確認するために、メッセージ認証コードが付与されたメッセージを認証コード検証部１０９に渡してメッセージの検証を要求する。認証コード検証部１０９は、鍵保存部１０５からメッセージ認証鍵を取得し、入力部１０８から受け取ったメッセージに付与されたメッセージ認証コードと、鍵保存部１０５から取得したメッセージ認証鍵とを用いて、入力部１０８から受け取ったメッセージを検証する。なお、検証時にメッセージが暗号化されていた場合、メッセージ認証鍵によってメッセージを復号してもよい。また、認証コード検証部１０９による検証と併せて、出力部１０７が送信したメッセージに含まれるｐｉｄなどのプロセス１３を特定する情報と、このメッセージに対する応答としてプロセス１３から送信されて入力部１０８が受信したメッセージに含まれるｐｉｄなどのプロセス１３を特定する情報とが一致するか否かにより、メッセージの改ざんやなりすましを検出する処理を行ってもよい。
【０１００】
認証コード検証部１０９は、入力部１０８が受信したメッセージに対する検証結果を入力部１０８に返す。入力部１０８は、認証コード検証部１０９から検証結果を受け取ると、メッセージと検証結果をプロセス実行制御部１１２に渡す。プロセス実行制御部１１２は、入力部１０８から受け取ったメッセージと検証結果をもとに、起動プロセス１３Ｂの実行を制御する。
【０１０１】
図１３は、プロセス実行制御部１１２による処理手順の一例を示すフローチャートである。プロセス実行制御部１１２は、起動プロセス１３Ｂのｐｉｄと実行可否を示す情報とを含むメッセージとそのメッセージの検証結果を入力部１０８から受け取る（ステップＳ７０１）。そして、プロセス実行制御部１１２は、まず入力部１０８から受け取った検証結果を参照し、入力部１０８から受け取ったメッセージが、改ざんやなりすましなどによる不正なメッセージでないかを確認する（ステップＳ７０２）。
【０１０２】
ここで、入力部１０８から受け取ったメッセージが不正なメッセージであれば（ステップＳ７０２：Ｙｅｓ）、そのメッセージに関する処理を終了する。一方、入力部１０８から受け取ったメッセージが不正なメッセージでなければ（ステップＳ７０２：Ｎｏ）、プロセス実行制御部１１２は、入力部１０８から受け取ったメッセージに含まれる実行可否を示す情報を参照し、そのメッセージが実行許可メッセージであるか否かを確認する（ステップＳ７０３）。そして、入力部１０８から受け取ったメッセージが実行許可メッセージであれば（ステップＳ７０３：Ｙｅｓ）、プロセス実行制御部１１２は、プロセス生成部１０１に対して起動プロセス１３Ｂの生成継続を要求し（ステップＳ７０４）、処理を終了する。一方、入力部１０８から受け取ったメッセージが実行禁止メッセージであれば（ステップＳ７０３：Ｎｏ）、プロセス実行制御部１１２は、プロセス生成部１０１に対して起動プロセス１３Ｂの生成中止を要求し（ステップＳ７０５）、処理を終了する。
【０１０３】
なお、ＯＳ１２から管理プロセス１３Ａに対して起動プロセス１３Ｂの実行可否を問い合わせるメッセージを送信してから一定時間（例えば１秒）内に、実行許可メッセージまたは実行禁止メッセージが管理プロセス１３Ａから受信できない場合に、プロセス実行制御部１１２は、起動プロセス１３Ｂの実行可否を問い合わせるメッセージの再送を出力部１０７に要求してもよい。さらに、起動プロセス１３Ｂの実行可否を問い合わせるメッセージを所定回数（例えば１０回）再送しても、実行許可メッセージまたは実行禁止メッセージが管理プロセス１３Ａから受信できない場合に、プロセス実行制御部１１２は、プロセス生成部１０１に対して起動プロセス１３Ｂの生成中止を要求してもよい。さらに、起動プロセス１３Ｂの実行可否を問い合わせるメッセージに含まれるｐｉｄなどのプロセス１３を特定する情報が、実行許可メッセージまたは実行禁止メッセージに含まれるプロセス１３を特定する情報と異なる場合に、プロセス実行制御部１１２は、起動プロセス１３Ｂを停止させてもよい。
【０１０４】
以上のように、本変形例によれば、ＯＳ１２とホワイトリスト実行制御を行う管理プロセス１３Ａとの間で通信を行う際に、ＯＳ１２と管理プロセス１３Ａとで共通のメッセージ認証鍵を用いてメッセージ認証コードの生成およびメッセージ認証コードを用いたメッセージの検証を行うので、ＯＳ１２と管理プロセス１３Ａ間の通信に対してセキュリティ機能を実現し、管理プロセス１３Ａの保護を図ることができる。また、ＯＳ１２と管理プロセス１３Ａ間の通信の安全性が保証されるため、起動プロセス１３Ｂに対するホワイトリスト実行制御を適切に実施することができる。
【０１０５】
＜第２実施形態＞
次に、第２実施形態について説明する。本実施形態は、プロセス１３の実行ファイルをメモリにマッピングするためのベースアドレスに加え、プロセス１３の起動時にＯＳ１２がプロセス１３との間で共有する特定のメモリ領域に書き込んだランダム値を用いて、ＯＳ１２とプロセス１３とで共通のメッセージ認証鍵を生成し、ＯＳ１２とプロセス１３間のセキュアな通信を実現する。
【０１０６】
メモリ空間は、通常２の６４乗、２の３２乗程度の空間しかなく、加えてＯＳ１２が実行ファイルのベースアドレスを設定するメモリ空間は限られているため、上述の第１実施形態やその変形例では、メッセージ認証鍵の情報エントロピーに課題があった。これに対し本実施形態では、ベースアドレスにランダム値を加えてメッセージ認証鍵を生成することで情報エントロピーの増加が可能となり、メッセージ認証鍵の推測が困難となる。
【０１０７】
図１４は、本実施形態のＯＳ１２およびプロセス１３の機能的な構成例を示すブロック図である。図２に示した構成例と比較して、ＯＳ１２にランダム値生成部１１３が追加され、ＯＳ１２の鍵生成部１０４は、ベースアドレス取得部１０３により取得されたベースアドレスとランダム値生成部１１３により生成されたランダム値とを用いて、プロセス１３と共通のメッセージ認証鍵を生成する構成となっている。また、プロセス１３の鍵生成部２０２は、ランダム値生成部１１３が生成したランダム値が格納されるランダム値格納領域３００からランダム値を読み出し、ベースアドレス取得部２０１により取得されたベースアドレスとランダム値格納領域３００から読み出したランダム値とを用いて、ＯＳ１２と共通のメッセージ認証鍵を生成する構成となっている。
【０１０８】
本実施形態では、ＯＳ１２のプロセス生成部１０１が、出力部１０７に対してメッセージの送信を要求する前に、鍵生成部１０４にランダム値の生成を要求する。このランダム値生成の要求は、認証コード生成部１０６と認証コード検証部１０９がメッセージ認証鍵の生成を鍵生成部１０４に要求するときに同時に行ってもよい。ランダム値生成の要求を受け取った鍵生成部１０４は、ランダム値生成部１１３にランダム値の生成を依頼する。ランダム値生成部１１３がランダム値を生成する方法は、ＯＳ１２に予め格納された固定値、ＰＵＦ（Physically  Unclonable  Function）、パスワードをシードとした疑似乱数生成機能を使用してもよいし、Ｉｎｔｅｌ社製（Ｉｎｔｅｌは登録商標）ＣＰＵのｒｄｒａｎｄ命令、ＨＳＭ、ＴＰＭのようなＨＷモジュールのランダム値生成機能を利用してもよい。
【０１０９】
ランダム値生成部１１３は、生成したランダム値を鍵生成部１０４に渡すとともに、メモリ上のランダム値格納領域３００に格納する。ランダム値格納領域３００は、プロセス１３の実行ファイルのベースアドレスより一意に定まる特定のメモリ領域である。また、ランダム値格納領域３００は、ＤＳ、ＦＳ、ＧＳなどのセグメントレジスタから求められるメモリ領域でもよい。鍵生成部１０４は、ベースアドレス取得部１０３から受け取ったベースアドレスと、ランダム値生成部１１３から受け取ったランダム値とから計算される値をシードにして鍵導出関数を実行し、プロセス１３と共通のメッセージ認証鍵を生成する。
【０１１０】
一方、プロセス１３の鍵生成部２０２は、認証コード生成部２０４あるいは認証コード検証部２０７からの要求に応じて、ＯＳ１２と共通のメッセージ認証鍵を生成する。鍵生成部２０２は、メッセージ認証鍵の生成が要求されると、ランダム値格納領域３００からランダム値を取得し、取得したランダム値とベースアドレス取得部２０１により取得されたベースアドレスとから計算される値をシードにして鍵導出関数を実行し、ＯＳ１２と共通のメッセージ認証鍵を生成する。なお、メッセージ認証鍵を用いたメッセージ認証コードの生成、メッセージ認証コードを用いたメッセージの検証などの処理は上述の第１実施形態と同様であるため、詳細な説明は省略する。
【０１１１】
以上のように、本実施形態によれば、プロセス１３の実行ファイルをメモリにマッピングするためのベースアドレスに加え、プロセス１３の起動時にＯＳ１２がプロセス１３との間で共有する特定のメモリ領域に書き込んだランダム値を用いて、ＯＳ１２とプロセス１３とで共通のメッセージ認証鍵を生成するようにしている。したがって、メッセージ認証鍵の推測を困難なものとして、ＯＳ１２とプロセス１３間の通信の安全性を高めることができる。
【０１１２】
＜第３実施形態＞
次に、第３実施形態について説明する。本実施形態は、メッセージの検証で異常が発見された場合にログを出力する機能を追加したものである。ログを出力する機能を追加することで、意図しない通信が発生することを検知することができ、その原因を解析することができる。また、ログの解析に基づいて原因となるプロセスの停止やメッセージの再送などの対応処理を行ってもよい。
【０１１３】
図１５は、本実施形態のＯＳ１２およびプロセス１３の機能的な構成例を示すブロック図である。図２に示した構成例と比較して、ＯＳ１２にログ出力部１１４、プロセス１３にログ出力部２１１がそれぞれ追加されている。
【０１１４】
プロセス１３のログ出力部２１１は、起動応答部２０８からメッセージと認証コード検証部２０７によるメッセージの検証結果を受け取り、受け取ったメッセージと検証結果に基づき、ログの出力を制御する。例えば、検証結果よりメッセージに改ざんやなりすましが認められる場合、ログ出力部２１１は、改ざんやなりすましがあったことを表すログをファイルに出力する。ログは出力せずにプロセス１３の内部に保存してもよく、他のプロセス１３や仮想化機能により情報処理装置１０上で動作する別のＯＳ１２あるいはプロセス１３に送信したり、無線あるいは有線の通信手段を利用して、外部のネットワーク上の他の端末、ＰＣ、サーバ、プリンタ、電子機器などに送信したりしてもよい。また、ログに対して暗号化や署名を付ける処理を行ってもよい。ログの形式は文字列に限らず、画像や動画などの他の形式に変更してもよく、７ｚ、ＺＩＰ、ＲＡＰ、ＬＺＨ、ＩＳＯ、ＴＡＲ、ＤＭＧ、ＭＳＩなど形式に圧縮してもよい。ログは生成時にすぐに出力せずに一定時間後に出力してもよく、一定時間待って他のログと一緒に出力してもよい。また、生成されたログを読込み、ログの結果に基づいて新しい処理を実行してもよい。例えば、ログに基づき、通信に失敗したプロセス１３の停止、ｐｔｒａｃｅなどを用いて通信に失敗したプロセス１３の監視強化、コンテナなどの仮想化技術を利用してプロセス１３を隔離するなどの処理を実行してもよい。
【０１１５】
ＯＳ１２のログ出力部１１４は、プロセス１３から起動失敗のメッセージを受信した場合、起動失敗を表すログをファイルに出力する。そのような起動失敗のログは、情報処理装置１０の異常の検証に利用できる。また、ＯＳ１２のログ出力部１１４は、プロセス１３から起動成功のメッセージを受信した場合、起動成功を表すログをファイルに出力してもよい。プロセス１３のログ出力部２１１が出力するログと同様に、ＯＳ１２のログ出力部１１４が出力するログは圧縮処理や暗号化を行ってもよく、出力先は任意のデバイスでよい。また、ＯＳ１２は、ログ出力部１１４が出力したログに基づいて、実行する処理を選択してもよい。例えば、ログ出力部１１４がログを出力したファイルにプロセス１３の起動失敗を表すログが記録されていた場合、ＯＳ１２は、プロセス１３を強制的終了させる処理を行ってもよい。また、ログ出力部１１４がログを出力したファイルに、プロセス１３が連続して起動失敗したことを表すログが記録されていた場合、ＯＳ１２は、自身を再起動する処理を行ってもよい。このように構成することで、ＯＳ１２はログに基づいて情報処理装置１０が異常な状態であること検知し、異常な状態から回復するための対処を行うことができる。
【０１１６】
以上のように、本実施形態によれば、メッセージの検証で異常が発見された場合にログを出力するようにしているので、意図しない通信が発生することを検知することができ、その原因を解析することができる。
【０１１７】
＜第４実施形態＞
次に、第４実施形態について説明する。本実施形態では、プロセス１３の起動時にＯＳ１２がプロセス１３との間で共有する特定のメモリ領域にメッセージ認証鍵を書き込み、プロセス１３がこのメッセージ認証鍵を取得できるようにする。メッセージ認証鍵は、事前にＯＳ１２の中に組み込んでおいてもよいし、プロセス１３の実行時に生成してもよい。プロセス１３の実行時にメッセージ認証鍵を生成する場合は、例えば、プロセス１３を起動した時刻をシードとし、ＰＢＫＤＦ２やＡｒｇｏｎ２などの鍵導出関数を使用・併用してメッセージ認証鍵を生成してもよい。また、シードはＰＵＦや実行ファイルのベースアドレス、パスワード、Ｉｎｔｅｌ社製（Ｉｎｔｅｌは登録商標）ＣＰＵのｒｄｒａｎｄ命令、ＨＳＭ、ＴＰＭのようなＨＷモジュールのランダム値生成機能により生成される値を使用してもよいし、これらを併用してもよい。また、鍵導出関数を使用したメッセージ認証鍵の生成を行わずに、他のプロセス１３や仮想化機能により情報処理装置１０上で動作する別のＯＳ１２あるいはプロセス１３からメッセージ認証鍵を取得したり、無線あるいは有線の通信手段を利用して、外部のネットワーク上の他の端末、ＰＣ、サーバ、プリンタ、電子機器などからメッセージ認証鍵を取得したりしてもよい。
【０１１８】
図１６は、本実施形態のＯＳ１２およびプロセス１３の機能的な構成例を示すブロック図である。図２に示した構成例と比較して、ＯＳ１２がアドレス情報保存部１０２とベースアドレス取得部１０３を備えておらず、ＯＳ１２の鍵生成部１０４は、上述した方法でメッセージ認証鍵を生成あるいは取得して、鍵保存部１０５とメッセージ認証鍵格納領域３１０とに格納する構成となっている。また、プロセス１３はベースアドレス取得部２０１を備えておらず、鍵生成部２０２が鍵取得部２１２に置き換わっている。
【０１１９】
プロセス１３の鍵取得部２１２は、認証コード生成部２０４あるいは認証コード検証部２０７からの要求に応じて、メッセージ認証鍵格納領域３１０からメッセージ認証鍵を取得する。メッセージ認証鍵格納領域３１０は、プロセス１３の実行ファイルのベースアドレスより一意に定まる特定のメモリ領域であり、ＯＳ１２の鍵生成部１０４によって生成あるいは取得されたメッセージ認証鍵が格納されている。なお、メッセージ認証鍵を用いたメッセージ認証コードの生成、メッセージ認証コードを用いたメッセージの検証などの処理は上述の第１実施形態と同様であるため、詳細な説明は省略する。
【０１２０】
以上のように、本実施形態によれば、ＯＳ１２がプロセス１３に割り当てたプロセス固有情報であるベースアドレスにより一意に定まる特定のメモリ領域にメッセージ認証鍵を格納し、ＯＳ１２とプロセス１３との間で通信を行う際に、このメッセージ認証鍵を用いてメッセージ認証コードの生成およびメッセージ認証コードを用いたメッセージの検証を行うようにしている。したがって、上述の第１実施形態と同様に、ＯＳ１２とプロセス１３間の通信に対してセキュリティ機能を実現し、プロセス１３の保護を図ることができる。
【０１２１】
また、本実施形態では、第１実施形態と比較してメッセージ認証鍵の生成における自由度が向上するので、推測困難なメッセージ認証鍵を生成することができ、ＯＳ１２とプロセス１３間の通信の安全性を高めることができる。
【０１２２】
＜第５実施形態＞
次に、第５実施形態について説明する。本実施形態は、ＶＭＭとＯＳ１２間の通信においてセキュリティ機能を実現する例である。ＶＭＭはハイパーバイザでもよく、複数のＯＳ１２を管理する機能を有していれば形式・形態は問わない。また、ＯＳ１２は複数動作してもよい。本実施形態では、ＶＭＭがＯＳ１２と共通のメッセージ認証鍵を生成し、ＯＳ１２に専用の仮想デバイスにメッセージ認証鍵を書き込むことで、ＯＳ１２がこのメッセージ認証鍵を取得できるようにする。そして、ＶＭＭとＯＳ１２との間で通信を行う際に、このメッセージ認証鍵を用いてメッセージ認証コードの生成およびメッセージ認証コードを用いたメッセージの検証を行うことで、ＶＭＭとＯＳ１２間の通信をセキュアにする。
【０１２３】
本実施形態の構成は、上述の第４実施形態におけるプロセス１３がＯＳ１２に置き換わり、上述の第４実施形態におけるＯＳ１２がＶＭＭに置き換わったものとみなすことができる。つまり、ＶＭＭはＯＳ１２をプロセスとして管理する「プロセス管理部」とみなすことができ、ＯＳ１２はＶＭＭとの関係において「プロセス」とみなすことができる。ただし、上述の第４実施形態では、ＯＳ１２がプロセス１３との間で共有する特定のメモリ領域にメッセージ認証鍵を格納したが、本実施形態では、ＶＭＭがＯＳ１２に専用の仮想デバイスにメッセージ認証鍵を格納する。
【０１２４】
図１７は、本実施形態のＶＭＭおよびＯＳ１２の機能的な構成例を示すブロック図である。ＶＭＭ１４は、ＯＳ１２を生成・起動するＯＳ生成部４０１と、メッセージ認証鍵を生成して鍵保存部４０３およびメッセージ認証鍵格納仮想デバイス５００とに格納する鍵生成部４０２と、鍵生成部４０２が生成したメッセージ認証鍵を保存する鍵保存部４０３と、メッセージ認証鍵を用いてメッセージ認証コードを生成する認証コード生成部４０４と、メッセージ認証コードが付与されたメッセージをＯＳ１２に送信する出力部４０５と、ＯＳ１２からメッセージ認証コードが付与されたメッセージを受信する入力部４０６と、メッセージ認証鍵を用いてＯＳ１２から受信したメッセージを検証する認証コード検証部４０７と、ＯＳ１２から受信したメッセージに基づいてＯＳ１２の起動確認を行うＯＳ起動確認部４０８とを備える。メッセージ認証鍵格納仮想デバイス５００は、上述したように、ＯＳ１２に専用の仮想デバイスである。
【０１２５】
また、ＯＳ１２は、メッセージ認証鍵格納仮想デバイス５００からメッセージ認証鍵を取得して鍵保存部１５２に格納する鍵取得部１５１と、鍵取得部１５１が取得したメッセージ認証鍵を保存する鍵保存部１５２と、メッセージ認証鍵を用いてメッセージ認証コードを生成する認証コード生成部１５３と、メッセージ認証コードが付与されたメッセージをＶＭＭ１４に送信する出力部１５４と、ＶＭＭ１４からメッセージ認証コードが付与されたメッセージを受信する入力部１５５と、メッセージ認証鍵を用いてＶＭＭ１４から受信したメッセージを検証する認証コード検証部１５６と、ＯＳ１２の起動が成功したか否かをＶＭＭ１４に応答する起動応答部１５７とを備える。起動応答の例として、ＯＳ１２は起動成功時には“ｓｕｃｃｅｓｓ”、起動失敗時には“ｆａｉｌ”という文字列のメッセージをＶＭＭ１４に送信する。このメッセージは起動の成功と失敗を区別できるものであれば、内容・形式は問わない。なお、図１７においては１つのＯＳ１２のみを図示しているが、ＶＭＭ１４と通信するＯＳ１２は複数存在してもよい。
【０１２６】
次に、ＯＳ１２の起動時にＶＭＭ１４からＯＳ１２に起動確認メッセージを送信し、その応答としてＯＳ１２からＶＭＭ１４に起動応答メッセージを送信するシーンを想定して、本実施形態の情報処理装置１０の動作をフローチャートに沿って説明する。
【０１２７】
まず、ＶＭＭ１４からＯＳ１２にメッセージを送信する際の処理について説明する。図１８は、メッセージ送信時におけるＶＭＭ１４の処理手順の一例を示すフローチャートである。
【０１２８】
まず、ＯＳ生成部４０１は、自身が生成したＯＳ１２が正常に起動できたことを確認するために、生成したＯＳ１２の識別情報であるｏｓｉｄを出力部４０５に渡してメッセージの送信を要求する（ステップＳ８０１）。なお、メッセージ送信要求は、ＯＳ１２が起動したときやＯＳ１２がハイパーコールを発行したときに発生してもよい。また、ハードウェア１１からの割込みが発生したときやハードウェア１１の状態に変化が発生したときにメッセージ送信要求が発生してもよく、任意のタイミングや任意の操作でメッセージ送信要求が発生してもよい。また、ここでは起動確認メッセージにＯＳ１２のｏｓｉｄを用いることを想定するが、ｏｓｉｄの代わりにＯＳ１２を識別できる特徴を持つ他の情報を用いてもよい。また、起動確認メッセージは、ｏｓｉｄあるいはこれを代用する情報に加えて、ＯＳ１２の起動時刻や情報処理装置１０の位置情報などのコンテキスト情報を含んでいてもよい。
【０１２９】
出力部４０５は、ＶＭＭ１４からＯＳ１２へのメッセージ送信をセキュアにするために、通信対象のＯＳ１２に送信するメッセージを認証コード生成部４０４に渡してメッセージ認証コードの生成を要求する（ステップＳ８０２）。認証コード生成部４０４は、まず、通信対象のＯＳ１２に対応するメッセージ認証鍵が鍵保存部４０３に保存されているか否かを確認する（ステップＳ８０３）。ここで、通信対象のＯＳ１２に対応するメッセージ認証鍵が鍵保存部４０３に保存されていれば（ステップＳ８０３：Ｙｅｓ）、認証コード生成部４０４は、そのメッセージ認証鍵を鍵保存部４０３から取得する（ステップＳ８０４）。
【０１３０】
一方、通信対象のＯＳ１２に対応するメッセージ認証鍵が鍵保存部４０３に保存されていなければ（ステップＳ８０３：Ｎｏ）、認証コード生成部４０４は、鍵生成部４０２にメッセージ認証鍵の生成を要求する（ステップＳ８０５）。鍵生成部４０２は、所定の鍵導出関数を使用してメッセージ認証鍵を生成し（ステップＳ８０６）、生成したメッセージ認証鍵を認証コード生成部４０４に返すとともに、鍵保存部４０３に格納する。さらに鍵生成部４０２は、生成したメッセージ認証鍵を、通信対象のＯＳ１２に固有の仮想デバイスであるメッセージ認証鍵格納仮想デバイス５００に格納する（ステップＳ８０７）。
【０１３１】
メッセージ認証鍵格納仮想デバイス５００は、ＶＭＭ１４上で複数のＯＳ１２が動作している場合でも、通信対象のＯＳ１２のみが参照でき、他のＯＳ１２は参照できないという特徴を持つ。鍵導出関数のシードには、例えばＯＳ１２を起動した時刻を使用することができる。また、シードはＰＵＦや実行ファイルのベースアドレス、パスワード、Ｉｎｔｅｌ社製（Ｉｎｔｅｌは登録商標）ＣＰＵのｒｄｒａｎｄ命令、ＨＳＭ、ＴＰＭのようなＨＷモジュールのランダム値生成機能により生成される値を使用してもよいし、これらを併用してもよい。また、鍵導出関数を使用したメッセージ認証鍵の生成を行わずに、プロセス１３や仮想化機能により情報処理装置１０上で動作する別のＯＳ１２あるいはプロセス１３からメッセージ認証鍵を取得したり、無線あるいは有線の通信手段を利用して、外部のネットワーク上の他の端末、ＰＣ、サーバ、プリンタ、電子機器などからメッセージ認証鍵を取得したりしてもよい。
【０１３２】
次に、認証コード生成部４０４は、ステップＳ８０２で出力部４０５から受け取ったメッセージと、ステップＳ８０４で鍵保存部４０３から取得したメッセージ認証鍵あるいはステップＳ８０６で鍵生成部４０２により生成されたメッセージ認証鍵とを用い、メッセージ認証コードを生成する（ステップＳ８０８）。そして、生成したメッセージ認証コードをメッセージに付加して出力部４０５に返す。このとき、メッセージは、メッセージ認証鍵を用いて暗号化されてもよい。出力部４０５は、認証コード生成部４０４から受け取ったメッセージ認証コードが付加されたメッセージを、通信対象のＯＳ１２に送信する（ステップＳ８０９）。
【０１３３】
次に、ＯＳ１２がＶＭＭ１４からメッセージを受信する際の処理について説明する。図１９は、メッセージ受信時におけるＯＳ１２の処理手順の一例を示すフローチャートである。
【０１３４】
ＯＳ１２の入力部１５５は、ＶＭＭ１４の出力部４０５から送信されたメッセージ認証コードが付与されたメッセージを受信すると（ステップＳ９０１）、受信したメッセージの安全性を確認するために、メッセージ認証コードが付与されたメッセージを認証コード検証部１５６に渡してメッセージの検証を要求する（ステップＳ９０２）。認証コード検証部１５６は、まず、ＶＭＭ１４により生成されたメッセージ認証鍵が鍵保存部１５２に保存されているか否かを確認する（ステップＳ９０３）。ここで、ＶＭＭ１４により生成されたメッセージ認証鍵が鍵保存部１５２に保存されていれば（ステップＳ９０３：Ｙｅｓ）、認証コード検証部１５６は、そのメッセージ認証鍵を鍵保存部１５２から取得する（ステップＳ９０４）。
【０１３５】
一方、ＶＭＭ１４により生成されたメッセージ認証鍵が鍵保存部１５２に保存されていなければ（ステップＳ９０３：Ｎｏ）、認証コード検証部１５６は、鍵取得部１５１にメッセージ認証鍵の取得を要求する（ステップＳ９０５）。鍵取得部１５１は、認証コード検証部１５６からの要求に応じてメッセージ認証鍵格納仮想デバイス５００からメッセージ認証鍵を取得し（ステップＳ９０６）、取得したメッセージ認証鍵を認証コード検証部１５６に返すとともに、鍵保存部１５２に格納する。
【０１３６】
次に、認証コード検証部１５６は、ステップＳ９０２で入力部１５５から受け取ったメッセージに付与されたメッセージ認証コードと、ステップＳ９０４で鍵保存部１５２から取得したメッセージ認証鍵あるいはステップＳ９０６で鍵取得部１５１により取得されたメッセージ認証鍵とを用い、ステップＳ９０２で入力部１５５から受け取ったメッセージを検証する（ステップＳ９０７）。具体的には認証コード検証部１５６は、例えば、メッセージ認証鍵を用いて入力部１５５から受け取ったメッセージをもとにメッセージ認証コードを生成し、生成したメッセージ認証コードがメッセージに付加されたメッセージ認証コードと一致するか否かにより、入力部１５５が受信したメッセージが、ＶＭＭ１４が送信した正当なデータであるか否かを確認し、メッセージの改ざんやなりすましを検知する。なお、検証時にメッセージが暗号化されていた場合、メッセージ認証鍵によってメッセージを復号してもよい。
【０１３７】
認証コード検証部１５６は、入力部１５５が受信したメッセージに対する検証結果を入力部１５５に返す。入力部１５５は、認証コード検証部１５６から検証結果を受け取ると、メッセージと検証結果を起動応答部１５７に渡す（ステップＳ９０８）。
【０１３８】
次に、ＯＳ１２からＶＭＭ１４にメッセージを送信する際の処理について説明する。図２０は、メッセージ送信時におけるＯＳ１２の処理手順の一例を示すフローチャートである。
【０１３９】
まず、起動応答部１５７は、ＯＳ１２が正常に起動できたかどうかをＶＭＭ１４に知らせるために、ＯＳ１２のｏｓｉｄと起動の成否を示す情報を出力部１５４に渡してメッセージの送信を要求する（ステップＳ１００１）。
【０１４０】
出力部１５４は、ＯＳ１２からＶＭＭ１４へのメッセージ送信をセキュアにするために、ＶＭＭ１４に送信するメッセージを認証コード生成部１５３に渡してメッセージ認証コードの生成を要求する（ステップＳ１００２）。認証コード生成部１５３は、上述の認証コード検証部１５６と同様に、まず、ＶＭＭ１４により生成されたメッセージ認証鍵が鍵保存部１５２に保存されているか否かを確認するが、ここでは起動確認メッセージの受信時に鍵取得部１５１によってメッセージ認証鍵格納仮想デバイス５００からメッセージ認証鍵が取得されて鍵保存部１５２に格納されている。このため、認証コード生成部１５３は、鍵保存部１５２からメッセージ認証鍵を取得する（ステップＳ１００３）。
【０１４１】
次に、認証コード生成部１５３は、ステップＳ１００２で出力部１５４から受け取ったメッセージと、ステップＳ１００３で鍵保存部１５２から取得したメッセージ認証鍵とを用い、メッセージ認証コードを生成する（ステップＳ１００４）。そして、生成したメッセージ認証コードをメッセージに付加して出力部１５４に返す。このとき、メッセージは、メッセージ認証鍵を用いて暗号化されてもよい。出力部１５４は、認証コード生成部１５３から受け取ったメッセージ認証コードが付加されたメッセージを、ＶＭＭ１４に送信する（ステップＳ１００５）。
【０１４２】
次に、ＶＭＭ１４がＯＳ１２からメッセージを受信する際の処理について説明する。図２１は、メッセージ受信時におけるＶＭＭ１４の処理手順の一例を示すフローチャートである。
【０１４３】
ＶＭＭ１４の入力部４０６は、ＯＳ１２の出力部１５４から送信されたメッセージ認証コードが付与されたメッセージを受信すると（ステップＳ１１０１）、受信したメッセージの安全性を確認するために、メッセージ認証コードが付与されたメッセージを認証コード検証部４０７に渡してメッセージの検証を要求する（ステップＳ１１０２）。認証コード検証部４０７は、上述の認証コード生成部４０４と同様に、まず、通信対象のＯＳ１２に対応するメッセージ認証鍵が鍵保存部４０３に保存されているか否かを確認するが、ここでは起動確認メッセージの送信時にメッセージ認証鍵が生成されて鍵保存部４０３に格納されている。このため、認証コード検証部４０７は、鍵保存部４０３からメッセージ認証鍵を取得する（ステップＳ１１０３）。
【０１４４】
次に、認証コード検証部４０７は、ステップＳ１１０２で入力部４０６から受け取ったメッセージに付与されたメッセージ認証コードと、ステップＳ１１０３で鍵保存部４０３から取得したメッセージ認証鍵とを用い、ステップＳ１１０２で入力部４０６から受け取ったメッセージを検証する（ステップＳ１１０４）。具体的には認証コード検証部４０７は、例えば、メッセージ認証鍵を用いて入力部４０６から受け取ったメッセージをもとにメッセージ認証コードを生成し、生成したメッセージ認証コードがメッセージに付加されたメッセージ認証コードと一致するか否かにより、入力部４０６が受信したメッセージが、ＯＳ１２が送信した正当なデータであるか否かを確認し、メッセージの改ざんやなりすましを検知する。なお、検証時にメッセージが暗号化されていた場合、メッセージ認証鍵によってメッセージを復号してもよい。また、認証コード検証部４０７による検証と併せて、出力部４０５が送信したメッセージに含まれるｏｓｉｄなどのＯＳ１２を特定する情報と、このメッセージに対する応答としてＯＳ１２から送信されて入力部４０６が受信したメッセージに含まれるｏｓｉｄなどのＯＳ１２を特定する情報とが一致するか否かにより、メッセージの改ざんやなりすましを検出する処理を行ってもよい。
【０１４５】
認証コード検証部４０７は、入力部４０６が受信したメッセージに対する検証結果を入力部４０６に返す。入力部４０６は、認証コード検証部４０７から検証結果を受け取ると、メッセージと検証結果をＯＳ起動確認部４０８に渡す（ステップＳ１１０５）。ＯＳ起動確認部４０８は、入力部４０６から受け取ったメッセージと検証結果をもとに、ＯＳ生成部４０１が生成したＯＳ１２が正常に起動したかどうかを確認する（ステップＳ１１０６）。
【０１４６】
以上、具体的な例を挙げながら詳細に説明したように、本実施形態によれば、ＶＭＭ１４がＯＳ１２に割り当てた専用の仮想デバイスであるメッセージ認証鍵格納仮想デバイス５００に、ＶＭＭ１４が生成したメッセージ認証鍵を格納し、このメッセージ認証鍵をＯＳ１２が取得できるようにしている。そして、ＶＭＭ１４とＯＳ１２との間で通信を行う際に、このメッセージ認証鍵を用いてメッセージ認証コードの生成およびメッセージ認証コードを用いたメッセージの検証を行うようにしている。したがって、ＶＭＭ１４とＯＳ１２間の通信に対してセキュリティ機能を実現し、ＯＳ１２の保護を図ることができる。
【０１４７】
＜補足説明＞
上述した各実施形態の情報処理装置１０におけるＯＳ１２、プロセス１３、ＶＭＭ１４の機能は、例えば、ハードウェア１１として情報処理装置１０に搭載されたプロセッサ回路により実行されるソフトウェアなどのプログラムとして実現することができる。このとき、上述した各実施形態の情報処理装置１０は、上記のプログラムをあらかじめインストールすることでＯＳ１２、プロセス１３、ＶＭＭ１４の機能を実現してもよいし、記録媒体に記録あるいはネットワークを介して配布された上記プログラムを適宜インストールすることでＯＳ１２、プロセス１３、ＶＭＭ１４の機能を実現してもよい。
【０１４８】
以上、本発明の実施形態を説明したが、ここで説明した実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。ここで説明した新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。ここで説明した実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１４９】
１０  情報処理装置
１２  ＯＳ
１３  プロセス
１４  ＶＭＭ
１０４  鍵生成部
１０６  認証コード生成部
１０７  出力部
１０８  入力部
１０９  認証コード検証部
１１４  ログ出力部
２０２  鍵生成部
２０４  認証コード生成部
２０５  出力部
２０６  入力部
２０７  認証コード検証部
２０９  ホワイトリスト取得部
２１０  実行判定部
２１１  ログ出力部
２１２  鍵取得部
【図１】
2019050507.tif 000003
【図２】
2019050507.tif 000004
【図３】
2019050507.tif 000005
【図４】
2019050507.tif 000006
【図５】
2019050507.tif 000007
【図６】
2019050507.tif 000008
【図７】
2019050507.tif 000009
【図８】
2019050507.tif 000010
【図９】
2019050507.tif 000011
【図１０】
2019050507.tif 000012
【図１１】
2019050507.tif 000013
【図１２】
2019050507.tif 000014
【図１３】
2019050507.tif 000015
【図１４】
2019050507.tif 000016
【図１５】
2019050507.tif 000017
【図１６】
2019050507.tif 000018
【図１７】
2019050507.tif 000019
【図１８】
2019050507.tif 000020
【図１９】
2019050507.tif 000021
【図２０】
2019050507.tif 000022
【図２１】
2019050507.tif 000023