(57)【要約】【課題】暗号化プログラムの実行単位となるプロセスを、より効率的に実行することが可能なマイクロプロセッサを提供する。【解決手段】暗号化プログラムの実行単位となるプロセスを、実行対象のプログラム、物理アドレス及び命令鍵識別子のデータ単位でキャッシュし、実行対象のプロセスに該当するデータがキャッシュされている場合、前記暗号化プログラムの復号を行わず、このキャッシュされたデータを用いてプロセスを実行する。【選択図】        図９
2010055423.tif 000002
【特許請求の範囲】
【請求項１】
暗号化プログラムを復号するための命令鍵と、当該命令鍵を識別する命令鍵識別子とを関連付けて記憶する第１記憶手段と、
前記暗号化プログラムの実行単位となるプロセスを識別するプロセス識別子と、当該プロセスの実行対象となる前記暗号化プログラムを復号する命令鍵の前記命令鍵識別子と、当該暗号化プログラムに割り当てられた相対アドレスを算出するための配置先アドレスとを関連付けて記憶する第２記憶手段と、
実行対象のプロセスのプロセス識別子を記憶する第１識別子記憶手段と、
前記第１識別子記憶手段に記憶されたプロセス識別子と、当該プロセス識別子のプロセスで実行対象となる暗号化プログラムが格納された物理アドレスとを通知し、前記命令鍵により復号された暗号化プログラムを実行する実行手段と、
前記実行手段から通知された前記プロセス識別子に対応する命令鍵識別子を、前記第２記憶手段から読み出す命令鍵識別子読出手段と、
前記命令鍵識別子読出手段で読み出された命令鍵識別子と関連付けて前記第１記憶手段に記憶された配置先アドレスと、前記実行手段から通知された物理アドレスとを用いて、前記実行対象の暗号化プログラムに割り当てられた前記相対アドレスを算出する算出手段と、
前記相対アドレスに基づき前記外部記憶手段から取得した前記実行対象の暗号化プログラムを、前記命令鍵識別子読出手段で読み出された前記命令鍵識別子と関連付けて前記第１記憶手段に記憶された命令鍵を用いて復号し、平文のプログラムを取得する復号手段と、
前記復号手段で取得されたプログラムと、当該プログラムに係る前記物理アドレス及び前記命令鍵識別子とを関連付けて記憶するキャッシュ手段と、
前記実行手段から通知された物理アドレスと、前記命令鍵識別子読出手段で読み出された命令鍵識別子とに対応するプログラムが、前記キャッシュ手段に記憶されているか否かを判定する判定手段と、
前記判定手段により該当するプログラムが記憶されていると判定された場合、当該プログラムを前記実行手段に通知し、該当するプログラムが記憶されていないと判定された場合、前記復号手段で取得されたプログラムを前記実行手段に通知するアクセス制御手段と、
を備えたことを特徴とするマイクロプロセッサ。
【請求項２】
暗号化プログラムを復号するための命令鍵と、当該命令鍵を識別する命令鍵識別子とを関連付けて記憶する第１記憶手段と、
前記暗号化プログラムの実行単位となるプロセスを識別するプロセス識別子と、当該プロセスの実行対象となる前記暗号化プログラムを復号する命令鍵の前記命令鍵識別子と、当該暗号化プログラムに割り当てられた相対アドレスを算出するための配置先アドレスとを関連付けて記憶する第２記憶手段と、
実行対象のプロセスのプロセス識別子を記憶する第１識別子記憶手段と、
実行対象のプロセスのプロセス識別子に対応する前記命令鍵識別子を記憶する第２識別子記憶手段と、
前記第１識別子記憶手段に記憶されたプロセス識別子と、当該プロセス識別子のプロセスで実行対象となる暗号化プログラムが格納された物理アドレスと、前記第２識別子記憶手段に記憶された命令鍵識別子とを通知し、前記命令鍵により復号された暗号化プログラムを実行する実行手段と、
前記実行手段から通知された前記命令鍵識別子と関連付けて前記第１記憶手段に記憶された配置先アドレスと、物理アドレスとを用いて、前記実行対象の暗号化プログラムに割り当てられた前記相対アドレスを算出する算出手段と、
前記相対アドレスに基づき外部の記憶手段から取得した前記実行対象の暗号化プログラムを、前記実行手段から通知された命令鍵識別子と関連付けて前記第１記憶手段に記憶された命令鍵を用いて復号し、平文のプログラムを取得する復号手段と、
前記復号手段で取得されたプログラムと、当該プログラムに係る前記物理アドレス及び前記命令鍵識別子とを関連付けて記憶するキャッシュ手段と、
前記実行手段から通知された物理アドレス及び命令鍵識別子に対応するプログラムが、前記キャッシュ手段に記憶されているか否かを判定する判定手段と、
前記判定手段により該当するプログラムが記憶されていると判定された場合、当該プログラムを前記実行手段に通知し、該当するプログラムが記憶されていないと判定された場合、前記復号手段で取得されたプログラムを前記実行手段に通知するアクセス制御手段と、
を備えたことを特徴とするマイクロプロセッサ。
【請求項３】
公開鍵によって暗号化された命令鍵を外部の記憶手段から読み出す命令鍵読出手段と、
前記命令鍵読出手段により読み出された暗号化済みの命令鍵を、前記公開鍵に対応する秘密鍵を用いて復号し、当該命令鍵の命令鍵識別子と関連付けて前記第１記憶手段に登録する第１登録手段と、
前記プロセスの実行に先がけ、当該プロセスのプロセス識別子と、前記第１記憶手段に記憶された当該プロセスの実行対象となる暗号化プログラムに係る命令鍵識別子と、当該暗号化プログラムの配置先アドレスとを関連付け、前記第２記憶手段に登録する第２登録手段と、
を更に備えたことを特徴とする請求項１又は２に記載のマイクロプロセッサ。
【請求項４】
前記第２登録手段は、前記第２記憶手段への登録に際し、実行対象の暗号化プログラムと同一の暗号化プログラムを実行する他のプロセスのプロセス識別子が前記第２記憶手段に既に記憶されていると判定した場合、当該他のプロセスのプロセス識別子に関連付けて記憶された命令鍵識別子を、前記実行対象の暗号化プログラムに係る命令鍵識別子として複製することを特徴とする請求項３に記載のマイクロプロセッサ。
【請求項５】
前記実行手段は、削除対象となるプロセス識別子を通知し、
前記実行手段から通知された削除対象のプロセス識別子及び当該プロセス識別子に関連付けられた情報を、前記第２記憶手段から削除する第１削除手段を更に備えたことを特徴とする請求項３又は４に記載のマイクロプロセッサ。
【請求項６】
前記第１記憶手段は、前記第２記憶手段に登録された各命令鍵識別子の個数を表す参照カウンタを、対応する命令鍵識別子と関連付けて記憶し、
前記参照カウンタがゼロとなった命令鍵識別子及び当該命令識別子に関連付けられた情報を前記第１記憶手段から削除する第２削除手段を更に備えたことを特徴とする請求項５に記載のマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサコアを備えたマイクロプロセッサに関する。
【背景技術】
【０００２】
一のプロセスを構成する３要素（命令、データ、コンテキスト）を、信頼できないＯＳや他のプロセスから保護することを目的とした技術として、プログラムを識別する識別子と共通鍵／秘密鍵などの鍵を用いて暗号化／復号を行うことで、安全性を確保する方法が提案されている。例えば、特許文献１に開示された技術では、保護すべきプログラムについて、プロセッサ内部でのみ上記したプロセスの要素を平文とし、プロセッサ外部では暗号化することで、盗聴・改ざんといった行為から守ることを実現している。この場合、秘密情報の保護を実現するために行う暗号化・復号時においてオーバヘッドが発生することになるが、特許文献１では、キャッシュタグの効率的な利用を目的とした利用方法についてもあわせて提案されている。具体的には、同じデータ鍵や命令鍵であっても別プロセス識別子をもつ場合、キャッシュアクセス時にミス判定され、本来なら必要のないメインメモリへのアクセスが発生することになるが、特許文献１では、鍵インデックス変換機能をプロセッサ内に持たせ、同じデータ鍵や命令鍵を持つプロセス識別子を管理することで、メインメモリへのアクセスを抑え、オーバヘッドの削減を可能にしている。
【０００３】
また、暗号化された命令を復号し命令キャッシュに読み込む際の技術として、プロセス毎にプログラムが配置された先頭アドレスである配置先アドレスを保持し、配置先アドレスのアドレス情報を用いて相対アドレス値に変換するアドレス変換方式が特許文献２に開示されている。
【０００４】
【特許文献１】特開２００２−２３２４１７号公報
【特許文献２】特開２００３−１０８４４２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、プロセス毎に生成されるデータ鍵と比べ、命令鍵は命令（プログラム）と１対１に対応しており、同一のプログラムについては同一の命令鍵が使用されるという特性を有している。そのため、特許文献１に開示された技術では、異なるプロセスの夫々で同一の命令鍵が用いられるような場合に、以下に示す理由により、各プロセスを効率的に実行できない可能性がある。
【０００６】
異なるプロセスの夫々で同一の命令鍵が用いられる例として、銀行業務のオンライン処理のような大規模Ｗｅｂサーバ上で同じプログラムが大量に同時実行される場合や、共有ライブラリが複数のプログラムから実行される場合が挙げられる。前者の場合、大量のプログラムが同時に実行されるため、応答性の向上が必要である。また、後者の場合、共有ライブラリは同じモジュールであってもプロセス毎に異なるアドレスで同一の命令鍵を配置する必要がある。これは、暗号化されたプログラムを実行するために、プロセス毎に配置された先のアドレスを用いないと復号処理を行うことができないためである。プロセス毎に配置されるアドレスは同一とは限らないため、プロセス識別子毎に配置先アドレスの情報を保持しなければ復号処理を行うことができない。
【０００７】
なお、上記した特許文献１の問題点は、特許文献２の技術を用いることで解決することが可能である。しかしながら、特許文献１に開示された技術を特許文献２の技術に適応し、同じ命令鍵毎でキャッシュアクセスを実現する構成のみでは、配置先アドレスに対処できず、プロセス毎に必要な情報を別途保持する必要があるため、処理が煩雑になるという問題がある。そのため、上記した何れの問題をも解決できるような技術が望まれている。
【０００８】
本発明は、上記に鑑みてなされたものであって、暗号化プログラムの実行単位となるプロセスを、より効率的に実行することが可能なマイクロプロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明は、暗号化プログラムを復号するための命令鍵と、当該命令鍵を識別する命令鍵識別子とを関連付けて記憶する第１記憶手段と、前記暗号化プログラムの実行単位となるプロセスを識別するプロセス識別子と、当該プロセスの実行対象となる前記暗号化プログラムを復号する命令鍵の前記命令鍵識別子と、当該暗号化プログラムに割り当てられた相対アドレスを算出するための配置先アドレスとを関連付けて記憶する第２記憶手段と、実行対象のプロセスのプロセス識別子を記憶する第１識別子記憶手段と、前記第１識別子記憶手段に記憶されたプロセス識別子と、当該プロセス識別子のプロセスで実行対象となる暗号化プログラムが格納された物理アドレスとを通知し、前記命令鍵により復号された暗号化プログラムを実行する実行手段と、前記実行手段から通知された前記プロセス識別子に対応する命令鍵識別子を、前記第２記憶手段から読み出す命令鍵識別子読出手段と、前記命令鍵識別子読出手段で読み出された命令鍵識別子と関連付けて前記第１記憶手段に記憶された配置先アドレスと、前記実行手段から通知された物理アドレスとを用いて、前記実行対象の暗号化プログラムに割り当てられた前記相対アドレスを算出する算出手段と、前記相対アドレスに基づき前記外部記憶手段から取得した前記実行対象の暗号化プログラムを、前記命令鍵識別子読出手段で読み出された前記命令鍵識別子と関連付けて前記第１記憶手段に記憶された命令鍵を用いて復号し、平文のプログラムを取得する復号手段と、前記復号手段で取得されたプログラムと、当該プログラムに係る前記物理アドレス及び前記命令鍵識別子とを関連付けて記憶するキャッシュ手段と、前記実行手段から通知された物理アドレスと、前記命令鍵識別子読出手段で読み出された命令鍵識別子とに対応するプログラムが、前記キャッシュ手段に記憶されているか否かを判定する判定手段と、前記判定手段により該当するプログラムが記憶されていると判定された場合、当該プログラムを前記実行手段に通知し、該当するプログラムが記憶されていないと判定された場合、前記復号手段で取得されたプログラムを前記実行手段に通知するアクセス制御手段と、を備える。
【００１０】
また、本発明は、暗号化プログラムを復号するための命令鍵と、当該命令鍵を識別する命令鍵識別子とを関連付けて記憶する第１記憶手段と、前記暗号化プログラムの実行単位となるプロセスを識別するプロセス識別子と、当該プロセスの実行対象となる前記暗号化プログラムを復号する命令鍵の前記命令鍵識別子と、当該暗号化プログラムに割り当てられた相対アドレスを算出するための配置先アドレスとを関連付けて記憶する第２記憶手段と、実行対象のプロセスのプロセス識別子を記憶する第１識別子記憶手段と、実行対象のプロセスのプロセス識別子に対応する前記命令鍵識別子を記憶する第２識別子記憶手段と、前記第１識別子記憶手段に記憶されたプロセス識別子と、当該プロセス識別子のプロセスで実行対象となる暗号化プログラムが格納された物理アドレスと、前記第２識別子記憶手段に記憶された命令鍵識別子とを通知し、前記命令鍵により復号された暗号化プログラムを実行する実行手段と、前記実行手段から通知された前記命令鍵識別子と関連付けて前記第１記憶手段に記憶された配置先アドレスと、物理アドレスとを用いて、前記実行対象の暗号化プログラムに割り当てられた前記相対アドレスを算出する算出手段と、前記相対アドレスに基づき外部の記憶手段から取得した前記実行対象の暗号化プログラムを、前記実行手段から通知された命令鍵識別子と関連付けて前記第１記憶手段に記憶された命令鍵を用いて復号し、平文のプログラムを取得する復号手段と、前記復号手段で取得されたプログラムと、当該プログラムに係る前記物理アドレス及び前記命令鍵識別子とを関連付けて記憶するキャッシュ手段と、前記実行手段から通知された物理アドレス及び命令鍵識別子に対応するプログラムが、前記キャッシュ手段に記憶されているか否かを判定する判定手段と、前記判定手段により該当するプログラムが記憶されていると判定された場合、当該プログラムを前記実行手段に通知し、該当するプログラムが記憶されていないと判定された場合、前記復号手段で取得されたプログラムを前記実行手段に通知するアクセス制御手段と、を備える。
【発明の効果】
【００１１】
本発明によれば、暗号化プログラムの実行単位となるプロセスを、実行対象のプログラム、物理アドレス及び命令鍵識別子のデータ単位でキャッシュし、実行対象のプロセスに該当するデータがキャッシュされている場合、前記暗号化プログラムの復号を行わず、このキャッシュされたデータを用いてプロセスを実行することが可能であるため、より効率的にプロセスを実行することができる。
【発明を実施するための最良の形態】
【００１２】
以下、添付図面を参照して、本発明にかかるマイクロプロセッサの最良な実施形態を詳細に説明する。なお、以下の各実施形態では、鍵情報管理機能はハードウェアによる実装として説明するが、ユーザによる改変が不可能であるという前提が保証されれば、鍵管理機能がプロセッサ内蔵ＲＯＭに格納されたファームウェアによる実装であってもよい。
【００１３】
はじめに、以下の各実施形態で使用する用語について定義する。「暗号化」は、対称（共通）鍵アルゴリズム、非対称（公開）鍵アルゴリズムの両方を含めて、平文の情報を暗号化することを意味する。同様に「復号」は、対称（共通）鍵アルゴリズム、非対称（公開）鍵アルゴリズムの両方を含めて、暗号化された情報を復号し平文に戻すことを意味する。
【００１４】
「暗号鍵」は、上記暗号化、復号で使われる鍵を暗号化、復号の両方の場合を含んで用いる。また、「共通鍵」は、共通鍵アルゴリズムで暗号化、復号に共通に使われる鍵を意味する。
【００１５】
「暗号化鍵」は、公開鍵アルゴリズムで暗号化に使われる鍵を意味する。また、「復号鍵」は、公開鍵アルゴリズムで復号に使われる鍵を意味する。
【００１６】
以下に説明する各実施形態のマイクロプロセッサ（以下、プロセッサという）は、外部から読み出し不可能な復号鍵（秘密鍵：以下、Ｋｓと表記する）を備える。プロセッサの秘密鍵Ｋｓに対応する暗号化鍵（公開鍵：以下、Ｋｐと表記する）は、公開鍵として公開されている。
【００１７】
「暗号化プログラム」は、命令が、ある一つの共通鍵（以下、Ｋｘと表記する）によって暗号化されたプログラムを意味する。プログラム作成者が暗号化プログラムを作成するとき、プログラムを暗号化する適切な共通鍵Ｋｘを選び、プログラムの命令を暗号化する（ただし、必ずしもプログラムの全体が暗号化されている必要はない）。以下の実施形態で説明するマイクロプロセッサにおいて、プログラムの同一性は共通鍵Ｋｘによって判定する。以下、共通鍵Ｋｘ（Ｋａ，Ｋｂ，…，Ｋｎ）を暗号化プログラムの命令鍵と呼ぶ。また、暗号化プログラムをＥ＿Ｋｘ［命令］と表記する。
【００１８】
また、ターゲットのマイクロプロセッサの公開鍵Ｋｐで命令鍵Ｋｘを暗号化した値（以下、Ｅ＿Ｋｐ［Ｋｘ］と表記する）を配布鍵と呼ぶ。プログラム作成者は、暗号化プログラムと配布鍵をターゲットのシステムに配布する。
【００１９】
以下に説明する各実施形態での暗号アルゴリズムの扱いでは、対称（共通）鍵アルゴリズム、非対称（公開）鍵アルゴリズムの区別は重要だが、対称（共通）鍵アルゴリズム、非対称（公開）鍵アルゴリズムの中での方式、例えば、Ｄｅｓ，Ｒｉａｎｄａｌ，ＲＳＡ，Ｅｌｇａｍａｌなどの暗号方式の違いは重要ではない。したがって、対称（共通）鍵アルゴリズムではＤｅｓ，Ｒｉａｎｄａｌなどが、非対称（公開）鍵アルゴリズムではＲＳＡ，Ｅｌｇａｍａｌなどの何れを用いてもよい。
【００２０】
「プログラム」は、命令と静的データで構成される。なお、暗号化プログラムでは、命令は暗号化されているが、静的データは暗号化されていても平文でもどちらでもよい。
【００２１】
「プロセス」とは、プログラムがターゲットシステムのＯＳ（オペレーティングシステム）の管理のマルチタスク環境下で、実行中の、または実行を中断されている状態をあらわす。プロセスは、命令（プログラム）、データ、実行状態（コンテキスト）の３要素からなる。プロセスの実行は、プログラム中の命令が（暗号化プログラムの場合は復号されて）プロセッサに読み込まれ、実行されることで行われる。プロセスの実行は、割り込みなどの原因で中断されることがある。ＯＳはそのときプロセスがプロセッサ内部に保持する状態、一般にはレジスタ情報を実行状態（コンテキスト情報とも呼ばれる）としてプロセッサ外部のメモリに保存する。割り込みサービスや別のプログラムを実行した後、プロセスの実行を再開するときはメモリに保存した実行状態を再度プロセッサ内部に読み込んで実行を再開する。また、プロセスを識別するためのプロセス識別子を有し、プロセス識別子毎にプロセスの実行制御を行う。
【００２２】
一つのプログラムから複数のプロセスが作られ、同時に実行されることがある。暗号化プログラムの場合、これらの共通の起源をもつプロセスの間で復号された命令を共有することが可能である。
【００２３】
また、以下の各実施形態ではキャッシュメモリ上におけるプロセスの秘密情報のアクセス制御をキャッシュタグによって行うが、このアクセス制御機構と、従来から存在する仮想記憶機構におけるプロセスのアクセス制御機構（ＵＮＩＸ（登録商標）カーネル）とは併用が可能である。なお、後者はターゲットシステムのＯＳのシステム管理意図を正しく実現するために用いられる。具体的には、あるプロセス１のメモリアクセスを、他のプロセスから隔離し、互いの動作の干渉を防ぐなどを目的とするものである。
【００２４】
また「ＯＳ」は、プロセッサが属するコンピュータシステム全体を管理するソフトウェアであって、プロセッサとの協働により暗号化プログラムを実行し、当該プロセッサでの実行状態を監視する。なお、ＯＳの機能を実現するハードウェアの主体は、以下の実施形態で説明するプロセッサであってもよいし、他の制御装置であってもよい。
【００２５】
［第１の実施形態］
まず、第１の実施形態にかかるプロセッサについて説明する。本実施形態のプロセッサは、命令鍵をチップ内に固定的に保持し、この命令鍵を用いて暗号化プログラムの復号を行う構成を有している。
【００２６】
図１は、第１の実施形態に係るプロセッサ１００の構成を示した図である。同図に示したように、プロセッサ１００は、プロセッサコア１１と、命令保持部１２と、命令復号処理部１３と、鍵管理部１４と、外部バスインタフェース１５と、内部データバス１６とを備えている。
【００２７】
プロセッサコア１１は、ＯＳとの協働により演算処理を行うプロセッサ１００の中核部分であって、命令保持部１２、鍵管理部１４に接続されている。
【００２８】
また、プロセッサコア１１は、計算の結果やデータを記憶する汎用レジスタとしてのレジスタ１１１と、命令保持部１２から読み込んだ命令を記憶する制御レジスタ１１２と、現プロセス識別子格納レジスタ１１３とを有する。ここで、現プロセス識別子格納レジスタ１１３は、現時点で実行対象となっているプロセスのプロセス識別子を記憶する。
【００２９】
命令保持部１２は、データを一時的に保持するキャッシュメモリ等を有し、プロセッサコア１１と命令復号処理部１３と鍵管理部１４とに接続されている。また、命令復号処理部１３は、暗号化された命令（暗号化プログラム）を復号する機能部である。以下、命令保持部１２及び命令復号処理部１３の詳細構成について説明する。
【００３０】
図２は、命令保持部１２及び命令復号処理部１３の詳細構成を示した図である。同図に示したように、命令保持部１２は、プログラムの実行に必要な命令を記憶するための命令キャッシュ１２１と、命令キャッシュ１２１への読み書きを制御するキャッシュコントローラ１２２とを有している。
【００３１】
図３は、命令キャッシュ１２１に格納されるデータ構造を模式的に示した図である。図３に示したように、命令キャッシュ１２１の記憶領域を構成する各キャッシュラインは、平文のプログラム（命令）が格納されるデータタグＴ１と、当該命令の外部メモリでの格納先を示す物理アドレスが格納されるアドレスタグＴ２と、当該キャッシュラインの有効／無効を示すフラグ情報が格納されるフラグタグＴ３と、データタグＴ１に格納された命令を復号する命令鍵の命令鍵識別子が格納される命令鍵識別子タグＴ４とから構成される。各キャッシュラインは一のプロセスに対応し、各キャッシュラインに登録された命令の実行単位となっている。
【００３２】
なお、フラグタグＴ３の値は、プロセスの実行状態に応じてＯＳ又はプロセッサコア１１が制御することとしてもよく、例えば、所定時間アクセスが行われないキャッシュラインについて、有効から無効に切り替えることとしてもよい。以下、各キャッシュラインに登録されたデータをプロセス情報という。
【００３３】
キャッシュコントローラ１２２は、命令キャッシュ１２１へのプロセス情報の登録を制御する。また、キャッシュコントローラ１２２は、命令キャッシュ１２１に登録されたプロセス情報のキャッシュヒットを判定するためのアクセス制御部１２２１を有している。
【００３４】
具体的に、アクセス制御部１２２１は、各プロセス情報のアドレスタグＴ２及び命令鍵識別子タグＴ４に格納された各値と、実行対象となった命令の外部メモリ上での物理アドレス（命令アドレス）及び命令鍵識別子の各値とを比較し、これら各値が一致した場合にキャッシュヒットと判定する。
【００３５】
一般に、キャッシュのヒット／ミスの判定は物理アドレスに対して行われるが、プログラムやデータが配置される物理アドレスでは、プロセスの実行中にＯＳの資源管理操作によって、そのアドレスが変更されることがある。具体的には、一度割り当てられた実メモリが２次記憶に一時退避され、再び実メモリに読み込まれる時、そのアドレスが同一とは限らない。そのため、アクセス制御部１２２１では、命令鍵識別子と物理アドレスとの組を用いることで、命令キャッシュ１２１のキャッシュヒットをより正確に判定する。
【００３６】
なお、キャッシュがヒットしなかった場合、アクセス制御部１２２１は、命令復号処理部１３に配置先アドレス（ＰｒｇＡｄ＃１）と、命令アドレス（ＩｘＡｄ）と、命令鍵識別子（＃Ａ）とを命令復号処理部１３に通知することで、該当する命令の取得を命令復号処理部１３に依頼する。なお、詳細については後述する。
【００３７】
図２に戻り、命令復号処理部１３は、アドレス変換部１３１と、命令復号部１３２とを有している。
【００３８】
アドレス変換部１３１は、各プロセスで実行される暗号化プログラムの夫々に割り当てられた外部メモリでの相対アドレス（仮想アドレス）を算出する機能部である。具体的に、アドレス変換部１３１は、アクセス制御部１２２１から通知される配置先アドレスと、命令アドレスとの差分を算出することで相対アドレス（ＲＡｄ＃１）を導出する。ここで、配置先アドレスは、ＯＳから通知される情報であって、各プロセス識別子のプロセスで実行する命令に割り当てられた暗号化プログラムの先頭アドレスを示し、相対アドレスを導出するための基準となる。なお、相対アドレスの導出方法は、特開２００３−１０８４４２号公報に開示された技術を用いるものとする。
【００３９】
命令復号部１３２は、アドレス変換部１３１で算出された相対アドレスに基づき、外部メモリから暗号化された命令、即ち、暗号化プログラム（Ｅ＿Ｋａ［Ｉｘ］）を読み出すと、アクセス制御部１２２１から通知される命令鍵識別子に対応した命令鍵Ｋａを用いて復号し、この復号結果（命令Ｉｘ）をキャッシュコントローラ１２２に通知する。
【００４０】
キャッシュコントローラ１２２では、命令復号部１３２により復号された命令Ｉｘを、命令キャッシュ１２１のキャッシュラインのデータタグＴ１に格納するとともに、当該キャッシュラインについての他のタグに該当するデータを格納する。
【００４１】
図１に戻り、鍵管理部１４は、プログラムの実行に必要な命令鍵を管理する機能部である。ここで、図４を参照して、鍵管理部１４の詳細構成について説明する。
【００４２】
図４は、鍵管理部１４の構成を説明するための図である。同図に示したように、鍵管理部１４は、鍵管理機能部１４１と、命令鍵管理部１４２と、プロセス識別子管理部１４３とを有している。
【００４３】
鍵管理機能部１４１は、プログラムの実行に必要な命令鍵を登録するための各種処理を行う機能部であり、命令鍵管理部１４２及びプロセス識別子管理部１４３が管理する各テーブルの書き込みや読み込みを制御する。なお、各テーブルは直接参照できるよう管理されているものとする。
【００４４】
命令鍵管理部１４２は、命令鍵を管理するための命令鍵テーブル１４２１を有し、この命令鍵テーブル１４２１へのアクセス内容に応じて、命令鍵テーブル１４２１を操作する。
【００４５】
図５は、命令鍵テーブル１４２１の一例を示した図である。同図に示したように、命令鍵テーブル１４２１は、各命令鍵を識別するための命令鍵識別子と、暗号化プログラムを復号するための命令鍵と、プロセス識別子に依存しない他の項目から構成される共通付加情報とを関連付けて記憶している。ここで共通付加情報としては、例えば、デバッグ可能か否かを示したデバッグフラグ等が挙げられる。
【００４６】
プロセス識別子管理部１４３は、プロセス識別子を管理するためのプロセス識別子テーブル１４３１を有し、このプロセス識別子テーブル１４３１へのアクセス内容に応じて、プロセス識別子テーブル１４３１を操作する。
【００４７】
図６は、プロセス識別子テーブル１４３１の一例を示した図である。同図に示したように、プロセス識別子テーブル１４３１は、プロセスを識別するプロセス識別子と、命令鍵テーブル１４２１の命令鍵識別子とリンクする命令鍵識別子と、プロセス識別子に依存したプロセス固有付加情報とを関連付けて記憶している。
【００４８】
ここで、プロセス固有付加情報とは、各プロセス識別子が表すプロセスに固有の情報であって、プロセスの状態を表すプロセス状態情報や、各プロセスで実行対象となる暗号化プログラムに割り当てられた配置先アドレス、データを保護するためのデータ鍵、コンテキストを保護するためのコンテキスト鍵等が挙げられる。
【００４９】
なお、プロセス状態情報は、ＯＳが有するプロセス管理機構により管理される情報であって、プロセスの状態に応じて、後述する初期化状態を表すＩＮＩＴや、実行状態を表すＲＵＮ、待ち状態を表すＳＵＳＰＥＮＤ等が登録される。また、データ鍵及びコンテキスト鍵は、プログラムを構成する３要素（命令、データ、コンテキスト（実行状態））のうち、暗号化されたデータとコンテキストを夫々復号するための鍵であり、特開２００２−２３２４１７号公報に開示されたものと同様である。
【００５０】
図５、図６に示したように、本実施形態では、命令鍵識別子をインデックスにして、命令鍵テーブル１４２１の命令鍵と、プロセス識別子テーブル１４３１のプロセス識別子とを対応付けて保持するとともに、各々のテーブルで必要な情報を保持している。
【００５１】
図１に戻り、外部バスインタフェース１５は、図示しない外部メモリとの間でデータの授受を行うインタフェースであり、内部データバス１６を介して命令復号処理部１３及び鍵管理部１４に接続されている。
【００５２】
以下、プロセッサ１００における、暗号化プログラムの実行に係る一連の手順（鍵登録処理、プロセス実行処理、鍵削除処理）について説明する。なお、以下に説明する各処理の前提として、命令鍵テーブル１４２１には、命令鍵が有限個登録されている状態であるとし、プログラム（命令Ｉｘ）を暗号化するユーザはこの命令鍵のうち一つ（命令鍵Ｋａ）を用いて暗号化したとする。また、暗号化プログラムをＥ＿Ｋａ［Ｉｘ］と表記し、この暗号化プログラムＥ＿Ｋａ［Ｉｘ］が、相対アドレスＲＡｄ＃１が示す外部メモリ上のメモリ空間に配置されているとする。
【００５３】
［鍵登録処理］
命令鍵により暗号化が行われた暗号化プログラム（命令）を実行するためには、この暗号化プログラムを復号するための初期化作業が必要である。ＯＳは、この初期化作業として鍵登録命令“Ｒｅｇｉｓｔｅｒ”を発行する。プロセッサ１００では、この鍵登録命令“Ｒｅｇｉｓｔｅｒ”の発行に応じ鍵登録処理を実行する。
【００５４】
以下、図７、図８を参照して鍵登録処理の手順について説明する。ここで、図７は、鍵登録処理の手順を示したシーケンス図である。また、図８は鍵登録処理を説明するための図であって、プロセッサ１００の状態の一例を示している。以下では、図８に示したプロセッサ１００の状態に基づいて説明を行う。
【００５５】
ＯＳから鍵登録命令“Ｒｅｇｉｓｔｅｒ”が発行されると、プロセッサコア１１は、プロセス識別子を初期化するため、制御対象のプロセス識別子となる制御対象プロセス識別子＃１と、この制御対象プロセス識別子＃１に割り当てられた暗号化プログラムＥ＿Ｋａ［Ｉｘ］の配置先アドレスＰｒｇＡｄ＃１と、命令鍵Ｋａの命令鍵識別子＃Ａとを、鍵管理機能部１４１に通知する（ステップＳ１１）。なお、これらの情報は、鍵登録命令“Ｒｅｇｉｓｔｅｒ”のパラメータとして、ＯＳからプロセッサコア１１に通知されるものとする。
【００５６】
鍵管理機能部１４１では、プロセッサコア１１から制御対象プロセス識別子＃１と、配置先アドレスＰｒｇＡｄ＃１と、命令鍵識別子＃Ａとを受け付けると、これらの情報をプロセス識別子テーブル１４３１に登録するため、プロセス識別子管理部１４３にアクセスする（ステップＳ１２）。
【００５７】
プロセス識別子管理部１４３では、鍵管理機能部１４１からのアクセスに応じ、プロセス識別子テーブル１４３１のうち、制御対象プロセス識別子＃１に対応する列の命令鍵識別子項目に命令鍵識別子＃Ａを登録する（ステップＳ１３）。
【００５８】
また、プロセス識別子管理部１４３は、プロセス識別子＃１のプロセス固有情報として、制御対象プロセス識別子＃１に対応する列のプロセス状態項目に初期化を意味するＩＮＩＴを登録するとともに、配置先アドレス項目にＰｒｇＡｄ＃１を登録する（ステップＳ１４）。なお、プロセス識別子＃１について他の情報が存在する場合には、このステップＳ１４にて登録を行うものとする。
【００５９】
プロセス識別子テーブル１４３１への登録が終了すると、プロセス識別子管理部１４３は、処理が終了した旨を鍵管理機能部１４１に通知する（ステップＳ１５）。また、鍵管理機能部１４１は、プロセス識別子管理部１４３から終了の通知を受けると、全ての処理が終了した旨をプロセッサコア１１に通知し（ステップＳ１６）、本処理を終了する。
【００６０】
なお、本実施形態では、鍵登録処理の終了に伴い、プロセッサコア１１が、ステップＳ１１で鍵管理機能部１４１に通知した制御対象プロセス識別子を、現プロセス識別子格納レジスタ１１３に格納するものとするが、これに限らず、例えば、ステップＳ１１の直後等、異なるタイミングで格納することとしてもよい。
【００６１】
［プロセス実行処理］
次に、上記鍵登録処理で初期化されたプロセス識別子のプロセスが実行される際の処理（プロセス実行処理）について説明する。ＯＳは、プロセス識別子の初期化が行われた後、このプロセス識別子のプロセスを実行するためにプロセス実行命令“Ｓｔａｒｔ”を発行する。プロセッサ１００では、このプロセス実行命令“Ｓｔａｒｔ”の発行に応じて、プロセス実行処理を開始する。
【００６２】
以下、図２、図９、図１０を参照して、プロセス実行処理について説明する。ここで、図９は、プロセス実行処理の手順を示したシーケンス図である。また、図１０は、プロセス実行処理を説明するための図であって、プロセッサ１００の状態の一例を示している。以下では、図１０に示したプロセッサ１００の状態に基づいて説明を行う。
【００６３】
まず、プロセッサコア１１は、プロセス実行命令“Ｓｔａｒｔ”の発行に応じ、現プロセス識別子格納レジスタ１１３に保持された現プロセス識別子＃１と、この現プロセス識別子＃１で実行対象となる暗号化プログラムが格納された外部メモリ上での物理アドレスを表す命令アドレスＩｘＡｄとを、命令保持部１２（アクセス制御部１２２１）に通知する（ステップＳ２１）。
【００６４】
アクセス制御部１２２１では、プロセッサコア１１から現プロセス識別子＃１と、命令アドレスＩｘＡｄとを受け付けると、プロセス識別子管理部１４３内のプロセス識別子テーブル１４３１を参照し、現プロセス識別子＃１に対応する命令鍵識別子＃Ａを読み出す（ステップＳ２２）。
【００６５】
次いで、アクセス制御部１２２１は、命令鍵識別子＃Ａ及び命令アドレスＩｘＡｄの各値と、命令キャッシュ１２１の各キャッシュラインに保持されたプロセス情報（アドレスタグＴ２、命令鍵識別子タグＴ４）の各値とを比較し、キャッシュがヒットするか否かを判定する（ステップＳ２３）。ここで、キャッシュヒットと判定された場合（ステップＳ２３；Ｙｅｓ）、ステップＳ３２の処理に直ちに移行する。
【００６６】
一方、ステップＳ２３において、キャッシュミスと判定した場合（ステップＳ２３；Ｎｏ）、アクセス制御部１２２１は、プロセス識別子テーブル１４３１から現プロセス識別子＃１に対応する配置先アドレスＰｒｇＡｄ＃１を読み出し（ステップＳ２４）、命令鍵識別子＃Ａと命令アドレスＩｘＡｄとともに命令復号処理部１３に通知する（ステップＳ２５）。
【００６７】
命令復号処理部１３（アドレス変換部１３１）は、アクセス制御部１２２１から配置先アドレスＰｒｇＡｄ＃１と、命令鍵識別子＃Ａと、命令アドレスＩｘＡｄとを受け付けると、この配置先アドレスＰｒｇＡｄ＃１と命令アドレスＩｘＡｄとの差分を算出することで、相対アドレスＲＡｄ＃１を取得する（ステップＳ２６）。
【００６８】
続いて、命令復号部１３２は、ステップＳ２６で算出された相対アドレスＲＡｄ＃１に基づいて、外部メモリから暗号化プログラムＥ＿Ｋａ［Ｉｘ］を読み出す（ステップＳ２７）。次いで、命令復号部１３２は、命令鍵識別子＃Ａに対応する命令鍵Ｋａを命令鍵テーブル１４２１から読み出すと（ステップＳ２８）、この命令鍵Ｋａを用いて暗号化プログラムＥ＿Ｋａ［Ｉｘ］を復号する（ステップＳ２９）。そして、命令復号部１３２は、ステップＳ２９の復号結果、即ち、平文の命令Ｉｘを命令保持部１２のキャッシュコントローラ１２２に通知する（ステップＳ３０）。
【００６９】
キャッシュコントローラ１２２では、命令復号部１３２から受け付けた命令Ｉｘを、命令キャッシュ１２１のデータタグＴ１に書き込むとともに、命令アドレスＩｘＡｄと命令鍵識別子＃Ａとを、アドレスタグＴ２、命令鍵識別子タグＴ４の夫々に書き込む（ステップＳ３１）。なお、フラグタグＴ３については、有効と設定されるものとする。
【００７０】
続いて、命令保持部１２は、ステップＳ２３でキャッシュヒットした命令Ｉｘ又はステップＳ３１で書き込んだ命令Ｉｘをプロセッサコア１１に通知し（ステップＳ３２）、本処理を終了する。本処理により通知された命令Ｉｘに基づき、プロセッサコア１１では、現プロセス識別子＃１のプロセスが実行される。
【００７１】
［鍵削除処理］
次に、図１１、図１２を参照して、命令鍵の削除に係る処理（鍵削除処理）について説明する。ここで、図１１は鍵削除処理の手順を示したシーケンス図である。また、図１２は、鍵削除処理を説明するための図であって、プロセッサ１００の状態の一例を示している。以下では、図１２に示したプロセッサ１００の状態に基づいて説明を行う。
【００７２】
プロセスの完了等に伴いプロセスの削除を行う際、ＯＳは削除対象のプロセス識別子（＃１）をパラメータとしたプロセス削除命令“Ｄｅｌｅｔｅ”を発行する。プロセッサコア１１は、プロセス削除命令“Ｄｅｌｅｔｅ”の発行に応じ、削除対象プロセス識別子＃１を鍵管理機能部１４１に通知する（ステップＳ４１）。
【００７３】
鍵管理機能部１４１は、プロセッサコア１１から削除対象プロセス識別子＃１を受け付けると、この削除対象プロセス識別子＃１に関する情報をプロセス識別子テーブル１４３１から削除するため、プロセス識別子管理部１４３にアクセスする（ステップＳ４２）。
【００７４】
プロセス識別子管理部１４３では、鍵管理機能部１４１からのアクセスに応じ、プロセス識別子テーブル１４３１のうち、削除対象プロセス識別子＃１に対応する列に登録された情報を削除すると（ステップＳ４３）、この処理が終了した旨を鍵管理機能部１４１に通知する（ステップＳ４４）。
【００７５】
鍵管理機能部１４１は、プロセス識別子管理部１４３から終了の通知を受けると、全ての処理が終了した旨をプロセッサコア１１に通知し（ステップＳ４５）、本処理を終了する。
【００７６】
以上のように、本実施形態のプロセッサ１００によれば、暗号化プログラムの実行単位となるプロセスを、実行対象のプログラム（命令）、物理アドレス及び命令鍵識別子のデータ単位でキャッシュし、実行対象のプロセスに該当するデータがキャッシュされている場合、前記暗号化プログラムの復号を行わず、このキャッシュされたデータを用いてプロセスを実行することが可能であるため、より効率的にプロセスを実行することができる。
【００７７】
また、命令鍵識別子をタグとして用いることで、同じプログラムが別プロセスとして実行されていてもキャッシュヒットするため、プログラムの実行にかかる時間的コストを削減し、より高速なシステムを実現できる。さらに、共有ライブラリを用いた場合でも、配置先アドレスをプロセス毎に管理しているため、従来どおりの復号機能を実現できる。これにより、安全性と利便性のバランスの取れたシステムを実現することが可能となる。
【００７８】
［第２の実施形態］
第２の実施形態では、プロセッサ内に秘密鍵を保持するとともに、当該秘密鍵に対応する公開鍵で命令鍵を暗号化した配布鍵を、外部メモリ上に保持する構成について説明する。なお、第１の実施形態と同様の構成要素については、同一の符号を付与し説明を省略する。
【００７９】
図１３は、第２の実施形態に係るプロセッサ２００の構成を示した図である。同図に示したように、プロセッサ２００は、プロセッサコア２１と、命令保持部１２と、命令復号処理部１３と、鍵管理部２２と、外部バスインタフェース１５と、内部データバス１６とを備えている。
【００８０】
ここで、プロセッサコア２１は、上述したプロセッサコア１１と同様、ＯＳとの協働により演算処理を行うプロセッサ２００の中核部分であって、命令保持部１２、鍵管理部２２に接続されている。なお、プロセッサコア２１の動作については後述する。
【００８１】
図１４は、鍵管理部２２の構成を示した図である。同図に示したように、鍵管理部２２は、鍵管理機能部２２１と、命令鍵管理部２２２と、プロセス識別子管理部２２３とを有している。
【００８２】
鍵管理機能部２２１は、鍵管理機能部１４１と同様、プログラムの実行に必要な命令鍵を登録するための各種処理を行う機能部であり、命令鍵管理部２２２及びプロセス識別子管理部２２３が管理する各テーブルの書き込みや読み込みを制御する。なお、各テーブルは直接参照できるよう管理されているものとする。
【００８３】
命令鍵管理部２２２は、配布鍵復号部２２２１と、命令鍵を管理する命令鍵テーブル２２２２とを有している。ここで、配布鍵復号部２２２１は、外部メモリから読み出した配布鍵を復号する機能部である。この復号は、公開鍵アルゴリズムでの復号のため、複数命令サイクルの非常に長いクロック数を必要とする。なお、動作の詳細については後述する。
【００８４】
図１５は、命令鍵テーブル２２２２の一例を示した図である。同図に示したように、命令鍵テーブル２２２２は、上述した命令鍵識別子と、命令鍵と、共通付加情報とに加え、当該命令鍵識別子を用いるプロセス識別子数を表す参照カウンタを関連付けて記憶する。なお、命令鍵テーブル２２２２が記憶する情報は図１５の例に限定されないものとする。
【００８５】
図１４に戻り、プロセス識別子管理部２２３は、プロセス識別子管理部１４３と同様、プロセス識別子を管理するためのプロセス識別子テーブル１４３１を有し、このプロセス識別子テーブル１４３１へのアクセス内容に応じて、プロセス識別子テーブル１４３１を操作する。
【００８６】
以下、プロセッサ２００における、暗号化プログラム実行のための一連の手順（鍵登録処理、プロセス実行処理、鍵削除処理）について説明する。なお、以下に説明する処理の前提として、命令鍵Ｋａによって暗号化された命令Ｉｘ、即ち、暗号化プログラムＥ＿Ｋａ［Ｉｘ］と、プロセッサ２００内の秘密鍵Ｋｓと対となる公開鍵Ｋｐによって暗号化された配布鍵Ｅ＿Ｋｐ［Ｋａ］とが、外部メモリに記憶されているとする。
【００８７】
［鍵登録処理］
上述したように、プロセッサ２００は、鍵登録処理において、新規プロセスの生成にあたりプロセス識別子テーブル１４３１に新たなプロセス識別子の登録を行うが、ＯＳ側では命令鍵Ｋａが既に別プロセスとして登録されているか否かを把握することが可能である。これは、命令鍵Ｋａが暗号化プログラムＥ＿Ｋａ［Ｉｘ］と１対１に対応するためであり、暗号化プログラムＥ＿Ｋａ［Ｉｘ］の実行状態を把握することで、命令鍵Ｋａに対応する命令鍵識別子がプロセス識別子テーブル１４３１に既に登録されているか否かを判断できる。例えば、暗号化プログラムＥ＿Ｋａ［Ｉｘ］が、プロセス識別子＃２の別プロセスで実行されている場合、プロセス識別子テーブル１４３１には命令鍵Ｋａを識別する命令鍵識別子が登録済みの状態である。
【００８８】
プロセス識別子テーブル１４３１に、新規プロセスに係る命令鍵識別子と同じ命令鍵識別子が登録されていない場合、すなわち暗号化プログラムＥ＿Ｋａ［Ｉｘ］を実行するプロセスが存在していない場合、ＯＳは鍵登録命令“Ｒｅｇｉｓｔｅｒ”を発行する。
【００８９】
また、プロセス識別子テーブル１４３１に、新規プロセスに係る命令鍵識別子と同じ命令鍵識別子が登録されている場合、ＯＳは命令鍵の複製を指示する命令鍵コピー命令“ＫｅｙＣｏｐｙ”を発行することで、別プロセスについて登録された命令鍵識別子を、新たなプロセスの命令鍵識別子とすることを指示する。
【００９０】
本実施形態では、上記のＫｅｙＣｏｐｙを用い、既に登録済みの命令鍵識別子情報を有効活用することで、配布鍵の復号処理を抑制する。例えば、配布鍵の復号に関し、公開鍵暗号方式の代表例の一つであるＲＳＡ暗号を用いる場合、復号にかかるコストは共通鍵暗号方式の代表例の一つであるＡＥＳ暗号に比べて非常に大きく、このオーバヘッドのシステム全体への影響も少なくない。これにより、復号処理が不必要に行われてしまうことを防止できるため、この復号処理にかかるオーバヘッドを削減することができる。
【００９１】
上述したように、本実施形態では、鍵登録処理について鍵登録命令“Ｒｅｇｉｓｔｅｒ”による登録方法と、命令鍵コピー命令“ＫｅｙＣｏｐｙ”による登録方法とが存在する。以下、上記２つの登録方法を用いた鍵登録処理について詳細に説明する。
【００９２】
［第１鍵登録処理：鍵登録命令］
まず、図１６、図１７を参照し、鍵登録命令“Ｒｅｇｉｓｔｅｒ”がＯＳから発行された際の鍵登録処理（第１鍵登録処理）について説明する。ここで、図１６は、第１鍵登録処理の手順を示したシーケンス図である。また、図１７は、第１鍵登録処理を説明するための図であって、プロセッサ２００の状態の一例を示している。以下では、図１７に示したプロセッサ２００の状態に基づいて説明を行う。
【００９３】
ＯＳから鍵登録命令“Ｒｅｇｉｓｔｅｒ”が発行されると、プロセッサコア２１は、プロセス識別子を初期化するため、制御対象のプロセス識別子となる制御対象プロセス識別子＃１と、配布鍵アドレスＫｅｙＡｄＰｒｇ１と、配置先アドレスＰｒｇＡｄ＃１とを鍵管理機能部２２１に通知する（ステップＳ５１）。なお、これらの情報は、鍵登録命令“Ｒｅｇｉｓｔｅｒ”のパラメータとして、ＯＳからプロセッサコア２１に通知されるものとする。
【００９４】
鍵管理機能部２２１は、プロセッサコア２１から制御対象プロセス識別子＃１と、配布鍵アドレスＫｅｙＡｄＰｒｇ１と、配置先アドレスＰｒｇＡｄ＃１とを受け付けると、命令鍵管理部２２２内の配布鍵復号部２２２１に、制御対象プロセス識別子＃１と、配布鍵アドレスＫｅｙＡｄＰｒｇ１とを通知する（ステップＳ５２）。
【００９５】
配布鍵復号部２２２１は、鍵管理機能部２２１から通知された配布鍵アドレスＫｅｙＡｄＰｒｇ１に基づき、外部メモリから配布鍵Ｅ＿Ｋｐ［Ｋａ］を読み出すと（ステップＳ５３）、プロセッサ内部にある秘密鍵（秘密鍵Ｋｓ）を用いて配布鍵Ｅ＿Ｋｐ［Ｋａ］を復号する（ステップＳ５４）。
【００９６】
次いで、配布鍵復号部２２２１は、命令鍵テーブル２２２２中の空列（命令鍵識別子＃Ａの列とする）をシーケンシャルに探索すると、この空列の命令鍵部分に、ステップＳ５４での復号結果、即ち命令鍵Ｋａを登録する（ステップＳ５５）。
【００９７】
続いて、配布鍵復号部２２２１は、デバッグ可能フラグといった命令鍵共通の情報を共通付加情報として登録し、さらに、命令鍵識別子＃Ａの参照カウンタを１に設定する（ステップＳ５６）。ここまでの処理を終了すると、命令鍵管理部２２２は、命令鍵Ｋａの登録先となった列の命令鍵識別子＃Ａを鍵管理機能部２２１に通知する（ステップＳ５７）。
【００９８】
鍵管理機能部２２１は、ステップＳ５２で受け付けた制御対象プロセス識別子＃１、配置先アドレスＰｒｇＡｄ＃１とともに、ステップＳ５７で通知された命令鍵識別子＃Ａを、プロセス識別子テーブル１４３１に登録するためプロセス識別子管理部２２３にアクセスする（ステップＳ５８）。
【００９９】
プロセス識別子管理部２２３は、鍵管理機能部２２１からのアクセスに応じ、プロセス識別子テーブル１４３１のプロセス識別子＃１に対応する列の命令鍵識別子項目に命令鍵識別子＃Ａを登録する（ステップＳ５９）。また、プロセス識別子管理部２２３は、プロセス識別子＃１のプロセス固有情報として、プロセス識別子＃１の列のプロセス状態情報項目に初期化を意味するＩＮＩＴを登録するとともに、配置先アドレス項目に配置先アドレスＰｒｇＡｄ＃１を登録する（ステップＳ６０）。なお、プロセス識別子＃１について他の情報が存在する場合には、ステップＳ６０にて登録を行うものとする。
【０１００】
プロセス識別子テーブル１４３１への登録が終了すると、プロセス識別子管理部２２３は、処理が終了した旨を鍵管理機能部２２１に通知する（ステップＳ６１）。また、鍵管理機能部２２１は、プロセス識別子管理部２２３から終了の通知を受けると、全ての処理が終了した旨をプロセッサコア２１に通知し（ステップＳ６２）、本処理を終了する。
【０１０１】
なお、本実施形態では、第１鍵登録処理の終了に伴い、プロセッサコア２１が、ステップＳ５１で鍵管理機能部２２１に通知した制御対象プロセス識別子を、現プロセス識別子格納レジスタ１１３に格納するものとするが、これに限らず、例えば、ステップＳ５１の直後等、異なるタイミングで格納することとしてもよい。
【０１０２】
[第２鍵登録処理：命令鍵コピー命令]
次に、図１８、図１９を参照し、命令鍵コピー命令“ＫｅｙＣｏｐｙ”がＯＳから発行された際の鍵登録処理（第２鍵登録処理）について説明する。ここで、図１８は、第２鍵登録処理の手順を示したシーケンス図である。また、図１９は、第２鍵登録処理を説明するための図であって、プロセッサ２００の状態の一例を示している。以下では、図１９に示したプロセッサ２００の状態に基づいて説明を行う。
【０１０３】
ここで、鍵登録を行おうとしたプロセス識別子（＃１）の鍵と、プロセス識別子テーブル１４３１に既に登録された鍵とが同一であるとき、ＯＳから命令鍵コピー命令“ＫｅｙＣｏｐｙ”を発行する。命令鍵コピー命令“ＫｅｙＣｏｐｙ”が発行されると、プロセッサコア２１は、コピー元となるコピー元プロセス識別子＃２と、コピー先となるコピー先プロセス識別子＃１と、コピー先プロセス識別子についての配置先アドレスＰｒｇＡｄ＃１とを、鍵管理機能部２２１に通知する（ステップＳ７１）。なお、これらの情報は、命令鍵コピー命令“ＫｅｙＣｏｐｙ”のパラメータとして、ＯＳからプロセッサコア２１に通知されるものとする。
【０１０４】
鍵管理機能部２２１は、プロセッサコア２１からプロセス識別子＃２と、プロセス識別子＃１と、配置先アドレスＰｒｇＡｄ＃１とを受け付けると、これらの情報をプロセス識別子テーブル１４３１に登録するため、プロセス識別子管理部２２３にアクセスする（ステップＳ７２）。
【０１０５】
プロセス識別子管理部２２３では、鍵管理機能部２２１からのアクセスに応じ、プロセス識別子テーブル１４３１のうち、コピー元プロセス識別子＃２に対応する列の命令鍵識別子項目に登録された命令鍵識別子＃Ａを、コピー先プロセス識別子＃１に対応する列の命令鍵識別子項目にコピーする（ステップＳ７３）。
【０１０６】
また、プロセス識別子管理部２２３は、プロセス識別子＃１のプロセス固有情報として、プロセス識別子＃１に対応する列のプロセス状態情報項目に初期化を意味するＩＮＩＴを登録するとともに、配置先アドレス項目に配置先アドレスＰｒｇＡｄ＃１を登録する（ステップＳ７４）。次いで、鍵管理機能部２２１は、ステップＳ７３でコピーを行った命令鍵識別子＃Ａを鍵管理機能部２２１に通知すると（ステップＳ７５）、鍵管理機能部２２１はこの命令鍵識別子＃Ａについての参照カウンタを増加させるため、命令鍵管理部２２２にアクセスする（ステップＳ７６）。
【０１０７】
命令鍵管理部２２２は、鍵管理機能部２２１からのアクセスに応じ、命令鍵テーブル２２２２を参照すると、命令鍵識別子＃Ａに対応する列の参照カウンタを１増加させる（ステップＳ７７）。また、鍵管理機能部２２１では、プロセッサコア２１に処理が終了した旨を通知し（ステップＳ７８）、本処理を終了する。
【０１０８】
なお、本実施形態では、第２鍵登録処理の終了に伴い、プロセッサコア２１が、ステップＳ７１で鍵管理機能部２２１に通知したコピー先プロセス識別子を現プロセス識別子格納レジスタ１１３に格納するものとするが、これに限らず、例えば、ステップＳ７１の直後等、異なるタイミングで格納することとしてもよい。
【０１０９】
［プロセス実行処理］
プロセス識別子の初期化が行われた後、ＯＳは、プロセスを実行するためプロセス実行命令“Ｓｔａｒｔ”を発行する。例えば、暗号化プログラムをプロセス識別子＃１で実行するとき、プロセッサ２００では、外部メモリに記憶された暗号化プログラムを命令保持部１２に読み込む際に、現プロセス識別子＃１に対応した命令鍵Ｋａを用いて暗号化プログラムを復号し、この復号結果となる平文の命令を命令保持部１２に保持する。
【０１１０】
そして、プロセッサコア２１は、命令保持部１２に保持した命令を読み出し実行することで、プロセス識別子＃１のプロセスを実行する。なお、プロセッサ２００でのプロセス実行に係る処理は、第１の実施形態のプロセス実行処理と同様であるため説明を省略する。
【０１１１】
［鍵削除処理］
次に、図２０、図２１を参照して、鍵削除処理について説明する。ここで、図２０は、鍵削除処理の手順を示したシーケンス図である。また、図２１は、鍵削除処理を説明するための図であって、プロセッサ２００の状態の一例を示している。以下では、図２１に示したプロセッサ２００の状態に基づいて説明を行う。
【０１１２】
プロセスの完了等に伴いプロセスの削除を行う際、ＯＳは削除対象のプロセス識別子（＃１）をパラメータとしたプロセス削除命令“Ｄｅｌｅｔｅ”を発行する。プロセッサコア２１は、プロセス削除命令“Ｄｅｌｅｔｅ”の発行に応じ、削除対象のプロセス識別子＃１を削除対象プロセス識別子＃１として鍵管理機能部２２１に通知する（ステップＳ８１）。
【０１１３】
鍵管理機能部２２１は、プロセッサコア２１から削除対象プロセス識別子＃１を受け付けると、この削除対象プロセス識別子＃１についての情報をプロセス識別子テーブル１４３１から削除するため、プロセス識別子管理部２２３にアクセスする（ステップＳ８２）。
【０１１４】
プロセス識別子管理部２２３では、鍵管理機能部２２１からのアクセスに応じ、プロセス識別子テーブル１４３１のち、削除対象プロセス識別子＃１に対応する列に登録された情報を削除すると（ステップＳ８３）、この列に登録されていた命令鍵識別子＃Ａを鍵管理機能部２２１に通知する（ステップＳ８４）。また、鍵管理機能部２２１は、プロセス識別子管理部２２３から通知された命令鍵識別子＃Ａについての参照カウンタを減少させるため、命令鍵管理部２２２にアクセスする（ステップＳ８５）。
【０１１５】
命令鍵管理部２２２では、鍵管理機能部２２１からのアクセスに応じ、命令鍵テーブル２２２２のうち、命令鍵識別子＃Ａに対応する列の参照カウンタを１減少させる（ステップＳ８６）。続いて、命令鍵管理部２２２は、ステップＳ８６の処理において、参照カウンタの値が“０”になったか否かを判定する（ステップＳ８７）。ここで、参照カウンタの値が“０”でないと判定した場合には（ステップＳ８７；Ｎｏ）、ステップＳ９０の処理に直ちに移行する。
【０１１６】
一方、ステップＳ８７において、参照カウンタの値が“０”と判定した場合（ステップＳ８７；Ｙｅｓ）、命令鍵管理部２２２は、命令鍵識別子＃Ａに対応する列に登録された各情報（命令鍵Ｋａ、共有付加情報など）を命令鍵テーブル２２２２から削除する（ステップＳ８８）。続いて、命令鍵管理部２２２は、命令保持部１２の命令キャッシュ１２１に記憶された命令鍵識別子＃Ａに関する情報を削除する（ステップＳ８９）。
【０１１７】
続くステップＳ９０において、命令鍵管理部２２２は、処理が終了した旨を鍵管理機能部２２１に通知する（ステップＳ９０）。また、鍵管理機能部２２１は、命令鍵管理部２２２から処理が終了した旨の通知を受けると、全ての処理が終了した旨をプロセッサコア１１に通知し（ステップＳ９１）、本処理を終了する。
【０１１８】
このように、本実施形態では命令鍵に特化した鍵管理方式を提案することでより効率的なキャッシュアクセスを実現している。一方、従来提案された特開２００２−２３２４１７号公報に記載の技術では、プロセッサ内に復号されたキャッシュラインを外部メモリへのフラッシュなしで複数のプロセスで共有することはできないことを鍵管理方式で解決しており、データと命令とのどちらにも適合可能な鍵管理方式となっている。
【０１１９】
しかしながら、各プロセスで生成されるデータ鍵と比べ、命令鍵はプログラムと１対１に対応しており、同じプログラムにおいて同一の命令鍵が使われるという特性を持っている。本実施形態では、この特性に着目し、鍵登録時に同一のプログラムを実行するプロセスの命令鍵をコピーして登録するという手法をとることで、必要のない鍵の復号処理を省くことを実現している。
【０１２０】
以上のように、本実施形態のプロセッサ２００によれば、暗号化プログラムの実行単位となるプロセスを、実行対象のプログラム（命令）、物理アドレス及び命令鍵識別子のデータ単位でキャッシュし、実行対象のプロセスに該当するデータがキャッシュされている場合、前記暗号化プログラムの復号を行わず、このキャッシュされたデータを用いてプロセスを実行することが可能であるため、より効率的にプロセスを実行することができる。
【０１２１】
また、命令鍵識別子をタグとして用いることで、同じプログラムが別プロセスとして実行されていてもキャッシュヒットするため、プログラムの実行にかかる時間的コストを削減し、より高速なシステムを実現できる。さらに、共有ライブラリを用いた場合でも、配置先アドレスをプロセス毎に管理しているため、従来どおりの復号機能を実現できる。これにより、安全性と利便性のバランスの取れたシステムを実現することが可能となる。
【０１２２】
また、命令鍵登録の第２鍵登録処理として命令鍵コピー命令“ＫｅｙＣｏｐｙ”を発行することで、命令鍵識別子テーブルにおいて命令鍵から命令鍵識別子をサーチするコストを削減することができる。従来提案されていた特開２００２−２３２４１号公報に記載の技術と比較すると、従来では、登録時に鍵値をテーブル検索し、一致するエントリが存在しない場合は新たに値を登録し、一致するエントリが存在する場合に、存在する命令識別子を利用していたが、本実施形態では、命令鍵コピー命令“ＫｅｙＣｏｐｙ”を用いることで、ＯＳ側で同じ鍵のプログラムがすでに登録されているかどうかを判断し、命令鍵テーブルの検索を行わずに命令鍵を登録することができる。そのため、より高速な処理を実現することが可能となる。
【０１２３】
［第３の実施形態］
次に、第３の実施形態について説明する。本実施形態では、第２の実施形態の構成に加え、現プロセス識別子に対応する命令鍵識別子をプロセッサコア内部に保持する構成について説明する。なお、第１、第２の実施形態と同様の構成要素については、同一の符号を付与し説明を省略する。
【０１２４】
図２２は、第３の実施形態に係るプロセッサ３００の構成を示した図である。同図に示したように、プロセッサ３００は、プロセッサコア３１と、命令保持部１２と、命令復号処理部１３と、鍵管理部３２と、外部バスインタフェース１５とを備えている。
【０１２５】
プロセッサコア３１は、上述したレジスタ１１１、制御レジスタ１１２及び現プロセス識別子格納レジスタ１１３に加え、現命令鍵識別子格納レジスタ３１１を備えている。ここで、現命令鍵識別子格納レジスタ３１１は、現時点で実行対象のプロセス（現プロセス識別子）に対応する命令の命令鍵識別子（現命令鍵識別子情報）を格納するための記憶領域である。なお、プロセッサコア３１は、プロセスの切り替えに伴い、現プロセス識別子格納レジスタ１１３の値を変更すると、この変更後の値に応じた命令鍵識別子をプロセス識別子テーブル１４３１から取得し、現命令鍵識別子格納レジスタ３１１に格納するものとする。
【０１２６】
また、鍵管理部３２は、図２３に示したように、鍵管理機能部３２１と、命令鍵管理部３２２と、プロセス識別子管理部３２３とを有している。
【０１２７】
鍵管理機能部３２１は、鍵管理機能部１４１と同様、プログラムの実行に必要な命令鍵を登録するための各種処理を行う機能部であり、命令鍵管理部３２２及びプロセス識別子管理部３２３が管理する各テーブルの書き込みや読み込みを制御する。なお、各テーブルは直接参照できるよう管理されているものとする。
【０１２８】
命令鍵管理部３２２は、配布鍵復号部３２２１と、命令鍵を管理する命令鍵テーブル２２２２とを有している。ここで、配布鍵復号部３２２１は、配布鍵復号部２２２１と同様、外部メモリから読み出した配布鍵を復号する機能部である。
【０１２９】
プロセス識別子管理部３２３は、プロセス識別子を管理するためのプロセス識別子テーブル１４３１を有し、鍵管理機能部３２１からのアクセスに応じてプロセス識別子テーブル１４３１の読み書きを制御する。
【０１３０】
以下、プロセッサ３００における、暗号化プログラムの実行に係る一連の手順（鍵登録処理、プロセス実行処理、鍵削除処理）について説明する。なお、以下に説明する処理の前提として、命令鍵Ｋａによって暗号化された命令Ｉｘ、即ち、暗号化プログラムＥ＿Ｋａ［Ｉｘ］と、プロセッサ３００内の秘密鍵Ｋｓと対となる公開鍵Ｋｐによって暗号化された配布鍵Ｅ＿Ｋｐ［Ｋａ］とが、外部メモリに記憶されているとする。
【０１３１】
［第１鍵登録処理：鍵登録命令］
まず、図２４、図２５を参照し、鍵登録命令“Ｒｅｇｉｓｔｅｒ”がＯＳから発行された際の鍵登録処理（第１鍵登録処理）について説明する。ここで、図２４は、第１鍵登録処理の手順を示したシーケンス図である。また、図２５は、第１鍵登録処理を説明するための図であって、プロセッサ３００の状態の一例を示している。以下では、図２５に示したプロセッサ３００の状態に基づいて説明を行う。
【０１３２】
ＯＳから鍵登録命令“Ｒｅｇｉｓｔｅｒ”が発行されると、プロセッサコア３１は、プロセス識別子を初期化するため、制御対象のプロセス識別子となる制御対象プロセス識別子＃１と、配布鍵アドレスＫｅｙＡｄＰｒｇ１と、配置先アドレスＰｒｇＡｄ＃１とに加え、制御対象プロセス識別子に対応した制御対象の命令鍵識別子となる制御対象命令鍵識別子＃Ａを鍵管理機能部３２１に通知する（ステップＳ１０１）。なお、これらの情報は、鍵登録命令“Ｒｅｇｉｓｔｅｒ”のパラメータとして、ＯＳからプロセッサコア３１に通知されるものとする。
【０１３３】
鍵管理機能部３２１は、プロセッサコア３１から各種情報を受け付けると、命令鍵管理部３２２内の配布鍵復号部３２２１に、制御対象命令鍵識別子＃Ａと、配布鍵アドレスＫｅｙＡｄＰｒｇ１とを通知する（ステップＳ１０２）。
【０１３４】
配布鍵復号部３２２１は、鍵管理機能部３２１から通知された配布鍵アドレスＫｅｙＡｄＰｒｇ１に基づき、外部メモリから配布鍵Ｅ＿Ｋｐ［Ｋａ］を読み出すと（ステップＳ１０３）、プロセッサ内部にある秘密鍵（秘密鍵Ｋｓ）を用いて配布鍵Ｅ＿Ｋｐ［Ｋａ］を復号する（ステップＳ１０４）。
【０１３５】
次いで、配布鍵復号部３２２１は、命令鍵テーブル２２２２中の制御対象命令鍵識別子＃Ａに対応する列の命令鍵部分に、ステップＳ１０４での復号結果、即ち、命令鍵Ｋａを登録する（ステップＳ１０５）。続いて、配布鍵復号部３２２１は、デバッグ可能フラグといった命令鍵共通の情報を共通付加情報として登録し、さらに、命令鍵識別子＃Ａの参照カウンタを１に設定する（ステップＳ１０６）。
【０１３６】
一方、鍵管理機能部３２１は、プロセッサコア３１から通知された制御対象プロセス識別子＃１、配置先アドレスＰｒｇＡｄ＃１、制御対象命令鍵識別子＃Ａを、プロセス識別子テーブル１４３１に登録するためプロセス識別子管理部３２３にアクセスする（ステップＳ１０７）。
【０１３７】
プロセス識別子管理部３２３は、鍵管理機能部３２１からのアクセスに応じ、プロセス識別子テーブル１４３１の制御対象プロセス識別子＃１に対応する列の命令鍵識別子項目に制御対象命令鍵識別子＃Ａを登録する（ステップＳ１０８）。また、プロセス識別子管理部３２３は、制御対象プロセス識別子＃１のプロセス固有情報として、プロセス識別子＃１の列のプロセス状態情報項目に初期化を意味するＩＮＩＴを登録するとともに、配置先アドレス項目に配置先アドレスＰｒｇＡｄ＃１を登録する（ステップＳ１０９）。なお、制御対象プロセス識別子＃１について他の情報が存在する場合には、ステップＳ１０９にて登録を行うものとする。
【０１３８】
プロセス識別子テーブル１４３１への登録が終了すると、プロセス識別子管理部３２３は、処理が終了した旨を鍵管理機能部３２１に通知する（ステップＳ１１０）。また、鍵管理機能部３２１は、プロセス識別子管理部３２３から終了の通知を受けると、全ての処理が終了した旨をプロセッサコア３１に通知し（ステップＳ１１１）、本処理を終了する。
【０１３９】
なお、本実施形態では、第１鍵登録処理の終了に伴い、プロセッサコア３１が、ステップＳ１０１で鍵管理機能部３２１に通知した制御対象プロセス識別子を現プロセス識別子格納レジスタ１１３に格納し、制御対象命令鍵識別子を現命令鍵識別子格納レジスタ３１１に格納するものとするが、これに限らず、例えば、ステップＳ１０１の直後等、異なるタイミングで格納することとしてもよい。
【０１４０】
また、本処理では、命令鍵テーブル２２２２と、プロセス識別子テーブル１４３１とについての処理を時系列で行っているが、ステップＳ１０２の時点で鍵管理機能部３２１は命令鍵識別子＃Ａの情報を保持するため、各テーブルに対する処理を並列に行うこととしてもよい。この場合、第２の実施形態の第１鍵登録処理に較べ、より高速に第１鍵登録処理を終了することができる。
【０１４１】
［第２鍵登録処理：命令鍵コピー命令］
次に、図２６、図２７を参照し、命令鍵コピー命令“ＫｅｙＣｏｐｙ”がＯＳから発行された際の鍵登録処理（第２鍵登録処理）について説明する。ここで、図２６は、第２鍵登録処理の手順を示したシーケンス図である。また、図２７は、第２鍵登録処理を説明するための図であって、プロセッサ３００の状態の一例を示している。以下では、図２７に示したプロセッサ３００の状態に基づいて説明を行う。
【０１４２】
ＯＳから命令鍵コピー命令“ＫｅｙＣｏｐｙ”が発行されると、プロセッサコア２１は、コピー元となるコピー元プロセス識別子＃２と、コピー先となるコピー先プロセス識別子＃１と、コピー先プロセス識別子についての配置先アドレスＰｒｇＡｄ＃１とに加え、コピー元プロセス識別子に対応した命令鍵識別子であるコピー元命令鍵識別子＃Ａを鍵管理機能部３２１に通知する（ステップＳ１２１）。なお、これらの情報は、命令鍵コピー命令“ＫｅｙＣｏｐｙ”のパラメータとして、ＯＳからプロセッサコア３１に通知されるものとする。
【０１４３】
鍵管理機能部３２１は、プロセッサコア３１から各種情報を受け付けると、これらの情報をプロセス識別子テーブル１４３１に登録するため、プロセス識別子管理部３２３にアクセスする（ステップＳ１２２）。
【０１４４】
プロセス識別子管理部３２３では、鍵管理機能部３２１からのアクセスに応じ、プロセス識別子テーブル１４３１のうち、コピー元プロセス識別子＃２に対応する列の命令鍵識別子項目に登録された命令鍵識別子＃Ａを、コピー先プロセス識別子＃１に対応する列の命令鍵識別子項目にコピーする（ステップＳ１２３）。
【０１４５】
また、プロセス識別子管理部３２３は、コピー先プロセス識別子＃１のプロセス固有情報として、コピー先プロセス識別子＃１に対応する列のプロセス状態情報項目に初期化を意味するＩＮＩＴを登録するとともに、配置先アドレス項目に配置先アドレスＰｒｇＡｄ＃１を登録する（ステップＳ１２４）。
【０１４６】
一方、鍵管理機能部３２１は、プロセッサコア３１から通知されたコピー元命令鍵識別子＃Ａについての参照カウンタを増加させるため、命令鍵管理部３２２にアクセスする（ステップＳ１２５）。
【０１４７】
命令鍵管理部３２２は、鍵管理機能部３２１からのアクセスに応じ、命令鍵テーブル２２２２を参照すると、コピー元命令鍵識別子＃Ａに対応する列の参照カウンタを１増加させる（ステップＳ１２６）。
【０１４８】
また、鍵管理機能部３２１では、プロセッサコア３１に処理が終了した旨を通知し（ステップＳ１２７）、本処理を終了する。
【０１４９】
なお、本実施形態では、第２鍵登録処理の終了に伴い、プロセッサコア３１が、ステップＳ１２１で鍵管理機能部３２１に通知したコピー先プロセス識別子を現プロセス識別子格納レジスタ１１３に格納し、コピー元命令鍵識別子を現命令鍵識別子格納レジスタ３１１に格納するものとするが、これに限らず、例えば、ステップＳ１２１の直後等、異なるタイミングで格納することとしてもよい。
【０１５０】
また、本処理では、命令鍵テーブル２２２２と、プロセス識別子テーブル１４３１とについての処理を時系列で行っているが、ステップＳ１２２の時点で鍵管理機能部３２１は命令鍵識別子＃Ａの情報を保持するため、各テーブルに対する処理を並列に行うこととしてもよい。この場合、第２の実施形態の第２鍵登録処理に較べ、より高速に第２鍵登録処理を終了することができる。
【０１５１】
［プロセス実行処理］
次に、上記鍵登録処理で初期化されたプロセス識別子のプロセスが実行される際の処理（プロセス実行処理）について説明する。なお、プロセッサコア３１に現命令鍵識別子格納レジスタ３１１が追加されただけであるため、処理の大まかな流れは第１の実施形態と同様である。以下では、第１の実施形態との差分について説明する。
【０１５２】
図２８、図２９を参照して、プロセス実行処理について説明する。ここで、図２８は、プロセス実行処理の手順を示したシーケンス図である。また、図２９は、プロセス実行処理を説明するための図であって、プロセッサ３００の状態の一例を示している。以下では、図２９に示したプロセッサ３００の状態に基づいて説明を行う。
【０１５３】
まず、プロセッサコア３１は、プロセス実行命令“Ｓｔａｒｔ”の発行に応じ、現プロセス識別子格納レジスタ１１３に保持された現プロセス識別子＃１と、この現プロセス識別子＃１で実行対象となる暗号化プログラムが格納された外部メモリ上での物理アドレスを表す命令アドレスＩｘＡｄとに加え、現命令鍵識別子格納レジスタ３１１に保持された現命令鍵識別子＃Ａを命令保持部１２（アクセス制御部１２２１）に通知する（ステップＳ１３１）。
【０１５４】
アクセス制御部１２２１では、プロセッサコア３１から受け付けた現命令鍵識別子＃Ａ及び命令アドレスＩｘＡｄの各値と、命令キャッシュ１２１の各キャッシュラインに保持されたプロセス情報（アドレスタグＴ２、命令鍵識別子タグＴ４）の各値とを比較し、キャッシュがヒットするか否かを判定する（ステップＳ１３２）。ここで、キャッシュヒットと判定された場合（ステップＳ１３２；Ｙｅｓ）、ステップＳ１４１の処理に直ちに移行する。
【０１５５】
一方、ステップＳ１３２において、キャッシュミスと判定した場合（ステップＳ１３２；Ｎｏ）、アクセス制御部１２２１は、プロセス識別子テーブル１４３１から現プロセス識別子＃１に対応する配置先アドレスＰｒｇＡｄ＃１を読み出し（ステップＳ１３３）、命令鍵識別子＃Ａと命令アドレスＩｘＡｄとともに命令復号処理部１３に通知する（ステップＳ１３４）。なお、ステップＳ１３５〜Ｓ１４１の処理は、第１の実施形態で説明したプロセス実行処理のステップＳ２６〜Ｓ３２の処理と同様であるため説明を省略する。
【０１５６】
［鍵削除処理］
次に、図３０、図３１を参照して、鍵削除処理について説明する。ここで、図３０は、鍵削除処理の手順を示したシーケンス図である。また、図３１は、鍵削除処理を説明するための図であって、プロセッサ３００の状態の一例を示している。以下では、図３１に示したプロセッサ３００の状態に基づいて説明を行う。
【０１５７】
プロセスの完了等に伴いプロセスの削除を行う際、ＯＳは削除対象のプロセス識別子（＃１）と、当該プロセス識別子に対応する削除対象の命令鍵識別子（＃Ａ）をパラメータとしたプロセス削除命令“Ｄｅｌｅｔｅ”を発行する。プロセッサコア３１は、プロセス削除命令“Ｄｅｌｅｔｅ”の発行に応じ、削除対象プロセス識別子＃１と、削除対象命令鍵識別子＃Ａとを、鍵管理機能部３２１に通知する（ステップＳ１５１）。
【０１５８】
鍵管理機能部３２１は、プロセッサコア３１から削除対象プロセス識別子＃１と、削除対象命令鍵識別子＃Ａとを受け付けると、この削除対象プロセス識別子＃１に関する情報をプロセス識別子テーブル１４３１から削除するため、プロセス識別子管理部３２３にアクセスする（ステップＳ１５２）。
【０１５９】
プロセス識別子管理部３２３では、鍵管理機能部３２１からのアクセスに応じ、プロセス識別子テーブル１４３１のち、削除対象プロセス識別子＃１に対応する列に登録された情報を削除する（ステップＳ１５３）。
【０１６０】
また、鍵管理機能部２２１は、プロセッサコア３１から通知された削除対象命令鍵識別子＃Ａについての参照カウンタを減少させるため、命令鍵管理部３２２にアクセスする（ステップＳ１５４）。
【０１６１】
命令鍵管理部３２２では、鍵管理機能部３２１からのアクセスに応じ、命令鍵テーブル２２２２のうち、削除対象命令鍵識別子＃Ａに対応する列の参照カウンタを１減少させる（ステップＳ１５５）。続いて、命令鍵管理部３２２は、ステップＳ１５５の処理において、参照カウンタの値が“０”になったか否かを判定する（ステップＳ１５６）。ここで、参照カウンタの値が“０”でないと判定した場合には（ステップＳ１５６；Ｎｏ）、ステップＳ１５９の処理に直ちに移行する。
【０１６２】
一方、ステップＳ１５６において、参照カウンタの値が“０”と判定した場合（ステップＳ１５６；Ｙｅｓ）、命令鍵管理部３２２は、削除対象命令鍵識別子＃Ａに対応する列に登録された各情報（命令鍵Ｋａ、共有付加情報など）を命令鍵テーブル２２２２から削除する（ステップＳ１５７）。続いて、命令鍵管理部３２２は、命令保持部１２の命令キャッシュ１２１に記憶された削除対象命令鍵識別子＃Ａに関する情報を削除する（ステップＳ１５８）。
【０１６３】
続くステップＳ１５９において、命令鍵管理部３２２は、処理が終了した旨を鍵管理機能部３２１に通知する（ステップＳ１５９）。また、鍵管理機能部３２１は、命令鍵管理部３２２から処理が終了した旨の通知を受けると、全ての処理が終了した旨をプロセッサコア３１に通知し（ステップＳ１６０）、本処理を終了する。
【０１６４】
なお、本処理では、命令鍵テーブル２２２２とプロセス識別子テーブル１４３１とについての処理を時系列で行っているが、ステップＳ１５２の時点で鍵管理機能部３２１は命令鍵識別子＃Ａの情報を保持するため、各テーブルに対する処理を並列に行うこととしてもよい。この場合、第２の実施形態の鍵削除処理に較べ、より高速に鍵削除処理を終了することができる。
【０１６５】
このように、プロセッサコア内部に命令鍵識別子情報を持つことで、命令鍵登録・プログラム実行・命令鍵削除の各過程においてプロセス識別子テーブルへのアクセス回数を減らすことが可能となり実施の形態1よりも高速な処理を実現する。なお、本実施形態では、第２の実施形態の構成を基礎としたが、これに限らず、第１の実施形態の構成を基礎としてもよい。
【０１６６】
以上のように、本実施形態のプロセッサ３００によれば、暗号化プログラムの実行単位となるプロセスを、実行対象のプログラム（命令）、物理アドレス及び命令鍵識別子のデータ単位でキャッシュし、実行対象のプロセスに該当するデータがキャッシュされている場合、前記暗号化プログラムの復号を行わず、このキャッシュされたデータを用いてプロセスを実行することが可能であるため、より効率的にプロセスを実行することができる。
【０１６７】
また、命令鍵識別子をタグとして用いることで、同じプログラムが別プロセスとして実行されていてもキャッシュヒットするため、プログラムの実行にかかる時間的コストを削減し、より高速なシステムを実現できる。さらに、共有ライブラリを用いた場合でも、配置先アドレスをプロセス毎に管理しているため、従来どおりの復号機能を実現できる。これにより、安全性と利便性のバランスの取れたシステムを実現することが可能となる。
【０１６８】
また、命令鍵登録の第２鍵登録処理として命令鍵コピー命令“ＫｅｙＣｏｐｙ”を発行することで、命令鍵識別子テーブルにおいて命令鍵から命令鍵識別子をサーチするコストを削減することができる。従来提案されていた特開２００２−２３２４１号公報に記載の技術と比較すると、従来では、登録時に鍵値をテーブル検索し、一致するエントリが存在しない場合は新たに値を登録し、一致するエントリが存在する場合に、存在する命令識別子を利用していたが、本実施形態では、命令鍵コピー命令“ＫｅｙＣｏｐｙ”を用いることで、ＯＳ側で同じ鍵のプログラムがすでに登録されているかどうかを判断し、命令鍵テーブルの検索を行わずに命令鍵を登録することができる。そのため、より高速な処理を実現することが可能となる。
【０１６９】
また、プロセッサコア内部に実行状態にあるプロセス識別子に対応した命令鍵識別子を保持することで、鍵登録処理、プロセス実行処理、鍵削除処理の際の各テーブルの参照回数を減少させることが可能となるとともに、各テーブルでの処理を並列に処理することが可能となるため、より高速且つ効率的に各処理を実行することができる。
【０１７０】
以上、本発明に係る実施形態について説明したが、これに限定されるものではなく、本発明の主旨を逸脱しない範囲での種々の変更、置換、追加などが可能である。
【図面の簡単な説明】
【０１７１】
【図１】第１の実施形態にかかるプロセッサの構成を示した図である。
【図２】図１に示した命令保持部及び命令復号処理部の詳細構成を示した図である。
【図３】図２の命令キャッシュに格納されるデータ構造を模式的に示した図である。
【図４】図１に示した鍵管理部の構成を説明するための図である。
【図５】図４に示した命令鍵テーブルの一例を示した図である。
【図６】図４に示したプロセス識別子テーブルの一例を示した図である。
【図７】第１の実施形態に係る鍵登録処理の手順を示したシーケンス図である。
【図８】第１の実施形態に係る鍵登録処理を説明するための図である。
【図９】第１の実施形態に係るプロセス実行処理の手順を示したシーケンス図である。
【図１０】第１の実施形態に係るプロセス実行処理を説明するための図である。
【図１１】第１の実施形態に係る鍵削除処理の手順を示したシーケンス図である。
【図１２】第１の実施形態に係る鍵削除処理を説明するための図である。
【図１３】第２の実施形態にかかるプロセッサの構成を示した図である。
【図１４】図１３に示した鍵管理部の構成を説明するための図である。
【図１５】図１４に示した命令鍵テーブルの一例を示した図である。
【図１６】第２の実施形態に係る第１鍵登録処理の手順を示したシーケンス図である。
【図１７】第２の実施形態に係る第１鍵登録処理を説明するための図である。
【図１８】第２の実施形態に係る第２鍵登録処理の手順を示したシーケンス図である。
【図１９】第２の実施形態に係る第２鍵登録処理を説明するための図である。
【図２０】第２の実施形態に係る鍵削除処理の手順を示したシーケンス図である。
【図２１】第２の実施形態に係る鍵削除処理を説明するための図である。
【図２２】第３の実施形態にかかるプロセッサの構成を示した図である。
【図２３】図２３に示した鍵管理部の構成を説明するための図である。
【図２４】第３の実施形態に係る第１鍵登録処理の手順を示したシーケンス図である。
【図２５】第３の実施形態に係る第１鍵登録処理を説明するための図である。
【図２６】第３の実施形態に係る第２鍵登録処理の手順を示したシーケンス図である。
【図２７】第３の実施形態に係る第２鍵登録処理を説明するための図である。
【図２８】第３の実施形態に係るプロセス実行処理の手順を示したシーケンス図である。
【図２９】第３の実施形態に係るプロセス実行処理を説明するための図である。
【図３０】第３の実施形態に係る鍵削除処理の手順を示したシーケンス図である。
【図３１】第３の実施形態に係る鍵削除処理を説明するための図である。
【符号の説明】
【０１７２】
１００  プロセッサ
１１  プロセッサコア
１１１  レジスタ
１１２  制御レジスタ
１１３  現プロセス識別子格納レジスタ
１２  命令保持部
１２１  命令キャッシュ
１２２  キャッシュコントローラ
１２２１  アクセス制御部
１３  命令復号処理部
１３１  アドレス変換部
１３２  命令復号部
１４  鍵管理部
１４１  鍵管理機能部
１４２  命令鍵管理部
１４２１  命令鍵テーブル
１４３  プロセス識別子管理部
１４３１  プロセス識別子テーブル
１５  外部バスインタフェース
１６  内部データバス
２００  プロセッサ
２１  プロセッサコア
２２  鍵管理部
２２１  鍵管理機能部
２２２  命令鍵管理部
２２２１  配布鍵復号部
２２２２  命令鍵テーブル
２２３  プロセス識別子管理部
３００  プロセッサ
３１  プロセッサコア
３１１  現命令鍵識別子格納レジスタ
３２  鍵管理部
３２１  鍵管理機能部
３２２  命令鍵管理部
３２２１  配布鍵復号部
３２３  プロセス識別子管理部
【図１】
2010055423.tif 000003
【図２】
2010055423.tif 000004
【図３】
2010055423.tif 000005
【図４】
2010055423.tif 000006
【図５】
2010055423.tif 000007
【図６】
2010055423.tif 000008
【図７】
2010055423.tif 000009
【図８】
2010055423.tif 000010
【図９】
2010055423.tif 000011
【図１０】
2010055423.tif 000012
【図１１】
2010055423.tif 000013
【図１２】
2010055423.tif 000014
【図１３】
2010055423.tif 000015
【図１４】
2010055423.tif 000016
【図１５】
2010055423.tif 000017
【図１６】
2010055423.tif 000018
【図１７】
2010055423.tif 000019
【図１８】
2010055423.tif 000020
【図１９】
2010055423.tif 000021
【図２０】
2010055423.tif 000022
【図２１】
2010055423.tif 000023
【図２２】
2010055423.tif 000024
【図２３】
2010055423.tif 000025
【図２４】
2010055423.tif 000026
【図２５】
2010055423.tif 000027
【図２６】
2010055423.tif 000028
【図２７】
2010055423.tif 000029
【図２８】
2010055423.tif 000030
【図２９】
2010055423.tif 000031
【図３０】
2010055423.tif 000032
【図３１】
2010055423.tif 000033