(57)【特許請求の範囲】
【請求項１】
暗号化された命令コードである暗号化命令コードを復号して実行するセキュアプロセッサであって、
前記暗号化命令コードを復号して得られる命令コードを実行するプロセッサコアと、
該プロセッサコアで実行されるプログラムからアクセスできない位置に実装されたセキュアバスと、
該セキュアバスに接続され、前記プロセッサコアで実行される前記暗号化命令コードの認証と、前記プロセッサコアが外部と入出力する前記暗号化命令コード及びデータの暗号化／復号化を行うセキュアハードウェアとを備え、
前記セキュアハードウェアは、
前記プロセッサコアが外部と入出力する前記暗号化命令コード及びデータの暗号化／復号化を行う、前記セキュアバスに接続されたセキュアパイプを備え、
前記セキュアパイプは、
公開鍵暗号化された鍵である公開鍵暗号化鍵と、該公開鍵暗号化鍵のライセンス情報と、該公開鍵暗号化鍵が信頼可能であるか否かを示す第１のフラグが登録されるエントリを有する暗号鍵テーブルと、
前記プロセッサコアのＴＬＢ／ＡＭＲと一対一に対応するエントリを有し、該エントリ内に、前記暗号鍵テーブルに登録されている暗号鍵の識別情報と、該暗号鍵識別情報が指す前記暗号鍵テーブルのエントリに登録されている第１のフラグのコピーである第２のフラグとライセンス情報が登録されるＴＬＢ／ＡＭＲ拡張部と、
前記ＴＬＢ／ＡＭＲ拡張部のエントリに登録されているライセンス情報と、前記ＴＬＢ／ＡＭＲ拡張部の該エントリに登録されている暗号鍵識別情報が指す暗号鍵テーブルのエントリに登録されているライセンス情報が一致するか調べるライセンスチェック部と、
を備えることを特徴とするセキュアプロセッサ。
【請求項２】
請求項１記載のセキュアプロセッサであって、
前記プロセッサコアのＴＬＢ／ＡＭＲのエントリは、前記ＴＬＢ／ＡＭＲ拡張部の第２のフラグと同様な機能を有する第３のフラグを有することを特徴とする。
【請求項３】
請求項１記載のセキュアプロセッサであって、
前記セキュアハードウェアは、
ビルトイン鍵を記憶する記憶手段を備え、
前記セキュアハードウェアは、前記ビルトイン鍵により暗号化されたセキュアブートプログラムによって初期化され、前記セキュアブートプログラムは、セキュアプロセッサで実行される命令コード認証の起点となることを特徴とする。
【請求項４】
請求項１記載のセキュアプロセッサであって、
前記セキュアハードウェアは、
公開インターフェースを介して、プロセッサコアで実行されるプログラムとの間でコマンドや情報を送受信し、公開鍵系暗号処理と公開鍵系認証処理を実行する、前記セキュアバスに接続されたセキュアアシストを備えることを特徴とする。
【請求項５】
請求項１記載のセキュアプロセッサであって、
ＤＭＡ転送機能を有し、該ＤＭＡ転送機能によって転送された命令コードまたはデータのページ検証を行う、前記セキュアバスに接続されたセキュアＤＭＡを、
備えることを特徴とする。
【請求項６】
請求項１記載のセキュアプロセッサであって、
請求項４記載のセキュアアシストと、
請求項５記載のセキュアＤＭＡを備え、
前記セキュアアシストは、前記セキュアパイプと前記セキュアＤＭＡの設定／制御を、前記セキュアバス経由で行うことを特徴とする。
【請求項７】
請求項６記載のセキュアプロセッサであって、
前記セキュアハードウェアは、
命令コードの前記公開鍵暗号化鍵を認証する鍵認証手段と、
該鍵認証手段によって前記公開鍵暗号化鍵が認証されたとき、前記公開鍵暗号化鍵のライセンス情報を生成するライセンス情報生成手段と、
前記鍵認証手段によって前記公開鍵暗号化鍵が認証されたとき、前記公開鍵暗号化鍵を復号する鍵復号手段を備え、
前記ライセンス情報生成手段によって生成されたライセンス情報は、前記鍵認証手段に認証を依頼した前記プロセッサコアで実行中のプログラムによって保存され、前記鍵復号手段によって復号された鍵は前記暗号鍵テーブルに登録されることを特徴とする。
【請求項８】
請求項６記載のセキュアプロセッサであって、
前記セキュアハードウェアは、
命令コードの前記公開鍵暗号化鍵を認証する鍵認証手段と、
前記命令コードをページ単位で検証するページ検証手段と、
前記鍵認証手段によって前記公開鍵暗号化鍵が認証され、かつ、前記ページ検証手段により前記命令コードのページが検証されたとき、前記公開鍵暗号化鍵のライセンス情報を生成するライセンス情報生成手段と、
前記鍵認証手段によって前記公開鍵暗号化鍵が認証され、かつ、前記ページ検証手段により命令コードのページが検証されたとき、前記公開鍵暗号化鍵を復号する鍵復号手段を備え、
該ライセンス情報生成手段によって生成されたライセンス情報は、前記鍵認証手段に認証を依頼した前記プロセッサコアで実行中のプログラムによって保存され、前記鍵復号手段によって復号された鍵は前記暗号鍵テーブルに登録されることを特徴とする。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに係り、さらに詳しくは不正なコードの実行を防止可能なセキュアプロセッサに関する。
【背景技術】
【０００２】
近年、コンピュータや携帯情報端末の普及が高まるにつれ、それらの機器で実行されるプログラムに関するセキュリティの重要性が高まっている。
プロセッサを実装する機器では、各種機能をプロセッサによるプログラム実行により実現でき、ハードウェアだけで構成される機器よりも動作の柔軟性が高く、多種類の機能を実装することが容易である。これらの優れた特性のために、プロセッサはパーソナルコンピュータなどの各種コンピュータや、ＰＤＡ(Personal Digital Assistant)、携帯電話、情報家電などの各種情報機器に実装されるようになっている。
【０００３】
また、ネットワークの進展につれ、これらの情報機器はネットワークに接続されて使用され、ネットワークを介してメールやデータの送受信や、プログラムのダウンロードをする機会が増加している。このため、ネットワークなどを介するコンピュータウィルスの感染や、不正アクセスにさらされる危険性が増大している。
【０００４】
プロセッサを備えた情報機器のセキュリティを強固とするためには、悪意のあるコードや、所望しないコードをプロセッサで動作させないようにする必要がある。しかしながら、現状では、悪意のあるコードを動作させないようにするプロセッサ側の対策があまり十分ではなく、安全なソフトウェア実行環境が提供されていない。
【０００５】
このため、最近、セキュアプロセッサが研究されている。セキュアプロセッサは、プロセッサの外側で扱われるデータには暗号化を施し、内側にはアクセス保護を施すことで、データを直接読み取ることを不可能とする。例えば、データや命令コードを暗号化して主記憶装置や二次記憶装置に格納し、プロセッサが命令を実行する際には、暗号化された命令コードを復号し、それをプロセッサ内のキャッシュメモリに格納してから実行する。
【０００６】
しかしながら、従来は、上記命令コードやデータの暗号化処理を行う回路は、プロセッサとは別のチップに搭載され、外付けで使用されるため処理速度が低いなど、暗号化性能の面で問題があった。
【０００７】
また、暗号化処理において、上記暗号化に用いられる鍵は、外付けされたチップ上の暗号化処理回路側で決定されており、プロセッサ側で実行される命令の種類や、カーネルモード、スーパーバイザモード、ユーザモードなどのプロセッサの動作モード（アクセスモード）の区別、あるいは、データや命令コードのフェッチのアクセスアドレスなどとは無関係であった。さらに、プロセッサ側の実行ユニットが、暗号化及び復号化で用いられる
鍵を指定できなかった。このため、プロセッサが実行中の命令に対する適切な鍵を選択することができないという問題もあった。
【０００８】
ソフトウェア実行環境の安全性に関する公知技術としては、例えば、暗号化された実行コードの認証を行って、その実行コードの有効性を確認し、セキュアプロセッサがその暗号化された実行コードに対応する命令をフェッチし、セキュアタスクとして実行するコード実行装置が開示されている（特許文献１）。
【０００９】
また、本出願人は、本発明と同様な目的を有するセキュアプロセッサを、以前に考案したが、このセキュアプロセッサの構成は本発明とは異なっている（特許文献２参照）。
【特許文献１】特開２００２−３５３９６０号公報
【特許文献２】特願２００４−１９４９５１号
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、上記コード実行装置では、実行コードに対応するプロセスとその認証に用いられる鍵との間に関連が無かった。このため、例えば、オペレーションシステムＯＳ）に対して悪意のある操作が行われ、プログラムに別の認証用の鍵が割り付けられると、悪意のある命令コードが動作してしまうという問題を解決できなかった。
【００１１】
本発明の第１の目的は、暗号化された命令コードを書き換え不可能な形式で記憶するメモリの記憶内容を基本とし、二次記憶装置などに格納されているプログラムの命令コードを次々と認証し、確実に信頼できるアプリケーションプログラムの範囲を段階的に広げ、信頼できる命令コードだけを実行することが可能なセキュアプロセッサを実現することである。
【００１２】
本発明の第２の目的は、プログラムの命令コードやデータのプロセッサへの格納タイミングで、それらに対応する認証鍵を用いてそれらの認証を行い、認証に成功した命令コードやデータのみをプロセッサで処理させるようにすることによって、プロセッサの処理の安全性を向上させることである。
【００１３】
本発明の第３の目的は、前記第１及び第２の目的を、一般的なプロセッサに付加しやすい構成で実現することである。
【課題を解決するための手段】
【００１４】
本発明は、暗号化された命令コード（暗号化命令コード）を復号して実行するセキュアプロセッサを前提とする。
本発明のセキュアプロセッサは、前記暗号化命令コードを復号して得られる命令コードを実行するプロセッサコアと、該プロセッサコアで実行されるプログラムからアクセスできない位置に実装されたセキュアバスと、該セキュアバスに接続され、前記プロセッサコアで実行される前記暗号化命令コードの認証と、前記プロセッサコアが外部と入出力する前記暗号化命令コード及びデータの暗号化／復号化を行うセキュアハードウェアと、を備えることを特徴とする（本発明のセキュアプロセッサの第１形態）。
【００１５】
本発明のセキュアプロセッサの第１形態においては、前記セキュアハードウェアは、前記セキュアバスを介して接続された処理ブロック内で、前記暗号化命令コード及びデータの暗号化／復号化に使用される鍵を保持することにより、該鍵をプロセッサコアで実行されるプログラムからアクセス不可能な位置に配置することができ、前記鍵の安全性を保証することができる。
【００１６】
前記セキュアハードウェアは、例えば、ビルトイン鍵を記憶する記憶手段を備え、前記セキュアハードウェアは、前記ビルトイン鍵により暗号化されたセキュアブートプログラムによって初期化され、前記セキュアブートプログラムは、セキュアプロセッサで実行される命令コード認証の起点となるように構成してもよい（本発明のセキュアプロセッサの第２形態）。
【００１７】
本発明のセキュアプロセッサの第２形態においては、前記セキュアブートプログラムを前記プロセッサコアで実行される命令コード認証の起点として、以後、その命令コード認証を継続していくことにより、前記プロセッサコアで実行されるプログラムの信頼性を維持することができる。
【００１８】
該第２形態のセキュアプロセッサにおいて、前記セキュアハードウェアは、例えば、前記プロセッサコアが外部と入出力する前記暗号化命令コード及びデータの暗号化／復号化を行う、前記セキュアバスに接続されたセキュアパイプを備えるように構成してもよい（本発明のセキュアプロセッサの第３形態）。
【００１９】
本発明のセキュアプロセッサの第３形態においては、前記セキュアパイプにより、前記プロセッサコアが外部と入出力する前記暗号化命令コード及びデータの暗号化／復号化の処理を安全性が保証された鍵を使用して行うことができる。
【００２０】
前記第２形態のセキュアプロセッサにおいて、前記セキュアハードウェアは、例えば、公開インターフェースを介して、プロセッサコアで実行されるプログラムとの間でコマンドや情報を送受信し、公開鍵系暗号処理と公開鍵系認証処理を実行する、前記セキュアバスに接続されたセキュアアシストを備えるように構成してもよい（本発明のセキュアプロセッサの第４形態）。
【００２１】
本発明のセキュアプロセッサの第４形態においては、前記セキュアアシストが、前記プロセッサコアで実行されるプログラムから前記公開インターフェースを介して前記セキュアアシストとコマンドや情報の送受信を行うことにより、前記プログラムが前記公開インターフェースを介してのみセキュアハードウェアに処理の依頼や情報の取得を行うことができる。
【００２２】
前記第２形態のセキュアプロセッサにおいて、例えば、ＤＭＡ転送機能を有し、該ＤＭＡ転送機能によって転送された命令コードまたはデータのページ検証を行う、前記セキュアバスに接続されたセキュアＤＭＡを備えるように構成してもよい（本発明のセキュアプロセッサの第５形態）。
【００２３】
本発明のセキュアプロセッサの第５形態においては、セキュアＤＭＡによりページ検証を高速で処理できる。
前記第２形態のセキュアプロセッサにおいて、例えば、前記第３形態のセキュアプロセッサのセキュアパイプと、前記第４形態のセキュアプロセッサのセキュアアシストと、前記第５形態のセキュアプロセッサのセキュアＤＭＡを備えるように構成し、前記セキュアアシストは、前記セキュアパイプと前記セキュアＤＭＡの設定／制御を、前記セキュアバス経由で行うように構成してもよい（本発明のセキュアプロセッサの第６形態）。
【００２４】
本発明の第６形態のセキュアプロセッサにおいては、上述した前記第３形態のセキュアプロセッサのセキュアパイプ、前記第４形態のセキュアプロセッサのセキュアアシスト及び前記第５形態のセキュアプロセッサのセキュアＤＭＡが備える機能を、セキュアパイプ前記プロセッサコアで実行されるプログラムに対する安全性を保証して行うことができる。
【００２５】
前記第６形態のセキュアプロセッサにおいて、例えば、前記セキュアパイプは、公開鍵暗号化された鍵（公開鍵暗号化鍵）と、該公開鍵暗号化鍵のライセンス情報と、該公開鍵暗号化鍵が信頼可能であるか否かを示す第１のフラグが登録されるエントリを有する暗号鍵テーブルと、前記プロセッサコアのＴＬＢ／ＡＭＲと一対一に対応するエントリを有し、該エントリ内に、前記暗号鍵テーブルに登録されている暗号鍵の識別情報と、該暗号鍵識別情報が指す前記暗号鍵テーブルのエントリに登録されている第１のフラグのコピーである第２のフラグとライセンス情報が登録されるＴＬＢ／ＡＭＲ拡張部と、前記ＴＬＢ／ＡＭＲ拡張部のエントリに登録されているライセンス情報と、前記ＴＬＢ／ＡＭＲ拡張部の該エントリに登録されている暗号鍵識別情報が指す暗号鍵テーブルのエントリに登録されているライセンス情報が一致するか調べるライセンスチェック部とを備えるように構成してもよい（本発明のセキュアプロセッサの第７形態）。
【００２６】
本発明のセキュアプロセッサの第７形態においては、前記プロセッサコアのＴＬＢ／ＡＭＲのエントリに格納されているアドレス空間情報で規定されるデータ空間へのアクセスを、該データ空間への正当なアクセス権限を有するプログラムのみに制限することができる。
【００２７】
前記第７形態のセキュアプロセッサにおいて、例えば、前記プロセッサコアのＴＬＢ／ＡＭＲのエントリは、前記ＴＬＢ／ＡＭＲ拡張部の第２のフラグと同様な機能を有する第３のフラグを有するように構成してもよい（本発明のセキュアプロセッサの第８形態）。
【００２８】
本発明の第８形態のセキュアプロセッサにおいては、上述した本発明の第７形態のセキュアプロセッサのデータ空間のセキュリティに関する処理を、プロセッサコアのＴＬＢ／ＡＭＲのエントリ内の第３のフラグを利用して高速化することができる。
【００２９】
前記第６形態のセキュアプロセッサにおいて、例えば、前記セキュアハードウェアは、命令コードの前記公開鍵暗号化鍵を認証する鍵認証手段と、該鍵認証手段によって前記公開鍵暗号化鍵が認証されたとき、前記公開鍵暗号化鍵のライセンス情報を生成するライセンス情報生成手段と、前記鍵認証手段によって前記公開鍵暗号化鍵が認証されたとき、前記公開鍵暗号化鍵を復号する鍵復号手段を備え、前記ライセンス情報生成手段によって生成されたライセンス情報は、前記鍵認証手段に認証を依頼した前記プロセッサコアで実行中のプログラムによって保存され、前記鍵復号手段によって復号された鍵は前記暗号鍵テーブルに登録されるように構成してもよい（本発明のセキュアプロセッサの第９形態）。
【００３０】
本発明の第９形態のセキュアプロセッサにおいては、前記プロセッサコアで実行されるプログラムについて、前記ライセンス情報を保持しているプログラムのみに、前記暗号鍵テーブルのエントリへの鍵登録・削除などの鍵操作を制限することができる。
【００３１】
前記第６形態のセキュアプロセッサにおいて、例えば、前記セキュアハードウェアは、命令コードの前記公開鍵暗号化鍵を認証する鍵認証手段と、前記命令コードをページ単位で検証するページ検証手段と、前記鍵認証手段によって前記公開鍵暗号化鍵が認証され、かつ、前記ページ検証手段により前記命令コードのページが検証されたとき、前記公開鍵暗号化鍵のライセンス情報を生成するライセンス情報生成手段と、前記鍵認証手段によって前記公開鍵暗号化鍵が認証され、かつ、前記ページ検証手段により命令コードのページが検証されたとき、前記公開鍵暗号化鍵を復号する鍵復号手段を備え、該ライセンス情報生成手段によって生成されたライセンス情報は、前記鍵認証手段に認証を依頼した前記プロセッサコアで実行中のプログラムによって保存され、前記鍵復号手段によって復号された鍵は前記暗号鍵テーブルに登録されるように構成してもよい（本発明のセキュアプロセッサの第１０形態）。
【００３２】
本発明の第１０形態のセキュアプロセッサにおいては、上述した前記第９形態のセキュアプロセッサの機能に加え、命令コードが改竄されたプログラムによる前記暗号鍵テーブルのエントリに対する不正な鍵操作を阻止できる。
【発明の効果】
【００３３】
本発明によれば、暗号化された命令コードおよび書き換え不可能な形式で暗号化された暗号鍵の記憶内容を基本とし、二次記憶装置などに格納されているプログラムの命令コードを次々と認証し、確実に信頼できるアプリケーションプログラムの範囲を段階的に広げ、信頼できる命令コードだけを実行することが可能なセキュアプロセッサを実現することができる。また、本発明によれば、プログラムの命令コードやデータのプロセッサへの格納タイミングで、それらに対応する認証鍵を用いてそれらの認証を行い、認証に成功した命令コードやデータのみをプロセッサで処理させるようにすることが可能であり、プロセッサの処理の安全性を向上させることができる。
【００３４】
本発明は、上記効果を有するセキュアプロセッサを、一般的なプロセッサに付加しやすい構成で実現することが可能である。
【発明を実施するための最良の形態】
【００３５】
以下、図面を参照しながら本発明の実施の形態について説明する。
［全体構成］
図１は、本発明の一実施例であるセキュアプロセッサのシステム全体の構成図である。
【００３６】
同図に示す本実施例のセキュアプロセッサは、プロセッサコア（中枢演算回路）１０、２次キャッシュ２０、ローカルバス３０、ＳＤＲＡＭＣ（Synchronous Dynamic RAM Controller）４０を備えている。ＳＤＲＡＭＣ４０にはメモリ５０が接続されている。このメモリ５０は、セキュアプロセッサの外部または内部に実装される。
【００３７】
プロセッサコア１０と２次キャッシュ２０はＣＰＵコアを構成している。本実施例のセキュアプロセッサは、上記既存のプロセッサの構成要素に加え、セキュアパイプ６０、セキュアＤＭＡ７０及びセキュアアシスト８０という３つのブロックを備えている。本実施例では、これらの３つのブロック全体をセキュアブロックと呼称する。
【００３８】
上記３つのブロックは、セキュアバス（第１のセキュアバス）９０によって互いに接続されている。セキュアバス９０は、プロセッサコア１０上で動作するソフトウェアからは認識できないようになっている。メモリ５０は、プロセッサコア１０と同一チップまたはチップ外部に実装される。尚、プロセッサコア１０は１個に限定されることはなく、複数実装可能である。また、ＣＰＵコアも複数実装可能である。
【００３９】
セキュアパイプ６０は、２次キャッシュ２０とローカルバス３０との間に設けられ、コマンドバッファ６１、暗号処理パイプ６２、ＴＬＢ／ＡＭＲ拡張部６３、鍵テーブル６４、ライセンスチェック部６５及びセキュアバスＩＦ（セキュアバス・インターフェース）６６を備える。
【００４０】
暗号処理パイプ６２は、２次キャッシュ２０とローカルバス３０との間に設けられ、平文にて処理を行うプロセッサコア１０と暗号化されているデータを取り扱う外部との間で、暗号化及び復号化の処理を行う。暗号処理パイプ６２は、例えば、ＤＥＳ、ＡＥＳに代表される共通鍵暗号方式で暗号処理及び復号処理を行う。
【００４１】
コマンドバッファ６１は、セキュアパイプ内暗号処理パイプにおける暗号処理に伴うデータ遅延を吸収する機能を有する。プロセッサコア１０で実行されるソフトウェア（プログラム）がセキュアＤＭＡ７０やセキュアアシスト８０に設定するコマンドや各種情報は、コマンドバッファ６１を介してセキュアＤＭＡ７０とセキュアアシスト８０に設定される。また、プロセッサコア１０で実行されるソフトウェアは、セキュアアシスト８０の公開ＩＦ内に実装される各レジスタの内容を、コマンドバッファ６１を経由して読み出す。コマンドバッファ６１は、プロセッサコア１０から発行されるコマンドの通信路である。本実施例において、該コマンドは、セキュアアシスト８０に対して実施するレジスタのリード／ライト・アクセスにより行なわれ、コマンドバッファ６１自体にセキュリティ機能は無い。また、本実施例では、セキュアアシスト８０に対する専用コマンドは設けず、セキュアアシスト８０を対象アドレスとするデータのリード／ライトにより、上記セキュアアシスト８０のレジスタのリード／ライト・アクセスを実現している。すなわち、公知の「メモリマップドＩ／Ｏ」方式と等価な方式により、セキュアアシスト８０に対するコマンド発行を実現している。
【００４２】
本実施例では、前記セキュアブロックとセキュアバス９０を統合した部分をセキュアハードウェアと呼ぶ。このセキュアハードウェアが、本実施例のセキュアプロセッサにおける本発明に特有な構成部分となっている。本実施例のセキュアプロセッサにおいては、プロセッサコア１０の処理は、セキュアパイプ６０通過後、暗号処理パイプ６２により暗号化されるため、データの安全性が保たれる。
【００４３】
セキュアプロセッサにおいては、暗号化に用いる鍵に関しても、いかに安全性を保つかが重要となる。本実施例のセキュアプロセッサは、この安全性の保持を、鍵をそのままの状態ではなく暗号化して取り扱い、その暗号化された鍵をハードウェアで復号することで
実現する。
【００４４】
暗号鍵テーブル（鍵テーブル）６４は、プログラムとデータ空間ごとの鍵管理を行うために使用されるテーブルである。ＴＬＢ／ＡＭＲ拡張部６３は、プロセッサコア１０内部のＴＬＢ／ＡＭＲと同数実装され、暗号鍵テーブル６４に格納された鍵をメモリ５０の物理ページに論理的に関連付ける機能を有する。プロセッサコア１０のＴＬＢ／ＡＭＲは、例えば、ＭＭＵ（メモリ管理ユニット）内に設けられる。
【００４５】
ライセンスチェック部６５は、セキュアパイプ６０を使用するアクセスが正当であるか検査し、不正アクセスを禁止する。セキュアバスＩＦ６６は、セキュアパイプ６０の設定処理に関する指示を、セキュアアシスト８０からセキュアバス９０経由で受け取るバスインターフェースである。
【００４６】
セキュアＤＭＡ７０は、ＤＭＡＣ（DMA Controller）７１と公開ＩＦ（公開インターフェース）７２を備えると共に、さらに、共通鍵暗号処理／ハッシュッ処理部７３、セキュアＩＦ（セキュア・インターフェース）７４及びセキュアバスＩＦ(セキュアバス・インターフェース)７６を備えている。
【００４７】
共通鍵暗号処理／ハッシュッ処理部７３は、ＤＥＳ／ＡＥＳ処理ブロック、ハッシュ処理ブロック、ユーザ暗号処理ブロック、平文バッファ及び暗号バッファを備え、ＡＥＳやＤＥＳなどの共通鍵暗号処理とセキュアＤＭＡ７０の転送領域に関するハッシュ演算を行う。
【００４８】
セキュアＩＦ７４は、ＤＭＡコマンド、ＤＭＡステイタスなどのＤＭＡに関するコマンドやステイタスが設定されるレジスタや、ＤＥＳ暗号鍵、ＡＥＳ暗号鍵、平文ハッシュ値及び暗号ハッシュ値をそれぞれ格納するレジスタを備えている。
【００４９】
セキュアバスＩＦ７６は、鍵に関する情報をセキュアバスＩＦ６６から受け取るためのインターフェースである。
セキュアＤＭＡ７０は、公開ＩＦ７２を介して、通常のＤＭＡ機能の他に、暗号処理機能付きＤＭＡを起動できるようになっている。これは、セキュアＤＭＡ７０に暗号処理アムセラレータとしての機能を持たせるためであり。セキュアＤＭＡ７０は、ＤＭＡＣ７１と公開ＩＦ７２により、暗号処理を行わない通常のＤＭＡ処理を実行できるようになっており、既存ソフトウェアとの互換性を保つことを配慮した構成となっている。
【００５０】
セキュアアシスト８０は、公開ＩＦ（レジスタＩＦ）８１、セキュアコントローラ８２、ＲＳＡ演算器８３、楕円暗号演算器８４、ハッシュ演算器８５、乱数発生器８６、認証リスト８７、セキュアバスＩＦ８８及びセキュアバス８９を備えており、公開鍵系の演算処理と認証処理を行うと共に、セキュアパイプ６０とセキュアＤＭＡ７０の設定／制御をセキュアバス９０経由で行う。セキュアコントローラ８２は、組み合わせ動作や各種実設定などのセキュアパイプ６０またはセキュアＤＭＡ７０に対する指示をステートマシン処理により実現する。
【００５１】
セキュアアシスト８０においては、プロセッサコア１０で動作するソフトウェアからは公開ＩＦ８１のみが使用可能であり、それ以外のブロックはアクセス不可能となっている。
【００５２】
ＲＳＡ演算器８３は、ハードウェアＲＳＡ鍵によるＲＳＡ処理を行う。楕円暗号演算器８４は、ハードウェア楕円暗号鍵による楕円暗号処理を行う。ハッシュ演算器８５は、署名認証用などのハッシュ演算を行う。乱数発生器８６は、鍵生成用の乱数を生成する。認証リスト８７は、後述するビルトイン鍵や公的証明鍵などを格納する。セキュアバスＩＦ８８は、セキュアパイプ６０やセキュアＤＭＡ７０に対する設定／機能制御をセキュアバス９０に送出するためのインターフェースである。
【００５３】
２次キャッシュ２０とセキュアパイプ６０内のＴＬＢ／ＡＭＲ拡張部６３間はＳビット信号線９１で接続されている。このＳビット信号線９１は、セキュアパイプ６０からプロセッサコア１０に対してＳビットを出力するために使用され、そのＳビットは２次キャッシュ２０とプロセッサコア１０間を接続する信号線９２を介してプロセッサコア１０に出力される。図示していないが、２次キャッシュ２０とセキュアＤＭＡ７０間及び２次キャッシュ２０とセキュアコントローラ８２間もＳビット信号線で接続される。このＳビットの詳細については後述する。
【００５４】
本実施例のセキュアプロセッサは、既存のプロセッサに、セキュアパイプ６０、セキュアＤＭＡ７０及びセキュアアシスト８０を付加すること構成により、命令及びデータの暗号化、その暗号化に使用される鍵の保護を実現している。
【００５５】
［鍵の安全性を維持する起動手順］
図２（ａ）〜（ｃ）は、本実施例のセキュアプロセッサにおける鍵の安全性を維持する起動手順（ブートシーケンス）を説明する図である。
【００５６】
本実施例のセキュアプロセッサでは、仮想記憶方式における論理アドレス（仮想アドレス）から物理アドレスへのアドレス変換方法としてＡＭＲ（アドレスマップレジスタ）やＴＬＢ（Translation Lookaside Buffer）を用いる。ＡＭＲは任意のアドレスからいくつかのサイズまでのアドレス変換を指示するレジスタである。ＴＬＢは、固定サイズ（一般には、４〜１６ｋＢ（キロバイト））でのアドレス変換を指示するレジスタファイルである。
【００５７】
本実施例では、プロセッサコア１０のＭＭＵ（Memory Management Unit）内に設けられるＡＭＲ、ＴＬＢに対してＴＬＢ／ＡＭＲ拡張部６３を追加し、これをセキュアパイプ６０内に設ける。そして、ＴＬＢ／ＡＭＲ拡張部６３が管理する空間に対して暗号鍵を割り当て、その空間への入出力データをセキュアパイプ６０により暗号化することを特徴としている。
【００５８】
図２（ａ）は本実施例のセキュアプロセッサのシステム起動時におけるプログラムの動作フロー（ブートシーケンス）を示し、図２（ｂ）は該プログラムのメモリ上のマッピング状態を示し、図２（ｃ）は上記動作フローに対応したプロセッサコア１０のＴＬＢ／ＡＭＲとセキュアパイプ６０のＴＬＢ／ＡＭＲ拡張部６３の設定状態を模式的に示す。
【００５９】
図２（ａ）に示すように、ブートシーケンスは、（１）ノーマルセットアッププログラムによる処理、（２）セキュアプログラムによる処理、（３）ＯＳ（Operating System）及びアプリケーションによる処理に大別され、（１）〜（３）の順に処理が行われる。
【００６０】
セキュアプロセッサの起動直後はＴＬＢとＡＭＲは有効化されていない。このため、暗号化機能も無効である。この状態では、ノーマルセットアッププログラムは、従来のプロセッサと同様の通常の初期化処理を行う（Ｓ１）。
【００６１】
続いて、ノーマルセットアッププログラムは、二次記憶装置等に格納されているセキュアブートプログラムと呼ばれる暗号化されたプログラムをメモリ５０にコピーする（Ｓ２）。セキュアブートプログラムは、ハードウェアとしてセキュアプロセッサに埋め込まれたビルトイン鍵で暗号化されている。このビルトイン鍵は、セキュアプロセッサの製造元より提供される。本実施例では、ビルトイン鍵は図２（ｃ）に示すように、プロセッサコア１０のＡＭＲ−０に対応するＴＬＢ／ＡＭＲ拡張部６３に関連付けられており、ビルトイン鍵はＡＭＲ−０のアドレス変換情報を設定した時点で有効となるように構成されている。このように、本実施例ではビルトイン鍵をＡＭＲ−０に関連付けるようにしているが、ＴＬＢに関連付けるように構成してもよい。
【００６２】
ステップＳ２に続いて、ＡＭＲ−０にアドレス変換情報を設定し、セキュアブートプログラムを使用可能にする（Ｓ３）。この時点で、ビルトイン鍵が有効となる。
セキュアブートプログラムの設定は、以上のステップＳ１〜Ｓ３の処理により終了する。すなわち、セキュアブートプログラムのコピーとビルトイン鍵の有効化によって終了する。
【００６３】
セキュアブートプログラムは、セキュアプロセッサの外部から供給する方式にしてもよく、あるいは、マイクロコードとしてハードウェアに埋め込む方式であってもよく、いずれの方式を採用しても問題はない。
【００６４】
セキュアブートプログラムは、これ以降、コード認証の起点となり、その認証が継続していくことにより、セキュアプロセッサで実効されるソフトウェアの信頼性並びにシステムの信頼性が維持される。
【００６５】
図２（ｂ）に示す（Ｂ）セキュアブートプログラムの起動は、（Ａ）セキュアブートプログラムの設定終了後に分岐することで実行される。セキュアブートプログラムは、セキュアプロセッサ起動後の最初の認証プログラム（Ｓ＝１のプログラム）であり、本実施例のセキュアハードウェア（セキュアパイプ６０、セキュアＤＭＡ７０、セキュアアシスト８０）を初期化することができる。このため、セキュアブートプログラムが、ユーザアプリケーションの根幹プログラム（ここでは、仮にカーネルと称する）を認証する。この認証の詳細は後述する。
【００６６】
図２（ｂ）に示すように、セキュアブートプログラムはカーネルの認証処理を行い、カーネルに制御を移す。カーネルの空間は、図２（ｃ）に示すようにＡＭＲ−１に設定される。カーネルが認証されると、カーネルにカーネル鍵が割り当てられる。このカーネル鍵は、ＡＭＲ−１に対応するＴＬＢ／ＡＭＲ拡張部６３に関連付けられる。カーネル鍵は、カーネルが停止するまで保持される。
【００６７】
ここで、セキュアブートプログラムの起動後の処理を、図２（ａ）を参照しながら説明する。セキュアブートプログラムは、セキュアハードウェアを初期化し（Ｓ４）、カーネルの鍵情報を認証する（Ｓ５）。そして、ＡＭＲ−１のアドレス変換情報を基に、認証されたカーネルをメモリ５０にコピーし、カーネルに制御を移す（Ｓ６）。
【００６８】
セキュアブートプログラムは、以上のようにして、カーネルの認証処理を行い、カーネルに制御を移すと、自空間を開放し処理を終了する。
セキュアブートプログラムによって認証されたカーネルは、さらに、自分の子プログラム（セキュアアプリ）を認証し、その子プログラムに論理空間を割り当てる。そして、その子プログラムを起動する。
【００６９】
上記処理の詳細を、図２（ａ）を参照しながら説明する。
セキュアブートプログラムによって起動されたカーネルは初期化された後、自身のデータ空間を生成する（Ｓ７）。カーネルは、その子プログラム（セキュアアプリ）を認証し、認証されたセキュアアプリを起動する（Ｓ８）。このとき、カーネルはセキュアハードウェアにセキュアアプリの暗号鍵を指示する。そして、図２（ｂ）に示すように、メモリ５０上からセキュアブートプログラムの空間は開放される。また、図２（ｃ）に示すように、ビルトイン鍵が無効化され、消去される。このビルトイン鍵の消去により、ＡＭＲ−０に対応するＴＬＢ／ＡＭＲ拡張部６３は未設定となる。
【００７０】
カーネルにより認証された子プログラム（セキュアアプリ）には、セキュアハードウェアによって暗号鍵（アプリ鍵）が割り当てられ、このアプリ鍵がプロセッサコア１０のＴＬＢエントリ（セキュアアプリのアドレス変換情報が設定されたエントリ）に対応するＴＬＢ／ＡＭＲ拡張部６３に関連付けられる。
【００７１】
本実施例のセキュアプロセッサは、制約があるものの、認証情報が無い子プログラム（非セキュアアプリ）も実行可能である。非セキュアアプリ（ＮＳアプリ）には暗号鍵は割り当てられないので、その非セキュアアプリのアドレス変換情報が設定されたＴＬＢエントリに対するＴＬＢ／ＡＭＲ拡張部６３の領域は未設定となる（図２（ｃ）参照）。
【００７２】
本実施例では、認証されている空間でプログラムが実行中であることを、Ｓビットが設定されていると表現する。Ｓビットとは、ＵＮＩＸ（登録商標）のスーパーバイザモードとは異なり、継承性はなく、あくまでも、現時点で実行中のコードが信頼可能であるか（認証されているか）どうかを示すものである。
【００７３】
［コード認証方式］
次に、図３Ａ、３Ｂ、３Ｃ、３Ｄを参照しながら、本実施例におけるコード認証方式を説明する。
【００７４】
コード認証は、図２のブートシーケンスに示すように、セキュアブートプログラム、セキュアブートプログラムにより認証されたカーネル（ユーザアプリケーションの根幹プログラム）などで実行される。
【００７５】
本実施例では、コード認証方式として、認証モード１と認証モード２という２つのモードを備える。認証モード１は、主にプログラムを１つの認証単位として共通鍵暗号化を行う。
【００７６】
［認証モード１］
ここで、図３Ａ（ａ）を参照しながら、認証モード１について説明する。
認証モード１は、下記（１）〜（４）の機能によりコード認証を行う。
（１）保護対象コードの暗号化
（２）コード暗号鍵に対し署名
（３）暗号鍵の署名検証
（４）セキュリティエラー条件（Ｓビット＋不当命令）
認証モード１においては、暗号処理のために必要な暗号鍵Ｋｓ１は公開鍵Ｋｐｘ１により暗号化された形式で提供される。そして、その公開鍵暗号化された暗号鍵Ｋｓ１（暗号化鍵Ｋｓ１）に対して鍵署名１０２が提供される。そして、鍵署名１０２と、別途提供される署名検証鍵１０３並びに署名検証鍵１０３に対する署名（署名検証鍵署名）１０４を用いて、暗号化鍵Ｋｓ１の署名検証処理を行なう。図３Ａに示す例では、ＴＬＢのアドレス変換単位であるページ毎に暗号鍵Ｋｓ１が割り当てるようにしている。また、図３Ａの例では、ＲＳＡ公開鍵による検証を行なっているが、ＨＭＡＣ鍵等、別の方式による検証を行なうようにしても問題はない。
【００７７】
認証モード１は、このように、暗号鍵の検証をもってコード検証とみなす方式であり、不正コードを正常に復号出来ないことにより、意図した不正実行ができないようにすることでセキュリティを実現している。
【００７８】
上記コード認証処理の詳細を図３Ｂ、３Ｃを参照しながら説明する。
図３Ｂは、認証モード１でのコード認証において必要な情報を示したものであり、図３Ｃはそのコード認証処理の流れを示したものである。
【００７９】
図３Ｂでは、セキュアプロセッサ内のハードウェアまたはソフトウェアにより保持される鍵と命令コード作成（例えば、オブジェクト生成時に使われる鍵）に使われる鍵の組み合わせを示している。同図に示すように、コード認証には、共通暗号鍵Ｋｃ、第１の公開鍵ペア３０１（公開鍵Ｋｐ１と秘密鍵Ｋｓ１）、第２の公開鍵ペア３０２（署名検証鍵（公開鍵Ｋｐ２）、署名秘密鍵Ｋｓ２）及び第３の公開鍵ペア３０３（署名秘密鍵Ｋｓ３、署名検証鍵（公開鍵Ｋｐ３））が使用される。
【００８０】
公開鍵Ｋｐ１と秘密鍵Ｋｓ１は対となっており、セキュアプロセッサは秘密鍵Ｋｓ１をソフトウェアでは読み出すことができない場所（セキュアハードウェア）に保持している。
これに対し、公開鍵Ｋｐ１は、セキュアプロセッサで実行されるソフトウェアがレジスタ経由で読み出せるようになっており、プロセッサ情報として公開されているので、コード作成側も使用できるようになっている。
【００８１】
コード作成側は、署名検証に必要な第２の公開鍵ペア３０２（公開鍵Ｋｐ２、秘密鍵Ｋｓ２）を保持しており、コード専用署名検証鍵Ｋｐ２を暗号化コードと共にセキュアプロセッサに提示する。コード作成側の公的認証鍵である第３の公開鍵ペア３０３（署名秘密鍵Ｋｓ３、署名検証鍵Ｋｐ３）の内、署名秘密鍵Ｋｓ３は認証機関に保持されるため、セキュアプロセッサ側で使用されることはない。署名検証鍵Ｋｐ３は公的認証局経由で公開され、セキュアプロセッサ外部からの例えばネットワーク経由での伝送またはハードウェア固定値としてセキュアアシスト８０内の認証リスト８７に格納される。
【００８２】
次に、図３Ｃを参照しながら、コード作成側、認証機関及びセキュアプロセッサ間での上記鍵の受け渡しの方法と、それらの鍵を用いた命令コードの認証処理手順を説明する。
｛コード作成処理｝
図３Ｃの左上側に示す、コード作成者が行なうコード作成処理について説明する。このコード作成処理は、専用のハードウェアを使用する必要はなく、オブジェクト（プログラム）作成時にソフトウェアなど何らかの方法により実施可能である。
（１）最初に、暗号化かつ認証すべき命令コード３１１と共通暗号鍵Ｋｃを用意し、命令コード３１１を共通暗号鍵Ｋｃにより暗号化し、共通鍵暗号化された命令コード３１２を生成する（共通鍵暗号処理）。
（２）また、同時に、セキュアプロセッサから公開された公開鍵Ｋｐ１を用いて共通暗号鍵Ｋｃを暗号化して、公開鍵暗号化された共通暗号鍵Ｋｃを生成する（公開鍵暗号処理１）。
【００８３】
このように、命令コードの暗号化に必要な情報は、共通暗号鍵Ｋｃと公開鍵Ｋｐ１の２つであり、これら２つの鍵を実装だけで命令暗号化は可能である。
さらに、上記暗号化が正しく行なわれたことを認証するための情報を生成する処理を行なう。
（３）上記公開鍵Ｋｐ１により暗号化された共通暗号鍵Ｋｃに対してハッシュ演算を施し、鍵署名の元データを生成する（ハッシュ処理１）。
（４）該元データを、署名秘密鍵Ｋｓ２により暗号化し、その暗号化により得られた値を鍵署名Ｓ１とする（公開鍵暗号処理２）。
（５）上記公開鍵Ｋｐ２のペアである公開鍵Ｋｐ２を署名検証鍵とし、その署名検証鍵（公開鍵Ｋｐ２）とその他の情報から成るデータ３１４の正当性を認証するための署名検証鍵署名Ｓ２から構成される電子証明書３１３として用意する。該署名検証鍵署名Ｓ２は、認証機関から受け取る。
【００８４】
上のようにして用意された、共通鍵暗号化された命令コード３１２、共通鍵暗号化された共通暗号鍵Ｋｃ、鍵署名Ｓ１及び電子証明書３１３の４種の情報を、ＲＯＭなどの記憶媒体またはネットワークなどの伝送手段３２０を介してセキュアプロセッサに渡す。
｛セキュアプロセッサ側の処理｝
図３Ｃの右側の「プロセッサ内処理」を参照しながら、セキュアプロセッサが暗号化された命令コードを復号・実行する処理について説明する。
（１）セキュアプロセッサは、コード作成者から受け取る公開鍵暗号化された共通暗号鍵Ｋｃを秘密鍵Ｋｓ１により復号する（公開鍵復号処理１）。
（２）上記公開鍵暗号化された共通暗号鍵Ｋｃに対してコード作成者側と同様のハッシュ演算を施す（ハッシュ処理１）。
（３）コード作成者から受け取った鍵署名Ｓ１を電子証明書３１３内の署名検証鍵（公開鍵Ｋｐ２）で復号する（公開鍵復号処理２）。
（４）ハッシュ処理１で得られた結果と公開鍵復号処理２で得られた結果を比較し、両結果が一致するか、すなわち、暗号鍵（共通暗号鍵Ｋｃ）が改竄されていないか調べる。一致していれば、該暗号鍵が改竄されていないことが分かる（鍵認証）。
（５）電子証明書３１３内のデータ３１４（署名検証鍵（公開鍵Ｋｐ２）とその他の情報）に対してハッシュ演算を施す（ハッシュ処理２）。
（６）電子証明書３１３内の署名検証鍵署名Ｓ２を署名検証鍵（公開鍵Ｋｐ３）により復号する（公開鍵復号処理３）。
（７）上記ハッシュ処理２と上記公開鍵復号処理３で得られた結果を比較し、両結果が等しいか、すなわち、電子証明書３１３が正当な権利者により作成されたものであるか調べる（電子証明書の検証）。
（８）（４）での比較結果（比較結果出力１）と（７）での比較結果（比較結果出力２）を調べ、両比較結果出力が共に一致であったならば、共通鍵暗号化された命令コード３１２を、（１）で得られた共通暗号鍵Ｋｃを用いて復号する（共通暗号鍵復号処理）。
【００８５】
このように、本実施例では、鍵認証と電子証明書の検証により、命令コードが正しく暗号化されており、かつ改竄されていないか検証し、正しく暗号化されておりかつ改竄されていない命令コードのみを復号する。この結果、セキュアプロセッサによる正当な命令コードの実行が保証される。
【００８６】
｛認証機関処理｝
図３Ｃの左下に示された「認証機関処理」を参照しながら、認証機関（認証局）がコード作成者で作成された暗号化された命令コードの電子証明書３１３用の署名検証鍵署名Ｓ２を作成する処理を説明する。
【００８７】
署名検証鍵（公開鍵Ｋｐ２）とその他の情報から成るデータ３１４に対してハッシュ演算を施し（ハッシュ処理２）、その演算結果を署名秘密鍵Ｋｓ３を用いて公開鍵暗号化して署名検証鍵署名Ｓ２を作成する（公開鍵暗号処理３）。
【００８８】
上記署名検証鍵署名Ｓ２を、記憶媒体またはネットワークを利用して、コード作成者に渡す。
コード作成者は、認証機関から受け取る署名検証鍵署名Ｓ２を用いて電子証明書３１３を作成する。
【００８９】
この認証機関処理は、公開鍵ペア（公開鍵Ｋｐ２、秘密鍵Ｋｓ２）を使用する前に、一度実施しておけばよい。ハッシュ演算は、例えばＨＭＡＣなどで行い、公開鍵演算にはＲＳＡ等の方式で行う。本発明は、ハッシュ演算や公開鍵演算の方式を特に指定するものではない。
【００９０】
［認証モード２］
（１）認証モード２は、下記（１）〜（５）の機能を備える。
（２）保護対象コードの暗号化
（３）コード暗号鍵（暗号化鍵）とページハッシュに対する署名
（４）暗号化鍵とページ署名を署名検証
（５）セキュリティエラー条件（Ｓビット要求＋不当命令）
認証モード２では、命令コードの検証をページ単位で行う。このページ単位での検証は、セキュアアシスト８０がセキュアバス９０経由でセキュアＤＭＡ７０を起動し、セキュアＤＭＡ７０がハッシュ演算を行い、その演算結果を検証することにより行なわれる。このように、認証モード２おいては、ページ検証を行い、その検証が失敗した場合には認証エラーとするので、コードの改竄検出が可能であり、認証モード１よりもさらに強力な保護機構を実現できる。
【００９１】
本実施例の認証モード２においては、プログラムのサイズが大きく、そのプログラムが複数のページに分割される場合、全てのページの鍵（暗号鍵）は同一にし、ページ署名検証はページ単位で行うようにしている。しかしながら、ページ毎に鍵を変更するように構成することも可能である。
【００９２】
認証モード２においては、図３Ａ（ｂ）に示すように、公開鍵暗号化された暗号鍵Ｋｓ２、鍵署名１０２、署名検証鍵１０３及びに署名検証鍵署名１０４に加え、ページ署名１０５を用いて署名検証鍵処理を行う。ページ署名１０５は、暗号鍵Ｋｓ２で暗号化されたページに対する署名である。図３Ａ（ｂ）では、ページ１〜３の各ページについてページ署名１０５が作成されている。
【００９３】
図３Ｄは、認証モード２における鍵の受け渡しと認証処理を説明する図である。
同図において、破線の矩形枠３５０で囲まれた部分が図３Ｃに示す認証モード１の処理に加えられた処理である。認証モード２では、認証モード１における鍵認証に加え、認証単位ごとのページ署名とその検証を行なう。より詳細に説明すると、認証モード２においては、共通暗号鍵Ｋｃで暗号化されたページごとにハッシュ演算を行い（ハッシュ処理Ａ）、その演算結果に対して署名秘密鍵Ｋｓ２による暗号化を施し（公開鍵暗号処理Ａ）、ページ署名Ｓ１Ａを生成する。複数ページ署名ならば、ページ数と同数の鍵署名を生成する。例えば、３ページ署名ならば、ページ署名Ｓ１Ａに加え、ページ署名Ｓ１Ｂ、Ｓ１Ｃが追加生成される。認証モード２では、暗号鍵の認証とページ認証を同時に行なうため、不正改竄されたページについては実行前に処理を中止することでセキュリティを実現する。
【００９４】
セキュアプロセッサ側での鍵署名Ｓ１Ａの検証は、図３Ｃに示す鍵署名Ｓ１の検証と同様のメカニズムで行なわれる。すなわち、共通鍵暗号化された命令コード３６２にハッシュ演算を施す（ハッシュ処理Ａ）と共に、受け取った鍵署名Ｓ１Ａを署名検証鍵（公開鍵Ｋｐ２）を用いて復号する（公開鍵復号処理Ａ）。そして、ハッシュ処理Ａで得られる結果と公開鍵復号処理Ａで得られる結果を比較し、その比較結果を出力する（比較結果出力Ａ）。認証モード２では、比較結果出力１の検証結果と署名検証鍵署名Ｓ２の認証結果に加え、上記比較結果出力Ａの検証結果を調べ、それらの検証結果または認証結果の全てが正しいときにのみ、共通鍵暗号化された命令コード３６２を共通暗号鍵Ｋｃで復号する（共通鍵暗号処理）。
【００９５】
図３Ｃの認証モード１及び図３Ｄの認証モード２の詳細な動作フローについては後述する。
［Ｓビットによる制御］
Ｓビットは、実行中のプログラムの暗号鍵が、上述した図３Ｃ、３Ｄに示すような何らかの方法で認証されているかどうかを示すもので、プログラム実行中の空間に関するＴＬＢ／ＡＭＲの情報にのみ依存しており、誰がプログラムを起動したかなどとは関係なく、スーパーバイザモードのようにステートとして持つものでもない。
【００９６】
Ｓビットは、認証または生成した鍵に付加される「認証済み」の属性を示すビットであり、プログラムをＴＬＢ登録する際、鍵を連携させることにより、ＴＬＢにもＳビットがコピーされる。Ｓビットによるデータ保護（プログラムが正常に実行されるとき、プログラムが改竄されていないことの保証）は、実行中のプログラムのＳビット属性とデータ空間のＳビット属性の組み合わせで実現される。
【００９７】
初期のＳ＝１の情報は、前述したセキュアブートプログラムの読み込みにより生成・登録される。Ｓ＝１の情報が登録されたプログラムは、認証された鍵の登録により、Ｓ＝１の空間を生成することが可能である。
【００９８】
Ｓビットによるアクセス制御の例を、図４Ａ、４Ｂ、４Ｃに示す。
セキュアプロセッサの基本動作においては、認証済みプログラムの置かれている空間と認証済みプログラムにより作成されたデータ空間だけがＳ＝１の空間となる。
【００９９】
図４Ａを参照しながら、本実施例のセキュアプロセッサにおけるＳビット属性によるプログラムのアクセス制限制御を説明する。
Ｓ＝１の認証済みプログラム（暗号化されたプログラム）からＳ＝１のデータ空間（認証済みの暗号化されたデータページ）をアクセスする場合には、セキュアパイプ６０を介してのアクセスが可能である（セキュア処理）。Ｓ＝１のプログラムからＳ＝０のデータ空間へのアクセスは、セキュアパイプ６０を介さずにアクセス可能であるが、Ｓ＝０のデータ空間に関して安全性は保証されない（非セキュア処理）。
【０１００】
Ｓ＝０のプログラム（認証なしのプログラム）からＳ＝１のデータ空間へのアクセスは禁止される。Ｓ＝０のプログラムからＳ＝０のデータ空間へのアクセスは可能である（通常処理）。これらのＳビットによるアクセス制御の関係を図４Ｂに示す。
【０１０１】
図４Ｃに、本実施例のセキュアプロセッサにおけるＳビットによるハードウェアアクセス制限を示す。
セキュアプロセッサで実行されるプログラムは、Ｓ＝１とＳ＝０のプログラムに分類されると共に、さらに、特権モードで実行されるプログラム（Ｐ＝１）と非特権モードで実行されるプログラム（Ｐ＝０）に分類される。
【０１０２】
Ｓ＝１でかつＰ＝１のプログラムは、セキュアコントローラ８２を介した間接アクセスを含むものの、セキュアプロセッサの全てのブロックをアクセス可能である。但し、鍵テーブル６４に格納されている鍵そのものを取り出すアクセスはできない。
【０１０３】
Ｓ＝１でかつＰ＝０のプログラムは、セキュアパイプ６０、セキュアＤＭＡ７０及びセキュアアシスト８０内の灰色のブロック以外のブロックはアクセス可能である。すなわち、
公開鍵系演算器（ＲＳＡ演算器８３、楕円暗号演算器８４、ハッシュ演算器８５）及び乱数発生器８６を利用でき、さらに、コマンドバッファ６１と暗号処理パイプ６２を利用できる。
【０１０４】
Ｓ＝０のプログラムは、セキュアハードウェアについては、セキュアＤＭＡ７０のＤＭＡＣ７１と公開ＩＦ７２のみを利用できるだけで、その他のブロックを利用することはできない。
【０１０５】
図５は、本実施例のセキュアプロセッサによるＳ＝１の親プログラムによる子プログラムの認証手順の概略を示す図である。同図において、ハードウェアによる処理は実線、ソフトウェアによる処理は破線で示している。
【０１０６】
Ｓ＝１の親プログラムは、図２のセキュアブートプログラムなど認証されたプログラムである。以後の説明では、セキュアブートプログラムなどの認証済のプログラムを、便宜上、親プログラムと総称する。親プログラムによって認証される子プログラムは、共通鍵暗号方式によって暗号化されたコードと、その暗号化に用いられた暗号鍵を公開鍵によって暗号化したもの、鍵署名、署名検証鍵、署名検証鍵署名と共に提供される（図３Ａ（ａ）参照）。
【０１０７】
図５に示すように、子プログラムのコードは子プログラム鍵で共通鍵暗号化されている。図５では、親プログラムが子プログラムを認証済するために使用する複数の認証情報の内、公開鍵暗号化された子プログラム鍵４１１のみを記載している（破線の矩形枠４１０を参照）。
【０１０８】
上記公開鍵暗号化用の公開鍵と対となる秘密鍵（ハードウェア秘密鍵）は、セキュアプロセッサのセキュアアシスト８０の認証リスト８７に格納されており、セキュアプロセッサで実行されるソフトウェアからは読み出せないようになっている。
【０１０９】
次に、親プログラムによる子プログラムの認証処理手順について説明する。
（１）親プログラムは、新たに実行しようとする子プログラムの認証情報をセキュアアシスト８０に設定する。ここでは、子プログラムの公開鍵暗号化された子プログラム鍵４１１（共通鍵）及び図示しない認証情報が、公開ＩＦ８１を介して公開鍵演算器（ＲＳＡ演算器８３または楕円暗号演算器８４）に設定されることにより、セキュアハードウェアにより子プログラム鍵の認証が行なわれる。この認証処理自体にはソフトウェアは介在できないため、この認証処理の信頼性が保証される。
【０１１０】
セキュアアシスト８０に設定すべき情報としては、「鍵属性（暗号方式、鍵長、ブロック長の指定）」、認証情報である「鍵署名」、「署名検証鍵」、「署名検証鍵署名」及び「公開鍵暗号化暗号鍵」があり、その他として、認証された鍵情報が保存される鍵テーブル（暗号鍵テーブル）６４のエントリ番号がある。これらは、セキュアアシスト８０の公開ＩＦ８１内のレジスタインターフェースに実装されるレジスタに設定される。
【０１１１】
親プログラムが上記の各種情報をセキュアアシスト８０の公開ＩＦ８１に設定した後、公開ＩＦ８１内のコマンドレジスタに「鍵認証コマンド」を設定することにより、セキュアハードウェアによるハードウェア鍵認証処理が開始される。該ハードウェア鍵認処理が実行されている間、親プログラムはその処理の終了待ち状態に入る。該ハードウェア認証処理により子プログラム鍵が認証されると、暗号鍵テーブル６４が更新され、暗号鍵テーブル６４の当該エントリに「鍵番号（Ｋｅｙ  ＩＤ）」、「ライセンス情報」、「子プログラム鍵」が設定される。本実施例においては、暗号鍵テーブル６４の空エントリはソフトウェアによって管理される。
【０１１２】
上記ハードウェア鍵認証処理が終了すると、セキュアアシスト８０から親プログラムに鍵認証終了が割り込みにより通知される。
（２）親プログラムは、セキュアアシスト８０の公開ＩＦ８１から鍵認証のステイタス情報を読み出し、子プログラム鍵が認証されたかどうか判断する。そして、子プログラム鍵が認証されたと判断すると、暗号鍵テーブル６４に格納された子プログラム鍵のライセンス情報をセキュアアシスト８０の公開ＩＦ８１を介して取得し、それを所定の記憶領域に保存する（ソフトウェア保存）。
【０１１３】
本実施例においては、信頼性を保証するため、ソフトウェアは暗号鍵テーブル６４に格納されている鍵自体にアクセスすることはできないが、鍵への代替アクセス許可のために、ライセンス情報を鍵の代替情報として使用できるようになっている。ソフトウェアは、ライセンス情報を用いることで、各種処理を行うことができる。
【０１１４】
本実施例における暗号鍵テーブル６４への鍵登録は、鍵の認証処理を伴うため、正確ではあるが処理時間がかかる。また、ＴＬＢ／ＡＭＲ拡張部６３へのエントリの登録／削除は頻繁に行われるため処理の高速性が要求される。本実施例では、上記処理時間の問題を解決するため、鍵の所有者（プログラム）に対しＴＬＢ／ＡＭＲ拡張部６３への登録権を与えるものとしてライセンス情報という概念を導入している。ライセンス情報は、暗号鍵テーブル６４に鍵（暗号鍵）を登録したプログラム（認証済プログラム）にのみ発行されるものである。該認証済プログラムのデータ空間は暗号化可能であるので、ライセンス情報をメモリ５０上に置いたとしても、他プログラムは認証済プログラムのデータ空間を参照することはできない。
【０１１５】
ライセンス情報は、鍵の生存区間、すなわち、プログラムの鍵が認証され暗号鍵テーブル６４に登録されてから、暗号鍵テーブル６４から削除されるまで有効である。上記生存区間は、通常は、プログラムの実行区間と同一になる。
【０１１６】
ライセンス情報は、Ｓ＝１のプログラムにしか発行されないため、Ｓ＝１のプログラムが利用できる暗号化空間に保管されることにより、他者のアクセスによっても暴露されることはない。
【０１１７】
このように、鍵認証が完了し、親プログラムがライセンス情報を獲得すると、子プログラムを実際のメモリ空間に割り付ける処理を行なうことができる。
（３）親プログラムは、上記認証された子プログラムを起動する前に、その子プログラムが実際に置かれているメモリ空間を管理すべきＴＬＢ／ＡＭＲエントリをソフトウェア処理により検索し、その子プログラムが使用すべき鍵（子プログラム鍵）が格納されている暗号鍵テーブル６４のエントリに設定されている鍵番号と（２）で保存したライセンス情報を、セキュアアシスト８０の公開ＩＦ８１内のレジスタに設定する。そして、「ＴＬＢ／ＡＭＲ拡張部登録コマンド」を同じく公開ＩＦ８１内のコマンドレジスタに設定する。
セキュアアシスト８０に上記登録コマンドが設定されると、ライセンスチェック部６５により、上記ライセンス情報が正しいかどうかが検査される。このライセンス情報の検査は、親プログラムが保管しているライセンス情報と暗号鍵テーブル６４の該当エントリに格納されているライセンス情報が一致するか否かにより行なわれ、一致すればライセンス情報は正しいと判断される。ライセンス情報が正しい場合には、ＴＬＢ／ＡＭＲ拡張部６３の該当エントリに前記鍵番号が設定される。これにより、子プログラム鍵が格納されている暗号鍵テーブル６４とＴＬＢ／ＡＭＲ拡張部６３の前記該当エントリが連携される。        
【０１１８】
この連携により、ＴＬＢ／ＡＭＲ拡張部６３の前記該当エントリに対応するセキュアプロセッサのＴＬＢ／ＡＭＲを使用する場合、前記鍵番号で指定される暗号鍵テーブル６４内の子プログラム鍵が使用されることになる。
（４）親プログラムが子プログラムを起動するために、セキュアプロセッサ内のＴＬＢの該当エントリをアクセスすると、上記鍵番号によるＴＬＢ／ＡＭＲ拡張部６３のエント
リと暗号鍵テーブル６４のエントリとの連携により、暗号鍵テーブル６４から前記子プログラムの子プログラム鍵が読み出され、それが暗号処理パイプ６２に供給される。
（５）メモリ５０から読み出された共通鍵暗号化された子プログラムは、上記子プログラム鍵を用いて暗号処理パイプ６２により平文の子プログラムに復号され、その平文の子プログラムがプロセッサコア１０に送られる。このようにして、プロセッサコア１０は、通常通りに子プログラムを実行することが可能となる。
【０１１９】
［暗号鍵テーブルの構成］
図６は、セキュアパイプ６０内に設けられる暗号鍵テーブル６４の構成例を示す図である。
【０１２０】
暗号鍵テーブル６４は、オブジェクト（プログラム）で使用される鍵（暗号鍵）を登録するテーブルである。Ｓ＝１の親プログラムは、子プログラムで使用する公開鍵暗号化された暗号鍵を、その暗号鍵が認証された場合に鍵属性と共に暗号鍵テーブル６４に登録する。暗号鍵は認証された場合にのみ暗号鍵テーブル６４に登録され、登録されると、親プログラムはセキュアハードウェアからライセンス情報を受け取る。暗号鍵が暗号鍵テーブル６４に登録されると、その暗号鍵が信頼可能であることを示すためにＳビットが“１”に設定される。
【０１２１】
本実施例においては、オブジェクト（プログラム）、ライブラリ、データ空間などにつき一つの鍵が用意される。暗号鍵テーブル６４のエントリは、「鍵属性」(図６の例では１６ビット)、「Ｓビット（セキュアビット）」（図６の例では１ビット）、「鍵（暗号鍵）」（図６の例では２５６ビット）及び「ライセンス情報（第１のライセンス情報）」（図６の例では３２ビット）の４項目から構成される。これらの項目の内、鍵属性とＳビットはソフトウェアによりアクセス可能であるが、暗号鍵とライセンス情報はソフトウェアによるアクセスは不可能である。
【０１２２】
鍵属性は、同一エントリに格納されている暗号鍵の属性（暗号方式、鍵長、ブロック長など）である。Ｓビットは、同一エントリに格納されている暗号鍵が認証済みであることを示すビットであり、認証済みであれば“１”に設定される。暗号鍵は、プログラムの暗号化に使用される鍵である。この暗号鍵は、ソフトウェアからはアクセス不可能である。ライセンス情報は、暗号鍵空間の拡張、消去時に用いる所有者（親プログラム）の確認番号である。
【０１２３】
ここで、暗号鍵空間の拡張、消去について説明する。
暗号鍵空間の拡張とは暗号鍵空間の生成を意味し、本実施例では、暗号鍵空間生成（暗号鍵を暗号鍵テーブル６４に登録後、ＴＬＢ／ＡＭＲ拡張部６３にエントリを登録）のための鍵認証または鍵生成を指す。また、暗号鍵空間の消去とは一時的あるいは永久の暗号鍵空間の削除を意味し、本実施例においては、暗号鍵空間削除（暗号鍵テーブル６４から暗号鍵を削除後にＴＬＢ／ＡＭＲ拡張部６３の該当エントリの削除、または、該暗号鍵の削除後のアクセスにより暗号鍵テーブル６４とＴＬＢ／ＡＭＲ拡張部６３のライセンス情報が不一致となることにより、暗号鍵テーブル６４の当該エントリのＳビットが“０”にクリアされることに伴うＴＬＢ／ＡＭＲ拡張部６３の該当エントリの無効化）のための鍵保存または鍵削除を指す。
【０１２４】
暗号鍵テーブル６４への新規エントリの登録は、スーパーバイザかつＳ＝１のプログラムからのアクセスにのみ許可される。また、暗号鍵空間の拡張／消去は、スーパーバイザかつＳ＝１のプログラムからのアクセスであって、かつライセンス情報が一致（該プログラムが保管しているライセンス情報と暗号鍵テーブル６４に登録されているライセンス情報が一致）するときのみ許可される。
【０１２５】
暗号鍵テーブル６４の空きエントリは、プロセッサコア１０で実行されるプログラムにより管理され、本実施例においては、暗号鍵テーブル６４のエントリに登録されている暗号鍵に割り当てる番号（鍵番号）として、該エントリの番号（エントリ番号）を用いる。
［ＴＬＢ／ＡＭＲ拡張部の構成］
図７は、セキュアパイプ６０内に設けられるＴＬＢ／ＡＭＲ拡張部６３の構成を示す図である。
【０１２６】
ＴＬＢ／ＡＭＲ拡張部６３は、プロセッサコア１０のＴＬＢ／ＡＭＲにセキュア機能拡張属性を追加する機能を有し、プロセッサコア１０のＴＬＢ／ＡＭＲと一対一に対応するように構成される。したがって、ＴＬＢ／ＡＭＲ拡張部６３のエントリ数は、プロセッサコア１０内のＴＬＢ／ＡＭＲのエントリ数と同じである。ＴＬＢ／ＡＭＲ拡張部６３のエントリへの登録権利は、ライセンス情報を有する親プログラムが持つ。
【０１２７】
ＴＬＢ／ＡＭＲ拡張部６３のエントリは、「Ｓビット」（同図の例では１ビット）、「鍵番号（Ｋｅｙ  ＩＤ）」（同図の例では８ビット）、「ライセンス情報（第２のライセンス情報）」（同図の例では１６ビット）の４つの項目から構成される。これらの項目の内、Ｓビットと鍵番号はソフトウェアによるアクセスは可能であるが、ライセンス情報はソフトウェアによるアクセスは不可能である。
【０１２８】
鍵番号は、暗号鍵テーブル６４のエントリ番号に等しい。Ｓビットは、暗号鍵テーブル６４の該鍵番号のエントリに登録されたＳビットをコピーしたものである。Ｓビットは、認証モード１においては、該当鍵（暗号鍵テーブル６４の前記鍵番号のエントリに登録された暗号鍵）が認証済みであり、暗号化を要求することを示す。また、認証モード２おいては、該当鍵と該当ページが認証済みであり、暗号化を要求することを示す。
【０１２９】
「暗号化を要求すること示す」とは、プロセッサコア１０がロード／ストア・コマンドを発行した場合のアクセスアドレスが、ＴＬＢ／ＡＭＲ拡張部６３の対応エントリのＳビットが“１”となっているＴＬＢ／ＡＭＲのエントリを参照する場合、ＴＬＢ／ＡＭＲのＳビットも“１”となっている（ＴＬＢ／ＡＭＲのＳビットは、ＴＬＢ／ＡＭＲ拡張部６３の対応エントリのＳビットをコピーしたものであるため）。このため、プロセッサコア１０かロード／ストア・コマンドが発行される際、Ｓビット＝１の信号も同時にコマンドバッファ６１に送出される。このように、Ｓビット＝１の信号が同時にコマンドバッファ６１に送られるコマンドに対しては、セキュアパイプ６０が動作して暗号化処理が起動される。
【０１３０】
本実施例においては、コマンドのアクセスアドレスがメモリ５０のアドレスを指すとき、そのコマンドと同時にコマンドバッファ６１に入力されるＳビットが“１”ならばセキュアハードウェアによる暗号化処理が動作し、Ｓビットが“０”ならばその暗号化処理は動作しないように構成されている。また、コマンドのアクセスアドレスがセキュアハードウェアのとき、そのコマンドと同時にコマンドバッファ６１に入力されるＳビットが“１”ならばアクセスを許可し、“０”ならばアクセスできないようにする（または、意味のない応答を返す）ように構成している。
【０１３１】
プロセッサコア１０が保管しているライセンス情報は、暗号鍵テーブル６４のライセンス情報の３２ビットであるが、ＴＬＢ／ＡＭＲ拡張部に対するアクセスには、下位１６ビットを用いる。これは、データを少なくし、例えばＴＬＢ／ＡＲＭ拡張部へのアクセスを高速に行うためのものであるが、ライセンス情報をすべて使用することを制限するものではない。
【０１３２】
[プロセッサコアのＴＬＢ／ＡＭＲの構成]
図８Ａは、プロセッサコア１０が備えるＴＬＢ／ＡＭＲの構成図である。
プロセッサコア１０のＴＬＢ／ＡＭＲ５０１のエントリは、「Ｖａｌｉｄ」、「Ｐｅｒｍｉｓｓｉｏｎ」、「ＶＡ（仮想アドレス）」、「Ｓビット」及び「ＰＡ（物理アドレス）」の各項目から構成される。「Ｖａｌｉｄ」は、エントリが有効であるか否かを示す情報である。「Ｐｅｒｍｉｓｓｉｏｎ」は、アドレス変換を許可するか否かを示す情報（リード不可など）である。ＶＡは、エントリがアドレス変換対象とする仮想アドレス（論理アドレス）である。ＰＡは、ＶＡのアドレス変換後の物理アドレスである。Ｓビットは、図４Ａで説明したＳビットと同じ機能を有するビットであり、前記アドレス変換が許可された場合に、ＰＡと共にバスインターフェース（不図示）に出力される。アドレス変換は、アクセス属性に違反が無い場合に許可される。
【０１３３】
図１９に、従来のプロセッサコアが備えるＴＬＢ／ＡＭＲ１５０１の構成を示す。図８Ａと図１９とを比較すれば明らかなように、本実施例のプロセッサコア１０のＴＬＢ／ＡＭＲ５０１はエントリにＳビットを備えている点が特徴である。
【０１３４】
[プロセッサコアのＴＬＢ／ＡＭＲとセキュアパイプのＴＬＢ／ＡＭＲ拡張部との関係]
図８Ｂは、プロセッサコア１０のＴＬＢ／ＡＭＲ５０１とセキュアパイプ６０のＴＬＢ／ＡＭＲ拡張部６３との関係を示す図である。尚、同図左側のＣＰＵコアは、プロセッサコア１０と２次キャッシュ２０から構成されるハードウェアを示す。
【０１３５】
本実施例のプロセッサコア１０が備えるＴＬＢ／ＡＭＲ５０１のＳビットは、セキュアパイプ６０のＴＬＢ／ＡＭＲ拡張部６３の対応エントリにＳビットが登録されるときにコピーされる。このコピーは、セキュアハードウェア（セキュアブロック）により行なわれ、ソフトウェアでは実行できない。また、プロセッサコア１０のＴＬＢ／ＡＭＲ上でＳビットがクリア（“０”に設定）された場合、そのＳビットに対応するＴＬＢ／ＡＭＲ拡張部６３のＳビットもクリアされる。これにより、該ＳビットがクリアされたＴＬＢ／ＡＭＲ拡張部６３のエントリは無効となる。暗号鍵テーブル６４に登録されている暗号鍵が書き換えられた場合、暗号鍵テーブル６４の該暗号鍵が登録されていたライセンス情報とＴＬＢ／ＡＭＲ拡張部６３の該暗号鍵の鍵番号が設定されたエントリのライセンス情報が不一致（本実施例の場合には下位１６ビットが不一致）となり、ＴＬＢ／ＡＭＲ拡張部６３の上記Ｓビットがクリアされる。
【０１３６】
上記ライセンス情報の不一致について説明する。暗号鍵を使用していたプログラムの実行が終了した場合、暗号鍵テーブル６４から該暗号鍵が削除され、その暗号鍵のライセンス情報も暗号鍵テーブル６４から削除される。このため、プロセッサコア１０側でＴＬＢ／ＡＭＲを参照してメモリアクセスが行なわれると、ライセンスチェック時に、ＴＬＢ／ＡＭＲ拡張部６３に格納されているライセンス情報と暗号鍵テーブル６４の対応するライセンス情報（ＴＬＢ／ＡＭＲ拡張部６３の該等鍵番号が指す暗号鍵テーブル６４のエントリに格納されているライセンス情報）が不一致となる。
【０１３７】
ＴＬＢ／ＡＭＲ拡張部６３のエントリへの登録権利は、ライセンス情報を保管している親プログラムが持つ。上述したように、ＴＬＢ／ＡＭＲ拡張部６３のエントリに登録された鍵番号（Key  ID）は暗号鍵テーブル６４のエントリ番号となっており、ＴＬＢ／ＡＭＲ拡張部６３のエントリに登録された鍵番号を用いて、暗号鍵テーブル６４から該鍵番号の暗号鍵（ENCKEY）を暗号処理パイプ６２に渡すことができる。
【０１３８】
［暗号鍵テーブルの管理］
本実施例のセキュアプロセッサにおいては、暗号鍵テーブル６４の管理は、「鍵認証」、「鍵生成」、「鍵保存」及び「鍵削除」の４つの処理により行なわれる。
【０１３９】
｛鍵認証処理｝
図９Ａは、鍵認証処理におけるセキュアハードウェアの動作概要を示す模式図である。
図９Ａに示すセキュアハードウェアで行なわれる鍵認証処理の概要は、以下の通りである。
【０１４０】
鍵認証の制御手順について説明する。
（１）暗号鍵テーブル６４から空きエントリを選択する。本実施例のセキュアプロセッサでは、プロセッサコア１０で実行されるプログラムが暗号鍵テーブル６４を管理する。この管理は、例えば、セキュアプロセッサの記憶領域に暗号鍵テーブル６４の管理テーブルを実装し、前記プログラムがその管理テーブルを管理することで実現する。
（２）親プログラムは、子プログラムのコードまたはデータの「鍵認証情報」（鍵署名（Ｓ１）、署名検証鍵（Kｐ２）、署名検証鍵署名（Ｓ２））、「空きエントリ番号」（暗号鍵テーブル６４の空きエントリのエントリ番号）、「鍵属性」及び「公開鍵Ｋｐｘ１で公開鍵暗号化された暗号鍵Kｓ１」を、セキュアアシスト８０の公開ＩＦ８１に設けられたレジスタに設定する。すなわち、図９Ａに示すように、鍵署名、署名検証鍵、署名検証鍵署名を、それぞれ、公開ＩＦ８１内のレジスタ８１１、８１２、８１３に設定する。また、空きエントリ番号と鍵属性を、それぞれ、公開ＩＦ８１内のレジスタ８１４、８１５に設定する。さらに、「公開鍵Ｋｐ１で暗号化された暗号鍵（秘密鍵）Kｃ」をレジスタ８１７に設定する。
（３）親プログラムは、「認証起動コマンド」を公開ＩＦ８１内のコマンドレジスタ８１６に設定する。これにより、セキュアアシスト８０を起動され、セキュアハードウェアによる鍵認証処理（ハードウェア鍵認証処理）が実行される。このハードウェア鍵認証処理は、セキュアアシスト８０内のセキュアコントローラ８２（認証ステートマシン）により行なわれる。認証ステートマシンがハードウェア鍵認証処理をおこなっている間、親プログラムはその鍵認証処理の終了待ち状態に入る。
（３）認証ステートマシンは、公開ＩＦ８１のレジスタ８１１〜８１３から鍵署名、署名検証鍵、署名検証鍵署名を読み出し、それらと自ブロック内の認証リスト８７に格納されているルート鍵を用いて鍵認証を行う。ルート鍵とは、認証の最上位に位置する鍵であり、例えば、図３Ｃにおいては公開鍵Ｋｐ３が該当する。認証は、ルート鍵が正しく受け渡されているという前提で行なわれるので、本実施例では、ルート鍵をハードウェア化して改変されないような工夫をしている。
（４）認証ステートマシンは鍵認証処理が終了すると、その処理結果を示す信号を公開鍵演算８３（８４）に出力する。認証ステートマシンは、上記鍵認証が正しく終了した場合には、公開ＩＦ８１のレジスタ８１４、８１５からそれぞれ空きエントリ番号と鍵番号を読み出し、その空きエントリ番号が指す暗号鍵テーブル６４のエントリのＳビットを“１”にセットすると共に、該エントリに上記鍵属性を設定する。認証ステートマシンは、さらに鍵認証結果を示す認証ステイタスを公開ＩＦ８１の認証ステイタスレジスタ８１８に設定する。
（５）公開鍵演算器８３（８４）は、認証ステートマシンから入力される鍵認証結果が認証ステートマシンの鍵認証が正しく終了した信号を示していれば、公開鍵暗号化された暗号鍵Kｃをルート鍵８２１内に格納されている図示しない秘密鍵Ｋｓ１で復号し、その復号された暗号鍵Kｃを暗号鍵テーブル６４の前記エントリに設定する。また、乱数発生器８６を起動する。
（６）乱数発生器８６乱数発生器８６は生成したライセンス情報（３２ビット）を暗号鍵テーブル６４の前記エントリに設定すると共に、そのライセンス情報を公開ＩＦ８１のライセンスレジスタ８１９に設定する。
（７）セキュアアシスト８０は、上記のようにして暗号鍵テーブル６４が更新されると、親プログラムに「鍵認証処理終了」の割込みを通知する。
（８）親プログラムは、公開ＩＦ８１の認証ステイタスレジスタ８１８から認証ステイタスを読み出す。そして、鍵認証が確認し、鍵認証が正しければ公開ＩＦ８１のライセンスレジスタ８１９からライセンス情報を取得・保管する。
【０１４１】
｛認証モード１の鍵認証処理｝
図９Ｂは、認証モード１における認証処理の手順を示すフローチャートである。
同図の右側のソフトウェア処理はプロセッサコア１０で実行されるプログラムの処理手順を示し、同図の左側のハードウェア処理はセキュアアシスト８０内のセキュアコントローラ８２により行なわれる処理手順を示す。
【０１４２】
プログラムは暗号鍵テーブル６４の空きエントリを検索し（Ｓ１１）、その空きエントリのエントリ番号（空きエントリ番号）、鍵認証情報（鍵署名、署名検証鍵、署名検証鍵署名）、鍵属性をセキュアアシスト８０の公開ＩＦ８１にレジスタに設定する（Ｓ１２）。
【０１４３】
プログラムは、次に、公開ＩＦ８１のコマンドレジスタ８１６に認証起動コマンドを設定し（Ｓ１３）、セキュアアシスト８０からの割り込み待ちに入る（Ｓ１４）。
ステップＳ１３で認証起動コマンドがコマンドレジスタ８１６に設定されることにより、セキュアアシスト８０内のセキュアコントローラ８２が認証ステートマシンを起動する（Ｓ１５）。認証ステートマシンは、署名検証鍵署名をルート鍵（署名検証鍵）で復号する処理（Ｓ１６）、署名検証鍵をハッシュ演算する処理（Ｓ１７）、鍵署名をその署名検証鍵で公開鍵復号する処理（Ｓ１８）及び公開鍵暗号化された鍵（公開鍵暗号化鍵）をハッシュ演算する処理（Ｓ１９）の４つの処理を並列起動する。
【０１４４】
認証ステートマシンは、ステップＳ１６とステップＳ１７の処理結果を比較する（Ｓ２０）と共に、ステップＳ１８とステップＳ１９の処理結果を比較する（Ｓ２１）。そして、ステップＳ２０の比較結果が成功か失敗かを判断すると共に（Ｓ２２）、ステップＳ２１の比較結果が成功か失敗かを判断する（Ｓ２３）。ステップＳ２２またはステップＳ２３のいずれかが失敗だった場合には、公開ＩＦ８１の認証ステイタスレジスタ８１８に「エラーステイタス」を設定する（Ｓ２４）。一方、ステップＳ２２とステップＳ２３の比較結果が共に成功であった場合には、公開鍵暗号鍵をハードウェア秘密鍵で復号（公開鍵復号）する処理（Ｓ２６）と乱数発生器８６を起動する処理の２つの処理を並列起動する（Ｓ２５）。
【０１４５】
認証ステートマシンは、ステップＳ２６の処理が終了すると、その処理で得られた鍵と、公開ＩＦ８１のレジスタ８１５に設定されている鍵属性並びに“１”のＳビットを、公開ＩＦ８１のレジスタ８１４に設定されている空きエントリ番号が指定する暗号鍵テーブル６４のエントリ（指定エントリ）に設定する（Ｓ２８）。また、ステップＳ２９で乱数発生器８６により生成されたライセンス情報を、暗号鍵テーブル６４の前記指定エントリと公開ＩＦ８１のライセンスレジスタ８１９に設定する（Ｓ２９）。
【０１４６】
認証ステートマシンは、ステップＳ２８とステップＳ２９の処理が共に終了すると、公開ＩＦ８１の認証ステイタスレジスタ８１８に「成功ステイタス」を設定する（Ｓ３０）。
【０１４７】
認証ステートマシンは、ステップＳ２４またはＳ３０の処理が終了すると、プロセッサコア１０に対する割込みを生成する（Ｓ３１）。
上記割込みの生成により、プロセッサコア１０上で実行されている親プログラムに割込みが発生する（Ｓ３２）。親プログラムは、その割込みを受けて、セキュアアシスト８０の公開ＩＦ８１の認証ステイタスレジスタ８１８からステイタス情報を取得し、認証モード１における鍵認証が成功か失敗のいずれであったかを判断する（Ｓ３３）。そして、成功であったと判断すると、セキュアアシスト８０の公開ＩＦ８１のライセンスレジスタ８１９からライセンス情報を読み出し、それを所定の保存域に保存し（Ｓ３４）、鍵認証を終了する（Ｓ３５）。
【０１４８】
｛認証モード２の鍵認証処理｝
図９Ｃは、認証モード２における認証処理の手順を示すフローチャートである。
認証モード２では、コード暗号鍵の認証に加え、さらにページ検証を行う。このページ検証は、セキュアＤＭＡ７０のハッシュ演算機能を用いて行なわれる。
【０１４９】
図９Ｃにおいて、図９Ｂのステップと同じ処理を行うステップには同じ符号を付与している。以下に述べる図９Ｃのフローチャートの説明においては、図９Ｂのフローチャートとは異なる処理手順、すなわち認証モード１が備えていない認証モード２特有の処理手順についてのみ説明する。
【０１５０】
親プログラムがステップＳ１１〜Ｓ１３の処理を行ない、セキュアアシスト８０の公開ＩＦ８１のコマンドレジスタ８１６に認証起動コマンドが設定されると、セキュアアシスト８０内のセキュアコントローラ８２で認証モード２の認証ステートマシン（以下、単に認証ステートマシンと記載）が起動される（Ｓ４５）。
【０１５１】
認証ステートマシンは、図９ＢのステップＳ１６〜Ｓ１９の４つの処理に加え、ページ署名をその署名検証鍵で公開鍵復号する処理（Ｓ４６）とセキュアＤＭＡ７０の起動処理（Ｓ４７）を並列起動する。
【０１５２】
セキュアＤＭＡ７０は、ステップＳ４７のページ署名が行なわれたページの命令コードまたはデータに対しハッシュ演算を行い、その演算結果をセキュアコントローラ８２（認証ステートマシン）に出力する（Ｓ４８）。
【０１５３】
認証ステートマシンは、ステップＳ４６で得られた結果とステップＳ４８で得られた結果を比較し、双方の結果が一致するか（ページ検証が成功であるか）、不一致であるか（ページ検証が失敗であるか）判断する（Ｓ５０）。このページ検証結果と、ステップＳ２２及びステップＳ２３の認証結果の全てが成功であるか判断し、それら全てが成功である場合にのみ、ステップＳ２６とステップＳ２８の処理を並列起動する。続いて、図９Ｂで説明したステップＳ２８〜Ｓ３１の処理が行なわれ、プロセッサコア１０に割込みが通知される。
【０１５４】
このように、認証モード２では、認証モード１の認証に加え、さらにページ検証が行なわれ、ページが改竄されていないどうか調べる。
｛鍵生成処理｝
本実施例の鍵生成処理では、暗号化用の鍵が生成され、その鍵が暗号鍵テーブル６４に登録される。この鍵生成により、その鍵を持つプログラムのデータ空間の確保・生成が行なわれる。
【０１５５】
図１０Ａは、鍵生成処理におけるセキュアハードウェアの動作概要を示す模式図である。
図１０Ａに示すセキュアハードウェアで行なわれる鍵生成処理の概要は、以下の通りである。
（１）プロセッサコア１０で実行されるプログラム（ソフトウェア）は、暗号鍵テーブル６４の空きエントリが選択する。
（２）前記プログラムは、「空きエントリの番号（空きエントリ番号）」、「鍵属性」を、それぞれ、セキュアアシスト８０の公開ＩＦ８１内のレジスタ８１４、８１５に設定する。（３）前記プログラムは、「鍵生成コマンド」を公開ＩＦ８１内のコマンドレジスタ８１５に設定する。これにより、セキュアコントローラ８２の鍵生成ステートマシン（鍵生成STM）が起動され、鍵生成ステートマシンは鍵生成処理を実行する。
（４）鍵生成ステートマシンは、乱数発生器８６を起動し、乱数発生器８６に「鍵」と「ライセンス情報」を生成させる。
（５）乱数発生器８６は、生成したライセンス情報を公開ＩＦ８１のライセンスレジスタ８１９に設定すると共に、暗号鍵テーブル６４の前記空きエントリ番号を有するエントリに登録する。また、乱数発生器８６は、生成した鍵を鍵生成ステートマシンに出力する。（６）鍵生成ステートマシンは、乱数発生器８６から鍵を入力すると、その鍵を暗号鍵テーブル６４の前記エントリに登録すると共に、そのエントリのＳビットを“１”に設定する。鍵生成ステートマシンは、さらに、公開ＩＦ８１のレジスタ８１５から鍵属性を読み出し、それを暗号鍵テーブル６４の前記エントリに登録する。
（７）鍵生成ステートマシンは、以上のようにして鍵生成処理を終了すると、鍵生成処理が成功したかどうかを示すステイタス情報を生成ステイタスレジスタ８２０に設定してから、鍵生成処理の終了を割込みにより前記プログラムに通知する。
【０１５６】
図１０Ｂは、本実施例のセキュアプロセッサにより行なわれる鍵生成処理のより詳細な手順を示すフローチャートである。同図右側の破線枠内がプロセッサコア１０で実行されるプログラムのよるソフトウェア処理を示し、左側がセキュアアシスト８０内のセキュアコントローラ８２によるハードウェア処理を示す。
【０１５７】
プロセッサコア１０で実行されるプログラムは、暗号鍵テーブル６４の空きエントリを検索し（Ｓ６１）、その検索により得られた空きエントリのエントリ番号（空きエントリ番号）と鍵属性をセキュアコントローラ８２の公開ＩＦ８１のレジスタ８１４、８１５に設定する（Ｓ６２）。続いて、プログラムは、鍵生成コマンドをコマンドバッファ６１の公開ＩＦ８１のコマンドレジスタ８１６に設定し（Ｓ６３）、セキュアアシスト８０からの割込み待ちに入る（Ｓ６４）。
【０１５８】
ステップＳ６３で、コマンドレジスタ８１６に鍵生成コマンドが設定されることにより、セキュアコントローラ８２で生成ステートマシンが起動される（Ｓ６５）。
生成ステートマシンは、鍵生成とライセンス情報の２つの処理を並列起動し（Ｓ６６）、乱数発生器８６を起動する（Ｓ６７）と共に、乱数発生器８６を起動する（Ｓ６８）。こここで、上記２つの並列処理は共に乱数発生器８６で行なわれる。この場合、乱数発生器８６を２つ設け、ステップＳ６７での鍵生成とステップＳ６８でのライセンス情報生成の処理を、２つの乱数発生器８６が分担して行うような構成にしてもよい。
【０１５９】
生成ステートマシンは、ステップＳ６７の処理が終了すると、暗号鍵テーブル６４の空きエントリ番号で指定されるエントリ（指定エントリ）に、ステップＳ６７で得られた「鍵」と公開ＩＦ８１のレジスタ８１５に設定されている「鍵属性」、さらに、“１”のＳビットを登録する（Ｓ６９）。また、ステップＳ６８の処理が終了すると、暗号鍵テーブル６４の指定エントリに、ステップＳ６８で生成されたライセンス情報（３２ビット）を登録する。さらに、乱数発生器８６から出力される該ライセンス情報を公開ＩＦ８１のライセンスレジスタ８１９に設定する（Ｓ７０）。
【０１６０】
生成ステートマシンは、ステップＳ６９とステップＳ７０の処理が共に終了すると、「成功ステイタス情報」を生成ステイタスレジスタ８２０に設定する（Ｓ７１）。そして、プロセッサコア１０で実行されている前記プログラムに対する割込みを生成・出力する（Ｓ７２）。
【０１６１】
プロセッサコア１０で割込み待ち状態にあったプログラムは、前記割込み発生を入力すると（Ｓ７３）、セキュアアシスト８０の公開ＩＦ８１の生成ステイタスレジスタ８２０に設定されているステイタス情報を読み出し、生成ステートマシンによる鍵生成が成功したか判断する（Ｓ７４）。そして、鍵生成が成功であると判断すると、セキュアアシスト８０の公開ＩＦ８１のライセンスレジスタ８１９からライセンス情報（３２ビット）を読み出し、それを所定領域に保存し（Ｓ７５）、鍵生成処理を正常終了する（Ｓ７６）。
【０１６２】
一方、ステップＳ７４で、生成ステートマシンによる鍵生成が失敗であると判断すると、鍵生成処理をエラー終了する（Ｓ７７）。
このように、プロセッサコア１０で実行されるプログラムとセキュアハードウェアの連携により行なわれる鍵生成処理において、鍵とそのライセンス情報を生成し、それらを“１”のＳビットと共に暗号鍵テーブル６４の空きエントリに登録することができる。また、前記プログラムは、上記暗号鍵テーブル６４に登録された鍵のライセンス情報を保管することができる。
【０１６３】
｛鍵保存処理｝
図１１Ａは、本実施例のセキュアプロセッサの鍵保存処理を行うハードウェア機構を示すブロック図である。
【０１６４】
同図に示すハードウェア機構による鍵保存処理の手順の概要を説明する。この鍵保存処理は、暗号鍵テーブル６４に登録されている鍵をプロセッサコア１０で実行されているプログラムが保存する処理である。このとき、鍵と共に、その鍵の認証情報（鍵署名、署名検証鍵、署名検証鍵署名）も保存される。また、鍵は公開鍵暗号化されて保存される。
（１）セキュアプロセッサで実行されるプログラムは、保存するする暗号鍵の番号（保存鍵番号）と、その鍵のライセンス情報を、それぞれ、セキュアアシスト８０の公開ＩＦ８１内のレジスタ８１４、ライセンスレジスタ８１９に設定する。
（２）前記プログラムは、公開ＩＦ８１内のコマンドレジスタ８１６に鍵保存コマンドを設定する。
（３）保存ステートマシン（セキュアコントローラ８２）が起動し、公開ＩＦ８１のライセンスレジスタ８１９に設定されているライセンス情報と暗号鍵テーブル６４の前記保存鍵番号が指すエントリ（指定エントリ）に設定されているライセンス情報を比較し、ライセンスチェックを行う。
（４）保存ステートマシンはライセンスチェックにおいて両ライセンス情報が一致していれば、公開鍵演算器８３（８４）を起動する。公開鍵演算器８３（８４）は、暗号鍵テーブル６４の指定エントリに登録されている鍵（暗号鍵）Ｋｃを、保存ステートマシンから入力されるルート鍵８２１（公開鍵Ｋｐ１）で暗号化し、その公開鍵Ｋｐ１で暗号化された鍵（公開鍵暗号化鍵）Ｋｃをレジスタ８１７に設定する。また、保存ステイタスレジスタ８２２に成功ステイタスを設定する。
（５）保存ステートマシンが、鍵保存処理の終了を、割込みにより前記プログラムに通知する。
【０１６５】
図１１Ｂは、本実施例のセキュアプロセッサによる鍵保存処理の手順を示すフローチャートである。同図右側のプロセッサコア１０で実行されるプログラムによる破線枠内がソフトウェア処理、左側の破線枠内がセキュアアシスト８０のセキュアコントローラ８２（保存ステートマシン）によるハードウェア処理を示す。
【０１６６】
前記プログラムは、保存する鍵の番号（保存鍵番号）とその鍵のライセンス情報を、それぞれ、セキュアコントローラ８２の公開ＩＦ８１内のレジスタ８１４とライセンスレジスタ８１９に設定する（Ｓ８１）。そして、公開ＩＦ８１内のコマンドレジスタ８１６に保存コマンドを設定し（Ｓ８２）、保存ステートマシンからの割込み待ち状態に入る（Ｓ８３）。
【０１６７】
該保存コマンドの設定により、セキュアコントローラ８２で保存ステートマシンが起動する（Ｓ８４）。起動された保存ステートマシンは、公開ＩＦ８１内のライセンスレジスタ８１９に設定されたライセンス情報と暗号鍵テーブル６４の前記保存鍵番号が指すエントリ（指定エントリ）に登録されているライセンス情報を比較するライセンスチェックを行う（Ｓ８５）。
【０１６８】
保存ステートマシンは、該ライセンスチェックの結果を判断し（Ｓ９６）、ライセンスチェックが成功（両方のライセンス情報が一致）であれば、暗号鍵テーブル６４の前記指定エントリに登録された鍵を読み出し、その鍵を公開鍵演算器８３（８４）に入力させる。保存ステートマシンは、また、ルート鍵８２１内にある図示しない秘密鍵Ｋｓ１のペアである公開鍵Ｋｐ１を公開鍵演算器８３（８４）に出力する。公開鍵演算器８３（８４）は、入力される鍵（暗号鍵）Ｋｃを公開鍵Ｋｐ１により暗号化し、公開鍵Ｋｐ１で暗号化された鍵Ｋｃ（公開鍵暗号化鍵）を公開ＩＦ８１内のレジスタ８１７に設定する（Ｓ８７）。
【０１６９】
保存ステートマシンは、公開鍵演算器８３（８４）によって生成された公開鍵暗号化された認証情報（鍵署名、署名検証鍵、署名検証鍵署名）をレジスタ８１１〜８１３に設定する（Ｓ８８）。保存ステートマシンは、暗号鍵テーブル６４から前記指定エントリを削除し（Ｓ８９）、公開ＩＦ８１内の保存ステイタスレジスタ８２２に成功ステイタスを設定する（Ｓ９０）。
【０１７０】
一方、保存ステートマシンは、ステップＳ８６でライセンスチェックの結果が失敗であると判断すると、保存ステイタスレジスタ８２２にエラーステイタスを設定する（Ｓ９１）。
【０１７１】
保存ステートマシンは、ステップＳ９０またはステップＳ９１が終了すると、プロセッサコア１０で実行中の前記プログラムに割込みを通知する（Ｓ９２）。
前記プログラムは、保存ステートマシンからの割込みが発生すると（Ｓ９３）、公開ＩＦ８１内の保存ステイタスレジスタ８２２からステイタス情報を読み出し、そのステイタス情報を基に、保存ステートマシンによる鍵保存処理が成功したかどうか判断し（Ｓ９４）、成功であれば、公開ＩＦ８１内のレジスタ８１７から公開鍵暗号化鍵（公開鍵Ｋｐ１で暗号化された鍵Ｋｃ９を読み出すと共に、レジスタ８１１〜８１３から認証情報（鍵署名、署名検証鍵、署名検証鍵署名）を読み出し、それらを所定の記憶域に保存し（Ｓ９６）、鍵保存を終了する（Ｓ９６）。一方、失敗であれば、エラー終了する（Ｓ９７）。
【０１７２】
このようにして、プロセッサコア１０で実行するプログラムは、鍵保存コマンドを使用することにより、セキュアハードウェアと連携して、セキュアパイプ６０の暗号鍵テーブル６４に登録されている鍵を（但し、公開鍵暗号化された形式で）、その認証情報と共に取得・保存できる。
【０１７３】
｛鍵削除処理｝
図１２Ａは、本実施例のセキュアプロセッサの鍵削除処理におけるセキュアハードウェアの動作概要を示す模式図である。
【０１７４】
鍵削除処理の概要は、以下のような手順で行なわれる。
（１）セキュアプロセッサで実行されるプログラムが、削除する鍵の鍵番号（削除鍵番号）をセキュアアシスト８０の公開ＩＦ８１内のレジスタ８１４に設定すると共に、その鍵のライセンス情報をライセンスレジスタ８１９に設定する。
（２）前記プログラムは、コマンドレジスタ８１６に鍵削除コマンドを設定する。
（３）該鍵削除コマンドの設定により、セキュアアシスト８０のセキュアコントローラ８２（削除ステートマシン）が起動する。削除ステートマシンは、ライセンスチェック部６５。ライセンスチェック部６５は、公開ＩＦ８１のライセンスレジスタ８１９に設定されているライセンス情報と暗号鍵テーブル６４の前記削除鍵番号が指すエントリに登録されているライセンス情報を比較し、両者が一致するか調べる（ライセンスチェック）。
（４）ライセンスチェック部６５は、ライセンスチェックにより両者のライセンス情報が一致すると、暗号鍵テーブル６４の前記削除鍵番号が指すエントリ（指定鍵のエントリ）を削除する。
（５）ライセンスチェック部６５は、鍵削除処理の終了を、割込みにより前記プログラムに通知する。
【０１７５】
図１２Ｂは、本実施例のセキュアプロセッサによる鍵削除処理の手順を示すフローチャートである。同図右側の破線枠内はプロセッサコア１０で実行されるプログラムによるソフトウェア処理を示し、左側の破線枠内はセキュアアシスト８０内のセキュアコントローラ８２（削除ステートマシン）の制御により行なわれるハードウェア処理の手順を示すフローチャートである。
【０１７６】
前記プログラムは、削除する鍵の番号（削除鍵番号）とその鍵のライセンス情報（１６ビット）を、それぞれ、セキュアコントローラ８２の公開ＩＦ８１内のレジスタ８１４とライセンスレジスタ８１９に設定する（Ｓ１０１）。そして、公開ＩＦ８１内のコマンドレジスタ８１６に削除コマンドを設定し（Ｓ１０２）、削除ステートマシンからの割込み待ち状態に入る（Ｓ１０３）。
【０１７７】
該削除コマンドの設定により、セキュアコントローラ８２で削除ステートマシンが起動する（Ｓ１０４）。起動された保存ステートマシンは、公開ＩＦ８１内のライセンスレジスタ８１９に設定されたライセンス情報と暗号鍵テーブル６４の前記削除鍵番号が指すエントリ（削除指定エントリ）に登録されているライセンス情報を比較するライセンスチェックを行う（Ｓ１０５）。
【０１７８】
削除ステートマシンは、該ライセンスチェックの結果を判断し（Ｓ１０６）、ライセンスチェックが成功（両方のライセンス情報が一致）であれば、暗号鍵テーブル６４の前記削除指定エントリを削除し（Ｓ１０７）、公開ＩＦ８１内の削除ステイタスレジスタ８２４に成功ステイタスを設定する（Ｓ１０８）。
【０１７９】
一方、削除ステートマシンは、ステップＳ１０６でライセンスチェックの結果が失敗であると判断すると、削除ステイタスレジスタ８２４にエラーステイタスを設定する（Ｓ１０９）。
【０１８０】
削除ステートマシンは、ステップＳ１０８またはステップＳ１０９が終了すると、プロセッサコア１０で実行中の前記プログラムに割込みを通知する（Ｓ１１０）。
前記プログラムは、保存ステートマシンからの割込みが発生すると（Ｓ１１１）、公開ＩＦ８１内の削除ステイタスレジスタ８２４からステイタス情報を読み出し、そのステイタス情報を基に、削除ステートマシンによる鍵削除処理が成功したかどうか判断し（Ｓ１１２）、成功であれば、鍵削除を終了する（Ｓ１１３）。一方、失敗であれば、エラー終了する（Ｓ１１４）。
【０１８１】
このように、プロセッサコア１０で動作するプログラムは、セキュアコントローラ８２の公開ＩＦ８１に削除コマンドを設定することにより、セキュアハードウェアと連携して、暗号鍵テーブル６４に登録されている鍵を削除することができる。
[ＴＬＢ／ＡＭＲ拡張部６３の操作]
ＴＬＢ／ＡＭＲ拡張部６３の基本操作は３つである。
【０１８２】
ＴＬＢ／ＡＭＲエントリ登録
この操作は、暗号鍵テーブル６４に登録済みの鍵について、その鍵のライセンスを持つプログラム（認証済プログラム）が自空間のＴＬＢ／ＡＭＲ拡張部６３に対して、その鍵を連携させる操作である。この操作には、既に登録済みのＴＬＢ／ＡＭＲ拡張部６３のエントリ情報を更新する操作も含まれる。
【０１８３】
ＴＬＢ／ＡＭＲエントリ削除
この操作は、暗号鍵テーブル６４に登録されている鍵に連携されているＴＬＢ／ＡＭＲ拡張部６３のエントリを個別に削除する操作である。この操作は、ＴＬＢ／ＡＭＲ拡張部６３のエントリの上書き、または暗号鍵テーブル６４から鍵を削除することによっても可能である。暗号鍵テーブル６４の鍵を削除したときには、その鍵に連携するＴＬＢ／ＡＭＲ拡張部６３のエントリが、次回のＴＬＢ／ＡＭＲ拡張部６３へのアクセス時に消去される。
【０１８４】
ＴＬＢ／ＡＭＲエントリ無効化
この操作は、ＴＬＢ／ＡＭＲ拡張部６３のエントリに登録されている鍵のライセンス情報と、そのエントリに連携されている暗号鍵テーブル６４のエントリに登録されている該鍵のライセンス情報の不一致、またはプロセッサコア１０のＴＬＢ／ＡＭＲのＳビット、ＴＬＢ／ＡＭＲ拡張部６３のＳビット及び暗号鍵テーブル６４のＳビットが全て一致しないときに、ＴＬＢ／ＡＭＲ拡張部６３の該当エントリ（ＴＬＢ／ＡＭＲのセキュア拡張機能）が無効化される操作である。
｛ＴＬＢ／ＡＭＲエントリ登録｝
ＴＬＢ／ＡＭＲエントリ登録操作の処理を、図１３Ａ、１３Ｂを参照しながら説明する。
【０１８５】
図１３Ａは、プロセッサコア１０のソフトウェア処理とセキュアアシスト８０内のセキュアコントローラ８２によるハードウェア処理との連携により行なわれるＴＬＢ／ＡＭＲエントリ登録操作の処理手順を示すフローチャートであり、図の左の破線枠内が前記ソフトウェア処理を、図の右の破線枠内が前記ハードウェア処理を示す。図１３Ｂは、ＴＬＢ／ＡＭＲ登録操作の処理におけるセキュアハードウェアの動作を示す摸式図である。
【０１８６】
プロセッサコア１０で実行中のプログラム（認証済プログラム）は、ＴＬＢ／ＡＭＲミスが発生すると（Ｓ１２０）、既存のＴＬＢ／ＡＭＲミス処理を実行する（Ｓ１２１）。この既存のＴＬＢ／ＡＭＲミスの処理内容は公知なので、ここではその説明を省略する。
【０１８７】
プログラムは、そのプログラム管理情報から鍵番号とライセンス情報（３２ビット保存されているうちの下位１６ビット）を取得し（Ｓ１２２）、上記ＴＬＢ／ＡＭＲミスが発生したＴＬＢ／ＡＭＲのエントリ番号（ＴＬＢ／ＡＭＲ登録エントリ番号）、鍵番号、上記ライセンス情報及び登録コマンド（ＴＬＢ／ＡＭＲ拡張部のエントリ登録コマンド）を、それぞれ、セキュアアシスト８０の公開ＩＦ８１内の該当レジスタに設定する（Ｓ１２３）。そして、セキュアコントローラ８２の登録ステートマシンのステイタス更新待ち状態に入る（Ｓ１２４）。
【０１８８】
ステップＳ１２３の処理により、図１３Ｂに示すように、公開ＩＦ８１のレジスタ８２５にＴＬＢ／ＡＭＲ登録番号（前記ＴＬＢ／ＡＭＲ登録エントリ番号）が、レジスタ８１４に登録鍵番号が、ライセンスレジスタ８１９にライセンス情報が、コマンドレジスタ８１６に登録コマンドが設定される。
【０１８９】
ステップＳ１２３でコマンドレジスタ８１６に登録コマンドが設定されると、セキュアコントローラ８２のセキュアコントローラ８２で登録ステートマシンが起動される（Ｓ１２５）。
【０１９０】
登録ステートマシンは、公開ＩＦ８１のレジスタ８１６に設定されたライセンス情報とＴＬＢ／ＡＭＲ拡張部６３の前記ＴＬＢ／ＡＭＲエントリ番号が指すエントリに登録されているライセンス情報の下位１６ビットを比較し（Ｓ１２６）、両者が一致するか判断する（Ｓ１２７）。
【０１９１】
上記ライセンス情報の比較は、図１３Ｂに示すように、セキュアパイプ６０のライセンスチェック部６５により行なわれる。
登録ステートマシンは、ステップＳ１２７でのライセンスチェックが成功（２つのライセンス情報が一致）であれば、ＴＬＢ／ＡＭＲ拡張部の前記ＴＬＢ／ＡＭＲエントリ番号が指すエントリの鍵番号とライセンス情報を更新し、該エントリのＳビットに、暗号鍵テーブル６４の前記鍵番号が指すエントリ（登録鍵エントリ）のＳビットをコピーする（Ｓ１２８）。
【０１９２】
ステップＳ１２８での処理におけるセキュアハードウェアの動作を、図１３Ｂを参照しながら説明する。ライセンスチェック部６５は、上述した２つのライセンス情報を比較し（ライセンスチェック）、その比較結果（ライセンスチェック結果）をＡＮＤ演算回路８２７に出力する。ライセンスチェック部６５は、２つのライセンス情報が一致した場合には“１”（成功）の信号を、不一致の場合には“０”（失敗）の信号をＡＮＤゲート部８３０に出力する。ＡＮＤゲート部８３０には、暗号鍵テーブル６４の前記登録鍵エントリのＳビット（信号）も出力される。ＡＮＤゲート部８３０は、上記２つの信号の演算結果をＴＬＢ／ＡＭＲ拡張部６３のレジスタ８２５に設定されたＴＬＢ／ＡＭＲエントリ番号が指すエントリ（登録指定エントリ）とプロセッサコア１０に出力する。これにより、前記ライセンスチェックが成功であった場合には、ＴＬＢ／ＡＭＲ拡張部６３の前記登録指定エントリとプロセッサコア１０には、暗号鍵テーブル６４の前記暗号鍵テーブル６４の前記鍵番号が示すエントリに登録されているＳビットがそのまま出力される。そして、そのＳビットがＴＬＢ／ＡＭＲ拡張部６３の前記登録指定エントリのＳビット格納域にコピーされる（ＴＬＢ／ＡＭＲ拡張部６３のＳビット更新）。また、前記暗号鍵テーブル６４に登録されていたＳビットは、Ｓビット信号線９１を介して、プロセッサコア１０にも出力される。プロセッサコア１０は、ＴＬＢ／ＡＭＲの該当エントリ（Ｓビットが更新されたＴＬＢ／ＡＭＲ拡張部６３の前記登録指定エントリに対応するエントリ）のＳビット格納域に、Ｓビット信号線９１から入力されるＳビットをコピーし、ＴＬＢ／ＡＭＲの該当エントリのＳビットを更新する。
【０１９３】
登録ステートマシンは、ステップＳ１２８の処理が終了すると、公開ＩＦ８１内の登録ステイタスレジスタ８２７に成功ステイタスを設定する（Ｓ１２９）。一方、ステップＳ１２７でのライセンス情報比較結果が失敗であると判断した場合には、前記登録ステイタスレジスタ８２７にエラーステイタスを設定する（Ｓ１３０）。
【０１９４】
プロセッサコア１０で実行中のプログラムは、セキュアアシスト８０の公開ＩＦ８１内に実装された登録ステイタスレジスタ８２７の更新が完了したと判断すると、登録ステイタスレジスタ８２７に設定されたステイタスを調べ、ＴＬＢ／ＡＭＲ登録が成功したと判断すると、ＴＬＢ／ＡＭＲ登録を終了する（Ｓ１３２）。また、ＴＬＢ／ＡＭＲ登録が失敗したと判断すると、エラー終了する（Ｓ１３３）。
【０１９５】
このようにして、暗号鍵テーブル６４に設定済みの鍵について、その鍵の暗号化空間に対応するＴＬＢ／ＡＭＲ拡張部６３のエントリに、その鍵の鍵番号、ライセンス情報、及びＳビットが設定され、暗号鍵テーブル６４とＴＬＢ／ＡＭＲ拡張部６３の対応するエントリ同士が前記鍵番号によって連携される。また、ＴＬＢ／ＡＭＲ拡張部６３のエントリに設定されたＳビットが、プロセッサコア１０のＴＬＢ／ＡＭＲの対応エントリにコピーされる。この結果、プロセッサコア１０のＴＬＢ／ＡＭＲのエントリ（前記暗号鍵テーブル６４に設定済み鍵の暗号化空間のアドレス変換情報が設定されたエントリ）のＳビットと、セキュアプロセッサのセキュアパイプ６０内に実装されたＴＬＢ／ＡＭＲ拡張部６３の対応エントリのＳビットが同一の値に設定される。
【０１９６】
｛ＴＬＢ／ＡＭＲエントリ削除｝
ＴＬＢ／ＡＭＲ削除操作の処理を、図１４Ａ、１４Ｂを参照しながら説明する。
図１４Ａは、プロセッサコア１０のソフトウェア処理とセキュアアシスト８０内のセキュアコントローラ８２によるハードウェア処理との連携により行なわれるＴＬＢ／ＡＭＲエントリ削除操作の処理手順を示すフローチャートであり、図の左の破線枠内が前記ソフトウェア処理を、図の右の破線枠内が前記ハードウェア処理を示す。図１４Ｂは、ＴＬＢ／ＡＭＲ削除操作の処理におけるセキュアハードウェアの動作を示す摸式図である。
【０１９７】
プロセッサコア１０で実行中のプログラム（認証済プログラム）は、ＴＬＢ／ＡＭＲ削除処理を開始すると（Ｓ１４０）、既存のＴＬＢ／ＡＭＲ削除処理を実行する（Ｓ１４１）。この既存のＴＬＢ／ＡＭＲ削除処理の内容は公知なので、ここではその説明を省略する。
【０１９８】
プログラムは、そのプログラム管理情報からライセンス情報（３２ビット保存されているうちの下位１６ビット）を取得し（Ｓ１４２）、ＴＬＢ／ＡＭＲの削除するエントリの番号（ＴＬＢ／ＡＭＲ削除エントリ番号）、上記ライセンス情報及び削除コマンド（ＴＬＢ／ＡＭＲ拡張部のエントリ削除コマンド）を、それぞれ、セキュアアシスト８０の公開ＩＦ８１内の該当レジスタに設定する（Ｓ１４３）。そして、セキュアコントローラ８２の削除ステートマシンのステイタス更新待ち状態に入る（Ｓ１４４）。
【０１９９】
ステップＳ１４３の処理により、図１４Ｂに示すように、公開ＩＦ８１のレジスタ８２６にＴＬＢ／ＡＭＲエントリ番号（前記ＴＬＢ／ＡＭＲ削除エントリ番号）が、ライセンスレジスタ８１９にライセンス情報が、コマンドレジスタ８１６に削除コマンドが設定される。
【０２００】
ステップＳ１２３でコマンドレジスタ８１６に削除コマンドが設定されると、セキュアコントローラ８２のセキュアコントローラ８２で削除ステートマシンが起動される（Ｓ１４５）。
【０２０１】
削除ステートマシンは、公開ＩＦ８１のレジスタ８１６に設定されたライセンス情報とＴＬＢ／ＡＭＲ拡張部６３の前記ＴＬＢ／ＡＭＲ削除エントリ番号が指すエントリに登録されているライセンス情報の下位１６ビットを比較し（Ｓ１４６）、両者が一致するか判断する（Ｓ１４７）。
【０２０２】
上記ライセンス情報の比較は、図１４Ｂに示すように、セキュアパイプ６０のライセンスチェック部６５により行なわれる。
削除ステートマシンは、ステップＳ１２７でのライセンスチェックが成功（２つのライセンス情報が一致）であれば、ＴＬＢ／ＡＭＲ拡張部の前記ＴＬＢ／ＡＭＲ削除エントリ番号が指すエントリを削除する（Ｓ１４８）。
【０２０３】
ステップＳ１４８での処理におけるセキュアハードウェアの動作を、図１４Ｂを参照しながら説明する。ライセンスチェック部６５は、上述した２つのライセンス情報を比較し（ライセンスチェック）、両者が一致すればＴＬＢ／ＡＭＲ拡張部６３のレジスタ８２５に設定されたＴＬＢ／ＡＭＲエントリ番号が指すエントリを削除する。
【０２０４】
削除ステートマシンは、ステップＳ１４８の処理が終了すると、公開ＩＦ８１内の削除ステイタスレジスタ８２８に成功ステイタスを設定する（Ｓ１４９）。一方、ステップＳ１４７でのライセンス情報比較結果が失敗であると判断した場合には、前記登録ステイタスレジスタ８２７にエラーステイタスを設定する（Ｓ１５０）。
【０２０５】
プロセッサコア１０で実行中のプログラムは、セキュアアシスト８０の公開ＩＦ８１内に実装された削除ステイタスレジスタ８２８の更新が完了したと判断すると、その削除ステイタスレジスタ８２８に設定されたステイタスを調べ、ＴＬＢ／ＡＭＲ削除処理が成功したと判断すると、ＴＬＢ／ＡＭＲ削除を終了する（Ｓ１５２）。また、ＴＬＢ／ＡＭＲ登録が失敗したと判断すると、エラー終了する（Ｓ１５３）。
【０２０６】
このように、プロセッサコア１０で実行中の認証済プログラムは、暗号鍵テーブル６４に登録された鍵と連携されているＴＬＢ／ＡＭＲ拡張部６３のエントリを、削除コマンドとライセンス情報を用いて個別に削除することができる。
｛ＴＬＢ／ＡＭＲエントリ無効化｝
図１５は、本実施例のセキュアプロセッサによるＴＬＢ／ＡＭＲのエントリ無効化操作を模式的に示す図である。
【０２０７】
ＴＬＢ／ＡＭＲ拡張部６３及びプロセッサコア１０のＴＬＢ／ＡＭＲのエントリは、そのＳビットを“０”にクリアすることによって無効化される。エントリを有効化するにはエントリの再登録が必要である。
【０２０８】
セキュアプロセッサは、下記（１）、（２）の場合に、上記エントリの無効化操作を行う。
（１）プロセッサコア１０のＴＬＢ／ＡＭＲのエントリ、そのエントリに対応するＴＬＢ／ＡＭＲ拡張部６３のエントリ、そのＴＬＢ／ＡＭＲ拡張部６３のエントリに連携されている暗号鍵テーブル６４のエントリのＳビットが一致しない場合。
【０２０９】
これは、以下の条件の場合に発生する。
・暗号鍵テーブル６４のエントリから鍵が削除された場合
・プロセッサコア１０のＴＬＢ／ＡＭＲのエントリのＳビットが“０”にクリアされた場合
・プロセッサコア１０のＴＬＢ／ＡＭＲのエントリが消去された場合
（２）ＴＬＢ／ＡＭＲ拡張部６３のエントリと該エントリと連携している暗号鍵テーブル６４のエントリのライセンス情報が不一致の場合。
【０２１０】
これは、以下の条件の場合に発生する。
・暗号鍵テーブル６４のエントリから鍵が削除された場合
・暗号鍵テーブル６４のエントリに指定された鍵とは異なる鍵が登録された場合
本実施例のセキュアプロセッサは、セキュアハードウェアに設けられたライセンスチェック部６５、Ｓビット一致チェック部８３１及びＯＲゲート部８３２が、以下に説明する処理を行うことにより、上記ＴＬＢ／ＡＭＲのエントリの無効化操作を実現する。
【０２１１】
プロセッサコア１０で実行されるプログラムがバスアクセスを行うと、アクセスされたメモリ空間に対応するＴＬＢ／ＡＭＲのエントリの番号（ＴＬＢ／ＡＭＲエントリ番号）と該エントリのＳビットがセキュアハードウェアに出力される。
【０２１２】
セキュアハードウェアのライセンスチェック部６５は、プロセッサコア１０から入力されるＴＬＢ／ＡＭＲエントリ番号に対応するＴＬＢ／ＡＭＲ拡張部６３のエントリに登録されたライセンス情報とＴＬＢ／ＡＭＲ拡張部６３の該エントリに登録された鍵番号が指す暗号鍵テーブル６４のエントリに登録されたライセンス情報の下位１６ビットを比較し、両者が不一致であれば、不一致検出信号（第１の不一致検出信号）をＯＲゲート部８３２に出力する。
【０２１３】
セキュアハードウェアのＳビット一致チェック部８３１は、プロセッサコア１０から入力される前記Ｓビットと、プロセッサコア１０から入力されるＴＬＢ／ＡＭＲエントリ番号に対応するＴＬＢ／ＡＭＲ拡張部６３のエントリに登録されたＳビットとＴＬＢ／ＡＭＲ拡張部６３の該エントリに登録された鍵番号が指す暗号鍵テーブル６４のエントリに登録されたＳビットを比較し、それらのＳビットが不一致であれば、不一致検出信号（第２の不一致検出信号）をＯＲゲート部８３２に出力する。
【０２１４】
ＯＲゲート部８３２は、ライセンスチェック部６５とＯＲゲート部８３２からそれぞれ入力される２つの不一致検出信号についてＯＲ演算を施し、第１または第２のいずれかの不一致検出信号が入力されていれば、ＴＬＢ／ＡＭＲ拡張部６３の該当エントリ（プロセッサコア１０から入力されるＴＬＢ／ＡＭＲエントリ番号に対応するＴＬＢ／ＡＭＲ拡張部６３のエントリ）のＳビットを“０”にクリアすると共に、プロセッサコア１０に対して前記セキュアハードウェアに対して出力したＳビットの“０”クリアを指示する。
［セキュアパイプのデータライト動作］
図１６は、プロセッサコア１０で実行されるプログラムがデータライトコマンドを発行した場合のセキュアパイプ６０の動作を示す図である。同図左の破線の矩形枠は、上記データライトコマンドが発行された場合に、ＣＰＵコア１５から出力されるデータや情報を示す。
【０２１５】
プロセッサコア１０で実行されるプログラムがデータライトコマンドを発行すると、ＣＰＵコア１５から、書き込むべき出力データ１５１（平文データ）が暗号処理パイプ６２に、その出力データの書き込みアドレス１５２とコマンド属性１５３（この場合は、コマンドがデータライトコマンドであることを示す属性）がコマンドバッファ６１に出力される。また、出力データ１５２の書き込みアドレスが属するメモリ空間のアドレス変換情報が設定されたプロセッサコア１０のＴＬＢ／ＡＭＲのエントリの番号（ＴＬＢ／ＡＭＲエントリ番号）とそのＳビットがセキュアパイプ６０に出力される。
【０２１６】
セキュアパイプ６０では、図１５で説明した場合と同様の動作により、ライセンスチェック部６５とＳビット一致チェック部８３１で、それぞれ、ライセンス情報とＳビットの不一致チェックが行なわれる。ライセンスチェック部６５とＳビット一致チェック部８３１は、それぞれの不一致検出信号をＯＲゲート部８４１に出力する。ＯＲゲート部８４１は、２つの不一致検出信号のＯＲ演算を行い、図１５のＯＲゲート部８３２と同様にＴＬＢ／ＡＭＲ拡張部６３の０アクティブであるエントリ無効化信号をＴＬＢ／ＡＭＲ拡張部６３に出力すると共に、鍵供給制御部８４２に１アクティブである鍵供給許可信号を出力する。この鍵供給許可信号は、上記２つの不一致検出信号がアクティブでないとき（ライセンスチェック部６５でのライセンスチェックで２つのライセンス情報が一致し、かつ、Ｓビット一致チェック部８３１のＳビット一致チェックで全てのＳビットが“１”となって一致したとき）にアクティブとなる。
【０２１７】
鍵供給制御部８４２は、ＯＲゲート部８４１からアクティブの鍵供給許可信号を入力すると、暗号鍵テーブル６４の該当エントリから鍵（暗号鍵）を読み出し、それを暗号処理パイプ６２に出力する。また、このとき、暗号鍵テーブル６４の前記該当エントリから上記鍵属性も読み出され、それが暗号処理パイプ６２とコマンドバッファ６１に供給される。
暗号処理パイプ６２は、出力データ１５１を鍵供給制御部８４２から供給される鍵属性と暗号鍵を基にして暗号化し、その暗号化により得られた暗号データをローカルバス３０に出力する。コマンドバッファ６１は、ＣＰＵコア１５から入力されるアドレス１５２とコマンド属性１５３を一時的に格納する。そして、それらを、暗号鍵テーブル６４から入力される鍵属性を基に暗号処理パイプ６２から暗号データが出力されるまでも遅延時間を考慮した適切なタイミングでローカルバス３０に出力する。ローカルバス３０に入力される暗号データ、アドレス１５２及びコマンド属性１５３はローカルバス３０からＳＤＲＡＭＣ４０に出力される。
【０２１８】
図１７は、プロセッサコア１０で実行されるプログラムがデータ／命令リードコマンドを発行した場合のセキュアパイプ６０の動作を示す図である。同図左の破線の矩形枠は、上記データ／命令リードコマンドが発行された場合に、ＣＰＵコア１５から出力されるデータや情報を示す。
【０２１９】
データ／命令リードコマンドが発行された場合のセキュアパイプ６０に動作は、基本的には、データライトコマンドが発行された場合と同様である。異なるのは、暗号処理パイプ６２がＳＤＲＡＭＣ４０により読み出されたデータまたは命令コード（これらは、暗号化されている）を鍵供給制御部８４２から供給される鍵（暗号鍵）と暗号鍵テーブル６４から入力される鍵属性を基に復号し、その復号により得られた平文のデータまたは命令コードを入力データ１５６としてＣＰＵコア１５に出力する点である。
【０２２０】
また、ＣＰＵコア１５から出力されるアドレス１５７がデータまたは命令のリードアドレス、コマンド属性１５８がデータ／命令リードコマンドの属性情報であり、これらは、ＣＰＵコア１５からコマンドバッファ６１に出力され、コマンドバッファ６１からローカルバス３０に出力される。
【０２２１】
図１８は、本実施例のセキュアプロセッサによるプログラム実行制御を示す図である。同図上の破線の矩形枠は命令（コード）空間を示し、同図下の矩形枠はデータ空間を示す。
【０２２２】
図１８は、ＯＳが起動（ブート）後、３つのプログラムを起動する場合の例を示している。
ブート時は、前述したように、セキュアプロセッサ内蔵のビルトイン鍵で認証されるセキュアブートプログラムによりＯＳカーネル（命令コード）の鍵認証を行う。ＯＳカーネルは起動すると、鍵生成処理を行い、データ空間を確保し、自身が使用するデータ空間を生成する（図１８の（１））。ＯＳカーネルは、次に、プログラム１の起動のため、プログラム１の認証情報を用いて鍵認証を行う（図１８の（Ａ））この鍵認証により認証されたプログラム１の命令コードの鍵は、プログラム１の終了まで暗号鍵テーブル６４に保管され、プログラム１の終了時に、ＯＳカーネルによりプログラム１の命令コードの鍵削除が行なわれる（図１８の（Ｅ））。
【０２２３】
プログラム１は、その動作区間でプログラム１自身のデータ空間を必要とするため、鍵生成によりそのデータ空間を生成し、そのデータ空間の使用後はプログラム終了に先立って鍵削除を行う（図１８の（２）、（６））。
【０２２４】
ところで、データ空間の生成、消去に伴う鍵登録、鍵削除は、子プログラムであるプログラム１のように、認証されている空間で動作するプログラムが処理してもよいし、ＯＳカーネルに依頼して、ＯＳカーネルに代行処理してもらってもよい。
【０２２５】
プログラム３も、プログラム１と同様な処理を行う（図１８の（Ｃ）、（４）、（８）、（Ｇ））。プログラム２は、何らかの理由でプログラムがいったん停止する場合の例である。プログラム２は、開始と終了の処理はプログラム１、３と同様であるが、ＯＳカーネルの指示による一時停止処理（図１８の（Ｄ）、（Ｆ））の区間において、命令コードの鍵は削除されずに暗号鍵テーブル６４に保管されたままとなり、データ鍵については、鍵生成処理により生成された鍵を鍵保存処理により保存し（図１８の（５））、実行再開時は、そのデータ鍵の情報を用いて鍵認証処理を行い（図１８の（７））、データ鍵生成時に生成されたデータ空間（図１８の（３））を再利用する。
【０２２６】
上記実施例では、プロセッサコア１０のＴＬＢ／ＡＭＲのエントリにＳビットを設け、プロセッサコア１０が命令コード時に、その命令コードが属する空間のＳビットをセキュアハードウェアに出力することで、セキュアハードウェアにより上記命令コードが認証済みであるか判断するような構成にしているが、必ずしも、プロセッサコア１０のＴＬＢ／ＡＭＲのエントリにＳビットを設ける必要はなく、例えば、セキュアパイプ６０が、プロセッサコア１０での命令コード実行時に、プロセッサコア１０からその命令コードの存在するアドレスを受け取り、セキュアパイプ６０が上記命令コードが認証済みであるかどうか判断するような構成にすることも可能である。
【０２２７】
（付記１）
暗号化された命令コード（暗号化命令コード）を復号して実行するセキュアプロセッサであって、
前記暗号化命令コードを復号して得られる命令コードを実行するプロセッサコアと、
該プロセッサコアで実行されるプログラムからアクセスできない位置に実装されたセキュアバスと、
該セキュアバスに接続され、前記プロセッサコアで実行される前記暗号化命令コードの認証と、前記プロセッサコアが外部と入出力する前記暗号化命令コード及びデータの暗号化／復号化を行うセキュアハードウェアと、
を備えることを特徴とするセキュアプロセッサ。
（付記２）
付記１記載のセキュアプロセッサであって、
前記セキュアハードウェアは、
ビルトイン鍵を記憶する記憶手段を備え、
前記セキュアハードウェアは、前記ビルトイン鍵により暗号化されたセキュアブートプログラムによって初期化され、前記セキュアブートプログラムは、セキュアプロセッサで実行される命令コード認証の起点となることを特徴とする。
（付記３）
付記２記載のセキュアプロセッサであって、
前記セキュアハードウェアは、
前記プロセッサコアが外部と入出力する前記暗号化命令コード及びデータの暗号化／復号化を行う、前記セキュアバスに接続されたセキュアパイプを備えることを特徴とする。
（付記４）
付記２記載のセキュアプロセッサであって、
前記セキュアハードウェアは、
公開インターフェースを介して、プロセッサコアで実行されるプログラムとの間でコマンドや情報を送受信し、公開鍵系暗号処理と公開鍵系認証処理を実行する、前記セキュアバスに接続されたセキュアアシストを備えることを特徴とする。
（付記５）
付記２記載のセキュアプロセッサであって、
ＤＭＡ転送機能を有し、該ＤＭＡ転送機能によって転送された命令コードまたはデータのページ検証を行う、前記セキュアバスに接続されたセキュアＤＭＡを、
備えることを特徴とする。
（付記６）
付記２記載のセキュアプロセッサであって、
付記３記載のセキュアパイプと、
付記４記載のセキュアアシストと、
付記５記載のセキュアＤＭＡを備え、
前記セキュアアシストは、前記セキュアパイプと前記セキュアＤＭＡの設定／制御を、前記セキュアバス経由で行うことを特徴とする。
（付記７）
付記３記載のセキュアプロセッサであって、
前記セキュアパイプは、
プロセッサコアで実行される認証済のプログラムにのみ、認証済のデータ空間へのアクセスを許可することを特徴とする。
（付記８）
付記６記載のセキュアプロセッサであって、
前記セキュアパイプは、
公開鍵暗号化された鍵（公開鍵暗号化鍵）と、該公開鍵暗号化鍵のライセンス情報と、該公開鍵暗号化鍵が信頼可能であるか否かを示す第１のフラグが登録されるエントリを有する暗号鍵テーブルと、
前記プロセッサコアのＴＬＢ／ＡＭＲと一対一に対応するエントリを有し、該エントリ内に、前記暗号鍵テーブルに登録されている暗号鍵の識別情報と、該暗号鍵識別情報が指す前記暗号鍵テーブルのエントリに登録されている第１のフラグのコピーである第２のフラグとライセンス情報が登録されるＴＬＢ／ＡＭＲ拡張部と、
前記ＴＬＢ／ＡＭＲ拡張部のエントリに登録されているライセンス情報と、前記ＴＬＢ／ＡＭＲ拡張部の該エントリに登録されている暗号鍵識別情報が指す暗号鍵テーブルのエントリに登録されているライセンス情報が一致するか調べるライセンスチェック部と、
を備えることを特徴とする。
（付記９）
付記８記載のセキュアプロセッサであって、
前記プロセッサコアのＴＬＢ／ＡＭＲのエントリは、前記ＴＬＢ／ＡＭＲ拡張部の第２のフラグと同様な機能を有する第３のフラグを有することを特徴とする。
（付記１０）
付記８記載のセキュアプロセッサであって、
前記暗号鍵テーブルの空きエントリの管理は、前記プロセッサコアで実行されるプログラムによって管理されることを特徴とする。
（付記１１）
付記６記載のセキュアプロセッサであって、
前記セキュアハードウェアは、
命令コードの前記公開鍵暗号化鍵を認証する鍵認証手段と、
該鍵認証手段によって前記公開鍵暗号化鍵が認証されたとき、前記公開鍵暗号化鍵のライセンス情報を生成するライセンス情報生成手段と、
前記鍵認証手段によって前記公開鍵暗号化鍵が認証されたとき、前記公開鍵暗号化鍵を復号する鍵復号手段を備え、
前記ライセンス情報生成手段によって生成されたライセンス情報は、前記鍵認証手段に認証を依頼した前記プロセッサコアで実行中のプログラムによって保存され、前記鍵復号手段によって復号された鍵は前記暗号鍵テーブルに登録されることを特徴とする。
（付記１２）
付記１１記載のセキュアプロセッサであって、
前記鍵認証手段は、前記公開鍵暗号化鍵の属性、前記公開鍵暗号化鍵の鍵署名、該鍵署名の署名検証鍵及び該署名検証鍵の署名検証鍵署名を基に、前記公開鍵暗号化鍵の認証を行うことを特徴とする。
（付記１３）
付記６記載のセキュアプロセッサであって、
前記セキュアハードウェアは、
命令コードの前記公開鍵暗号化鍵を認証する鍵認証手段と、
前記命令コードをページ単位で検証するページ検証手段と、
前記鍵認証手段によって前記公開鍵暗号化鍵が認証され、かつ、前記ページ検証手段により前記命令コードのページが検証されたとき、前記公開鍵暗号化鍵のライセンス情報を生成するライセンス情報生成手段と、
前記鍵認証手段によって前記公開鍵暗号化鍵が認証され、かつ、前記ページ検証手段により命令コードのページが検証されたとき、前記公開鍵暗号化鍵を復号する鍵復号手段を備え、
該ライセンス情報生成手段によって生成されたライセンス情報は、前記鍵認証手段に認証を依頼した前記プロセッサコアで実行中のプログラムによって保存され、前記鍵復号手段によって復号された鍵は前記暗号鍵テーブルに登録されることを特徴とする。
（付記１４）
付記１３記載のセキュアプロセッサであって、
前記鍵認証手段は、前記公開鍵暗号化鍵の属性、前記公開鍵暗号化鍵の鍵署名、該鍵署名の署名検証鍵及び該署名検証鍵の署名検証鍵署名を基に、前記公開鍵暗号化鍵の認証を行い、
前記ページ検証手段は、前記命令コードのページ署名を基にページ検証を行うことを特徴とする。
（付記１５）
付記１４記載のセキュアプロセッサであって、
前記鍵認証手段は、前記公開鍵暗号化鍵の属性、前記公開鍵暗号化鍵の鍵署名、該鍵署名の署名検証鍵及び該署名検証鍵の署名検証鍵署名を基に、前記公開鍵暗号化鍵の認証し、
前記ページ検証手段は、前記命令コードのページ署名を基にページ検証をプロセッサコアは、前記第１の検証手段と前記第２の検証手段によって検証された命令コードのみを実行することを特徴とする。
【図面の簡単な説明】
【０２２８】
【図１】本発明の一実施例でセキュアプロセッサのシステム全体の構成図である。
【図２】本実施例のセキュアプロセッサにおける鍵の安全性を維持する起動手順（ブートシーケンス）を説明する図であり、（ａ）は本実施例のセキュアプロセッサのシステム起動時におけるプログラムの動作フロー（ブートシーケンス）を示す図、（ｂ）は該プログラムのメモリ上のマッピング状態を示す図、（ｃ）は上記動作フローに対応したプロセッサコア１０のＴＬＢ／ＡＭＲとセキュアパイプ６０のＴＬＢ／ＡＭＲ拡張部６３の設定状態を模式的に示す。本発明の初期値生成方法を概念的に示す図である。
【図３Ａ】認証モード１をについて説明する図である。
【図３Ｂ】認証モード１でのコード認証において必要な情報を示す図である。
【図３Ｃ】認証モード１におけるコード認証処理の流れを示す図である。
【図３Ｄ】認証モード２における鍵の受け渡しと認証処理を説明する図である。
【図４Ａ】本実施例のセキュアプロセッサにおけるＳビット属性によるプログラムのアクセス制限制御を説明する図である。
【図４Ｂ】Ｓビットによる制御の関係を示す図である。
【図４Ｃ】本実施例のセキュアプロセッサによるＳビットによるアクセス制限を示す図である。
【図５】本実施例のセキュアプロセッサによるＳ＝１の親プログラムによる子プログラムの認証手順の概略を示す図である
【図６】セキュアパイプ内に設けられる暗号鍵テーブルの構成を示す図である。
【図７】セキュアパイプ内に設けられるＴＬＢ／ＡＭＲ拡張部の構成を示す図である。
【図８Ａ】プロセッサコアが備えるＴＬＢ／ＡＭＲの構成図である。
【図８Ｂ】プロセッサコアのＴＬＢ／ＡＭＲとセキュアパイプ内のＴＬＢ／ＡＭＲ拡張部との関係を示す図である。
【図９Ａ】鍵認証処理におけるセキュアハードウェアの動作概要を示す模式図である。
【図９Ｂ】認証モード１における認証処理の手順を示すフローチャートである。
【図９Ｃ】認証モード２おける認証処理の手順を示すフローチャートである。
【図１０Ａ】鍵生成処理におけるセキュアハードウェアの動作概要を示す模式図である。
【図１０Ｂ】本実施例のセキュアプロセッサにより行なわれる鍵生成処理のより詳細な手順を示すフローチャートである。
【図１１Ａ】本実施例のセキュアプロセッサの鍵保存処理を行うハードウェア機構を示すブロック図である。
【図１１Ｂ】本実施例のセキュアプロセッサによる鍵保存処理の手順を示すフローチャートである。
【図１２Ａ】本実施例のセキュアプロセッサの鍵削除処理におけるセキュアハードウェアの動作概要を示す模式図である。
【図１２Ｂ】本実施例のセキュアプロセッサによる鍵削除処理の手順を示すフローチャートである。
【図１３Ａ】プロセッサコアのソフトウェア処理とセキュアアシスト内のセキュアコントローラによるハードウェア処理との連携により行なわれるＴＬＢ／ＡＭＲエントリ登録操作の処理手順を示すフローチャートである。
【図１３Ｂ】ＴＬＢ／ＡＭＲ登録操作の処理におけるセキュアハードウェアの動作を示す摸式図である。
【図１４Ａ】プロセッサコア１０のソフトウェア処理とセキュアアシスト８０内のセキュアコントローラ８２によるハードウェア処理との連携により行なわれるＴＬＢ／ＡＭＲエントリ削除操作の処理手順を示すフローチャートである。
【図１４Ｂ】ＴＬＢ／ＡＭＲ削除操作の処理におけるセキュアハードウェアの動作を示す摸式図である。
【図１５】本実施例のセキュアプロセッサによるＴＬＢ／ＡＭＲのエントリ無効化操作を模式的に示す図である。
【図１６】プロセッサコアで実行されるプログラムがデータライトコマンドを発行した場合のセキュアパイプの動作を示す図
【図１７】プロセッサコアで実行されるプログラムがデータ／命令リードコマンドを発行した場合のセキュアパイプの動作を示す図である。
【図１８】本実施例のセキュアプロセッサによるプログラム実行制御を示す図である。
【図１９】従来のプロセッサコアが備えるＴＬＢ／ＡＭＲ１５０１の構成を示す。
【符号の説明】
【０２２９】
１０  プロセッサコア
２０  ２次キャッシュ
３０  ローカルバス
６０  セキュアパイプ
６１  コマンドバッファ
６２  暗号処理パイプ
６３  ＴＬＢ／ＡＭＲ拡張部
６４  暗号鍵テーブル
６５  ライセンスチェック部
６６  セキュアバスＩＦ
７０  セキュアＤＭＡ
７３  共通鍵暗号処理／ハッシュッ処理部
７４  セキュアＩＦ
７６  セキュアバスＩＦ
８０  セキュアアシスト
８１  公開ＩＦ
８２  セキュアコントローラ
８３  ＲＳＡ演算器
８４  楕円暗号演算器
８５  ハッシュ演算器
８６  乱数発生器
８７  認証リスト
８８  セキュアバスＩＦ
８９  セキュアバス
９０  セキュアバス
１０２  鍵署名
１０３  署名検証鍵
１０４  署名検証鍵署名
１０５  ページ署名
３０１  第１の公開鍵ペア
３０２  第２の公開鍵ペア
３０３  第３の公開鍵ペア
３１１、３６１  命令コード
３１２、３６２  共通鍵暗号化された命令コード
３１３  電子証明書
３１４  署名検証鍵（公開鍵Ｋｐ２）とその他の情報から成るデータ
３２０  伝送手段
５０１  プロセッサコアのＴＬＢ／ＡＭＲ
８１１〜８１３  認証情報(鍵署名、署名検証鍵、署名検証鍵署名)の格納レジスタ
８１４  暗号鍵テーブルのエントリ番号（鍵番号）の格納レジスタ
８１６  コマンドレジスタ
８１７  公開鍵暗号化された暗号鍵の格納レジスタ
８１９  ライセンスレジスタ
８２０  生成ステイタスレジスタ
８２２  保存ステイタスレジスタ
８２４  削除ステイタスレジスタ
８２７  登録ステイタスレジスタ
８２８  削除ステイタスレジスタ
８３０  ＡＮＤゲート部
８３１  Ｓビット一致チェック部
８３２  ＯＲゲート部（第１のＯＲゲート部）
８４１  ＯＲゲート部（第２のＯＲゲート部）
【図１】
0004795812.tif 000002
【図３Ａ】
0004795812.tif 000003
【図３Ｃ】
0004795812.tif 000004
【図３Ｄ】
0004795812.tif 000005
【図４Ａ】
0004795812.tif 000006
【図４Ｂ】
0004795812.tif 000007
【図５】
0004795812.tif 000008
【図６】
0004795812.tif 000009
【図７】
0004795812.tif 000010
【図８Ａ】
0004795812.tif 000011
【図８Ｂ】
0004795812.tif 000012
【図９Ａ】
0004795812.tif 000013
【図９Ｂ】
0004795812.tif 000014
【図９Ｃ】
0004795812.tif 000015
【図１０Ａ】
0004795812.tif 000016
【図１０Ｂ】
0004795812.tif 000017
【図１１Ａ】
0004795812.tif 000018
【図１１Ｂ】
0004795812.tif 000019
【図１２Ａ】
0004795812.tif 000020
【図１２Ｂ】
0004795812.tif 000021
【図１３Ａ】
0004795812.tif 000022
【図１３Ｂ】
0004795812.tif 000023
【図１４Ａ】
0004795812.tif 000024
【図１４Ｂ】
0004795812.tif 000025
【図１５】
0004795812.tif 000026
【図１６】
0004795812.tif 000027
【図１８】
0004795812.tif 000028
【図１９】
0004795812.tif 000029
【図２】
0004795812.tif 000030
【図３Ｂ】
0004795812.tif 000031
【図４Ｃ】
0004795812.tif 000032
【図１７】
0004795812.tif 000033