(57)【要約】【課題】プロセッサ処理の安全性を高めたシステムを、製造者とユーザが相手の暗号情報を知ること無しに、最小限のモジュール追加で実現することを目的とする。【解決手段】命令コードを実行するＣＰＵコア21と、プロセッサ鍵を保持する暗号鍵保持部25と、コア21に入出力されるデータをプロセッサ鍵で暗号化または復号化する暗号処理部24と、を有するセキュアプロセッサ20と、メモリ30と、を備えるセキュアプロセッサシステムであって、暗号鍵保持部25は、固定暗号鍵を保持する固定レジスタ26と、入力される命令暗号鍵が格納され、格納された命令暗号鍵を読み取り不能に保持する書込レジスタ27と、を備え、暗号鍵保持部は、立ち上げ時には固定暗号鍵を、命令暗号鍵が書き込まれた後は命令暗号鍵を、プロセッサ鍵として出力する。【選択図】図２
2008210225.tif 000002
【特許請求の範囲】
【請求項１】
命令コードを実行するコアと、プロセッサ鍵を保持する暗号鍵保持部と、前記コアに入出力されるデータを、前記プロセッサ鍵で暗号化または復号化する暗号処理部と、を有するセキュアプロセッサと、
前記コアに入出力されるデータを記憶するメモリと、を備えるセキュアプロセッサシステムであって、
前記セキュアプロセッサの前記暗号鍵保持部は、
書き換え及び読み取り不能な固定暗号鍵を保持する固定レジスタと、
入力される命令暗号鍵が格納され、格納された前記命令暗号鍵を読み取り不能に保持する書込レジスタと、を備え、
前記暗号鍵保持部は、当該プロセッサの立ち上げ時には前記固定レジスタに保持された前記固定暗号鍵を前記プロセッサ鍵として出力し、前記書込レジスタに前記命令暗号鍵が書き込まれた後は、前記書込レジスタに保持された前記命令暗号鍵を前記プロセッサ鍵として出力することを特徴とするセキュアプロセッサシステム。
【請求項２】
前記メモリは、前記命令暗号鍵を前記書込レジスタに格納する鍵変換プログラムを、前記固定暗号鍵で暗号化した形で記憶することを特徴とする請求項１に記載のセキュアプロセッサシステム。
【請求項３】
前記メモリは、前記命令暗号鍵を設定情報公開鍵で暗号化した形で記憶しており、
前記鍵変換プログラムは、前記設定情報公開鍵で暗号化した前記命令暗号鍵を復号するための設定情報秘密鍵を記憶していることを特徴とする請求項２に記載のセキュアプロセッサシステム。
【請求項４】
前記メモリは、当該セキュアプロセッサで実行する処理プログラムを、前記命令暗号鍵で暗号化した形で記憶していることを特徴とする請求項３に記載のセキュアプロセッサシステム。
【請求項５】
前記暗号処理部は、暗号化及び復号をＡＥＳ暗号方式で行い、
前記命令暗号鍵の暗号化は、ＲＳＡ方式で行われることを特徴とする請求項３に記載のセキュアプロセッサシステム。
【請求項６】
前記メモリは、署名用秘密鍵で暗号化した電子署名を記憶しており、
前記鍵変換プログラムは、前記電子署名を検証するための署名公開鍵を記憶していることを特徴とする請求項３に記載のセキュアプロセッサシステム。
【請求項７】
前記メモリは、署名用秘密鍵で暗号化した電子署名を記憶しており、
前記鍵変換プログラムは、前記電子署名を検証するための署名公開鍵を記憶しており、
前記セキュアプロセッサは、前記署名公開鍵での前記電子署名の検証が成功した時に前記命令暗号鍵を前記書込レジスタに書き込むプログラムを、前記固定暗号鍵により暗号化された形で記憶していることを特徴とする請求項３に記載のセキュアプロセッサシステム。
【請求項８】
命令コードを実行するコアと、プロセッサ鍵を保持する暗号鍵保持部と、前記コアに入出力されるデータを、前記プロセッサ鍵で暗号化または復号化する暗号処理部と、を有するセキュアプロセッサと、前記コアに入出力されるデータを記憶するメモリと、を備えるセキュアプロセッサシステムであって、前記セキュアプロセッサの前記暗号鍵保持部は、書き換え及び読み取り不能な固定暗号鍵を保持する固定レジスタと、入力される命令暗号鍵が格納され、格納された前記命令暗号鍵を読み取り不能に保持する書込レジスタと、を備え、前記暗号鍵保持部は、当該プロセッサの立ち上げ時には前記固定レジスタに保持された前記固定暗号鍵を前記プロセッサ鍵として出力し、前記書込レジスタに前記命令暗号鍵が書き込まれた後は、前記書込レジスタに保持された前記命令暗号鍵を前記プロセッサ鍵として出力し、前記メモリは、前記命令暗号鍵を前記書込レジスタに格納する鍵変換プログラムを、前記固定暗号鍵で暗号化した形で記憶し、前記命令暗号鍵を設定情報公開鍵で暗号化した形で記憶しており、前記鍵変換プログラムは、前記設定情報公開鍵で暗号化した前記命令暗号鍵を復号するための設定情報秘密鍵を記憶しており、前記メモリは、署名用秘密鍵で暗号化した電子署名を記憶しており、前記鍵変換プログラムは、前記電子署名を検証するための署名公開鍵を記憶しており、前記セキュアプロセッサは、前記署名公開鍵での前記電子署名の検証が成功した時に前記命令暗号鍵を前記書込レジスタに書き込むプログラムを、前記固定暗号鍵により暗号化された形で記憶しているセキュアプロセッサシステムの構築方法であって、
前記設定情報公開鍵は、前記セキュアプロセッサの製造者から前記セキュアプロセッサのユーザに通知され、
前記署名公開鍵は、前記セキュアプロセッサのユーザから製造者に通知されることを特徴とするセキュアプロセッサシステムの構築方法。
【請求項９】
命令コードを実行するコアと、
プロセッサ鍵を保持する暗号鍵保持部と、
前記コアとメモリとの間で入出力されるデータを、前記プロセッサ鍵で暗号化または復号化する暗号処理部と、を備えるセキュアプロセッサであって、
前記暗号鍵保持部は、
書き換え不能な固定暗号鍵を保持する固定レジスタと、
入力される命令暗号鍵が格納され、格納された前記命令暗号鍵を読み取り不能に保持する書込レジスタと、を備え、
前記暗号鍵保持部は、当該プロセッサの立ち上げ時には前記固定レジスタに保持された前記固定暗号鍵を前記プロセッサ鍵として出力し、前記書込レジスタに前記命令暗号鍵が書き込まれた後は、前記書込レジスタに保持された前記命令暗号鍵を前記プロセッサ鍵として出力することを特徴とするセキュアプロセッサ。
【請求項１０】
命令コードを実行するコアと、プロセッサ鍵を保持する暗号鍵保持部と、前記コアに入出力されるデータを、前記プロセッサ鍵で暗号化または復号化する暗号処理部と、設定情報秘密鍵を記憶する設定情報秘密鍵記憶部と、を有し、前記暗号鍵保持部は、書き換え及び外部読み取り不能な固定暗号鍵を保持する固定レジスタと、入力される命令暗号鍵が格納され、格納された前記命令暗号鍵を外部読み取り不能に保持する書込レジスタと、を有し、前記暗号鍵保持部は、当該プロセッサの立ち上げ時には前記固定レジスタに保持された前記固定暗号鍵を前記プロセッサ鍵として出力し、前記書込レジスタに前記命令暗号鍵が書き込まれた後は、前記書込レジスタに保持された前記命令暗号鍵を前記プロセッサ鍵として出力するセキュアプロセッサと、
前記コアに入出力されるデータを記憶するメモリと、を備えるセキュアプロセッサシステムの制御方法であって、
起動時に、前記メモリに記憶された、前記固定暗号鍵で暗号化された前記命令暗号鍵を前記書込レジスタに格納する鍵変換プログラムを、前記暗号処理部で復号し、
前記メモリに記憶され、設定情報公開鍵で暗号化した前記命令暗号鍵を、前記設定情報秘密鍵記憶部に記憶された前記設定情報秘密鍵で復号して前記書込レジスタに格納し、
前記暗号鍵保持部が前記命令暗号鍵で暗号化または復号化するように設定する、ことを特徴とするセキュアプロセッサシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサを有するシステムに係り、特に不正なコードの実行を防止可能なセキュアプロセッサシステム、そのようなシステムを構築するためのセキュアプロセッサ及びセキュアプロセッサシステムの制御方法に関する。
【背景技術】
【０００２】
プロセッサを使用するシステムでは、動作をプログラムによって記述することができ、ハードウェアによってすべてを構成するシステムに比べ、どの設計及び動作の柔軟性が大きく、多種類の機能が容易に実現できる。このような優れた特性のために、プロセッサはパーソナルコンピュータなどの各種コンピュータや、ＰＤＡ(Personal Digital Assistant)、携帯電話、情報家電などの各種情報機器に実装されるようになっている。
【０００３】
図１の（Ａ）は、従来のプロセッサを使用するシステムの概略構成を示す図である。図示のように、システムは、プロセッサ１と、外付け（外部）ＲＯＭ６と、を有する。一般的に、プロセッサ１は、命令処理を行うＣＰＵコア２と、起動用に使用する内蔵ＲＯＭ４と、内部または外部のメモリとの通信を行うメモリインターフェース（ＩＦ）５と、これらのモジュールを相互接続する内部バス３と、を有し、１チップの半導体として構成されている。なお、内蔵ＲＯＭ４については実装されない場合もあり、その際はメモリインタフェース経由で外部より起動する。また、その他の周辺ブロックも実装される場合が多いが、今回の発明との関連が薄いため省略する。外部ＲＯＭ６には、制御プログラム７が記憶される。プロセッサ１は、制御プログラム７に従って動作を行う。
【０００４】
この構成では、プロセッサに所望の動作をさせるために書き換え可能な外部の記憶媒体（例えばフラッシュＲＯＭ）６にプログラムを記録しておく。しかしながら、このような構成では、例えばＲＯＭ６が物理的に取り外されるなど、外部からの解析に対し非常に弱くなっている。このことは、内部の処理プログラムが著作権管理等に代表される機密性の高いものであった場合、処理の安全性が担保されないことになり、結果としてそのようなシステムの実現が困難になることも考えられる。
【０００５】
また、ネットワークの進展につれ、これらの情報機器はネットワークに接続されて使用され、ネットワークを介してメールやデータの送受信や、プログラムのダウンロードをする機会が増加している。これに伴って、近年、ネットワークなどを介するコンピュータウィルスの感染や、不正アクセスにさらされる危険性が増大しており、コンピュータや携帯情報端末の普及が高まるにつれ、それらの機器で実行されるプログラムに関するセキュリティの重要性が高まっている。
【０００６】
プロセッサを備えた情報機器のセキュリティを強固とするために回線データに対する暗号化、ユーザ認証などの各種のシステム的な措置が施されているが、近年ではシステムレベルでの安全性のみならず、コンピュータウィルスや不正アクセス等の蔓延に対応するために、ソフトウェアレベル、プロセッサレベルの安全性が問題となっている。
【０００７】
例えば、携帯電話や情報家電など、各種のプロセッサ組込機器などがネットワークに接続されることにより、パーソナルコンピュータ等に対するのと同等の脅威をこれらの機器も外部から受ける可能性が高くなっている。不正侵入は、悪意を持った実行コードが端末内で動作することにその原因がある。そのため、悪意のあるコードや、所望しないコードをプロセッサで動作させないようにする必要がある。しかしながら、現状では、悪意のあるコードを動作させないようにするプロセッサ側の対策があまり十分ではなく、安全なソフトウェア実行環境が提供されていないという問題があった。
【０００８】
このため、最近、セキュアプロセッサが研究されている。セキュアプロセッサは、プロセッサの外側で扱われるデータには暗号化を施し、内側にはアクセス保護を施すことで、データを直接読み取ることを不可能とする。例えば、データや命令コードを暗号化して主記憶装置や二次記憶装置に格納し、プロセッサが命令を実行する際には、暗号化された命令コードを復号し、それをプロセッサ内のキャッシュメモリに格納してから実行する。
【０００９】
本出願人は、特許文献１でこのようなセキュアプロセッサを開示している。
【００１０】
図１の（Ｂ）は、特許文献１に開示されたセキュアプロセッサの基本構成を示す図である。図示のように、セキュアプロセッサ１０は、実行ユニットとキャッシュを含む（ＣＰＵ）コア１１と、外部インターフェースとのコマンド処理及びバスデータ（プログラムのコードまたはデータ）の暗号化やその復号などを行う暗号処理ブロック１２と、命令コードの認証を行うコード認証処理ブロック１３と、プロセッサの起動時に用いられる最も基本的なプログラムなどが暗号化されて格納されている暗号化ＲＯＭコード領域１４と、このコード領域１４に格納されているプログラムなどの復号を行うためのＣＰＵ固有鍵を保持するＣＰＵ固有鍵保持レジスタ１５と、を有している。
【００１１】
そして、コア１１と暗号処理ブロック１２との間では、コマンド、およびデータのやり取りが行われると共に暗号化のための鍵の制御が行われ、またコア１１とコード認証処理ブロック１３との間には認証インターフェースが備えられる。さらに暗号処理ブロック１２、およびコード認証処理ブロック１３は、主記憶１７に対するアクセスを実行し、またコード認証ブロック１３は二次記憶１８に対するアクセスを実行する。
【００１２】
特許文献１に開示されたセキュアプロセッサでは、ＣＰＵ固有鍵保持レジスタ１５には外部からアクセスできないようになっている。セキュアプロセッサのユーザ（システム製造者）は、ＣＰＵ固有鍵を決定した後製造者にＣＰＵ固有鍵を通知し、製造者はセキュアプロセッサの製造段階でＣＰＵ固有鍵保持レジスタ１５に通知されたＣＰＵ固有鍵を設定する。以後、ＣＰＵ固有鍵は、外部に漏洩しないように製造者とユーザで厳重に保管される。セキュアプロセッサは、ＣＰＵ固有鍵で正しく暗号化されたプログラム以外では実質的に動作しないので、ＣＰＵ固有鍵を知らない第三者が悪意でプログラムを改竄しても、セキュアプロセッサに不正な動作を行わせることはできない。
【００１３】
【特許文献１】特開２００６−１８５２８
【発明の開示】
【発明が解決しようとする課題】
【００１４】
特許文献１に記載されたセキュアプロセッサは、機能として充分であるものの、ハードウェア、ソフトウェア共に、システムに対して従来のものから、かなりの程度変更が要求されるものであった。言い換えれば、従来のシステムと良好な互換性を維持するのが難しいという問題があった。安全性の高いプロセッサを提供していく上で、互換性に対するコストはある程度は許容せざるを得ないものの、既存システムからの移行期間においては、変更量、コストを最小限に出来るものが望まれる。
【００１５】
さらに、上記のように、ＣＰＵ固有鍵は製造者とユーザで厳重に管理する必要があるが、厳重な管理にはコストを要し、特に多数のユーザのＣＰＵ固有鍵を管理する製造者にはチップごとにＣＰＵ固有鍵を管理する必要があり、大きな負担となっていた。もし製造者が多数のＣＰＵ固有鍵を一括して管理している場合には、多数のユーザのＣＰＵ固有鍵が同時に漏洩することになり、その被害は膨大なものになる。そのため、ＣＰＵ固有鍵を管理するコストが、製造コストにも影響し、セキュアプロセッサの価格を上昇させる要因にもなる。
【００１６】
このような観点から、セキュアプロセッサの製造者とユーザが相手の暗号情報を知らなくても、セキュアプロセッサとしての安全レベルは維持できるようにすることが望まれている。これにより製造者がユーザの暗号の管理を行う必要がなくなるだけでなく、ユーザにとっても製造者からの暗号漏洩の危険性がなくなるという利点がある。
【００１７】
本発明の第１の目的は、プロセッサ処理の安全性を最小限のモジュール追加で実現し、既存システムへの影響を最小限することである。
【００１８】
本発明の第２の目的は、チップごとの固有情報など、製造コストに影響する要件を代替手段により提供し、より低コストで実現することである。具体的には、セキュアプロセッサの製造者とユーザが相手の暗号情報を知る必要をなくし、暗号情報の管理を不要にすることである。
【課題を解決するための手段】
【００１９】
上記目的を実現するために、本発明によれば、ユーザがセキュアプロセッサの暗号鍵を製造者に知らせることなく設定できるようにする。しかし、セキュアプロセッサの暗号鍵を外部から設定可能にするだけでは、ユーザだけでなく悪意の第三者も暗号鍵を外部から設定できるので、プロセッサ処理の安全性を維持することはできない。
【００２０】
プログラムの安全性証明とは、プログラムが正しい製造者により作成され、かつ改竄されていないことの証明が可能かどうか、ということを意味する。そこで、本発明では、正しいユーザにより作成された暗号鍵のみがセキュアプロセッサの暗号鍵として設定されるようにする。
【００２１】
図２は、本発明の原理を説明する図である。図２に示すように、本発明のセキュアプロセッサシステムは、セキュアプロセッサ２０と、暗号用メモリ３０と、を備える。セキュアプロセッサ２０は、命令コードを実行するコア２１と、プロセッサ鍵を保持する暗号鍵保持部２５と、コア２１に入出力されるデータを、プロセッサ鍵で暗号化または復号化する暗号処理部２４と、を有し、メモリ３０はコア２１に入出力されるデータを記憶する。この他にも、ＣＰＵコア２１を起動するための内蔵ＲＯＭ２３及び各ブロックを接続する内部バス２２などが設けられる。図示のように、暗号鍵保持部２５は、書き換え不能な固定暗号鍵を保持する固定レジスタ２６と、入力される命令暗号鍵が格納され、格納された命令暗号鍵を読み取り不能に保持する書込レジスタ２７と、を備え、プロセッサの立ち上げ時には固定レジスタ２６に保持された固定暗号鍵をプロセッサ鍵として出力し、書込レジスタ２７に命令暗号鍵が書き込まれた後は、書込レジスタ２７に保持された命令暗号鍵をプロセッサ鍵として出力する。メモリ３０は、セキュアプロセッサの製造者からユーザに供給された、入力された命令暗号鍵を書込レジスタ２７に書き込むための変換を行う鍵変換プログラムを固定暗号鍵で暗号化したプログラムデータ３１と、ユーザが独自に決定した命令暗号鍵（暗号化設定情報）３２と、命令暗号鍵３２で暗号化された処理プログラム３３と、を有する。暗号用メモリ３０は、セキュアプロセッサ２０内に設けられても、外部に設けられてもよい。
【００２２】
本発明によれば、鍵変換プログラムは書き換え不能な固定暗号鍵を用いて暗号化されており、正しい鍵変換プログラムでなければ、プロセッサ鍵を固定暗号鍵からユーザが任意に設定する命令暗号鍵に変更することはできない。このように、ソフトウェアからアクセスできない固定暗号鍵から起動し、任意の命令暗号鍵に変換することにより、チップ固有の固定暗号鍵を用いずとも使用者別の命令暗号鍵に設定できる。この構成では、鍵変換プログラム、命令暗号鍵及び処理プログラムはユーザが設ける暗号用メモリに記憶されるので、セキュアプロセッサは、従来の構成（図１の（Ａ））に、暗号処理部２４と暗号鍵保持部２５を追加するだけであり、最小限のモジュール追加で実現できる。
【００２３】
本発明によれば、製造者は鍵変換プログラムの固定鍵暗号化されたデータのみをユーザに供給するだけであり、ユーザは固定鍵自体を知る必要はない。また、ユーザは、命令暗号鍵を任意に決定して暗号用メモリに記憶するだけで、製造者に命令暗号鍵を知らせる必要はない。固定暗号鍵が漏洩しないとすれば、固定暗号鍵により暗号化された鍵変換プログラム、および変更後の命令暗号鍵により暗号化されたプログラムの両者について、正しい実行を保証することが可能となる。さらに、暗号に関する情報は暗号化されてメモリ（ＲＯＭ）に記憶されており、単体での解析は非常に難しい。
【００２４】
従って、製造者は複数のユーザに共通の固定鍵を使用することが可能であり、ユーザごとの命令暗号鍵を知らないので管理の必要がなく、暗号鍵の管理が非常に容易になる。また、ユーザは、製造者が命令鍵を知らないので、製造者からの命令鍵の漏洩の恐れがなく、安全性をより向上できる。
【００２５】
命令暗号鍵（暗号化設定情報）３２はＲＳＡ(Rivest Shamir Adleman)暗号化されていることが望ましい。製造者は、ＲＳＡ暗号化のための設定情報秘密鍵と公開鍵を決定し、公開鍵をユーザに供給する。ユーザが任意に決定した命令暗号鍵（暗号化設定情報）３２は、ＲＳＡ暗号化の公開鍵で暗号化されて暗号用メモリ３０に記憶される。ＲＳＡ暗号化された命令暗号鍵３２は設定情報秘密鍵で復号され、復号された命令暗号鍵が書込レジスタ２７に設定される。命令暗号鍵はＲＳＡ暗号化されているので解読は非常に困難である。この構成では、ユーザが設定情報秘密鍵を知ることはない。
【００２６】
暗号処理部は、暗号化及び復号を、ＡＥＳ暗号化により行うことが望ましい。これは、鍵変換プログラム及び制御プログラムはデータ量が多く、高速の処理が要求されるためである。
【００２７】
これに対して、命令暗号鍵は上記のようにＲＳＡ暗号化されていることが望ましい。これは、命令暗号鍵の暗号化と復号が別々に行なわれ、かつ高い秘匿性を要求され、暗号の対象が命令暗号鍵のみでデータ量が少ないためである。
【００２８】
設定情報秘密鍵は、セキュアプロセッサ内に記憶しておくことも可能であるが、鍵変換プログラムに付加して、設定情報秘密鍵を含む鍵変換プログラムを固定暗号鍵で暗号化したデータを製造者からユーザに供給するようにしてもよい。設定情報復号鍵は暗号化されているので、やはりユーザは設定情報復号鍵を知ることはできない。ユーザは、設定情報復号鍵含む鍵変換プログラムをメモリに記憶する。セキュアプロセッサの起動時には、上記のように鍵変換プログラムが固定暗号鍵により復号されるので、そこから設定情報復号鍵を抽出して、ＲＳＡ暗号化された命令暗号鍵の復号を行う。
【００２９】
さらに、暗号用メモリ３０にユーザが生成した電子署名を記憶するようにしてもよい。電子署名を検証するプログラムは、セキュアプロセッサ２０内に設けても、暗号用メモリ３０に設けてもよい。この構成においては、例えば命令暗号鍵で暗号化されたプログラムの作成者（ユーザ）が、あらかじめ署名公開（検証）鍵を作成して製造者に知らせておき、プログラムの作成者（ユーザ）が作成した電子署名を署名公開鍵で検証することによって、命令暗号鍵で暗号化されたプログラムの正当性を確認する機能を付加することができる。署名公開鍵は電子署名を検証するものであり、署名公開鍵が漏洩しても、その鍵を用いて正しい署名を生成することはできない。命令公開鍵が漏洩した場合、不正な鍵を用いて不正なプログラムを作成することができるが、署名検証により不正な実行を防止することができる。
【００３０】
電子署名は、命令暗号鍵と同様の理由で、ＲＳＡ方式により実施されていることが望ましい。
【００３１】
署名公開鍵はユーザが独自に設定する暗号鍵であり、これをセキュアプロセッサに記憶するとユーザ別のセキュアプロセッサを製造する必要がり、望ましくない。そこで、署名公開鍵も、鍵変換プログラム中に固定鍵で暗号化して記憶することが望ましい。
【００３２】
製造者からユーザに設定情報公開鍵を知らせ、ユーザから製造者に署名公開鍵を知らせ、製造者は、設定情報秘密鍵と署名公開鍵を含む鍵変換プログラムを固定暗号鍵で暗号化したデータを、ユーザに供給する。ユーザは、この暗号化されたデータに、設定情報公開鍵で暗号化された命令暗号鍵と、電子署名と、命令暗号鍵で暗号化した制御プログラムを組み合わせて、ＲＯＭデータを作成する。製造者からユーザに供給されるデータは暗号化されているので、ユーザが設定情報秘密鍵を知ることはできない。また、製造者が、ユーザが決定した署名秘密鍵を知ることもできない。
【００３３】
電子署名を検証する構成で、デバッガの接続検出信号を暗号処理部に接続し、デバッガを検出した際に命令復号処理を停止する機能を備えてもよい。これにより、ＣＰＵコア２１内では実行のために復号された命令が存在するという点を悪用し、その状態においてＣＰＵコア２１の情報を、デバッガを用いて取り出すという攻撃から、プログラムを守ることができる。
【００３４】
さらに、命令暗号鍵の取り出し（復号）処理において、命令暗号鍵に加えて正規ユーザ認証コードの認証を含めてもよい。この構成においては、命令暗号鍵で暗号化されたプログラムの作成者だけが設定可能な命令暗号鍵に、正規ユーザ認証コードを加えた上で、ＲＳＡ方式の公開鍵暗号化を行い、正規ユーザ認証コードをレジスタに記憶させることで、正規ユーザの判定機能を追加することができる。
【００３５】
さらに、デバッガよりアクセス可能な、正規ユーザ認証コードと比較すべき値を格納可能なレジスタを備え、正規ユーザコードと比較し一致した際は、復号停止処理を解除する機能を備えてもよい。この構成においては、命令暗号鍵により暗号化されたプログラムの作成者のみに対し、デバッガ接続時であっても正しく使用できる環境を提供可能とすることができる。
【００３６】
上記の構成において、プロセッサコア２１に対し、暗号処理手段２４を介さず接続され、かつ暗号用メモリ３０の暗号化状態を判定するプログラムを記録した（内蔵）ＲＯＭ２３を備える構成としてもよい。この構成においては、内蔵ＲＯＭ２３に暗号化状態判定プログラムを備え、それにより暗号用ＲＯＭ３０が実装されているかを検証可能にすると共に、暗号化・非暗号化の両用途に共通のプロセッサ構成とすることができる。
【００３７】
さらに、暗号用メモリ３０は、フラッシュＲＯＭ等の書き換え可能な不揮発性メモリであることが望ましく、暗号用メモリ３０はセキュアプロセッサ２０を内部または外部に設ける。この構成では、暗号化状態を外部メモリの特定領域に記載しておくことにより、暗号化プログラムか否かを判定出来るため、起動設定を外部データにより容易に変更可能とすることができる。
【００３８】
さらに、固定暗号鍵を記憶する固定レジスタ２６は、例えば固定暗号鍵を複数記憶可能で、複数鍵の中から任意の鍵を選択できる構成としてもよい。この構成では、複数の固定暗号鍵を任意番号により選択することができ、固定暗号鍵の漏洩時に、新規番号を選択することで、セキュアプロセッサの製造をそのまま続行できる。
【発明の効果】
【００３９】
本発明によれば、セキュアプロセッサの暗号鍵を、書き換え不可能な固定暗号鍵から、その固定暗号鍵にて暗号化された鍵変換プログラムにより、ユーザが任意に決定した命令暗号鍵に変換するので、セキュアプロセッサの暗号鍵をユーザが独自に製造者に知らせることなく設定でき、暗号鍵の秘密保持が容易である。また、鍵変換プログラムや命令暗号鍵は外部のメモリに記憶すればよく、固定暗号鍵の任意鍵への変換と、暗号処理ハードウェアの単一ブロック化によってプロセッサに追加するモジュールを最小限にして、製造コストを押さえた上で、一般的なプロセッサに非常に付加しやすい構成で実現することが可能である。
【００４０】
さらに、命令暗号鍵をＲＳＡ暗号化すれば、命令暗号鍵を外部から知ることが困難になり、命令暗号鍵の秘密保持が厳重になる。
【００４１】
さらに、電子署名によるプログラムの認証を行い、不正を検出した際に命令暗号鍵を設定しないようにすることにより、セキュアプロセッサを含むシステムの安全性及び信頼性を一層向上することができる。
【発明を実施するための最良の形態】
【００４２】
以下、図面を参照しながら本発明の実施の形態について説明する。
【００４３】
図３は、本発明の第１実施例のセキュアプロセッサシステムの全体構成を示す図である。図示のように、システムは、セキュアプロセッサ２０と、暗号用の外部ＲＯＭ３４と、で構成される。従来例と同様に、他にもＲＡＭや入出力インターフェースなどが接続されるが、発明に直接関係しないので省略している。セキュアプロセッサ２０は、ＣＰＵコア２１と、内部バス２２と、内蔵ＲＯＭ２３と、暗号処理部２４と、暗号鍵保持部２５と、メモリＩＦ２８と、を有する。暗号処理部２４は、ＣＰＵコア２１とメモリＩＦとの間の入出力を、暗号鍵保持部２５から出力されるプロセッサ鍵で、暗号化処理及び復号処理を行う。暗号鍵保持部２５は、書き換え不能でかつ外部からアクセス不能なＲＯＭ２６と、書き込み可能でかつ外部からアクセス不能な書込ＲＯＭ２７と、を有し、ＲＯＭ２６には固定（ＨＷ）暗号鍵が記憶されており、書込ＲＯＭ２７には起動後命令暗号鍵が書き込まれる。なお、実施例では、ＲＯＭ２６は、複数の固定暗号鍵を記憶する複数のレジスタで構成され、ＨＷ鍵番号により複数の固定暗号鍵の１つを選択する選択回路を有し、選択した固定暗号鍵を出力できるようになっているが、ＲＯＭ２６が１つの固定暗号鍵を記憶するようにしてもよい。起動時には、ＲＯＭ２６から選択した固定暗号鍵がプロセッサ鍵として暗号処理部２４に出力され、書込ＲＯＭ２７に命令暗号鍵が書き込まれた後は、書込ＲＯＭ２７から命令暗号鍵がプロセッサ鍵として暗号処理部２４に出力されるように構成されている。また、内蔵ＲＯＭ２３は、本実施例では必須の構成となっており、その内部については後述する。これらを１チップの半導体として構成する。
【００４４】
外部ＲＯＭ３４は、例えば、書き換え可能なフラッシュＲＯＭなどで構成され、内部にＲＯＭヘッダ４１と、鍵変換プログラム４３と、ＲＳＡ暗号化データ４９と、制御プログラム５４と、を記憶している。ＲＯＭヘッダ４１はヘッダデータ４２を有する。鍵変換プログラム４３は、ＡＥＳ暗号化データ４４を有する。ＡＥＳ暗号化データ４４は、固定暗号鍵によりＡＥＳ暗号化されている鍵変換プログラム４５を有し、固定暗号鍵によりＡＥＳ暗号化されている鍵変換プログラム４５は、鍵変換プログラム本体４６と、第２ＲＳＡ公開鍵４７と、第１ＲＳＡ秘密鍵４８と、を有する。ＲＳＡ暗号化データ４９は、第１ＲＳＡ暗号化データ５０と、第２ＲＳＡ暗号化データ５２と、を有し、第１ＲＳＡ暗号化データ５０は暗号化設定情報５１を有し、第２ＲＳＡ暗号化データ５２は認証関連情報５３を有する。第１ＲＳＡ暗号化データ５０と第２ＲＳＡ暗号化データ５２は、異なる暗号鍵で暗号化されている。制御プログラム５４は、命令暗号鍵でＡＥＳ暗号化されたＡＥＳ暗号化データ５５を有し、それにはＡＥＳ暗号化制御プログラム５６が含まれる。ＡＥＳ暗号化制御プログラム５６は、制御プログラム本体５７と、その他のユーザデータ５８と、を有する。
【００４５】
暗号処理部２４では、暗号鍵保持部２５から出力されるプロセッサ鍵で、出力方向のデータはＡＥＳ暗号化を、入力方向のデータはＡＥＳ復号処理をそれぞれ行う。このため、外部ＲＯＭ３４のデータは暗号化されている。本実施例では、セキュアプロセッサ２０のチップの内部の固定暗号鍵はチップごとに個別ではなく共通のものを使用し製造コストの削減を図っている。そのため、プロセッサの使用者（ユーザ）ごとの鍵も同じとなってしまい、第三者からの解析は防ぐことができるものの、使用者間での秘密の保護はできないことになってしまう。そこで、本実施例では、チップの固定暗号鍵を、製造者が作成する鍵変換プログラムの暗号化だけに用いることとし、製造者以外への固定暗号鍵情報の流通を行わないこととした。
【００４６】
図４は、暗号用（外部）ＲＯＭ３４に記憶するデータの作成手順を説明する図であり、図５はデータの流れを示す図である。図４では、上側が製造者の作業を、下側がユーザの作業を示す。まず、図４及び図５を使用して、外部ＲＯＭ３４に記憶するデータを説明する。
【００４７】
セキュアプロセッサ２０のチップ製造者は、複数の（ＨＷ）暗号鍵（Ｄ１）のうちから１つを選択して、チップごとに共通のＡＥＳ暗号化用固定（ＨＷ）暗号鍵６１を決定し、固定暗号鍵６１は外部に漏洩しないように厳重に管理される。また、製造者は外部ＲＯＭ３４から読み取った命令鍵を書き込み可能ＲＯＭ２７に記憶する鍵変換プログラム本体４６を用意する。さらに、製造者は、第１ＲＳＡ秘密鍵６３と第１ＲＳＡ公開鍵６４とで構成される設定情報暗号鍵６２を決定し、第１ＲＳＡ秘密鍵６３は外部に漏洩しないように厳重に管理され、第１ＲＳＡ公開鍵６４はユーザに供給される。
【００４８】
一方、ユーザは、ＡＥＳ暗号化用命令暗号鍵６０を含む暗号化設定情報５１と、制御プログラム５３と、を生成する。さらに、ユーザは、第２ＲＳＡ秘密鍵６６と第２ＲＳＡ公開（検証）鍵６７とで構成される署名用鍵６５を決定し、第２ＲＳＡ秘密鍵６６は外部に漏洩しないように厳重に管理され、第２ＲＳＡ公開鍵６７は製造者に供給される。
【００４９】
製造者は、選択した固定暗号鍵に対応してＣＴＲモードでのカウンタ値（Ｄ２）をプログラムサイズと同じだけ生成する。これをＥＣＢモードで暗号化し（Ｄ３）、暗号化カウンタデータ（Ｄ４）を生成する。そして、鍵変換プログラム本体４６と、第１ＲＳＡ秘密鍵６３と、ユーザから供給された第１ＲＳＡ公開鍵６７と、を合わせてたデータを、暗号化ツール６８において固定暗号鍵６１でＡＥＳ暗号化する。具体的には、これと鍵変換プログラム（Ｄ５）のデータとの排他的論理和（ＸＯＲ）（Ｄ８）を算出することにより暗号化処理が完了し、暗号化された鍵変換プログラム４３になる。鍵変換プログラム４３はユーザごとに生成される。そして、使用した固定暗号鍵を指定するＨＷ鍵番号に基づいて作成したＲＯＭヘッダ４１と、暗号化ツール６８でＡＥＳ暗号化した鍵変換プログラム４３と、を合わせて、プログラムデータとしてユーザに供給される。鍵変換プログラム４３には、ＡＥＳ暗号化された形で第１ＲＳＡ秘密鍵６３と第２ＲＳＡ公開鍵６７とが含まれている。
【００５０】
ユーザは、ＡＥＳ暗号化用命令暗号鍵６０を含む暗号化設定情報５１を、ＲＳＡ暗号化部７２において第１ＲＳＡ公開鍵６４でＲＳＡ暗号化してＲＳＡ暗号化された暗号化設定情報７５を作成する。さらに、ＲＳＡ暗号化された暗号化設定情報７５をハッシュ処理したデータに対して、署名生成部７３において第２ＲＳＡ秘密鍵６６でＲＳＡ暗号化して電子署名７６を作成する。さらにＡＥＳ暗号化部７４において、これらの情報に含まれるカウンタデータ、命令暗号鍵を用いて、Ｄ１４、Ｄ１５、Ｄ１６のように暗号化し、制御プログラムのデータＤ１７とＸＯＲ（Ｄ１８）することで、命令暗号鍵６０でＡＥＳ暗号化された制御プログラム７７を作成する。以上の処理は暗号化データ作成ツール７１を使用して行われる。以上のようにして作成したＲＳＡ暗号化された暗号化設定情報７５、電子署名７６及びＡＥＳ暗号化された制御プログラム７７は、製造者から供給されたＲＯＭヘッド４１と鍵変換プログラム４３を含むプログラムデータと合わされて、外部ＲＯＭ３４に書き込まれる。このようにして、外部ＲＯＭが完成する。
【００５１】
図６は、製造者側とユーザ側での暗号用ＲＯＭ３４の作成手順を示すフローチャートである。製造者側では、あらかじめ複数の固定暗号鍵が記憶されたセキュアプロセッサを製造して、鍵変換プログラム本体４６も作成されているとする。固定暗号鍵は、外部からの設定で選択できるようになっている。ステップＳ１１で、設定情報暗号鍵ペア（第１ＲＳＡ鍵ペア）６２及びＨＷ鍵選択番号を含むユーザ別パラメータを生成する。一方、ユーザ側では、ステップＳ２１で、第２ＲＳＡ鍵ペア６５を含む署名検証用パラメータを作成する。
【００５２】
ステップＳ１２及びＳ２２では、署名検証用の第２ＲＳＡ公開鍵６７がユーザ側から製造者側に供給され、製造者は第２ＲＳＡ公開鍵６７を入手する。すなわち、第２ＲＳＡ公開鍵６７の交換が行われる。
【００５３】
ステップＳ１３及びＳ２３では、設定情報暗号化用の第１ＲＳＡ公開鍵６４が製造者側からユーザ側に供給され、ユーザが第１ＲＳＡ公開鍵６４を入手する。すなわち、第１ＲＳＡ公開鍵６４の交換が行われる。
【００５４】
製造者側では、ステップＳ１４で、鍵変換プログラム本体４６、第１ＲＳＡ秘密鍵６３及び第２ＲＳＡ公開鍵６７を含むデータをＡＥＳ暗号化した暗号化バイナリデータが生成される。この暗号化バイナリデータは、ユーザ側で解読することはできない。
【００５５】
一方、ユーザ側では、ステップＳ２４で、設定定情報を作成して製造者から入手した第１ＲＳＡ公開鍵６４でＲＳＡ暗号化し、制御プログラムを作成して命令暗号鍵でＡＥＳ暗号化し、さらに電子署名を生成する。
【００５６】
製造者は、ステップＳ１５で、ステップＳ１４において生成した暗号化バイナリデータをユーザに供給し、ユーザは暗号化バイナリデータを入手する。
【００５７】
ユーザは、ステップＳ２５で、入手した暗号化バイナリデータと、ステップＳ２４で作成した暗号化した設定定情報、暗号化した制御プログラム及び電子署名と、を合わせて外部ＲＯＭ３４を作成する。
【００５８】
ユーザは、製造者から供給されるセキュアプロセッサと、以上のようにして作成した外部ＲＯＭ３４と、を組合せ、他の要素を組み合わせてシステムを製造する。
【００５９】
以上説明したように、ユーザから製造者に供給されるのは署名検証用の第２ＲＳＡ公開鍵のみであり、製造者はユーザが独自に決定した命令暗号鍵を知ることはない。また、製造者からユーザに供給されるのは設定情報暗号化用の第１ＲＳＡ公開鍵と、暗号化された暗号化バイナリデータのみであり、ユーザは製造者が独自に決定した固定鍵及び第１ＲＳＡ秘密鍵を知ることはない。
【００６０】
図６のようにして作成した暗号用の外部ＲＯＭを作成した後、ユーザ側の都合で制御プログラムを変更する必要が生じる場合がありえる。図７は、そのような外部ＲＯＭの更新作業を示すフローチャートである。製造者はこの作業に関わる必要はなく、更新作業はすべてユーザ側で行うことができる。
【００６１】
ステップＳ３１では、新しい制御プログラムを作成して命令暗号鍵でＡＥＳ暗号化し、以前に作成した第１ＲＳＡ公開鍵６４でＲＳＡ暗号化し設定定情報及び電子署名と合わせ、ステップＳ３２で以前に製造者から供給された暗号化バイナリデータを組み合わせて外部ＲＯＭを作成する。
【００６２】
以上が、暗号用の外部メモリ３４に記憶されている暗号データである。外部ＲＯＭ３４の記憶内容は３つの部分から構成され、各々暗号化されているため、第三者、およびプロセッサの使用者の相互間で解析が出来ない構造とすることができる。なお、ここでは、プロセッサ鍵（固定鍵及び命令暗号鍵）の暗号処理をＡＥＳ方式、設定情報暗号化用及び署名認証用の公開鍵暗号方式をＲＳＡ方式に代表して記載しているが、同等の方式であればどのような方式を使用してもよい。使用者の作成した制御プログラムを暗号化する命令暗号鍵は、第１ＲＳＡ公開鍵により暗号化されるが、ＲＳＡ暗号方式では公開鍵は秘密（復号）鍵と異なるため、公開鍵をユーザに公開してもユーザが秘密鍵を知ることはなく、ユーザは定義した制御プログラム用の命令暗号鍵を自ら暗号化することができる。このことにより、ユーザは、重要機密情報である命令暗号鍵を製造者に明示的に通知することなくプログラムの暗号化を実施できる。
【００６３】
次に、このような暗号データを処理するセキュアプロセッサ２０の内部構成を説明する。まず、セキュアプロセッサ２０の基本的な動作を説明する。セキュアプロセッサ２０は、チップ内のＲＯＭ２６に記憶された固定暗号鍵６１で暗号化された鍵変換プログラム４３を、チップ内固定暗号鍵が供給される暗号処理部２４により復号しながら実行し、さらに、鍵変換プログラム４３内では、第１ＲＳＡ公開鍵６４にて暗号化された制御プログラム用の命令暗号鍵６０を取り出し、書込可能ＲＯＭ２７に設定する。これにより、暗号処理部２４は、命令暗号鍵６０で暗号化及び復号化を行うように設定される。このようにして、セキュアプロセッサ２０のユーザが作成した制御プログラム５４が正しく復号されるべく鍵変換が行われたことになる。鍵変換後は、暗号処理部２４にて、暗号化された制御プログラム５４が復号されることにより、正しい実行が可能となる。
【００６４】
図８は、暗号処理部２４の内部構成を示す。暗号処理部２４は、ＲＳＡ公開鍵処理部８１と、プロセッサ鍵処理部８３の２つから構成される。ＲＳＡ公開鍵処理部８１は、前述のＲＳＡ処理の高速化を図るための公開鍵演算器８２が実装されるものであり、本実施例の構成要件において必須ではないが、既存システムへの容易な追加を可能とする観点から備えられる。プロセッサ鍵処理部８３は、ＣＰＵコア２１側のインタフェースからのコマンドが自モジュール（プロセッサ鍵処理部８３）向けであるかどうかを判定するバス判定部８５、暗号機能がオフである場合のバイパス制御部８４、自モジュール向けのコマンドが、暗号化対象かどうかを判定する暗号化判定部８６、プロセッサ鍵でのＡＥＳ鍵暗号化または復号処理を行う共通鍵演算部８７、共通鍵演算部８７への鍵を供給する暗号鍵保持部２５、及び暗号化および復号処理と終了判定を行う終了判定・復号処理部８８、のいくつかの小ブロックから構成される。
【００６５】
次に、暗号処理部２４におけるデータの流れを説明する。ＣＰＵコア２１から外部ＲＯＭ３４の読み取り（リード）を行う場合及び復号処理を行う場合は、あらかじめプロセッサ鍵情報の設定を行う。そのため、暗号鍵保持部２５に対し、前述の鍵変換プログラムを実行する場合は、設定は不要、ないしいくつかの鍵からどの鍵を選択するかを指定するＨＷ鍵番号を設定しておく。同様に暗号化判定部８６において、対象アドレスが暗号化されているかの情報を暗号化判定部８６に設定する。これらの設定後、ＣＰＵコア２１から、外部ＲＯＭ３４に対しリードコマンドが、内部バス２２を介して暗号処理部２４に送出される。バス判定部８５は暗号化対象であるかどうかの判定指示、鍵設定指示、をそれぞれ暗号化判定部８６及び暗号鍵保持部２５に送出し、各ブロックは共通鍵演算器８７に対し暗号化域判定結果と鍵情報を送出する。共通鍵演算器８７はそれらの情報とバス判定部８５からの起動信号を元に、アドレス情報を元にした情報に対し復号処理を実施する。復号処理終了後、演算結果が終了判定・復号処理部８８に送出される。並行して、バイパス制御部８４、外部アドレス・コマンドバスを介して外部ＲＯＭ３４に対しリードコマンドが発行される。このコマンドの結果、一定時間の後外部ＲＯＭ３４よりデータを受信するが、終了判定・復号処理部８８において外部ＲＯＭ３４のデータ、プロセッサ鍵演算処理の両方の処理を待ち合わせた後、演算し、その結果を処理データバス、内部データバスを介してＣＰＵコア２１に返す。なお、終了判定・復号処理部８８における演算については、ＣＴＲモードを使用している。
【００６６】
図９は、暗号化判定部８６及び暗号鍵保持部８８の構成を示す図である。図示のように、外部ＲＯＭ３４の暗号データは、メモリ復号回路９０でプロセッサ鍵により復号されてＣＰＵコア２１に供給される。固定暗号鍵保持部１００は、図４のＲＯＭ２６に相当する。固定暗号鍵保持部１００は、複数の固定暗号鍵を記憶しており、ＨＷ鍵番号レジスタ９９に保持されたＨＷ鍵番号により複数の固定暗号鍵の１つが選択されて出力されるように構成されている。ＨＷ鍵番号は、セキュアプロセッサ２０の外部から入出力端子を介して設定するか、またはチップに後処理を施すことにより設定する。命令暗号鍵保持部１０１は、図４の書込ＲＯＭ２７に相当する。命令暗号鍵保持部１０１は、正当な鍵変換プログラム４３で署名認証が行われた時に、暗号化設定情報に含まれる命令暗号鍵が復号されて書き込まれる。鍵復号鍵設定部１０２は、命令暗号鍵保持部１０１に命令暗号鍵が書き込まれる前には、固定暗号鍵保持部１００から出力される固定暗号値を保持してプロセッサ鍵としてメモリ復号回路９０に出力し、命令暗号鍵保持部１０１に命令暗号鍵が書き込まれた後には、命令暗号鍵をプロセッサ鍵としてメモリ復号回路９０に出力する。言い換えれば、命令暗号鍵が設定された時点で固定暗号鍵は無効となる。もし、固定暗号鍵保持部１００が１個の固定暗号鍵を保持する時には、ＨＷ鍵番号保持レジスタ９９は必要ない。
【００６７】
暗号化判定部８６は、復号起動レジスタ９１と、デバッガ検出回路９２と、正規ユーザ認証データ保持部９３と、認証比較値保持部９４と、正規ユーザ認証データ保持部９３と認証比較値保持部９４の値を比較する比較器９５と、スクランブル解除レジスタ９６と、暗号化域指定レジスタ９７と、復号動作制御部９８と、を有する。この部分については後述する。
【００６８】
図１０は、本実施例のセキュアプロセッサシステムにおける動作を示すフローチャートである。図５に示したデータの流れと併せて動作を説明する。なお、図１０のフローチャートにおいて、左側の実行プログラムの項が、その時点における実行プログラムの記録位置を示している。
【００６９】
ステップＳ４１でのパワーオンにより、内蔵ＲＯＭ２３に記録されている起動プログラムが処理される。ステップＳ４２で、内蔵ＲＯＭ２３のプログラムは、まず外部ＲＯＭ３４のヘッダデータ４２を読み込む。ヘッダデータ４２は、図５のＲＯＭヘッダ４１に記載されている通り、暗号化ＲＯＭであるかどうかの情報、暗号化ＲＯＭであった場合の各データの配置情報が平文で記録されている。ステップＳ４３で、読み込まれたヘッダデータが、平文ＲＯＭであったならばステップＳ４４に進んで暗号化に関する処理は行われず、通常の起動を行う。暗号化ＲＯＭであった場合はステップＳ４４に進み、ＲＯＭヘッダを元にブートパラメータの設定を行う。具体的にはＲＯＭヘッダ４１に示す暗号鍵番号のＨＷ鍵番号保持レジスタ９９（図８）への設定と、各アドレス情報の保持である。これは、図５におけるデータ４１の設定に対応する。
【００７０】
続いて、ステップＳ４５で、メモリ復号機能を、図９の復号起動レジスタ９１に設定することで起動する。これで、外部ＲＯＭ３４のデータが復号しながらリード可能な状態となる。その後、鍵変換プログラム４３に分岐する。鍵変換プログラム４３はチップ製造元により作成されるプログラムで、前述の暗号鍵番号で指定される固定暗号鍵で暗号化されている。分岐すると、鍵変換の処理を開始する。鍵変換処理は、まずステップＳ４６で、ＲＳＡ暗号化データ部を読み込み、復号する。ＲＳＡ暗号化データ部は、ハードウェア設定関連情報をＲＳＡ方式により暗号化した暗号化設定情報５１と、その情報に対し電子署名を施した認証関連情報５３の２つから構成されている。署名検証のための検証鍵（第２ＲＳＡ公開鍵）と、復号のためのＲＳＡ秘密鍵（第１ＲＳＡ秘密鍵）は、前述のように、あらかじめ鍵変換プログラム４３内に保持しておく。
【００７１】
ステップＳ４５で、読み込まれたＲＳＡ暗号化データ部の署名部分を、まず検証を行う。ステップＳ４６で検証結果を判定し、この署名が改竄されていると判定できた場合、ステップＳ４７に進んで、エラー処理、すなわち実行停止処理を行う。改竄されていない場合は、ステップＳ４８で外部ＲＯＭ３４内のＲＳＡ暗号化データ部を読み取り、ステップＳ４９でＲＳＡ暗号化データ部から暗号化設定情報５１を復号する。暗号化設定情報５１は、図５のＤ９に示すように正規ユーザ認証コード、暗号化領域指定、暗号化カウンタ、命令暗号鍵より構成されており、これらの情報を元に、ハードウェアによる逆変換処理Ｄ１０が行われた後、各データがハードウェアに反映される。なお、ＲＯＭデータ作成時には、図５でのスクランブル処理Ｄ１０、ＲＳＡ暗号化処理Ｄ１１を経て暗号化設定情報５１が生成されている。復号された暗号化設定情報５１は、図９のスクランブル解除レジスタ９６に一括して設定する。この処理が、図１０のステップＳ５０のユーザデータ更新処理に相当する。ここでの処理で、命令暗号鍵が保持部１０１に設定され、プロセッサ鍵が変更されたのであるが、即座に復号鍵が変更されたのでは、暗号化状態で実行中のプログラムの正しい復号が出来ないことになる。本実施例では、図９の復号起動レジスタ９１を再起動したタイミングで、復号処理の鍵が更新されることとしている。フローは安全のため、一度内蔵ＲＯＭ３４に戻り、ステップＳ５１で復号機能の起動を行っている。ここまでの状態で、ユーザの制御プログラム用の命令暗号鍵が正しくハードウェア（書込ＲＯＭ２７）に設定され、復号可能な状態となっている。あとはステップＳ５２で、ユーザプログラムに分岐して、通常のプログラムと全く同様に実行することが可能である。また、ユーザプログラム実行時には、製造者が作成した鍵変換プログラムを正しく読み込むことは出来ず、各秘密鍵の安全性も維持できる。
【００７２】
図９に戻り、他の機能について説明する。図９のＲＳＡ復号結果をスクランブル解除レジスタ９６に設定した際、命令暗号鍵以外に暗号化域指定及び認証比較値９４も同時にレジスタ９４、９７に設定される。暗号化域指定は、一定単位のアドレスごとに暗号化するかどうかの指定を行うことが出来る機能である。認証比較値は、正規ユーザであるかの認証に用いる。ＲＳＡ暗号化データは、図５のＤ５＝Ｄ６、Ｄ５＝Ｄ７の各組合せで定義され、前述のように製造者は暗号化設定情報の暗号化を行うための第１ＲＳＡ鍵ペアを作成し、ユーザは署名に関する第２ＲＳＡ鍵ペアを作成したうえで、それぞれの公開鍵相当データを交換する。この鍵交換により、正しいユーザが正しくデータを作成した場合のみ正常に実行することができる。認証比較値は、これらの情報により暗号化されているため、制御プログラムを暗号化する際に定義した情報を知らない限り知り得ない情報であると言える。暗号判定部８６は、図９のように、ソフトウェアから書き込み可能な正規ユーザ認証レジスタ９３と、鍵変換プログラムによってのみ書き込まれる認証比較値レジスタ９４の認証比較値を常時比較し、正規ユーザか否かを判定している。この情報は、図１１の表に基づいた処理に使用される。パターン１の場合、復号処理が起動されておらず、暗号化プログラムは動作していないため、特段の制御は必要ない。パターン２では、復号処理は起動されているものの、デバッガを検出していないため、正規ユーザの認証を問わず動作する。これは、通常の運用状態に相当する。パターン３は、パターン２の状態で、デバッガを検出した場合である。正規ユーザ認証のレジスタに、適切な値が設定されないままデバッガが接続されると、復号処理を即座に停止するため正しい実行はできない。正規ユーザはパターン４の如く、事前に正規ユーザコードをレジスタ９３に設定した上でデバッガを接続する。ユーザ認証が正しく行われていれば、デバッガ検出時でも復号処理は継続する。これにより、暗号化命令を復号しながら動作するプロセッサにおける解析を困難とすることができる。
【００７３】
本発明により、既存システムに対する追加が非常に容易な形で、動作の安全性を保証出来るセキュアプロセッサの提供が可能となる。
（付記１）
命令コードを実行するコアと、プロセッサ鍵を保持する暗号鍵保持部と、前記コアに入出力されるデータを、前記プロセッサ鍵で暗号化または復号化する暗号処理部と、を有するセキュアプロセッサと、
前記コアに入出力されるデータを記憶するメモリと、を備えるセキュアプロセッサシステムであって、
前記セキュアプロセッサの前記暗号鍵保持部は、
書き換え及び読み取り不能な固定暗号鍵を保持する固定レジスタと、
入力される命令暗号鍵が格納され、格納された前記命令暗号鍵を読み取り不能に保持する書込レジスタと、を備え、
前記暗号鍵保持部は、当該プロセッサの立ち上げ時には前記固定レジスタに保持された前記固定暗号鍵を前記プロセッサ鍵として出力し、前記書込レジスタに前記命令暗号鍵が書き込まれた後は、前記書込レジスタに保持された前記命令暗号鍵を前記プロセッサ鍵として出力することを特徴とするセキュアプロセッサシステム。
（付記２）
前記セキュアプロセッサは、前記コアに前記暗号処理部を介さず接続され、前記メモリに記憶されたデータの暗号化状態を判定するプログラムを記録したＲＯＭ（読み出し専用メモリ）をさらに備え、暗号化状態の判定結果に応じて起動設定を変更することを特徴とする付記１に記載のセキュアプロセッサシステム。
（付記３）
前記メモリは、平文または暗号化されたプログラムと、該プログラムの識別情報を記憶していることを特徴とする付記１に記載のセキュアプロセッサシステム。
（付記４）
前記メモリは、前記命令暗号鍵を前記書込レジスタに格納する鍵変換プログラムを、前記固定暗号鍵で暗号化した形で記憶することを特徴とする付記３に記載のセキュアプロセッサシステム。
（付記５）
前記メモリは、前記命令暗号鍵を設定情報公開鍵で暗号化した形で記憶しており、
前記セキュアプロセッサは、前記設定情報公開鍵で暗号化した前記命令暗号鍵を復号するための設定情報秘密鍵を、書き換え及び外部アクセス不能に記憶していることを特徴とする付記４に記載のセキュアプロセッサシステム。
（付記６）
前記メモリは、前記命令暗号鍵を設定情報公開鍵で暗号化した形で記憶しており、
前記鍵変換プログラムは、前記設定情報公開鍵で暗号化した前記命令暗号鍵を復号するための設定情報秘密鍵を記憶していることを特徴とする付記４に記載のセキュアプロセッサシステム。
（付記７）
前記メモリは、当該セキュアプロセッサで実行する処理プログラムを、前記命令暗号鍵で暗号化した形で記憶していることを特徴とする付記６に記載のセキュアプロセッサシステム。
（付記８）
前記暗号処理部は、暗号化及び復号をＡＥＳ暗号方式で行い、
前記命令暗号鍵の暗号化は、ＲＳＡ方式で行われることを特徴とする付記６に記載のセキュアプロセッサシステム。
（付記９）
前記メモリは、署名用秘密鍵で暗号化した電子署名を記憶しており、
前記鍵変換プログラムは、前記電子署名を検証するための署名公開鍵を記憶していることを特徴とする付記６に記載のセキュアプロセッサシステム。
（付記１０）
前記メモリは、署名用秘密鍵で暗号化した電子署名を記憶しており、
前記鍵変換プログラムは、前記電子署名を検証するための署名公開鍵を記憶しており、
前記セキュアプロセッサは、前記署名公開鍵での前記電子署名の検証が成功した時に前記命令暗号鍵を前記書込レジスタに書き込むプログラムを、前記固定暗号鍵により暗号化された形で記憶していることを特徴とする付記６に記載のセキュアプロセッサシステム。
（付記１１）
前記電子署名は、ＲＳＡ方式で作成されることを特徴とする付記９または１０に記載のセキュアプロセッサシステム。
（付記１２）
前記セキュアプロセッサは、デバッガの接続検出信号を暗号処理部に接続し、デバッガの検出時は前記プロセッサ鍵での復号処理を停止することを特徴とする付記９または１０に記載のセキュアプロセッサシステム。
（付記１３）
前記セキュアプロセッサは、デバッガよりアクセス可能な、ユーザ認証コードを記憶するレジスタと、
前記命令暗号鍵と前記ユーザ認証コードを比較部と、をさらに備え、
一致した場合はデバッガ接続時の復号停止処理を解除することを特徴とする付記１２に記載のセキュアプロセッサシステム。
（付記１４）
前記セキュアプロセッサの前記暗号鍵保持部は、前記固定レジスタを複数備え、前記複数の固定レジスタの１つを選択して前記プロセッサ鍵として出力することを特徴とする付記１から１３のいずれか１項に記載のセキュアプロセッサシステム。
（付記１５）
前記メモリは、当該セキュアプロセッサと同じチップの内部に設けられていることを特徴とする付記１から１４のいずれか１項に記載のセキュアプロセッサシステム。
（付記１６）
前記メモリは、当該セキュアプロセッサのチップの外部に設けられていることを特徴とする付記１から１４のいずれか１項に記載のセキュアプロセッサシステム。
（付記１７）
前記メモリは、少なくとも一部に書き換え可能な不揮発性メモリを有することを特徴とする付記１から１６のいずれか１項に記載のセキュアプロセッサシステム。
（付記１８）
命令コードを実行するコアと、プロセッサ鍵を保持する暗号鍵保持部と、前記コアに入出力されるデータを、前記プロセッサ鍵で暗号化または復号化する暗号処理部と、を有するセキュアプロセッサと、前記コアに入出力されるデータを記憶するメモリと、を備えるセキュアプロセッサシステムであって、前記セキュアプロセッサの前記暗号鍵保持部は、書き換え及び読み取り不能な固定暗号鍵を保持する固定レジスタと、入力される命令暗号鍵が格納され、格納された前記命令暗号鍵を読み取り不能に保持する書込レジスタと、を備え、前記暗号鍵保持部は、当該プロセッサの立ち上げ時には前記固定レジスタに保持された前記固定暗号鍵を前記プロセッサ鍵として出力し、前記書込レジスタに前記命令暗号鍵が書き込まれた後は、前記書込レジスタに保持された前記命令暗号鍵を前記プロセッサ鍵として出力し、前記メモリは、前記命令暗号鍵を前記書込レジスタに格納する鍵変換プログラムを、前記固定暗号鍵で暗号化した形で記憶し、前記命令暗号鍵を設定情報公開鍵で暗号化した形で記憶しており、前記鍵変換プログラムは、前記設定情報公開鍵で暗号化した前記命令暗号鍵を復号するための設定情報秘密鍵を記憶しており、前記メモリは、署名用秘密鍵で暗号化した電子署名を記憶しており、前記鍵変換プログラムは、前記電子署名を検証するための署名公開鍵を記憶しており、前記セキュアプロセッサは、前記署名公開鍵での前記電子署名の検証が成功した時に前記命令暗号鍵を前記書込レジスタに書き込むプログラムを、前記固定暗号鍵により暗号化された形で記憶しているセキュアプロセッサシステムの構築方法であって、
前記設定情報公開鍵は、前記セキュアプロセッサの製造者から前記セキュアプロセッサのユーザに通知され、
前記署名公開鍵は、前記セキュアプロセッサのユーザから製造者に通知されることを特徴とするセキュアプロセッサシステムの構築方法。
（付記１９）
命令コードを実行するコアと、
プロセッサ鍵を保持する暗号鍵保持部と、
前記コアとメモリとの間で入出力されるデータを、前記プロセッサ鍵で暗号化または復号化する暗号処理部と、を備えるセキュアプロセッサであって、
前記暗号鍵保持部は、
書き換え不能な固定暗号鍵を保持する固定レジスタと、
入力される命令暗号鍵が格納され、格納された前記命令暗号鍵を読み取り不能に保持する書込レジスタと、を備え、
前記暗号鍵保持部は、当該プロセッサの立ち上げ時には前記固定レジスタに保持された前記固定暗号鍵を前記プロセッサ鍵として出力し、前記書込レジスタに前記命令暗号鍵が書き込まれた後は、前記書込レジスタに保持された前記命令暗号鍵を前記プロセッサ鍵として出力することを特徴とするセキュアプロセッサ。
（付記２０）
前記コアに前記暗号処理部を介さず接続され、前記メモリに記憶されたデータの暗号化状態を判定するプログラムを記録したＲＯＭ（読み出し専用メモリ）をさらに備え、暗号化状態の判定結果に応じて起動設定を変更することを特徴とする付記１９に記載のセキュアプロセッサ。
（付記２１）
デバッガの接続検出信号を暗号処理部に接続し、デバッガの検出時は前記プロセッサ鍵での復号処理を停止することを特徴とする付記１９に記載のセキュアプロセッサ。
（付記２２）
デバッガよりアクセス可能な、ユーザ認証コードを記憶するレジスタと、
前記命令暗号鍵と前記ユーザ認証コードを比較部と、をさらに備え、
一致した場合はデバッガ接続時の復号停止処理を解除することを特徴とする付記２１に記載のセキュアプロセッサ。
（付記２３）
前記暗号鍵保持部は、複数の前記固定レジスタを備え、前記複数の固定レジスタの１つを選択して前記プロセッサ鍵として出力することを特徴とする付記１９から２２のいずれか１項に記載のセキュアプロセッサ。
（付記２４）
命令コードを実行するコアと、プロセッサ鍵を保持する暗号鍵保持部と、前記コアに入出力されるデータを、前記プロセッサ鍵で暗号化または復号化する暗号処理部と、設定情報秘密鍵を記憶する設定情報秘密鍵記憶部と、を有し、前記暗号鍵保持部は、書き換え及び外部読み取り不能な固定暗号鍵を保持する固定レジスタと、入力される命令暗号鍵が格納され、格納された前記命令暗号鍵を外部読み取り不能に保持する書込レジスタと、を有し、前記暗号鍵保持部は、当該プロセッサの立ち上げ時には前記固定レジスタに保持された前記固定暗号鍵を前記プロセッサ鍵として出力し、前記書込レジスタに前記命令暗号鍵が書き込まれた後は、前記書込レジスタに保持された前記命令暗号鍵を前記プロセッサ鍵として出力するセキュアプロセッサと、
前記コアに入出力されるデータを記憶するメモリと、を備えるセキュアプロセッサシステムの制御方法であって、
起動時に、前記メモリに記憶された、前記固定暗号鍵で暗号化された前記命令暗号鍵を前記書込レジスタに格納する鍵変換プログラムを、前記暗号処理部で復号し、
前記メモリに記憶され、設定情報公開鍵で暗号化した前記命令暗号鍵を、前記設定情報秘密鍵記憶部に記憶された前記設定情報秘密鍵で復号して前記書込レジスタに格納し、
前記暗号鍵保持部が前記命令暗号鍵で暗号化または復号化するように設定する、ことを特徴とするセキュアプロセッサシステムの制御方法。
（付記２５）
前記暗号鍵保持部は、ＡＥＳ暗号方式で処理を行い、
前記命令暗号鍵の暗号化は、ＲＳＡ方式で行われることを特徴とする付記２４に記載のセキュアプロセッサシステムの制御方法。
（付記２６）
前記設定情報秘密鍵は、前記鍵変換プログラムに前記固定暗号鍵で暗号化されて含まれており、復号した前記鍵変換プログラムから抽出されて前記設定情報秘密鍵保持部に保持されることを特徴とする付記２４に記載のセキュアプロセッサシステムの制御方法。
（付記２７）
前記メモリに記憶されたデータが改ざんされているかを判定し、判定結果に応じて起動設定を変更することを特徴とする付記２４に記載のセキュアプロセッサシステムの制御方法。
（付記２８）
前記鍵変換プログラムを復号した後、復号した前記鍵変換プログラムから、署名用秘密鍵で暗号化した電子署名を復号するための署名公開鍵を抽出し、
前記メモリに記憶された、前記電子署名を前記署名公開鍵で復号し、
復号した署名情報と、復号した前記命令暗号鍵を含む暗号化設定情報とを比較して、前記電子署名の検証を行い、
前記電子署名の検証が成功した時に前記命令暗号鍵を前記書込レジスタに書き込むことを特徴とする付記２４に記載のセキュアプロセッサシステムの制御方法。
（付記２９）
前記電子署名は、ＲＳＡ方式で作成されることを特徴とする付記２８に記載のセキュアプロセッサシステムの制御方法。
【産業上の利用可能性】
【００７４】
本発明は、ＣＰＵコアとの間で入出力するデータを暗号化したセキュアプロセッサに適用可能である。
【図面の簡単な説明】
【００７５】
【図１】従来のプロセッサ及びセキュアプロセッサの構成を示す図である。
【図２】本発明のセキュアプロセッサシステムの原理を説明する図である。
【図３】実施例のセキュアプロセッサシステムの構成を示す図である。
【図４】暗号用ＲＯＭの作成を説明する図である。
【図５】暗号用ＲＯＭの作成におけるデータの流れを示す図である。
【図６】暗号用ＲＯＭの作成手順を示すフローチャートである。
【図７】暗号用ＲＯＭの更新手順を示すフローチャートである。
【図８】暗号処理部の構成を示す図である。
【図９】暗号化判定部及び暗号鍵保持部の構成を示す図である。
【図１０】実施例のセキュアプロセッサにおける動作を示すフローチャートである。
【図１１】デバッガ検出と正規ユーザ認証の関係を示す図である。
【符号の説明】
【００７６】
２０    セキュアプロセッサ
２１    ＣＰＵコア
２２    内部バス
２３    内蔵ＲＯＭ
２４    暗号処理部
２５    暗号鍵保持部
２６    ＲＯＭ
２７    書込ＲＯＭ
２８    メモリインターフェース
３０    暗号用メモリ
３１    固定鍵暗号化（鍵変換プログラム）
３２    命令暗号鍵（暗号化設定情報）
３３    命令鍵暗号化データ（処理プログラム）
【図１】
2008210225.tif 000003
【図２】
2008210225.tif 000004
【図３】
2008210225.tif 000005
【図４】
2008210225.tif 000006
【図５】
2008210225.tif 000007
【図６】
2008210225.tif 000008
【図７】
2008210225.tif 000009
【図８】
2008210225.tif 000010
【図９】
2008210225.tif 000011
【図１０】
2008210225.tif 000012
【図１１】
2008210225.tif 000013