(57)【要約】【課題】マルチタスクのプログラム実行環境下で、プログラム対応に複数の暗号／復号鍵を使用できる暗号処理機能を持つ。【解決手段】暗号／復号処理を共通の回路で実現可能な暗号ハードウェアを保持し、外部メモリとの間の読み書き可能なデータについて、暗号作業用データ鍵、及び、復号作業用データ鍵の対をテーブルに保持し、外部メモリからのデータ読み出し時に復号作業用データ鍵を使い、データ書き込み時には暗号作業用データ鍵を使うことを特徴とするマイクロプロセッサ、及びソフトウェアが暗号作業用データ鍵、あるいは、復号作業用データ鍵を指定して、テーブルへの鍵登録をプロセッサに指示した時、プロセッサの暗号ハードウェアによって、対応する暗号作業用データ鍵、あるいは、復号作業用データ鍵を生成する機能を持ち、暗号作業用データ鍵、及び、復号作業用データ鍵を対応するテーブルに書き込むマイクロプロセッサ。【選択図】図１
2005078459.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサコアと、該プロセッサコアに接続され、複数のキャッシュラインを有するキャッシュコントローラと、前記キャッシュコントローラと接続され、少なくともプロセスと対応付けられた鍵を含む鍵テーブルと暗号/復号コントローラとを有するバスインタフェースユニットとを備え、外部のメモリとデータの送受信を行なうマイクロプロセッサであって、
前記外部のメモリから読み出したデータを、前記鍵テーブルから前記プロセッサコアで実行されるプロセスに基づいて選択された鍵で復号して、前記キャッシュコントローラによって、前記鍵、前記データの読出し元アドレスおよび復号したデータとを関連付けてあるキャッシュラインへ記憶する第１の手段と、
前記プロセスにより、前記キャッシュラインに記憶した復号されたデータを前記関連付けて記憶された鍵で暗号化して前記外部のメモリへ出力する第２の手段と、
前記暗号/復号コントローラ内に保持され、暗号/復号処理を共通の回路で実現可能な暗号/復号共通モジュールからなる第３の手段と、
前記鍵テーブル内に保持され、前記外部のメモリとの間の読み書き可能なデータについての暗号作業用データ鍵、及び、復号作業用データ鍵の対からなる第４の手段
とを備え、前記外部のメモリからのデータ読み出し時に前記復号作業用データ鍵を使い、データ書き込み時には前記暗号作業用データ鍵を使うことを特徴とするマイクロプロセッサ。
【請求項２】
前記鍵テーブル内に保持され、前記外部のメモリとの間の読み書き可能なコンテキストについての暗号作業用コンテキスト鍵、及び、復号作業用コンテキスト鍵の対からなる第５の手段を更に備え、
コンテキスト保存時に前記暗号作業用コンテキスト鍵を使い、前記外部のメモリからのコンテキスト読み出し時には前記復号作業用コンテキスト鍵を使うことを特徴とする請求項１記載のマイクロプロセッサ。
【請求項３】
プロセッサコアと、該プロセッサコアに接続され、複数のキャッシュラインを有するキャッシュコントローラと、前記キャッシュコントローラと接続され、少なくともプロセスと対応付けられた鍵を含む鍵テーブルと暗号/復号コントローラとを有するバスインタフェースユニットとを備え、外部のメモリとデータの送受信を行なうマイクロプロセッサであって、
前記外部のメモリから読み出したデータを、前記鍵テーブルから前記プロセッサコアで実行されるプロセスに基づいて選択された鍵で復号して、前記キャッシュコントローラによって、前記鍵、前記データの読出し元アドレスおよび復号したデータとを関連付けてあるキャッシュラインへ記憶する第１の手段と、
前記プロセスにより、前記キャッシュラインに記憶した復号されたデータを前記関連付けて記憶された鍵で暗号化して前記外部のメモリへ出力する第２の手段と、
前記暗号/復号コントローラ内に保持され、暗号/復号処理を共通の回路で実現可能な暗号/復号共通モジュールからなる第３の手段と、
前記鍵テーブル内に保持され、前記外部のメモリとの間の読み書き可能なデータについての暗号作業用データ鍵、及び、復号作業用データ鍵の対からなる第４の手段と、
ソフトウェアが前記暗号作業用データ鍵、あるいは、前記復号作業用データ鍵を指定して、前記鍵テーブルへの鍵登録を前記マイクロプロセッサに指示した時、前記暗号/復号共通モジュールによって、対応する前記暗号作業用データ鍵、あるいは、前記復号作業用データ鍵を生成し、前記暗号作業用データ鍵、及び、前記復号作業用データ鍵を対応する前記鍵テーブルに書き込む暗号/復号作業用鍵生成器からなる第６の手段
とを備えることを特徴とするマイクロプロセッサ。
【請求項４】
前記鍵テーブル内に保持され、前記外部のメモリとの間の読み書き可能なコンテキストについての暗号作業用コンテキスト鍵、及び、復号作業用コンテキスト鍵の対からなる第５の手段を更に備え、
前記第６の手段は、ソフトウェアが前記鍵テーブルへの鍵登録を前記マイクロプロセッサに指示したとき、前記暗号/復号共通モジュールによって、前記暗号作業用コンテキスト鍵、あるいは、前記復号作業用コンテキスト鍵から、対応する前記復号作業用コンテキスト鍵、あるいは、前記暗号作業用コンテキスト鍵を生成し、前記暗号作業用コンテキスト鍵、及び、前記復号作業用コンテキスト鍵を対応する前記鍵テーブルに書き込むことを特徴とする請求項３記載のマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチタスクのプログラム実行環境下で、プログラム対応に複数の暗号／復号鍵を使用できる暗号処理機能を持つことによって、プログラム自身の実行コードや処理対象のデータの秘密を守り、不正な改変を防止することのできる耐タンパマイクロプロセッサに関する。
【背景技術】
【０００２】
耐タンパプロセッサは、マルチタスクのコンピュータシステムにおいて、マルチベンダのプログラムに対して、プログラムの秘密の安全性を確保するメカニズムを備えたプロセッサである（例えば、特許文献１参照）。
【０００３】
耐タンパプロセッサの基本構成を図８に示す。耐タンパプロセッサでは、マルチタスクＯＳの管理下で、プロセッサハードウェアによりマルチベンダのプログラムの秘密を保護する。ＯＳが信頼できないことを前提として、耐タンパプロセッサはプロセッサパッケージ単体のハードウェア機能で完結するプログラムの秘密保護機能を提供する。プログラムは、実行時には、プロセスとしてＯＳに管理される。耐タンパプロセッサハードウェアにおけるプログラム実行は、通常のＯＳの場合と同様、プロセスを単位として行われる。大きな違いは、従来のＯＳが管理していたプロセス情報の一部をプロセッサハードウェアが直接管理すること、及び、プログラム自身の暗号／復号処理が内部のハードウェアによって処理されることである。正しいプロセス実行においては、ＯＳとプロセッサによるプロセス情報の管理は一致して行われるはずであるが、悪意のあるＯＳ、あるいは、バグのあるＯＳを前提とした場合、ＯＳとプロセッサが管理するプロセス情報の間に食い違いが生じることを前提としなければならない。以下の説明では、ＯＳによるプロセス情報の管理と、プロセッサによる管理を明確に区別するため、耐タンパプロセッサハードウェアが管理するプロセスを実行制御ユニット（ＥＣＵ）と呼ぶ。耐タンパプロセッサは、マルチタスク環境をサポートするため、複数のＥＣＵを擬似並行的に実行できる。プロセッサ上で、ＥＣＵはＥＣＵＩＤにより一意に識別される。
【０００４】
図８において、１１１はプロセッサコアを、１１２は実行中のＥＣＵＩＤを保持するＥＣＵＩＤレジスタをそれぞれ表す。１２１はキャッシュコントローラであり、内部に命令キャッシュ（Ｉ Cache）１２２とデータキャッシュ（D Cache）１２４をそれぞれ持つ。命令キャッシュ１２２、データキャッシュ１２４にはそれぞれメモリ１２３,１２５があり、各メモリは、キャッシュライン１２３−１〜ｎ、１２５−１〜ｎで構成されている。各キャッシュラインはタグフィールドとデータフィールドからなる。２３１はバスインタフェースユニット（ＢＩＵ）であり、プロセッサ外部との入出力を行う。ＢＩＵ２３１には鍵テーブル２３２、セレクタ２３３、暗号／復号コントローラ２３４が備えられている。鍵テーブル２３２は、２３２−０〜２３２−ｍのｍ＋１個のエントリを持つ。各エントリは、ＥＣＵに対応して設けられており、それぞれエントリにプログラム共通鍵Ｋｘとデータ共通鍵Ｋｄの２つのフィールドがある。暗号／復号コントローラ２３４は、内部に暗号モジュール２３５、復号モジュール２３６を持つ。１０２は外部メモリ、１４１はＥＣＵ状態管理機能部、１５１は２次キャッシュ、１６１は公開鍵復号機能部をそれぞれ表す。
【０００５】
以下、プログラムＰがプロセスｐとして実行し、プロセスｐにはＥＣＵＩＤ＃１を割り当てて実行する例を図に従って説明する。
【０００６】
（暗号化プロセスの実行）
プログラムＰは、外部メモリ１０２上では所定の暗号鍵ＫｘＰで暗号化されている。この鍵は、プログラム供給者がプログラムごとに個別に設定できる。プログラムをＥＣＵ（プロセス）として実行するときは、ＥＣＵＩＤ、及び、ＩＤに対応する鍵テーブル２３２のエントリを１つ割り当てて管理する。
【０００７】
鍵登録の流れを図９を用いて説明する。
【０００８】
（ａ）ステップ３０１において、暗号化プログラムの実行前に、ＯＳから鍵登録命令が発行される。
【０００９】
（ｂ）ステップ３０２において、鍵登録命令が発行されると、鍵データがプロセッサ外部から読み込まれ、公開鍵復号機能部１６１により復号化されたプログラム共通鍵Ｋ１ｘ、データ共通鍵Ｋ１ｄを獲得する。
【００１０】
（ｃ）ステップ３０３において、これら鍵データは、ＥＣＵ状態管理機能部１４１から獲得したＥＣＵＩＤｘに対応する鍵テーブルのエントリ２３２−１−ｘ、２３２−１−ｄに書き込まれる。
【００１１】
ＥＣＵＩＤ＃１を持つプロセスｐの実行を開始するとき、ＯＳはＥＣＵＩＤ＃１を指定して特殊命令である実行開始命令を発行する。すると、プロセッサコア１１１のＥＣＵＩＤレジスタ（カレントタスクレジスタ）１１２に＃１が書き込まれ、以後、ＥＣＵＩＤ＃１のプログラム実行では、外部メモリ１０２に格納されている暗号化された命令ではなく、命令読み込み時に、このカレントタスクレジスタ１１２で指定されるエントリ２３２−１−ｘ内のプログラム共通鍵、すなわち、Ｋ１ｘで復号化された命令列がキャッシュメモリに格納され、実行される。
【００１２】
なお、ＯＳを含む非暗号化プロセスには、ＥＣＵＩＤ＃０が割り当てられており、カレントタスクレジスタ１１２の値が＃０の場合は、暗号／復号処理を行わない。プロセスｐの開始前、ＯＳが実行されている状態では、カレントタスクＩＤは＃０となる。
【００１３】
暗号化されたプログラムの実行で、ＥＣＵＩＤ＃１の実行による命令フェッチでアドレスＸのメモリ内容が読み込まれたとき、ＢＩＵ２３１は、Ｘのアドレスに相当する暗号化された命令列のメモリ内容を読み出す。そして、実行中のＥＣＵＩＤ＃１に対応する鍵テーブル２３２のエントリ２３２−１−ｘより取り出したプログラム共通鍵Ｋ１ｘによって復号し、キャッシュライン１２３−１に格納する。プロセッサコアは、キャッシュライン１２３−１から復号された命令列を取り込み、順次実行する。
【００１４】
（暗号化プロセスによるデータの書き込み）
耐タンパプロセッサでは、データの暗号化処理も行う。以下の説明では、データ処理に使われる鍵をデータ鍵と呼ぶ。ＥＣＵＩＤ＃１のデータ鍵はエントリ２３２−１−ｄに格納されている。
【００１５】
データ鍵の値は、プロセスの開始時に設定する方法と、プロセスが実行中に設定する方法があるが、ここでは、プロセスの開始時に設定されているものとする。以下、データ処理について、図１０乃至図１２を使用して説明する。
【００１６】
図１０は、暗号化プロセスによるデータの書き込み、及び、読み込みのシーケンス図である。プロセッサコア１１１は、キャッシュメモリにアドレスＸ２のワード読み出し要求を発行する(シーケンスＳ４０１)。データキャッシュ１２４はアドレスＸ２のキャッシュ存在判定を行う。ここでは、アドレスＸ２の内容はキャッシュされていないので、キャッシュメモリはＢＩＵ２３１を通じて外部メモリ１０２へアドレスＸ２を含むアドレス範囲Ｘ〜Ｘ＋３１のメモリ読み出し要求を発行する一方、ＢＩＵ２３１に対してカレントＥＣＵＩＤ＃１を伝達する(シーケンスＳ４０２)。外部メモリ１０２からのＥＣＵ＃１のデータの読み込みは、キャッシュライン単位で行われる。
【００１７】
図１１は復号処理のシーケンス図である。ＢＩＵ２３１は、外部メモリ１０２に対して、メモリ読み出し要求を行う一方、鍵テーブル２３２及び、セレクタ２３３によりデータ鍵Ｋ１ｄを獲得し、暗号／復号コントローラ２３４に設定する（シーケンスＳ５０１）。暗号／復号コントローラ２３４は、データ鍵Ｋ１ｄ、及び、暗号化されたデータが設定されると、復号モジュール２３６を用いて、暗号化されたデータの復号化を行う（シーケンスＳ５０２）。暗号／復号コントローラ２３４は、復号化データをＢＩＵ２３１に転送する(シーケンスＳ５０３)。
【００１８】
図１０に戻って、ＢＩＵ２３１にあるキャッシュデータＣ（Ｘ）は、キャッシュライン１２５−ｘに格納され、タグにＩＤ＃１が書き込まれる(シーケンスＳ４０４)。プロセッサコア１１１はキャッシュラインから要求したアドレスのメモリ内容Ｃ（Ｘ２）＝ａを読み込む(シーケンスＳ４０５)。外部メモリ１０２から内容を読み込んだ状態では、該当キャッシュライン１２５−ｘのタグの状態ビット１２５−ｘ−ｄは“クリーン（clean）”の状態になる。
【００１９】
一方、プロセッサコア１１１からデータの書き込みがあった場合、対象アドレスがキャッシュにヒットすれば、キャッシュにデータを書き込む(シーケンスＳ４０６)。ここでは、ライトバックキャッシュアルゴリズムが採用されているため、変更されたデータはすぐには外部メモリ１０２には書き戻されない。書き込みがあったキャッシュライン１２５−ｘの状態ビット１２５−ｘ−ｄは“ダーティ（dirty）”状態になる。
【００２０】
（データのライトバック）
キャッシュライン１２５−ｘがフラッシュされ、書き戻されるとき、暗号化が行われる。
【００２１】
例として、アドレスＸの内容が保持されているキャッシュライン１２５−ｘについて競合する、アドレスＸ＋ｍ＊３２の読み込み要求がプロセッサコア１１１から発行されるとする(シーケンスＳ４０７)。そのとき、キャッシュライン１２５−ｘの書き戻しが始まる。データの書き込みに先立ってデータの暗号化が行われる。キャッシュコントローラ１２１により、該当ラインを読み込んだときのＥＣＵＩＤを格納するキャッシュタグ１２５−ｘ−ｔが参照され、ＥＣＵＩＤ＃１が取り出される。キャッシュは、ＢＩＵ２３１に対してメモリ書き出し要求を発行し、同時にキャッシュに格納されたＥＣＵＩＤを伝達する(シーケンスＳ４０８)。
【００２２】
図１２は、暗号処理のシーケンス図である。ＢＩＵ２３１は、鍵テーブル２３２、及び、セレクタ２３３により獲得したデータ鍵Ｋ１ｄを用いて暗号／復号コントローラ２３４に暗号化要求を行う(シーケンスＳ６０１)。暗号／復号コントローラ２３４は、キャッシュデータＣ’（Ｘ）、データ鍵Ｋ１ｄが設定されると、暗号モジュール２３５を用いて暗号化を行う(シーケンスＳ６０２)。暗号／復号コントローラ２３４は、暗号結果をＢＩＵ２３１に送る(シーケンスＳ６０３)。
【００２３】
図１０に戻って、ＢＩＵ２３１にある暗号化されたデータは外部メモリ１０２のアドレスＸに書き戻される（シーケンスＳ４０９）。
【００２４】
書き換え対象のラインに残されていたデータの書き戻しが終わると、中断していたアドレスＸ＋ｍ＊３２のメモリ読み出しが再開される（シーケンスＳ４１０）。メモリ読み出し再開時に、キャッシュからＢＩＵ２３１へカレントＥＣＵＩＤ＃１が伝達される。ＥＣＵＩＤを受け取ったＢＩＵ２３１は、鍵テーブル２３２内のエントリ２３２−１−ｄから対応するデータ鍵Ｋ１ｄを獲得する。外部メモリ１０２から読み出されたアドレスＸ＋ｍ＊３２に対応する内容Ｅ[Ｃ（Ｘ＋ｍ＊３２）]は、データ鍵Ｋ１ｄを用いて復号モジュール２３６によって復号化されて、結果がキャッシュライン１２５−ｘに格納され、タグにＩＤ＃１が書き込まれる(シーケンスＳ４１１)。そして、キャッシュライン１２５−ｘからプロセッサコア１１１が要求したアドレスのワードが読み込まれる(シーケンスＳ４１２)。
【００２５】
暗号／復号コントローラ２３４で共通のハードウェアを用いるためには、別途、仕様上の鍵から暗号作業用鍵、及び、復号作業用鍵を作成する必要がある（例えば、特許文献２参照）。たとえば、アドバンスド・エンクリプション・スタンダード（ＡＥＳ）の場合には、暗号作業用鍵が仕様上の鍵として定義されており、復号作業用鍵は、暗号作業用鍵の拡張演算によって求める必要がある（非特許文献１）。
【特許文献１】特開２００１−３１８７８７号公報
【特許文献２】特開２０００−６６５８６号公報
【非特許文献１】エヌ・アイ・エス・ティー（NIST）(米国国立標準技術研究所)、コンピュータ・セキュリティー・リソース・センターのホームページ（http://csrc.nist.gov/）
【発明の開示】
【発明が解決しようとする課題】
【００２６】
耐タンパプロセッサを設計する上で、問題となるのがコストである。プロセッサコストを下げるための解決策の１つとして、ハード規模の縮小が効果的である。鍵暗号を扱うハードウェアにおいて、暗号処理と復号処理で別々のハードウェアを用いる場合と、暗号処理と復号処理で共通のハードウェアを用いる場合がある。ハードウェア規模を縮小するためには、暗号処理と復号処理で共通のハードウェアを用いることが好ましい。
【００２７】
耐タンパプロセッサにおいてはバス暗号処理において、複数のソフトウェアに対応する鍵が頻繁に切り替えて使用されるだけでなく、同一鍵によるデータの暗号化と復号化も頻繁に切り替えが発生する。一方ハードウェア規模の削減によるコスト提言の目的に照らせば、暗号と復号のハードウェアは共通化することが望ましい。だが、暗号・復号のハードウェアを共通化して規模を縮小した場合に、暗号用と復号用に別の鍵が必要となる場合が多い。従来のシステムにおいては切り替え時にソフトウェア処理で暗号作業用鍵から復号作業用鍵を生成していたが、耐タンパプロセッサのようにバスの暗号化にソフトウェアによる鍵生成手法を適用した場合、鍵切り替え時の鍵生成によるメモリアクセス遅延が著しく大きくなってしまう。
【００２８】
また、耐タンパプロセッサでは、あるプロセスが使うデータ用暗号鍵の作成、登録はプロセスの初期化登録時およびプロセスによる明示的な鍵変更登録操作がある場合に限られ、その頻度はデータフェッチによる暗号、復号の切り替えと比べて低い。
【００２９】
本発明の目的は、同一のハードウェアによって暗号と復号の両方を処理させ、暗号ハードウェアの縮小を図るときに、暗号作業用鍵と復号作業用鍵とをそれぞれ保持するテーブルを持つことにより、暗号と復号の切り替えが頻繁に行われる場合でも、鍵切り替え時のメモリアクセス遅延を一定に押さえることによりスループットの低下を押さえることができるプロセッサを提供することにある。
【課題を解決するための手段】
【００３０】
上記目的を達成するため、本発明の第１の特徴は、（イ）プロセッサコアと、プロセッサコアに接続され、複数のキャッシュラインを有するキャッシュコントローラと、キャッシュコントローラと接続され、少なくともプロセスと対応付けられた鍵を含む鍵テーブルと暗号/復号コントローラとを有するバスインタフェースユニットとを備え、外部のメモリとデータの送受信を行なうマイクロプロセッサであって、（ロ）外部のメモリから読み出したデータを、鍵テーブルからプロセッサコアで実行されるプロセスに基づいて選択された鍵で復号して、キャッシュコントローラによって、鍵、データの読出し元アドレスおよび復号したデータとを関連付けてあるキャッシュラインへ記憶する第１の手段と、（ハ）プロセスにより、キャッシュラインに記憶した復号されたデータを関連付けて記憶された鍵で暗号化して外部のメモリへ出力する第２の手段と、（ニ）暗号/復号コントローラ内に保持され、暗号/復号処理を共通の回路で実現可能な暗号/復号共通モジュールからなる第３の手段と、（ホ）鍵テーブル内に保持され、外部のメモリとの間の読み書き可能なデータについての暗号作業用データ鍵、及び、復号作業用データ鍵の対からなる第４の手段とを備え、（へ）外部のメモリからのデータ読み出し時に復号作業用データ鍵を使い、データ書き込み時には暗号作業用データ鍵を使うマイクロプロセッサであることを要旨とする。
【００３１】
本発明の第２の特徴は、（イ）プロセッサコアと、プロセッサコアに接続され、複数のキャッシュラインを有するキャッシュコントローラと、キャッシュコントローラと接続され、少なくともプロセスと対応付けられた鍵を含む鍵テーブルと暗号/復号コントローラとを有するバスインタフェースユニットとを備え、外部のメモリとデータの送受信を行なうマイクロプロセッサであって、（ロ）外部のメモリから読み出したデータを、鍵テーブルからプロセッサコアで実行されるプロセスに基づいて選択された鍵で復号して、キャッシュコントローラによって、鍵、データの読出し元アドレスおよび復号したデータとを関連付けてあるキャッシュラインへ記憶する第１の手段と、（ハ）プロセスにより、キャッシュラインに記憶した復号されたデータを関連付けて記憶された鍵で暗号化して外部のメモリへ出力する第２の手段と、（ニ）暗号/復号コントローラ内に保持され、暗号/復号処理を共通の回路で実現可能な暗号/復号共通モジュールからなる第３の手段と、（ホ）鍵テーブル内に保持され、外部のメモリとの間の読み書き可能なデータについての暗号作業用データ鍵、及び、復号作業用データ鍵の対からなる第４の手段と、（へ）ソフトウェアが暗号作業用データ鍵、あるいは、復号作業用データ鍵を指定して、鍵テーブルへの鍵登録をマイクロプロセッサに指示した時、暗号/復号共通モジュールによって、対応する暗号作業用データ鍵、あるいは、復号作業用データ鍵を生成し、暗号作業用データ鍵、及び、復号作業用データ鍵を対応する鍵テーブルに書き込む暗号/復号作業用鍵生成器からなる第６の手段とを備えるマイクロプロセッサであることを要旨とする。
【発明の効果】
【００３２】
本発明では、同一のハードウェアによって暗号と復号の両方を処理させ、暗号ハードウェアの縮小を図るときに、暗号作業用鍵と復号作業用鍵とをそれぞれ保持するテーブルを持つことにより、暗号と復号の切り替えが頻繁に行われる場合でも、鍵切り替え時のメモリアクセス遅延を一定に押さえることによりスループットの低下を押さえることができる。
【発明を実施するための最良の形態】
【００３３】
本発明では暗号鍵の登録操作があったとき、対応する復号作業用鍵を生成することにより、上記暗号鍵と復号作業用鍵を持つテーブル構築している。さらに、ある種の暗号ハードウェアでは、ほとんど回路規模を増やすことなく暗号鍵から復号作業用鍵を暗号１ブロックの処理と同等の短時間で生成する機能を持つことができる。このようなハードウェアを前提として、本発明では上記鍵登録操作において、復号作業用鍵の生成をソフトウェアではなく暗号ハードウェアの支援を受けることにより、鍵登録操作をより高速化している。
【００３４】
次に、図面を参照して、本発明の実施例を説明する。以下の図面において、同一又は類似の部分には同一又は類似の符号を付している。又、以下に示す実施例は、この発明の技術思想を具体化するための装置や方法を例示するものであって、この発明の技術思想を下記のものに特定するものではない。この発明の技術思想は、特許請求の範囲において、種々の変更を加えることができる。
【実施例１】
【００３５】
（データの暗号／復号）
図１が本発明による耐タンパプロセッサの構成である。ここでは、図８と異なる部分のみを説明する。１３１はＢＩＵであり、プロセッサ外部との入出力を行う。ＢＩＵ１３１には、鍵テーブル１３２、セレクタ１３３、暗号／復号コントローラ１３４、暗号／復号作業用鍵生成器１３６が備えられている。鍵テーブル１３２は、１３２−０〜１３２−ｍのｍ＋１個のエントリを持つ。各エントリは、ＥＣＵに対応して設けられており、それぞれのエントリにプログラム共通鍵Ｋ１ｘ、暗号作業用データ鍵Ｋ１ｄＥと復号作業用データ鍵Ｋ１ｄＤの３つフィールドがある。セレクタ１３３では、命令キャッシュ１２２、データキャッシュ１２４、読み出し／書き込み信号１２６から鍵選択を実行する。暗号／復号コントローラ１３４は、内部に暗号／復号共通のハードウェアである暗号／復号共通モジュール１３５を持つ。暗号／復号コントローラ１３４では、読み出し／書き込み信号１２６から暗号、復号の選択を実行する。以下の説明では、暗号／復号共通のハードウェアを用いてデータの暗号処理するために必要となる鍵を暗号作業用データ鍵、暗号／復号共用のハードウェアを用いて暗号化データの復号化処理するために必要となる鍵を復号作業用データ鍵と呼ぶ。
【００３６】
（作業用鍵の作成）
本発明で利用する暗号作業用データ鍵、及び、復号作業用データ鍵は、あらかじめプログラム供給者が準備しておく場合と、プログラム供給者は暗号作業用データ鍵、あるいは、復号作業用データ鍵のどちらか一方だけを配り、プロセッサ内部にある暗号／復号作業用鍵生成器１３６によってもう一方を作成する場合がある。前者の方法の場合は、暗号化プロセス実行前に２つの鍵を登録する必要がある。後者の方法は、適用対象の暗号ハードを用いることによって、一方の作業用鍵からもう一方の作業用鍵を導き出すことができることに起因する。
【００３７】
以下では、図２を用いて、プログラム供給者が暗号作業用データ鍵のみを配布した場合の鍵登録処理について説明する。
【００３８】
（ａ）ステップ７０１において、暗号化プログラムの実行前に、ＯＳから鍵登録命令が発行される。
【００３９】
（ｂ）ステップ７０２において、鍵登録命令が発行されると、暗号化された鍵データがプロセッサ外部から読み込まれ、公開鍵復号機能部１６１により復号化されたプログラム共通鍵Ｋ１ｘ、暗号作業用データ鍵Ｋ１ｄＥを獲得する。
【００４０】
（ｃ）次に、ステップ７０３において、暗号作業用データ鍵Ｋ１ｄＥから、暗号／復号作業用鍵生成器１３６によって、復号作業用データ鍵Ｋ１ｄＤが作成される。
【００４１】
（ｄ）そして、次にステップ７０４において、ＥＣＵ状態管理機能部１４１から獲得したＥＣＵＩＤｘに対応する鍵テーブル１３２のエントリ１３２−１−ｘにプログラム共通鍵Ｋ１ｘ、暗号作業用データ鍵Ｋ１ｄＥ、及び復号作業用データ鍵Ｋ１ｄＤを書き込む。
【００４２】
（メモリ読み込み／復号化処理）
暗号化されたプログラムからは、データの暗号化もハードウェアの支援を受けることができる。図３乃至図５は本発明の耐タンパプロセッサにおけるデータ処理を示す。ここでは、図１０と比べて異なる部分であるＢＩＵ処理部のみを説明する。
【００４３】
図４を用いて、本発明の耐タンパプロセッサにおける復号化処理の例を説明する。ＢＩＵ１３１は、外部メモリ１０２に対して、メモリ読み出し要求を行う一方、鍵テーブル１３２、及び、セレクタ１３３から、エントリ１３２−１−ｄ−ｄ内の獲得した復号作業用データ鍵Ｋ１ｄＤを暗号／復号コントローラ１３４に伝達する。外部メモリ１０２から暗号化されたデータＥ[Ｃ（Ｘ）]が暗号／復号コントローラ１３４に読み出される（シーケンスＳ９０１）。暗号／復号コントローラ１３４は、復号作業用データ鍵ｋ1ｄＤ、及び、暗号化されたデータＥ[Ｃ（Ｘ）]が設定されると、暗号／復号共通モジュール１３５を用いて、暗号化されたデータの復号化を行う（シーケンスＳ９０２）。暗号／復号コントローラ１３４は、復号化キャッシュデータＣ（Ｘ）をＢＩＵ１３１に返す(シーケンスＳ９０３)。
【００４４】
（暗号化処理／メモリ書き込み）
アドレスＸとキャッシュラインが競合するアドレスＸ＋３２＊ｍへのアクセスがあったとき、キャッシュラインがフラッシュされる。そのとき、暗号処理が行われる。図５を用いて、本発明の耐タンパプロセッサにおける暗号処理の例を説明する。ＢＩＵ１３１は、ＥＣＵＩＤ＃１を用いて鍵テーブル１３２、及び、セレクタ１３３から、エントリ１３２−１−ｄ−ｅ内の暗号作業用データ鍵Ｋ１ｄＥを獲得し、暗号／復号コントローラ１３４にキャッシュデータＣ’（Ｘ）の暗号化要求を行う（シーケンスＳ１００２）。暗号／復号コントローラ１３４は、キャッシュデータＣ’（Ｘ）、暗号作業用データ鍵Ｋ１ｄＥが設定されると、暗号／復号共通モジュール１３５を用いて暗号化を行う（シーケンスＳ１００３）。
【実施例２】
【００４５】
（コンテキストの暗号化／復号化）
耐タンパプロセッサでは、データの暗号化／復号化だけでなく、コンテキストの暗号化／復号化を行う。以下の説明では、暗号／復号共通のハードウェアを用いてコンテキストの暗号化処理するために必要となる鍵を暗号作業用コンテキスト鍵、暗号／復号共用のハードウェアを用いて暗号化されたコンテキストの復号化処理するために必要となる鍵を復号作業用コンテキスト鍵と呼ぶ。
【００４６】
コンテキストの暗号化／復号化にも対応した本発明の耐タンパプロセッサの構成を図６に示す。ここでは、図１と異なる部分のみを説明する。１１３１はＢＩＵであり、プロセッサ外部との入出力を行う。ＢＩＵ１１３１には、鍵テーブル１１３２、セレクタ１１３３、暗号／復号コントローラ１３４、暗号／復号作業用鍵生成器１３６が備えられている。鍵テーブル１１３２は、１１３２−０〜１１３２−ｍのｍ＋１個のエントリを持つ。各エントリは、ＥＣＵに対応して設けられており、それぞれのエントリにプログラム共通鍵Ｋｘ、暗号作業用データ鍵ＫｄＥ、復号作業用データ鍵ＫｄＤ、暗号作業用コンテキスト鍵ＫｃＥ、復号作業用コンテキスト鍵ＫｃＤの５つフィールドがある。
【００４７】
（作業用鍵の登録）
図６の耐タンパプロセッサで利用する暗号作業用コンテキスト鍵ＫｃＥ、及び、復号作業用コンテキスト鍵ＫｃＤは、プログラム供給者が両方の鍵を準備しておく場合、プログラム供給者が片方の鍵を準備し、片方の鍵を暗号／復号作業用鍵生成器１３６によって作成する場合、両方の鍵をＢＩＵ１１３１にコンテキスト鍵生成器を加えた耐タンパプロセッサによって作成する場合がある。本実施例２では、プログラム配布者があらかじめ暗号作業用データ鍵ＫｄＥ、暗号作業用コンテキスト鍵ＫｃＤのみを準備すると仮定する。この場合の作業用鍵の登録方法について、図７を用いて説明する。
【００４８】
（ａ）ステップ１２０１において、暗号化プログラムの実行前に、ＯＳから鍵登録命令が発行される。
【００４９】
（ｂ）ステップ１２０２において、鍵登録命令が発行されると、鍵データがプロセッサ外部から読み込まれ、公開鍵復号機能部１６１により復号化されたプログラム共通鍵ＫｘＰ、暗号作業用データ鍵ＫｄＥ、暗号作業用コンテキスト鍵ＫｃＥを獲得する。
【００５０】
（ｃ）ステップ１２０３において、データの暗号作業用データ鍵ＫｄＥから、暗号／復号作業用鍵生成器１３６によって、復号作業用データ鍵ＫｄＤが作成される。
【００５１】
（ｄ）ステップ１２０４において、暗号作業用コンテキスト鍵ＫｃＥから、暗号／復号作業用鍵生成器１３６によって、復号作業用コンテキスト鍵ＫｃＤが作成される。
【００５２】
（ｅ）そして、ステップ１２０５において、ＥＣＵ状態管理機能部１４１から獲得したＥＣＵＩＤｘに対応する鍵テーブル１１３２内のエントリ１１３２−１−ｘにプログラム共通鍵ＫｘＰ、暗号作業用データ鍵ＫｄＥ、復号作業用データ鍵ＫｄＤ及び、暗号作業用コンテキスト鍵ＫｃＥ、復号作業用コンテキスト鍵ＫｃＤを書き込む。
【００５３】
（コンテキストの保存／再開）
プログラム実行中に割り込み処理が呼び出されるとき、耐タンパプロセッサでは、プロセッサコア１１１からコンテキスト保存要求が出される。そのとき、データとは異なる特殊なタグとコンテキストをキャッシュ上に書き出す。コンテキストが保存されたキャッシュラインがフラッシュされるとき、ＢＩＵ１１３１は、特殊なタグを用いて鍵テーブル１１３２から暗号作業用のコンテキスト鍵を取り出し、暗号化を行う。暗号化の手順は、鍵の選択を除いて、実施例１のデータの暗号化と同じである。
【００５４】
割り込み処理が完了し、プログラムが再開されるとき、耐タンパプロセッサでは、プロセッサコア１１１からコンテキスト再開要求が出される。プロセッサコア１１１は、キャッシュに対してコンテキスト読み出し要求を出す。キャッシュからフラッシュされている場合に、ＢＩＵ１１３１は、再開するプロセスのＩＤから復号作業用のコンテキスト鍵を取り出し、メモリから読み出した暗号化コンテキストの復号化を行う。復号化の手順は、鍵の選択を除いて、実施例１のデータの復号化と同じである。
【００５５】
上記のように、本発明は実施例によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施例、実施例及び運用技術が明らかとなろう。したがって、本発明の技術範囲は上記の説明から妥当な特許請求の範囲に係る発明特定事項によってのみ定められるものである。
【００５６】
その他、本発明の要旨を逸脱しない範囲で、様々に変形して実施することができる。なお、上記各実施例は、それぞれ組み合わせて実施することができる。このように、本発明はここでは記載していない様々な実施例等を含むことは勿論である。
【図面の簡単な説明】
【００５７】
【図１】実施例１の耐タンパプロセッサの内部構成図。
【図２】実施例１の耐タンパプロセッサにおける鍵登録処理フローチャート図。
【図３】実施例１の耐タンパプロセッサにおけるキャッシュアクセスシーケンス図。
【図４】実施例１の耐タンパプロセッサにおける復号処理シーケンス図。
【図５】実施例１の耐タンパプロセッサにおける暗号処理シーケンス図。
【図６】実施例２の耐タンパプロセッサ内部構成図。
【図７】実施例２の耐タンパプロセッサにおける鍵登録処理フローチャート図。
【図８】従来の耐タンパプロセッサ内部構成図。
【図９】従来の耐タンパプロセッサにおける鍵登録処理フローチャート図。
【図１０】従来の耐タンパプロセッサにおけるキャッシュアクセスシーケンス図。
【図１１】従来の耐タンパプロセッサにおける復号処理シーケンス図。
【図１２】従来の耐タンパプロセッサにおける暗号処理シーケンス図。
【符号の説明】
【００５８】
１０１,２０１,１１０１…マイクロプロセッサ
１０２…外部メモリ
１１１…プロセッサコア
１１２…カレントタスクレジスタ（ＥＣＵＩＤレジスタ）
１２１…キャッシュコントローラ
１２２…命令キャッシュ（Ｉキャッシュ）
１２３,１２５…メモリ
１２４…データキャッシュ（Ｄキャッシュ）
１２３−１〜１２３−ｎ,１２５−１〜１２５−ｎ…キャッシュライン
１２５−ｘ−ｔ…キャッシュタグ
１２５−ｘ−Ｃ…キャッシュ内容
１２５−ｘ−ｄ…状態ビット
１２６…読み出し／書き込み信号ライン
１３１,２３１,１１３１…バスインタフェースユニット（ＢＩＵ）
１３２,２３２,１１３２…鍵テーブル
１３３,２３３…セレクタ
１３４,２３４…暗号／復号処理部
１３５…暗号／復号共通モジュール
１３６…暗号／復号作業用鍵生成器
１４１…ＥＣＵ状態管理機能部
１５１…２次キャッシュ
１６１…公開鍵復号機能部
２３５…暗号モジュール
２３６…復号モジュール
３０１〜３０３,７０１〜７０４,１２０１〜１２０５…ステップ
Ｓ４０１〜Ｓ４１２,Ｓ５０１〜Ｓ５０３,Ｓ６０１〜Ｓ６０３,Ｓ９０１〜Ｓ９０３,Ｓ１００１〜Ｓ１００３…シーケンス
２３２−０〜２３２−ｍ，２３２−１−ｘ，２３２−１−ｄ，１３２−１−ｄ−ｄ，１３２−１−ｄ−ｅ，１１３２−１−ｄ−ｅ，１１３２−１−ｄ−ｄ，１１３２−１−ｃ−ｅ，１１３２−１−ｃ−ｄ…エントリ
Ｋｘ,Ｋ１ｘ,Ｋ２ｘ…プログラム共通鍵
Ｋｄ,Ｋ１ｄ,Ｋ２ｄ〜Ｋｍｄ…データ共通鍵
ＫｄＥ,Ｋ１ｄＥ,Ｋ２ｄＥ〜ＫｍｄＥ…暗号作業用データ鍵
Ｋ１ｄＤ,Ｋ２ｄＤ〜ＫｍｄＤ…復号作業用データ鍵
ＫｃＥ…暗号作業用コンテキスト鍵
ＫｃＤ…復号作業用コンテキスト鍵
ＫｘＰ…暗号鍵
Ｐ…プログラム
ｐ…プロセス
Ｘ〜Ｘ＋３１…アドレス
Ｃ（Ｘ）,Ｃ’（Ｘ）…キャッシュデータ
【図１】
2005078459.tif 000003
【図２】
2005078459.tif 000004
【図３】
2005078459.tif 000005
【図４】
2005078459.tif 000006
【図５】
2005078459.tif 000007
【図６】
2005078459.tif 000008
【図７】
2005078459.tif 000009
【図８】
2005078459.tif 000010
【図９】
2005078459.tif 000011
【図１０】
2005078459.tif 000012
【図１１】
2005078459.tif 000013
【図１２】
2005078459.tif 000014