(57)【要約】  秘密鍵が非セキュア・ソフトウェア・アプリケーションによって読み出されないように保護する方法は、前記秘密鍵を実行専用メモリに記憶されるルーチンとして記録するステップ（９４）を含む。前記ルーチンは、前記ルーチンがセキュア・ソフトウェア・アプリケーションによって呼び出された場合は、前記セキュア・ソフトウェア・アプリケーションおよび非セキュア・ソフトウェア・アプリケーションによって読出し可能なメモリ内に前記秘密鍵をロードさせるロード命令と、前記実行専用ルーチンの呼出し元となる前記ソフトウェア・アプリケーションが前記非セキュア・ソフトウェア・アプリケーションである場合は、前記読出し可能なメモリ内に前記秘密鍵ではなくダミー・データだけが残るようにさせる制御命令とを有する。
2009504061.tif 000002
【特許請求の範囲】
【請求項１】
秘密鍵が非セキュア・ソフトウェア・アプリケーションによって読み出されないように保護する方法であって、前記秘密鍵を実行専用メモリに記憶される実行専用ルーチンとして記録するステップを含み、前記ルーチンは、
前記ルーチンがセキュア・ソフトウェア・アプリケーションによって呼び出された場合は、前記セキュア・ソフトウェア・アプリケーションおよび非セキュア・ソフトウェア・アプリケーションによって読出し可能なメモリ内に前記秘密鍵をロードさせるロード命令と、
前記実行専用ルーチンの呼出し元となる前記ソフトウェア・アプリケーションが前記非セキュア・ソフトウェア・アプリケーションである場合は、前記読出し可能なメモリ内に前記秘密鍵ではなくダミー・データだけが残るようにさせる制御命令と
を有する、方法。
【請求項２】
前記ロード命令は、それぞれの各値が前記ルーチンのコードに埋め込まれ、それぞれの各値が前記秘密鍵の少なくとも１ビットを表す定数をロードさせる命令である、請求項１に記載の方法。
【請求項３】
前記ロード命令が実行される前にＩＲＱ（割込み要求）が存在すれば当該ＩＲＱをディスエーブルするステップと、前記読出し可能なメモリ内の前記秘密鍵が削除された場合にだけ前記ＩＲＱを再イネーブルするステップとを含む請求項１または２に記載の方法。
【請求項４】
前記実行専用ルーチンは、セキュア・ソフトウェア・アプリケーションにシステム的に復帰し、任意のセキュア・ソフトウェア・アプリケーションは、前記ＩＲＱを再イネーブルするステップに先立って、ロードされている前記秘密鍵を削除する、請求項３に記載の方法。
【請求項５】
前記実行専用ルーチンの復帰先となる前記セキュア・ソフトウェア・アプリケーションは、前記セキュア・ソフトウェア・アプリケーションの呼出し元が前記実行専用ルーチンでなかった場合には、ロードされている前記秘密鍵を直ちに削除する、請求項４に記載の方法。
【請求項６】
請求項１乃至５のいずれか一項に記載の秘密鍵を保護する方法で使用されるべき実行専用ルーチンであって、
前記ルーチンがセキュア・ソフトウェア・アプリケーションによって呼び出された場合は、前記セキュア・ソフトウェア・アプリケーションおよび非セキュア・ソフトウェア・アプリケーションによって読出し可能なメモリ内に前記秘密鍵をロードさせるロード命令と、
前記実行専用ルーチンの呼出し元となる前記ソフトウェア・アプリケーションが前記非セキュア・ソフトウェア・アプリケーションである場合は、前記読出し可能なメモリ内に前記秘密鍵ではなくダミー・データだけが残るようにさせる制御命令と
を含む実行専用ルーチン。
【請求項７】
前記ロード命令は、それぞれの各値が前記ルーチンのコードに埋め込まれ、それぞれの各値が前記秘密鍵の少なくとも１ビットを表す定数をロードさせる命令である、請求項６に記載の実行専用ルーチン。
【請求項８】
前記実行専用ルーチンは、前記実行専用ルーチンの実行開始時にＩＲＱが存在すれば当該ＩＲＱをディスエーブルさせる命令を有する、請求項６または７に記載の実行専用ルーチン。
【請求項９】
前記実行専用ルーチンは、前記実行専用ルーチンの実行終了時にセキュア・ソフトウェア・アプリケーションにシステム的に復帰させる命令を有する、請求項８に記載の実行専用ルーチン。
【請求項１０】
セキュア端末であって、
ソフトウェア・アプリケーションと、前記ソフトウェア・アプリケーションによって呼び出されたルーチンとを実行するプロセッサと、
少なくとも１つの秘密鍵と
を備え、また、
実行専用ルーチンを記録するように適応された実行専用メモリも備え、前記実行専用ルーチンは、
前記ルーチンがセキュア・ソフトウェア・アプリケーションによって呼び出された場合は、前記セキュア・ソフトウェア・アプリケーションおよび非セキュア・ソフトウェア・アプリケーションによって読出し可能なメモリ内に前記秘密鍵をロードさせるロード命令と、
前記実行専用ルーチンの呼出し元となる前記ソフトウェア・アプリケーションが前記非セキュア・ソフトウェア・アプリケーションである場合は、前記読出し可能なメモリ内に前記秘密鍵ではなくダミー・データだけが残るようにさせる制御命令と
を有する、セキュア端末。
【請求項１１】
前記ロード命令は、それぞれの各値が前記ルーチンのコードに埋め込まれ、それぞれの各値が前記秘密鍵の少なくとも１ビットを表す定数をロードさせる命令である、請求項１０に記載の端末。
【請求項１２】
前記端末は、前記読取り可能なメモリ内にロードされている秘密鍵を削除させる、セキュア・ソフトウェア・アプリケーションの少なくとも１つの命令コードを含む読取り専用メモリ（ＲＯＭ）を備える、請求項１０または１１に記載の端末。
【請求項１３】
前記端末のリセット後、読出しを１回だけ行うことが可能であり、前記秘密鍵を記録するリード・ワンス・メモリと、
前記リード・ワンス・メモリに書き込まれている前記秘密鍵から前記実行専用ルーチンの前記命令コードを作成し、前記実行専用ルーチンの前記命令コードを前記実行専用メモリ内にロードするセキュア初期化ルーチンを有する読取り専用メモリと
を備える請求項１０または１１に記載の端末。
【請求項１４】
前記実行専用メモリは、命令読出し動作だけを許可し、データ読出し動作は禁止するトランザクション・デコーダを有する、請求項１３に記載の端末。
【請求項１５】
前記端末は、移動電話である、請求項１０乃至１４のいずれか一項に記載の端末。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、秘密鍵を保護する、セキュア端末、ルーチン、および方法に関するものである。
【背景技術】
【０００２】
セキュア端末は、典型的には、ソフトウェア・アプリケーションと、当該ソフトウェア・アプリケーションによって呼び出されたルーチンとを実行するプロセッサと、少なくとも１つの秘密鍵と、を備える。
【０００３】
プロセッサは、非セキュア・ソフトウェア・アプリケーションならびにセキュア・ソフトウェア・アプリケーションを実行することができる。
【０００４】
非セキュア・ソフトウェア・アプリケーションとは、容易に更新または変更され得るソフトウェア・アプリケーションを指す。非セキュア・ソフトウェア・アプリケーションは、典型的にはフラッシュ・メモリ等、再書込み可能なメモリに書き込まれる。
【０００５】
対照的に、セキュア・ソフトウェア・アプリケーションとは、容易に変更されることがないアプリケーションを指す。例えば、セキュア・ソフトウェア・アプリケーションは、セキュア端末の製造プロセスの間に読取り専用メモリに書き込まれる。読取り専用メモリは、各セキュア・ソフトウェア・アプリケーションが容易に変更されることがないように保護される。
【０００６】
非セキュア・ソフトウェア・アプリケーションは、ハッカーによって変更される恐れがある故に、セキュア端末の弱点となっている。しかし、セキュア端末の設計は、任意のソフトウェア・アプリケーションを読取り専用メモリに記録することには適さない。このため、ハッカーが非セキュア・ソフトウェア・アプリケーションを変更し、その結果、変更された非セキュア・ソフトウェア・アプリケーションが秘密鍵を読み出し、その秘密鍵をハッカーに開示する恐れが常に存在する。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
したがって、本発明の一目的は、非セキュア・ソフトウェア・アプリケーションによって読み出されることから秘密鍵を保護する方法を提供することである。
【課題を解決するための手段】
【０００８】
本発明は、秘密鍵が非セキュア・ソフトウェア・アプリケーションにより読み出されないよう保護する方法であって、前記秘密鍵を実行専用メモリ［executable-only memory］に記憶される実行専用ルーチン［executable-only routine］として記録するステップを含み、前記ルーチンは、前記ルーチンがセキュア・ソフトウェア・アプリケーションによって呼び出された場合は、前記セキュア・ソフトウェア・アプリケーションおよび非セキュア・ソフトウェア・アプリケーションによって読出し可能なメモリ内に前記秘密鍵をロードさせるロード命令と、前記実行専用ルーチンの呼出し元となる前記ソフトウェア・アプリケーションが前記非セキュア・ソフトウェア・アプリケーションである場合は、前記読出し可能なメモリ内に前記秘密鍵ではなくダミー・データだけが残るようにさせる制御命令と、を有する、方法を提供する。
【０００９】
前記秘密鍵は、実行専用メモリに記憶されるルーチンとして記録される。このため、当該ルーチンは、「実行専用ルーチン」と呼ばれる。前記実行専用ルーチンは、プロセッサによる読出しではなく実行のみ可能なものである。したがって、前記秘密鍵を取得する唯一の手段は、前記実行専用ルーチンを実行することである。しかし、前記ルーチンは、それ自体が実行されたときにも、前記秘密鍵の秘密情報が前記非セキュア・ソフトウェア・アプリケーションに漏洩しないことを保証する。したがって、前記鍵自体は、非セキュア・ソフトウェア・アプリケーションによって読み出すことができない。
【００１０】
前記方法の諸実施形態は、後続の特徴のうちの１つまたは複数を含んでもよい。
【００１１】
前記ロード命令は、それぞれの各値が前記ルーチンのコードに埋め込まれ、それぞれの各値が前記秘密鍵の少なくとも１ビットを表す定数をロードさせる命令である。
【００１２】
前記方法は、前記ロード命令が実行される前にＩＲＱ［Interrupt Request―割込み要求―］が存在すれば当該ＩＲＱをディスエーブルするステップと、前記読出し可能なメモリ内の前記秘密鍵が削除された場合にだけ前記ＩＲＱを再イネーブルするステップとを含む。
【００１３】
前記実行専用ルーチンは、セキュア・ソフトウェア・アプリケーションにシステム的に［systematically］復帰し、任意のセキュア・ソフトウェア・アプリケーションは、前記ＩＲＱを再イネーブルするステップに先立ってロードされている前記秘密鍵を削除する。
【００１４】
前記実行専用ルーチンの復帰先となる前記セキュア・ソフトウェア・アプリケーションは、前記セキュア・ソフトウェア・アプリケーションの呼出し元が前記実行専用ルーチンでなかった場合には、ロードされている前記秘密鍵を直ちに削除する。
【００１５】
本発明の上記諸実施形態は、以下の利点をもたらす。
【００１６】
前記秘密鍵を前記実行専用ルーチンにロード可能な定数として埋め込むことにより、上記諸実施形態のセキュリティを強化すること。
【００１７】
ＩＲＱがディスエーブルされている限り非セキュア・ソフトウェア・アプリケーションが実行されることはないため、前記ＩＲＱをディスエーブルすることにより、いずれかの非セキュア・ソフトウェア・アプリケーションが前記読取り可能なメモリ内にロードされている前記秘密鍵を読み出すことを防止すること。
【００１８】
前記実行専用ルーチンの実行終了時に、システム的にセキュア・ソフトウェア・アプリケーションに復帰することにより、非セキュア・ソフトウェア・アプリケーションが前記セキュア・ソフトウェア・アプリケーションに対応する復帰アドレスを使用して前記実行専用ルーチンを呼び出すことから成る攻撃を防止すること。
【００１９】
前記実行専用ルーチンの呼出し元がセキュア・ソフトウェア・アプリケーションでなかった場合には、前記読取り可能なメモリから前記秘密鍵を削除して、他の非セキュア・ソフトウェア・アプリケーションが前記実行専用ルーチンを呼び出すことを防止することにより、前記端末のセキュリティを強化すること。
【００２０】
本発明は、秘密鍵が非セキュア・ソフトウェア・アプリケーションによって読み出されないように保護する前記方法で使用されるべき実行専用ルーチンに関するものでもある。  前記実行専用ルーチンは、
前記ルーチンがセキュア・ソフトウェア・アプリケーションによって呼び出された場合は、前記セキュア・ソフトウェア・アプリケーションおよび非セキュア・ソフトウェア・アプリケーションによって読出し可能なメモリ内に前記秘密鍵をロードさせるロード命令と、
前記実行専用ルーチンの呼出し元となる前記ソフトウェア・アプリケーションが前記非セキュア・ソフトウェア・アプリケーションである場合は、前記読出し可能なメモリ内に前記秘密鍵ではなくダミー・データだけが残るようにさせる制御命令と
を含む。
【００２１】
前記実行専用ルーチンの諸実施形態は、後続の特徴のうちの１つまたは複数を含んでもよい。
【００２２】
前記ロード命令は、それぞれの各値が前記ルーチンのコードに埋め込まれ、それぞれの各値が前記秘密鍵の少なくとも１ビットを表す定数をロードさせる命令である。
【００２３】
前記実行専用ルーチンは、前記実行専用ルーチンの実行開始時にＩＲＱが存在すれば当該ＩＲＱをディスエーブルさせる命令を有する。
【００２４】
前記実行専用ルーチンは、前記実行専用ルーチンの実行終了時にセキュア・ソフトウェア・アプリケーションにシステム的に復帰させる命令を有する。
【００２５】
本発明は、セキュア端末であって、
ソフトウェア・アプリケーションと、前記ソフトウェア・アプリケーションによって呼び出されたルーチンとを実行するプロセッサと、
少なくとも１つの秘密鍵と
を備え、また、
実行専用ルーチンを記録するように適応された実行専用メモリも備え、前記実行専用ルーチンは、
前記ルーチンがセキュア・ソフトウェア・アプリケーションによって呼び出された場合は、前記セキュア・ソフトウェア・アプリケーションおよび非セキュア・ソフトウェア・アプリケーションによって読出し可能なメモリ内に前記秘密鍵をロードさせるロード命令と、
前記実行専用ルーチンの呼出し元となる前記ソフトウェア・アプリケーションが前記非セキュア・ソフトウェア・アプリケーションである場合は、前記読出し可能なメモリ内に前記秘密鍵ではなくダミー・データだけが残るようにさせる制御命令と
を有する、セキュア端末に関するものでもある。
【００２６】
前記セキュア端末の諸実施形態は以下の特徴のうちの１つまたは複数を含んでもよい。
【００２７】
前記ロード命令は、それぞれの各値が前記ルーチンのコードに埋め込まれ、それぞれの各値が前記秘密鍵の少なくとも１ビットを表す定数をロードさせる命令である。
【００２８】
前記端末は、前記読取り可能なメモリ内にロードされている秘密鍵を削除させるセキュア・ソフトウェア・アプリケーションの少なくとも１つの命令コードを含む読取り専用メモリ（ＲＯＭ）を備える。
【００２９】
前記端末は、
前記端末のリセット後、読出しを１回だけ行うことが可能であり、前記秘密鍵を記録するリード・ワンス・メモリ［read once memory］と、
前記リード・ワンス・メモリに記憶されている前記秘密鍵から前記実行専用ルーチンの前記命令コードを作成し、前記実行専用ルーチンの前記命令コードを前記実行専用メモリ内にロードするセキュア初期化ルーチン［secure initializing routine］を有する読取り専用メモリと
を備える。
【００３０】
前記実行専用メモリは、命令読出し動作だけを許可し、データ読出し動作は禁止するトランザクション・デコーダを有する。
【００３１】
前記端末は、移動電話である。
【００３２】
本発明の上記およびその他の態様は、以下の説明、添付の図面および特許請求の範囲を読めば明らかとなるであろう。
【発明を実施するための最良の形態】
【００３３】
図１は、電子プロセッサ４が外部メモリ６に接続されたセキュア端末２を示す。例えば端末２は移動電話であり、プロセッサ４はベースバンド・プロセッサである。より一般的に言えば、任意のＳｏＣ（システム・オン・チップ）である。
【００３４】
メモリ６は、再書込み可能であり、非セキュア・ソフトウェア・アプリケーションのコードを記録するものである。各コードは、プロセッサ４による実行可能な命令から成る。例えば、メモリ６は、フラッシュ・メモリである。
【００３５】
プロセッサ４は、メモリ６に記憶されている非セキュア・ソフトウェア・アプリケーション、ならびにＲＯＭ（読取り専用メモリ）８に記憶されているセキュア・ソフトウェア・アプリケーションを実行することができる。
【００３６】
簡略化のため、図１にはプロセッサ４の要素のうち、本発明の理解に必要な要素だけが示されている。
【００３７】
プロセッサ４は、
中央処理装置１０と、
ＲＯＭ８と、
少なくとも１つの秘密鍵を永続的に記録する読取り専用ワンスメモリ［read-only once memory］１２と、
ユニット１０によって実行される任意のソフトウェア・アプリケーションによって読み出され得、使用され得るデータを記憶するＲＡＭ（ランダム・アクセス・メモリ）または内部データ・レジスタ１８と、
実行専用ルーチン２１を記憶するレジスタ・バンク２０と、
レジスタ・バンク２０へのアクセスを制限するトランザクション・デコーダ２２と
を含む。
【００３８】
例えば、すべての上記要素８〜２２は、少なくとも１つのダイ上に作成され、同じ集積回路パッケージ内に埋め込まれる。各要素をこのように作成し埋め込むことは、セキュリティの観点から見れば、無計画なハッカーがプロセッサ４の内部要素に対して物理的なアクセスを行なうことができなくなる故に重要な要因となる。
【００３９】
ユニット１０は、ルーチンを呼び出すソフトウェア・アプリケーションの復帰アドレスを記録するのに使用される特定のレジスタ１４を有する。
【００４０】
例えば、ユニット１０は、ＡＲＭ社のＡＲＭプロセッサ（同社ウェブサイト参照：ｗｗｗ．ａｒｍ．ｃｏｍ）、または、より一般的に言えば任意のＣＰＵ（中央処理装置）である。
【００４１】
単なる例示として、メモリ１２は、１つの秘密鍵だけを記録する。メモリ１２内の秘密鍵は、プロセッサ４の製造プロセスの間にシリコンのレーザ・カッティングを使用して記憶される。このように記憶された秘密鍵は、プロセッサ４のリセット毎に１回だけ読み出され得る。このため、ユニット１０とメモリ１２の間のリンク２３は、ユニット１０とメモリ１２とが常に同じタイミングでリセットされることを保証する。
【００４２】
内部データ・レジスタ１８は、ユニット１０によるソフトウェア・アプリケーションの実行中に、当該ソフトウェア・アプリケーションの実行に必要なデータを記憶するのに使用される。
【００４３】
レジスタ・バンク２０は、レジスタ１８に秘密鍵をロードする実行専用ルーチン２１を記録するように設計されている。ルーチン２１は、
レジスタ１８に秘密鍵をロードさせるロード命令と、
ルーチン２１の呼出し元となるソフトウェア・アプリケーションが非セキュア・ソフトウェア・アプリケーションである場合は、レジスタ１８に秘密鍵ではなくダミー・データをロードさせる制御命令と、
ルーチン２１の実行開始時にＩＲＱ（割込み要求）が存在すれば当該ＩＲＱをディスエーブルさせる命令と、
ルーチン２１の実行終了時にセキュア・ソフトウェア・アプリケーションにシステム的に復帰させる命令と
を含む。
【００４４】
ロード命令は、それぞれの各値が秘密鍵の１ビットとなる定数をレジスタ１８にロードさせる命令である。各定数の値は、ルーチン２１のコードに埋め込まれ、より厳密に言えば、ルーチン２１の命令のオペ・コード［op-code］に埋め込まれる。
【００４５】
レジスタ・バンク２０とトランザクション・デコーダ２２との組合せは、実行専用メモリ２４を形成し、当該実行専用メモリ２４については、図２に関して後でより詳細に説明する。
【００４６】
ＲＯＭ８は、プロセッサ４のリセット直後に起動されるソフトウェア・アプリケーションのコードを記録するブートＲＯＭである。各コードは、ユニット１０によって実行可能な命令から成る。
【００４７】
ＲＯＭ８は、セキュア・カーネル２６の一部となる任意のセキュア・ソフトウェア・アプリケーションのコードを記録する。
【００４８】
例えば、セキュア・カーネル２６は、メモリ１２の読出しと、実行専用ルーチン２１のコードの作成と、当該コードのレジスタ・バンク２０へのロードとを行う初期化ルーチン２８を有する。
【００４９】
カーネル２６は、セキュアではない非セキュア・ソフトウェア・アプリケーションの認証性［authenticity］をチェックするように設計されたセキュア・ソフトウェア・アプリケーションも有する。例えば、カーネル２６は、非セキュア・ソフトウェア・アプリケーションが既知の認証機関から署名を受けていること、またはそのような既知の認証機関から認証されていることをチェックすることが可能なセキュア・ソフトウェア・アプリケーション３０を有する。アプリケーション３０は、このようなタスクを実行するには秘密鍵を必要とし、したがって、ルーチン２１を呼び出して秘密鍵を取得するように設計されている。
【００５０】
ルーチン２１の呼出し元となるセキュア・ソフトウェア・アプリケーションは何れも、次の処理を行うことができる。
【００５１】
内部レジスタ１８に記憶されている秘密鍵が使用された場合は、当該秘密鍵を削除すること。
【００５２】
当該秘密鍵がレジスタ１８から削除された後にＩＲＱ（割込み要求）をイネーブルすること。
【００５３】
本明細書では、削除という用語は、秘密鍵を、秘密鍵に関して使用可能などのような情報も漏洩しないダミー・データで置き換えることを意味する。この置き換えは、鍵を０などの定数で上書きすることによって行われてもよい。
【００５４】
ＲＯＭ８と、メモリ１２と、メモリ２４と、レジスタ１８とは、バス３４とアドレス・バス３６とを介してユニット１０に接続されている。バス３４は、ユニット１０によって処理されるべきデータの送信と、ユニット１０によって実行されるべき命令の送信の、両方に使用される。データおよび命令を択一的に送信する共通のバス３４は１つしか存在しないので、バス３４は、当該バス上の各アイテムがデータとして扱われるべきかそれとも命令として扱われるべきかを指示するように設定可能なデータ／命令タグを有する。
【００５５】
ユニット１０のリセット後、メモリ１２の読出しが１回だけ行われ得るように、メモリ１２は、バス３４を介してユニット１０に接続されている。
【００５６】
図２は、実行専用メモリ２４を示す。図１で既に説明したメモリ２４の各要素は、同じ参照番号を有する。
【００５７】
レジスタ・バンク２０は、レジスタ・バンク２０に書き込まれるべきデータを受信する１つのポート４０と、レジスタ・バンク２０に読み込まれたデータを出力する１つのポート４２とを有する。ポート４０は、書き込まれるべきデータを受信する書込みデータ・バス４４に接続されている。ポート４２は、読み出されるべきデータを出力する読出しデータ・バス４６に接続されている。例えば、バス４４および４６は、３２ビット単位のバスである。レジスタ・バンク２０へのデータ書込みは、バンク２０の入力４７が論理「１」を受信した場合にのみ可能となる。
【００５８】
トランザクション・デコーダ２２は、１つの入力ポート５２がバス４６に接続され、１つの入力ポート５４がデータ／命令タグを受信するバス３４に接続された論理ＡＮＤユニット５０を有する。データ／命令タグは、レジスタ・バンク２０からデータが読み出されるべき場合には論理「０」と等しくなり、レジスタ・バンク２０から命令が読み出されるべき場合には論理「１」と等しくなる。
【００５９】
ユニット５０は、バス４６上に所在するデータと、データ／命令タグの値との論理ＡＮＤ演算を実行し、その結果をデータ・バス３４上に出力する。
【００６０】
メモリ２４は、ライト・ワンス・メモリ（ｗｒｉｔｅ−ｏｎｃｅ  ｍｅｍｏｒｙ）である。より厳密に言えば、メモリ２４への書込みは、プロセッサ４のリセット毎に１回だけ行われ得る。このため、デコーダ２２は、バス３４の書込み信号６２とインバータ６４の出力とにそれ自体の各入力が接続されたＡＮＤゲート６０を有する。インバータ６４の入力６６は、ロック式ラッチ７０の出力６８に接続される。
【００６１】
ゲート６０は、書込み信号６２とインバータ６４の出力との論理ＡＮＤを実行し、その結果を入力４７に送信する。
【００６２】
ロック式ラッチ７０の入力７２は、ＯＲゲート７４の出力に接続される。ゲート７４の第１の入力７６は、出力６８に接続される。ゲート７４の第２の入力７８は、書込み信号６２に接続される。ゲート７４は、ゲート７４の入力７６上に所在する信号と、ゲート７４の入力７８上に所在する信号との論理ＯＲ演算を実行し、その結果をロック式ラッチ７０の入力７２に出力する。
【００６３】
ロック式ラッチ７０は、プロセッサ４がリセットされた後でそれ自体が初めてアクティブ化されたときは、出力６８を介して論理「０」を出力するように設計されている。例えば、ラッチ７０は、ユニット１０とラッチ７０とが常に同じタイミングでリセットされることを保証するために、リンク２３等のリンクを使用してユニット１０に接続される。その後、ロック式ラッチ７０は、出力６８を介して、ロック式ラッチ７０の入力７２上で受信された値と等しい値を出力する。
【００６４】
ここで、図３を参照して端末２の動作について説明する。
【００６５】
まず、ステップ９０で、プロセッサ４がリセットされる。ステップ９０では、ラッチ７０もリセットされ、それ自体の初期状態に復帰する。また、メモリ１２もリセットされ、１回の読出し動作が可能となる。
【００６６】
リセット後、ユニット１０は、ＲＯＭ８に記憶されているソフトウェア・アプリケーションの実行を直ちに開始する。
【００６７】
その後ステップ９２で、初期化ルーチン２８が、メモリ１２に記憶されている秘密鍵の値を読み出し、当該値に対応するルーチン２１のコードを作成する。ルーチン２８によるリセット後、メモリ１２の読出しが初めて行われたことになるので、メモリ１２は、その後、プロセッサ４がリセットされない限り、それ以上読み出されることはない。
【００６８】
ステップ９４で、ルーチン２８は、ルーチン２１のコードをレジスタ・バンク２０に書き込み記録する。
【００６９】
当初、書込み信号６２は「１」と等しく、ラッチ７０の出力６８は「０」と等しい。
【００７０】
処理９６の間に、ゲート６０は、書込み信号の値と、インバータ６４の出力とを比較する。書込み信号の値とインバータ６４の出力がいずれも「１」と等しい場合には、入力４７上で論理「１」がセットされ、バス４４を介して送信されたルーチン２１のコードがレジスタ・バンク２０に書き込まれ記録される。
【００７１】
対照的に、処理１００の間に、インバータ６４の出力が「０」と等しくなった場合は、入力４７上で論理「０」がセットされ、レジスタ・バンク２０に対するデータ書込みが行われることはない。
【００７２】
ステップ９４と平行して、ステップ１０２では、プロセッサ４の次回のリセットが行なわれるまでレジスタ・バンク２０への新しいデータ書込みが行われるのを防止するためにレジスタ・バンク２０への第１のデータ書込みが既に実行された事実が記憶される。
【００７３】
より厳密に言えば、処理１０４で、ゲート７４によって書込み信号６２の値が出力６８の値と比較される。入力７６と入力７９がいずれも「０」と等しい場合には、次いで、ゲート７４は、論理「０」を入力７２に出力し、そうでない場合には、論理「１」を入力７２に出力する。
【００７４】
したがって、レジスタ・バンク２０にデータが初めて書き込まれた場合は、出力６８は「０」と等しくなり、その結果、インバータ６４の出力が「１」と等しくなり、ルーチン２１のコードがレジスタ・バンク２０に書き込まれ記憶され得るようになる。
【００７５】
レジスタ・バンク２０にデータが２回目またはそれ以降に書き込まれた場合は、出力６８は「論理１」と等しくなり、その結果、インバータ６４の出力が「０」と等しくなり、レジスタ・バンク２０にデータが書き込まれることはなくなる。したがって、ルーチン２１のコードは、レジスタ・バンク２０に記憶された後はプロセッサ４がリセットされない限り変更されることはない。
【００７６】
その結果、メモリ２４は、ライト・ワンス・メモリとなる。
【００７７】
ステップ９４の最初の実行が終了した時点で、ルーチン２１のコードがレジスタ・バンク２０に書き込まれる。
【００７８】
次いで、典型的には、プロセッサ４は、非セキュア・ソフトウェア・アプリケーションを実行する。暗号処理が必要な場合は、ソフトウェア・アプリケーション３０が呼び出される。例えば、暗号処理は、ＤＲＭ（デジタル著作権管理）ライセンスの復号に必要となる。
【００７９】
その後ステップ１１０で、セキュア・ソフトウェア・アプリケーション３０は、ルーチン２１を呼び出す。この時点で、ユニット１０は、処理１１２の間に呼出し対象アプリケーションの復帰アドレスをレジスタ１４に書き込む。
【００８０】
ステップ１１４で、ユニット１０は、レジスタ・バンク２０内のルーチン２１のコードを読み出して、当該コードを実行する。したがって、データ／命令タグが「１」にセットされる。まず、処理１１６で、ユニット１０は、バス３４を介してレジスタ・バンクの読出し命令を送信する。
【００８１】
読出し命令に応答して、ステップ１１８で、レジスタ・バンク２０は、対応する命令をバス４６上に載せる。
【００８２】
処理１２０で、ユニット５０は、ポート５２上で受信された命令と、ポート５４上で受信されたデータ／命令タグの値とを比較する。
【００８３】
処理１２２で、データ／命令タグの値が「１」と等しい場合には、ユニット５０は、バス３４上に読み出し命令を出力する。データ／命令タグの値が「１」と等しいので、出力される命令は、ユニット１０だけに関する命令として解釈され得ることになり、したがって、ユニット１０によって直接実行され得る。データ／命令タグが「１」と等しい場合には、ソフトウェア・アプリケーションがバス３４上のデータにアクセスすることはできない。
【００８４】
レジスタ・バンク２０に記憶されている命令をデータとして読み出そうとする試みがなされた場合は、次いで、データ／命令タグは「０」と等しくなり、ユニット５０は、処理１２４の間に、対応する命令ではなく「０」だけを出力することになる。
【００８５】
したがって、非セキュア・ソフトウェア・アプリケーションがメモリ２４に記憶されているコードを読み出そうと試みた場合にも、ダミー・データ、すなわちいくつかの「０」を取得するだけである。
【００８６】
その結果、メモリ２４は、実行専用メモリとなり、また、ルーチン２１のコードがユニット１０によってのみ実行され得、プロセッサ４によって実行されるソフトウェア・アプリケーションによって読み出されることはなくなるので、ルーチン２１は、実行専用ルーチンとなる。
【００８７】
ステップ１３０では、データ／命令タグが「１」と等しいので、バス３４上に所在する各命令がユニット１０によって実行される。
【００８８】
ステップ１３０ではまず、処理１３２で、ユニット１０は、後続の命令の実行が何らかのソフトウェア・アプリケーションによって中断されることがないように、ＩＲＱ（割込み要求）が存在すれば当該ＩＲＱをディスエーブルする。したがって、他のソフトウェア・アプリケーションは、レジスタ１８に記憶されている内部データを読み出すことができなくなる。
【００８９】
その後処理１３４および１３６で、ユニット１０は、ルーチン２１の制御命令を実行する。
【００９０】
処理１３４で、ユニット１０は、ルーチン２１の呼出し元がセキュア・ソフトウェア・アプリケーションであることをチェックする。例えば、処理１３４で、ユニット１０は、レジスタ１４に書き込まれている復帰アドレスと、ＲＯＭ  ８内の各メモリ・アドレスとを比較する。
【００９１】
レジスタ１４に書き込まれている復帰アドレスがＲＯＭ  ８内のアドレス範囲にない場合は、処理１３６で、ユニット１０は、「０」列のようなダミー・データをレジスタ１８にロードする。処理１３６の終了時に、プロセッサ４は、レジスタ１４に書き込まれている復帰アドレスに復帰する。その結果、ルーチン２１を呼び出した非セキュア・ソフトウェア・アプリケーションは、秘密鍵に関するどのような情報も取得しない。
【００９２】
復帰アドレスがセキュア・ソフトウェア・アプリケーションのアドレスである場合は、次いで、ステップ１３８で、ユニット１０は、ルーチン２１のロード命令を実行する。したがって、レジスタ１４に秘密鍵の値がロードされる。秘密鍵の値がロードされると、処理１４０の間に、ユニット１０は、ルーチン２１の命令を実行して、システム的にセキュア・ソフトウェア・アプリケーションに復帰する。例えば、ユニット１０は、セキュア・ソフトウェア・アプリケーション３０のアドレスに無条件にジャンプする。当該ジャンプ命令は、復帰アドレスがスタック１４の最上部に置かれてさえいれば実行される。例えば処理１４０の間に、ユニット１０は、アプリケーション３０を呼び出す。より厳密に言えばユニット１０は、アプリケーション３０への分岐およびリンク命令を実行する。また、分岐およびリンク命令は、呼び出されたアプリケーションのアドレス、すなわちルーチン２１のアドレスを特定のレジスタ１４に記録する。
【００９３】
その後フェーズ１５０の間に、アプリケーション３０は、レジスタ１８に書き込まれている秘密鍵の値を使用する。
【００９４】
例えば、フェーズ１５０ではまず、ステップ１５２で、アプリケーション３０は、アプリケーション３０がルーチン２１によって呼び出されたかどうかをチェックする。例えばユニット１０は、レジスタ１４に書き込まれているアドレスがルーチン２１のアドレスに対応することをチェックする。
【００９５】
かかる条件が満足されない場合には、ステップ１５４で、ユニット１０は、レジスタ１８に書き込まれている秘密鍵を削除する。例えば、ユニット１０は、秘密鍵を「０」列で置き換える。その後、アプリケーション３０は、ルーチン２１を呼び出す場合と同様の処理を続行する。
【００９６】
ステップ１５６で、アプリケーション３０は、レジスタ１８に書き込まれている秘密鍵を使用して、例えば非セキュア・ソフトウェア・アプリケーションのチェックまたは認証を行なう。チェックまたは認証を行う際に、秘密鍵を使用した暗号処理が実行される。
【００９７】
アプリケーション３０が秘密鍵をそれ以上必要としなくなったときは、ステップ１５８で、ユニット１０は、当該秘密鍵をレジスタ１８から削除する。
【００９８】
その後ステップ１６０で、ユニット１０は、ＩＲＱを再イネーブルする。
【００９９】
次いで、ステップ１１０で、上記方法は、アプリケーション３０の呼出し元となるメインのソフトウェア・アプリケーションに復帰する。
【０１００】
他の様々な実施形態が可能である。例えば、ルーチン２１が非セキュア・ソフトウェア・アプリケーションから呼び出されたときは、秘密鍵を削除する代わりに端末２をブロックして、当該端末がそれ以上使用されることがないようにすることも可能である。
【０１０１】
ＩＲＱは、ルーチン２１を呼び出す前にアプリケーション３０によってディスエーブルされてもよい。
【０１０２】
その場合には、ルーチン２１は、端末２がリセットされる度にリフレッシュが必要となる、非永続メモリに書き込まれることになる。一方、レジスタ・バンク２０をＲＯＭのような永続メモリで置き換えることも可能である。そのような実施形態では、端末２がリセットされる度にルーチン２１のコードを復元する必要がなくなる。
【０１０３】
上記端末および方法は、１つの秘密鍵ではなく複数の秘密鍵が非セキュア・ソフトウェア・アプリケーションによって読み出されないように保護するように適応されてもよい。
【０１０４】
上記の教示は、非セキュア・ソフトウェア・アプリケーションを記憶するメモリがプロセッサ４の内部メモリである場合にも適用される。
【０１０５】
本明細書に記載される内容は、移動電話に限定されるものではなく、任意のセキュア電子端末に適用されるものである。
【図面の簡単な説明】
【０１０６】
【図１】セキュア端末の概略図である。
【図２】図１のセキュア端末に実装されるトランザクション・デコーダの概略図である。
【図３】秘密鍵が図１の端末内の非セキュア・ソフトウェア・アプリケーションによって読み出されないように保護する方法の流れ図である。
【図１】
2009504061.tif 000003
【図２】
2009504061.tif 000004
【図３】
2009504061.tif 000005
【国際調査報告】
2009504061.tif 000006
2009504061.tif 000007