(57)【特許請求の範囲】
【請求項１】
セキュア素子の不揮発性メモリへのデータの読み込みを安全に行う方法であって、前記不揮発性メモリは、コード記憶領域と呼ばれる、前記セキュア素子の初期プログラムにより定義される記憶領域であって、前記領域の任意の変更は前記初期プログラムだけにより管理される記憶領域を含み、
前記方法は、前記セキュア素子に対する外部装置により実行される、
前記セキュア素子の固有の識別子又は前記セキュア素子の前記コード記憶領域の現在のソフトウェアコンフィギュレーションの識別子の少なくとも一つを含む、データ取得のための要求を受信するステップと、
前記セキュア素子の固有の識別子又は前記セキュア素子の前記コード記憶領域の現在のソフトウェアコンフィギュレーションの識別子を用いて、関連するデータベースから前記セキュア素子のコード記憶領域の現在のイメージを検索するステップと、
‐前記データを取得するステップと、
‐前記セキュア素子の前記コード記憶領域内に前記取得されたデータの前記読み込みにより変更される前記コード記憶領域のイメージをシミュレートするステップと、
‐前記コード記憶領域の前記シミュレートされたイメージの全体の署名を計算するステップと、
‐前記取得されたデータと前記計算された署名を前記セキュア素子に送信するステップと、を含む方法。
【請求項２】
セキュア素子の不揮発性メモリへのデータの読み込みを安全に行う方法であって、前記不揮発性メモリは、コード記憶領域と呼ばれる、前記セキュア素子の初期プログラムにより定義される記憶領域であって、前記領域の任意の変更は前記初期プログラムだけにより管理される記憶領域を備え、
前記方法は、前記セキュア素子により実行される、
‐外部装置からのデータと署名を受信するステップと、
‐前記コード記憶領域の一部に前記外部装置から受信された前記データを読み込むステップと、
‐前記データが読み込まれた後に、前記コード記憶領域全体の署名を計算するステップと、
‐前記受信された署名と前記計算された署名が一致した場合にのみ、前記コード記憶領域のコンテンツの実行を可能にするために、前記受信された署名を使用して前記計算された署名を検証するステップと、を含む方法。
【請求項３】
前記データは、データを取得するための要求に応答して前記セキュア素子に送信され、データを取得するための前記要求は、前記セキュア素子を識別する情報を含むことを特徴とする請求項１又は２に記載の方法。
【請求項４】
前記データは、データを取得するための要求に応答して前記セキュア素子に送信され、データを取得するための前記要求は、前記セキュア素子の前記コード記憶領域の現在のイメージのソフトウェアコンフィギュレーション表現の固有の識別子を含むことを特徴とする請求項１から３のいずれか１項に記載の方法。
【請求項５】
前記署名は、前記外部装置から送信される暗号化されたコマンドにおいて、前記取得されたデータの活性化の要求とともに前記セキュア素子に送信されることを特徴とする請求項１から４のいずれか１項に記載の方法。
【請求項６】
前記データは、前記取得されたデータが読み込まれることになっている前記コード記憶領域の１つ又は複数の位置の指示とともに、前記外部装置により送信されることを特徴とする請求項１から５のいずれか１項に記載の方法。
【請求項７】
前記コード記憶領域は、Ｐ個のサブ領域に区切られ、前記署名を計算するステップは、各サブ領域に対する基本署名を取得するステップと、シミュレートされたか否かにかかわらず、前記Ｐ個の基本署名の合成により、前記コード記憶領域全体の前記署名を取得するステップと、を含むことを特徴とする請求項１から６のいずれか１項に記載の方法。
【請求項８】
前記Ｐ個の基本署名の前記合成は、全単射関数の前記適用を含むことを特徴とする請求項７に記載の方法。
【請求項９】
前記署名の前記計算は、前記Ｐ個の基本署名の、それらのサブ領域に対応する事前に定義された順序での、合成を含むことを特徴とする請求項７に記載の方法。
【請求項１０】
前記データは、前記セキュア素子による前記実行のためのスクリプトであって、前記外部装置から受信されたデータを前記コード記憶領域の一部に読み込むステップと、前記受信されたデータが読み込まれたときに、前記コード記憶領域全体に対する署名を計算するステップと、前記受信された署名と前記計算された署名が一致した場合のみコード記憶領域の前記コンテンツの前記実行を可能にするために、前記外部装置から受信された署名を使用して、前記計算された署名を検証するステップと、を含むスクリプトを含むことを特徴とする請求項１から９のいずれか１項に記載の方法。
【請求項１１】
前記コード記憶領域は、前記データの読み込みの前に、ソフトウェア要素を含むことを特徴とする請求項１から１０のいずれか１項に記載の方法。
【請求項１２】
前記コード記憶領域に読み込まれる前記データは、前記コード記憶領域の利用可能なスペースの一部のみを表すことを特徴とする請求項１から１１のいずれか１項に記載の方法。
【請求項１３】
セキュア素子のマイクロプロセッサにより読み込まれて実行される、前記実行のための命令を含む初期プログラムであって、前記セキュア素子は、コード記憶領域と呼ばれる、初期プログラムにより定義される記憶領域であって、前記領域の任意の変更は前記初期プログラムだけにより管理される記憶領域を一部に含む不揮発性メモリを備え、
前記実行は、
‐外部装置からデータと署名を受信するステップと、
‐前記外部装置から受信された前記データを前記コード記憶領域の一部に読み込むステップと、
‐前記データが読み込まれた後に、前記コード記憶領域全体の署名を計算するステップと、
‐前記受信された署名と前記計算された署名が一致した場合にのみ、前記コード記憶領域の前記コンテンツの前記実行を可能にするために、前記受信された署名を使用して、前記計算された署名を検証するステップと、を含むことを特徴とする初期プログラム。
【請求項１４】
マイクロプロセッサを備え、メモリ内に、請求項１３に記載の初期プログラムを含むセキュア素子。
【請求項１５】
セキュア素子の不揮発性メモリにデータの読み込みを安全に行うための装置であって、前記不揮発性メモリは、コード記憶領域と呼ばれる、初期プログラムにより定義される記憶領域であって、前記領域の任意の変更は前記初期プログラムだけにより管理される記憶領域を備え、前記装置は前記セキュア素子の外部にあり、
前記セキュア素子の固有の識別子又は前記セキュア素子の前記コード記憶領域の現在のソフトウェアコンフィギュレーションの識別子の少なくとも一つを含む、データ取得のための要求を受信するためのモジュールと、
前記セキュア素子の固有の識別子又は前記セキュア素子の前記コード記憶領域の現在のソフトウェアコンフィギュレーションの識別子を用いて、関連するデータベースから前記セキュア素子のコード記憶領域の現在のイメージを検索するためのモジュールと、
‐前記データを取得するためのモジュールと、
‐前記セキュア素子の前記コード記憶領域への前記取得されたデータの読み込みにより変更される前記コード記憶領域のイメージをシミュレートするためのモジュールと、
‐前記コード記憶領域の前記シミュレートされたイメージの全体の署名を計算するためのモジュールと、
‐前記セキュア素子に前記取得されたデータと前記計算された署名を送信するモジュールと、を備える装置。
【請求項１６】
請求項１５に記載の安全に行う装置と請求項１４に記載のセキュア素子を備えるシステムであって、前記外部装置は前記安全に行う装置であることを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えばスマートカード（ｓｍａｒｔ  ｃａｒｄ）などのセキュア（ｓｅｃｕｒｅ）素子の分野に関する。特に、本発明はセキュア素子の不揮発性メモリへのデータの読み込みを安全に行うための方法及び装置を提供する。
【背景技術】
【０００２】
例えばスマートカードのような、セキュア素子は、通常、ホスト（ｈｏｓｔ）電子装置内に着脱可能に統合された、又は、変形例として、電子装置内に（例えば、はんだ付けにより）埋め込まれた、マイクロ回路の形をとる。例として、セキュア素子は、ｅＳＥ（「埋め込みセキュア素子（ｅｍｂｅｄｄｅｄ  ｓｅｃｕｒｅ  ｅｌｅｍｅｎｔ）」又はｅＵＩＣＣ（「埋め込み汎用集積回路カード（ｅｍｂｅｄｄｅｄ  Ｕｎｉｖｅｒｓａｌ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ  Ｃａｒｄ）」であってもよい。
【０００３】
セキュア素子は、それが統合され又は埋め込まれるホスト電子装置のプロセッサとは異なる、それに対して固有のプロセッサを備え、プロセッサにより実行することのできるコンピュータプロクラムを記憶するための不揮発性メモリを備える。
【０００４】
不揮発性メモリの変更不可領域は、「初期」又は「基本」プログラムとして知られる、通常は小さいサイズの、例えば、セキュア素子の製造者により記憶されるブートプログラム（ブートローダ」として知られている）を記憶する。初期プログラムは、初期プログラムにより定義された不揮発性メモリの特定領域に、例えば、オペレーティングシステム又はアプリケーションなどの、コンパイルされた又はインタープリタされたコード（すなわち、プロセッサにより直接実行可能な、マシン言語又はコードにおけるコードワード又は「バイトコード」）から通常構成されるソフトウェア要素を読み込むことにより、例えばセキュア素子の運用者又は提供者などのユーザへの仲介者がセキュア素子をカスタマイズすることができるような機能を提供する。例えば、この初期プログラムは、特に、この初期プログラムと通信するためのポート制御モジュール、メモリアップデート制御モジュール、コマンドインタープリタ、及び、この初期プログラムを安全に行うためのセキュリティモジュールを含む特定のオペレーティングシステムに関連している。この特定のオペレーティングシステムは、セキュア素子の製造者によりカスタマイズされ、カスタマイゼーションの後は、いかなるシステムの変更も許されない。
【０００５】
原則として、この初期ブログラムは、セキュア素子が起動されたとき、すなわち、セキュア素子内に存在してもよい任意の他のプログラムより先に、実行される最初のプログラムである。このプログラムは、セキュア素子内の他のプログラムの実行に必須である。
【０００６】
不揮発性メモリの前述の特定領域は、特定領域の境界又はそのコンテンツを変更できる唯一のプログラムである初期プログラムにより完全に制御される。
【０００７】
より正確には、これらの境界は、初期プログラムのレジスタ内に記憶されていてもよく、又は、代替的に、初期プログラムのそれらを定義するコマンドによる実行の結果でもよい。すべてのケースにおいて、境界の定義と任意の変更は、初期プログラムの活動の結果としてなされるだけである。
【０００８】
さらに、初期プログラムだけが、それのコンテンツの実行を可能にする（又は禁止する）目的のために特定領域を活性化（又は不活性化）することができる。
【０００９】
前述の領域は、通常、コンパイルされた又はインタープリタされたコードを記憶するために使用され、したがって、以下では、「コード記憶領域」と呼ばれることになる。コード記憶領域は、それが含むソフトウェア要素の実行の間には、セキュア素子内のこれらソフトウェア要素により使用されるアプリケーション及びオペレーティングシステムの完全性を保証するために、変更されるべきではないことが特に重要である。
【００１０】
セキュア素子が寿命を終えるまでの間に、他のソフトウェア要素がコード記憶領域に読み込まれるかもしれない。例えば、これらは、すでに記憶されているソフトウェア要素の新バージョン（ソフトウェア要素のアップデート）又は新しいデータであるかもしれない。コード格納エリアにその後読み込まれたこれらのソフトウェア要素の完全性と正当性を保証するために、検証メカニズムが、活性化の前に、すなわち実行が可能となる前に、通常は初期プログラムにより、使用される。
【００１１】
例えば、仏国特許公報第２  ９９３  ６８２号は、セキュア素子が始動されるときに実行されるブートプログラムは、インストールされたオペレーティングシステムが旧式となったときに、アップデートする装置から取得されるオペレーティングシステムの新バージョンのコードを有効にすることを開示する。オペレーティングシステムのこの新バージョンのコードの完全性は、ブートプログラムにより、検証され、１回に１つのコードブロックが、全体としては、オペレーティングシステムの新バージョンの活性化が有効となる前に検証される。
【００１２】
しかし、完全性の検証は新たに受信され読み込まれたソフトウェア要素にだけ関係する。
【００１３】
したがって、新しいソフトウェア要素を読み込む前に、悪意ある関係者によりコード記憶領域に記憶される悪意あるタイプのソフトウェア要素（「マルウェア（ｍａｌｗａｒｅ）」と呼ばれる）は、この完全性の検証がされる間には、ブートプログラムにより検出されることができない。なぜなら、ブートプログラムは、新たに読み込まれるソフトウェア要素にのみ関係するからである。したがって、安全性に欠陥が存在する。
【００１４】
また、悪意ある関係者が、例えばレーザー攻撃により、このコード記憶領域に既に記憶されているソフトウェア要素を変更又は損傷したとすると、安全性に欠陥が存在する。これは、新しく読み込まれたソフトウェア要素で実行される完全性の検証は、コード記憶領域のコンテンツへの変更又は損傷を明らかにできないからである。
【００１５】
したがって、セキュア素子の安全性と、とりわけ、データがこの記憶領域に読み込まれたときのソフトウェアの完全性の管理を改良する必要がある。
【発明の概要】
【００１６】
したがって、本発明の目的は、これらの欠点の少なくとも１つを克服することにある。
【００１７】
これに関連して、本発明の第１の態様は、セキュア素子の不揮発性メモリへのデータの読み込みを安全に行う方法であって、不揮発性メモリは、コード記憶領域と呼ばれる、セキュア素子の初期プログラムにより定義される記憶領域であって、領域の任意の変更は初期プログラムだけにより管理される記憶領域を備え、その方法は、セキュア素子により実行される、
‐外部装置からのデータと署名を受信するステップと、
‐コード記憶領域の一部に外部装置から受信されたデータを読み込むステップと、
‐データが読み込まれた後に、前記コード記憶領域全体の署名を計算するステップと、
‐受信された署名と計算された署名が一致した場合にのみ、コード記憶領域のコンテンツの実行を可能にするために、受信された署名を使用して計算された署名を検証するステップと、
を含む方法に関連する。
【００１８】
さらに、本発明の第２の態様は、セキュア素子の不揮発性メモリへのデータの読み込みを安全に行う方法であって、不揮発性メモリは、コード記憶領域と呼ばれる、前記セキュア素子の初期プログラムにより定義される記憶領域であって、領域の任意の変更は初期プログラムだけにより管理される記憶領域を備え、その方法は、セキュア素子により実行される、
‐外部装置からのデータと署名を受信するステップと、
‐コード記憶領域の一部に外部装置から受信されたデータを読み込むステップと、
‐データが読み込まれた後に、コード記憶領域全体の署名を計算するステップと、
‐前記受信された署名と前記計算された署名が一致した場合にのみ、コード記憶領域のコンテンツの実行を可能にするために、受信された署名を使用して計算された署名を検証するステップと、
を含む方法に関連する。
【００１９】
したがって、本発明は、セキュア素子に読み込まれるデータの完全性と、同じく、この記憶領域の一部にだけ発生する、これらのデータの読み込み後のコード記憶領域の完全性をチェックするために使用することができる。
【００２０】
この利点は、従来技術のように読み込まれたデータだけを考慮することに代えて、すべてのデータの読み込みの結果としてあるべき、全体として記憶領域のイメージのシミュレーションに基づく署名を計算することにより得られる。
【００２１】
したがって、外部装置は、読み込まれるべきデータの読み込みにより変更されるか否かに対応する、コード記憶領域のビットのそれぞれの位置と値をシミュレートする。
【００２２】
任意のコードであって、コード記憶領域でのそれの値及び／又はそれの位置のために予想外とされる任意のコードは、それの存在により外部装置によりシミュレートされるイメージについて計算された署名とデータの読み込みが行われた後の記憶領域におけるセキュア素子自身により計算される署名との間に差異を作り出すので、そのとき、コード記憶領域内で検出することができる。
【００２３】
したがって、データの読み込みの後のメモリ状態に対応するコード記憶領域のシミュレートされたイメージに基づき装置により計算された署名と、これらの様々なデータの読み込みが行われた後のコード記憶領域の署名とに任意の差異がある場合、コード記憶領域の活性化、すなわち、それのコンテンツ、したがって、特には、セキュア素子に読み込まれたデータの実行は、不可能（すなわち、禁止）とされる。したがって、それらの実行のためのデータの読み込みは安全に行われる。
【００２４】
したがって、本発明は、コンパイルされた又はインタープリタされたコードの１片（または、一般には、予想外のデータ）が、コード記憶領域の予想外の位置に記憶された場合又は予想される値を有さない場合を検出するために使用される。
【００２５】
例えば、悪意あるソフトウェア要素の存在、又は、データの読み込みの後のメモリ内に既にあるソフトウェア要素の変更又は損傷は、外部装置から受信した仮の署名を使用して、読み込みの後に取得された記憶領域全体について計算された署名の検証のとき、セキュア素子の初期プログラムにより検出される。
【００２６】
本発明の実施形態に関する他の特徴は従属請求項において記述される。
【００２７】
本発明の特定の実施形態において、データは、データを取得するための要求に応答してセキュア素子に送信され、取得するための要求は、セキュア素子を識別するための情報を含む。
【００２８】
本発明の特定の実施形態において、データは、データを取得するための要求に応答してセキュア素子に送信され、データを取得するための要求は、セキュア素子のコード記憶領域の現在のイメージのソフトウェアコンフィギュレーション表現の固有の識別子を含む。
【００２９】
したがって、外部装置はこの現在のイメージをリカバーすることができ、データの読み込みにより変更されたメモリのイメージを効率的にシミュレートすることができる。これは、コード記憶領域のビットの現在の配列と値を正確に知ることができることによる。
【００３０】
本発明の特定の実施形態において、署名は、外部装置から送信される暗号化されたコマンドにおいて、取得されたデータの活性化の要求（すなわち、実行可能とする要求）とともにセキュア素子に送信される。
【００３１】
活性化の要求と、活性化の前（すなわち、実行可能にされる前）の検証のために要求される署名とは共同で保護されるので、このアレンジメントは、実行可能処理を安全に行う。
【００３２】
活性化は、署名の肯定的な検証の直後に実行されてもよく、又は、例えば、セキュア素子の次の再起動のときのように後に行われてもよいことに留意されたい。この後での活性化は、セキュア素子の動作の、特には問題になっているデータがオペレーティングステム又はこのシステムの一部の更新に対応している場合の、中断を避けることを可能にする。
【００３３】
代替的に、活性化は活性化要求を受信することなしに、初期プログラムにより自動的に実行することができる。活性化は、要求により求められる任意のデータ又はコード記憶領域全体に関連している。
【００３４】
この代替において、署名は、セキュア素子への送信のため外部装置により暗号化されたままである。
【００３５】
本発明の特定の実施形態において、取得されたデータは、取得されたデータが読み込まれるべきコード記憶領域の１つ又は複数の位置の指示とともに、電子装置により送信される。
【００３６】
したがって、コード記憶領域の各ビットの位置は、外部装置により定義され、ひいては、外部装置がこれらの補助的な指示の観点からシミュレートしたものと同一のデータの読み込みをセキュア素子が実行することを保証する。したがって、シミュレートされたイメージに基づいて得された署名は、セキュア素子の初期プログラムがデータの読み込み後に計算しなければならないものと一致するする必要がある。
【００３７】
本発明の特定の実施形態において、コード記憶領域は、Ｐ個のサブ領域に区分され、署名を計算するステップは、各サブ領域に対する基本署名を取得することと、シミュレートされたかどうかにかかわらず、Ｐ個の基本署名の合成によりコード記憶領域全体に対する署名を取得することを含む。
【００３８】
この設定において、基本署名の計算は他の基本署名の計算とは独立していて、変更されたサブ領域に限定しての（基本署名の）完全性の計算によりコード記録領域のモジュール更新（例えば、サブ領域別）を実行することを可能にする。このやり方において、計算コストは、実質的に削減されるかもしれない。
【００３９】
本発明の特定の実施形態において、Ｐ個の基本署名の合成は、全単射関数の適用を含む。
【００４０】
これは、例えば、排他的ＯＲタイプ（ＸＯＲ）の関数でもよい。この関数は、基本署名の合成による署名の計算について、サブ領域の順序の制約を回避するために使用することができる。したがって、外部装置とセキュア素子は、コード記憶領域を形成するサブ領域に、様々な方法で、読み込まれるデータの部分の割り当てをしてもよい。
【００４１】
本発明の特定の実施形態において、署名の計算は、Ｐ個の基本署名の合成であって、それらの対応するサブ領域の順序での合成を含む。例えば、この順序は、サブ領域又はサブ領域のコンテンツ（すなわち、サブ領域のビットセット、モジュールと呼ばれることもある）につけられた識別子により、例えば、識別子の増加する又は減少する順序により決定されてもよい。
【００４２】
本発明の特定の実施形態において、データは、セキュア素子による実行のためのスクリプトであって、外部装置から受信されたデータをコード記憶領域の一部に読み込むステップと、受信されたデータが読み込まれたときに、コード記憶領域全体に対する署名を計算するステップと、受信された署名と計算された署名が一致した場合のみコード記憶領域のコンテンツの実行を可能にするために、外部装置から受信された署名を使用して、計算された署名を検証するステップと、を含むスクリプトを含む。
【００４３】
本発明の特定の実施形態において、コード記憶領域は、データ（外部装置により取得され、セキュア素子により外部装置から受信される）の読み込みの前に、ソフトウェア要素を含む。
【００４４】
したがって、読み込み後のコード記憶領域のシミュレートされたイメージは、それの初期状態（前述のバイナリパターン）での又はセキュア素子の動作中に、コード記憶領域に以前に読み込まれていたかもしれないデータを考慮に入れる。
【００４５】
本発明の特定の実施形態において、コード記憶領域に読み込まれる前記データは、前記コード記憶領域の利用可能なスペースの一部のみを表す。
【００４６】
例えば、読み込まれるデータ（コードブロックの集合）は、コード記憶領域を形成するビットの半分又は４分の１だけを占めていてもよい。本発明の第３の態様は、セキュア素子の不揮発性メモリにデータの読み込みを安全に行うための装置であって、不揮発性メモリは、コード記憶領域と呼ばれる、初期プログラムにより定義される記憶領域であって、領域の任意の変更は前記初期プログラムだけにより管理される記憶領域を備え、装置はセキュア素子の外部にあり、
‐セキュア素子に送信されるデータを取得するためのモジュールと、
‐セキュア素子のこのコード記憶領域への取得されたデータの読み込みにより変更されるコード記憶領域のイメージをシミュレートするためのモジュールと、
‐全体としてコード記憶領域のイメージ署名を計算するためのモジュールと、
‐セキュア素子に取得されたデータと計算された署名を送信するモジュールと、
を備える装置に関連する。
【００４７】
特定の実施形態において、前述の方法の様々なステップは、コンピュータプログラムの命令により決定される。
【００４８】
したがって、また、本発明は、データ媒体上のコンピュータプログラムを提案し、このプログラムはマイクロプロセッサにより実行可能であり、プログラムは、前述の方法のステップの実行に適した命令を含む。例えば、前述したような初期プログラムである。
【００４９】
このプログラムは、任意のプログラム言語を使用してもよく、ソースコード、オブジェクトコード、又は、ソースとオブジェクトコードの間の中間にあるコード、例えば、部分的にコンパイルされた形又は任意の他の所望の形のコードなど、の形式であってもよい。
【００５０】
また、本発明は、前述のようなコンピュータプログラムの命令を含むマイクロプロセッサ読み取り可能なデータメディアを提案する。
【００５１】
データメディアは、プログラムを記憶することが可能な任意の構成要素又は装置でもよい。例えば、メディアは、マイクロサーキットＲＯＭのようなＲＯＭなどの記憶手段、又は、ハードディスクなどの磁気記録手段、又はフラッシュメモリを備えてもよい。
【００５２】
一方、データメディアは、電気的又は光学的ケーブルを介して、無線により又は他の手段により、ルーティングされる電気的又は光学的信号のような伝導媒体でもよい。具体的には、本発明に関連するプログラムは、インターネットなどのようなネットワークの記憶プラットフォームからダウンロードされてもよい。
【００５３】
代替的に、データメディアは、プログラムが中に組み込まれた集積回路でもよく、回路は、問題になっている方法を実行するため、又は、それの実行において使用されるため採用される。
【００５４】
本発明の第４の態様は、マイクロプロセッサを備え、メモリ内に、前述のような初期プログラムを含むセキュア素子に関連する。例えば、セキュア素子は、ＩＳＯ／ＩＥＣ  ７８１６規格に、コモンクライテリア（Ｃｏｍｍｏｎ  Ｃｒｉｔｅｒｉａ）規格に、及び／又は、グローバルプラットフォーム  カード（ＧｌｏｂａｌＰｌａｔｆｏｒｍ  Ｃａｒｄ）仕様  ｖ．２．２．１  規格に準拠する。
【００５５】
本発明の第５の実施形態は、この種のセキュア素子と、前記のような安全に行う装置を備え、セキュア素子のための外部装置は安全に行う装置であるシステムに関連する。
【００５６】
前述の安全に行う装置、セキュア素子、システム、データメディア、及びコンピュータプログラムの特定の利点、目的、特徴は、それらが実行する方法のそれらと同じである。
【００５７】
本発明の他の顕著な特徴と利点は、本発明の例示的な実施形態であって、いかなる限定をするものではない実施形態を示す添付図面により説明される以下の記載から明らかになるであろう。
【図面の簡単な説明】
【００５８】
【図１ａ】いくつかの実施形態の利用状況の例を示す図である。
【図１ｂ】いくつかの実施形態の利用状況の例を示す図である。
【図２】図１ａ及び１ｂに示される装置の例示的な構造を示す図である。
【図３ａ】フローダイヤグラムにより、いくつかの実施形態に基づく安全性の方法の主なステップを示す図である。
【図３ｂ】フローダイヤグラムにより、いくつかの実施形態に基づく安全性の方法の主なステップを示す図である。
【発明を実施するための形態】
【００５９】
概括的には、本発明は、セキュア素子の不揮発性メモリに、特には、セキュア素子内の初期プログラムにより定義されるコード記憶領域と呼ばれる記憶領域であって、この領域の変更は初期プログラムだけにより管理され、コンパイルされた又はインタープリタされたコードを収容可能な領域に、外部装置から取得されたデータの読み込みを安全に行うことに関する。
【００６０】
「コンパイルされた又はインタープリタされたコード」の用語は、プログラムであって、例えばシステム（このケースではセキュア素子）などにより識別され、とりわけ、命令又はコードワード（バイトコード又はバイナリ）がシステムのプロセッサにより直接実行されるマシン言語のプロクラム、を含む任意のデータセットを意味する。
【００６１】
前述のように、コード記憶領域及び特にそのサイズは、セキュア素子の初期又は「基本」プログラムにより管理される。通常、初期プログラムは、システム、このケースではセキュア素子、の製造者の独自のオペレーティングシステムという形をとり、この特定のオペレーティングシステムは、本発明に関連する安全に行うことの対象となるコード記憶領域とは無関係に動作することに留意されたい。
【００６２】
本願発明によれば、外部装置が、例えば、セキュア素子の要求に応じて、セキュア素子への送信のためのデータを取得したとすると、これらのデータは、通常、外部装置（更新装置と呼ばれることもある）により利用可能となっているので、問題になっているデータの完全な読み込みにより変更されるセキュア素子のコード記憶領域のイメージをシミュレートする。記憶領域の「イメージ」は、この記憶領域における各ビットの値と位置を定義する。次に、署名が、このシミュレートされたイメージに基づき計算され、さらに、セキュア素子にそのデータとともに送信される。
【００６３】
その後、この署名は、データの読み込みが完了した後に、コード記憶領域全体が無傷であることを検証するために、セキュア素子により使用される。これは、このコード記憶領域は、外部装置によりシミュレートされたイメージと同一であると考えられるためである。したがって、本発明に関連して、同様に、セキュア素子の初期プログラムは、要求された任意のデータのすべての読み込みの後で、コード記憶領域全体について署名を計算する。受信した署名とそれとを比較するためである。
【００６４】
したがって、それぞれ計算された署名、問題になっているデータの読み込み後のコード記憶領域の予想される（シミュレートされる）イメージについて外部装置により計算された署名と、問題になっているデータの読み込み完了後の記憶領域についてセキュア素子の初期プログラムにより計算された署名との間の同一性は、コード記憶領域が、外部装置によりシミュレートされたイメージと確かに一致していて、且つ、その結果、無傷であることの保証を提供する。
【００６５】
図１ａ及び１ｂは、いくつかの実施形態の使用状況の例を示す概略図である。
【００６６】
図１ａにおいて、ホスト装置１０ａに統合され又は埋め込まれたセキュア素子１２ａは、外部装置１６ａとデータを交換するように構成される。
【００６７】
例えば、セキュア素子１２ａは、ＩＳＯ／ＩＥＣ  ７８１６  基準、コモンクライテリア（Ｃｏｍｍｏｎ  Ｃｒｉｔｅｒｉａ）基準、及び／又は、グローバルプラットフォーム  カード（ＧｌｏｂａｌＰｌａｔｆｏｒｍ  Ｃａｒｄ）仕様  ｖ．２．２．１  基準に準拠する。
【００６８】
例えば、セキュア素子１２ａは、ＳＩＭカード又はＵＩＣＣカードなどのような、ネットワーク１４ａの契約者の識別モジュールである。例えば、ホスト装置１０ａは、携帯端末、特には、「スマートフォン」として知られるインテリジェントな携帯電話である。外部装置１６ａは、ネットワーク１４ａに接続される（更新のための）サーバである。
【００６９】
例えば、ネットワーク１４ａは、データ及び／又はインターネット通信をサポートするモバイルネットワークである。したがって、この例示的な状況において、携帯端末１０ａとサーバ１６ｂは、識別モジュール１２ａを用いて、ネットワーク１４ａを介して通信する。
【００７０】
図１ｂは、いくつかの実施形態の他の利用状況を示し、カード１０ｂ、特に銀行カード又は電子アクセスカード内のセキュア素子１２ｂは、外部装置１６ｂとデータ交換をするように構成される。
【００７１】
この例において、セキュア素子１２ｂは、ＲＦＩＤタグタイプの、近距離無線通信（ＮＦＣ：Ｎｅａｒ  Ｆｉｅｌｄ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ）プロトコルによる通信のための手段を備え、外部装置１６ｂは、同様に、ＲＦＩＤタグタイプの、ＮＦＣプロトコルによる通信が可能なカードリーダである。
【００７２】
変形例において、セキュア素子と外部装置は、ブルートゥース（登録商標）を介して又は赤外線伝送により通信してもよい。
【００７３】
図１ａ及び１ｂに示す状況は、両立しないものではない。１つの状況で示される特徴は他で提供されてもよい。したがって、本発明は、上記状況に限定されるものではない。例えば、本発明は、また、セキュア素子がＮＦＣプロトコルによる通信のための手段を備えたホスト装置に埋め込まれた又は統合されたものであり、外部装置がそれ自身同じ通信手段を備えて通信する状況において有利に使用されてもよい。また、埋め込まれた又は統合されたセキュア素子は、ＮＦＣプロトコルによる通信のための手段であって、ホスト装置との通信のために使用される手段を備えてもよい。
【００７４】
本発明のいくつかの実施形態によれば、セキュア素子は、外部装置に、データ（例えば、アプリケーション又はアプリケーションの部分、特には更新部分）を得るための要求を送信する。この要求に応えて、外部装置は、例えば、セキュア素子が統合され又は埋め込まれているホスト装置を介して、セキュア素子に要求されたデータを送信する。これらのデータはセンシティブ（ｓｅｎｓｉｔｉｖｅ）であってもなくてもよい。すなわち、それらは、例えばそれらの実行中に、ユーザのデータが操作されることを許可してもよい。
【００７５】
これらのデータは、コード記憶領域と呼ばれるセキュア素子の不揮発性メモリの一部であって、セキュア素子の初期プログラムにより定義され、この領域の任意の変更はこの初期プログラムのみにより管理され、その領域はコンパイルされた又はインタープリタされたコードを含むことが可能である不揮発性メモリの一部に（読み込まれ）記憶されることを想定している。
【００７６】
外部装置により計算された署名は要求されたデータとともに送信される。本発明によれば、この署名は、要求されたデータのすべての読み込みの後にあるべきコード記憶領域全体のイメージを反映しているという顕著な特徴を有する。
【００７７】
好ましくは、コード領域は、任意の初期データが読み込まれる前は「ランダム化されて」いる。換言すれば、ランダムな値が、コード領域にランダムなやり方で記録される。コード領域のこの状態は、データのすべての読み込みの後にあるべきコード記憶領域全体のイメージを反映している署名が計算できるように、外部装置により知られている。
【００７８】
要求されたデータの読み込みが完了したとき、セキュア素子の初期プログラム自体が、要求されたデータの読み込みにより実際に変更されたものとしてコード記憶領域についての署名を計算する。コード記憶領域の全体は確かに予想される外観を有していること、換言すると無傷であることを保証するためである。
【００７９】
図２は、図１ａ又は１ｂに示す装置、すなわち、セキュア素子１２ａ又は１２ｂ、外部装置１６ａ又は１６ｂ、及び／又は、ホスト装置１０ａ又は１０ｂの例示的な構造を示す図である。
【００８０】
この構造によれば、装置は以下の要素に接続される通信バス２を備えていてもよい。
‐ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）で示され、１つ又は複数のプロセッサを備えていてもよい、処理ユニット２０、
‐リード／ライトメモリ２２又はキャッシュメモリ又は揮発性メモリ、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、
‐１つ又は複数の不揮発性メモリ２４、及び、
‐通信インターフェース２６。
【００８１】
リード／ライトメモリ２２は、本発明による方法を、その方法の使用中に、使用するための命令を含むコンピュータプログラムの実行中に生成され及び変更される変数及びパラメータを記録するのに適したレジスタを備える。不揮発性メモリに記憶されたプログラムの命令コードは、処理ユニット  ＣＰＵによる実行のためＲＡＭに読み込まれる。
【００８２】
１つ又は複数の不揮発性メモリ２４は、例えば、ＥＥＰＲＯＭ又はフラッシュメモリタイプの書換え可能なメモリであって、本発明の意味においてのメディアを構成してもよい、すなわち、それらは、本発明による方法の使用のための命令を含むコンピュータプログラムを含んでいてもよい。
【００８３】
本発明によれば、セキュア素子のケースにおいて、ＲＯＭ２４は、例えば３つの記憶領域２４ａ、２４ｂ、２４ｃに分割されていてもよい。例えば、記憶領域２４ａは、ジャバ（Ｊａｖａ（登録商標））アプリケーション（「アプレット」と呼ばれる）、ジャバカード（Ｊａｖａ（登録商標）Ｃａｒｄ）仮想マシンのコンフィギュレーションデータ、パスワード、電話番号、アプリケーション、又は、その他のカスタマイズパラメータなどのユーザデータを含む。
【００８４】
記憶領域２４ｂは、前述のコード記憶領域である、したがって、コンパイルされた又はインタープリタされたコードでのデータとプログラム、例えば、セキュア素子のオペレーティングシステム、又は、コンパイルされた又はインタープリタされたコードでの任意のタイプのアプリケーション、の記憶専用となっている。例えば、それは、ジャバカード仮想マシン、ジャバカード実行環境（英語では「Ｊａｖａ（登録商標）Ｃａｒｄ  Ｒｕｎｔｉｍｅ  Ｅｘｅｃｕｔｉｏｎ」）、ネイティブアプリケーション、又は、ＧＳＭ（登録商標）プラットフォーム（「モバイル通信のためのグローバルシステム（Ｇｌｏｂａｌ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｍｏｂｉｌｅ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ）フレームワーク）である。実行エラーを防ぐため、この記憶領域は、それが含むコンパイルされた又はインタープリタされたコードの実行中は、変更することができない、この記憶領域２４ｂのロッキング（ｌｏｃｋｉｎｇ）は、この領域が一時的に無効にされた後にコード記憶領域２４ｂの変更をすることができる唯一のプログラムであるセキュア素子の初期プログラムにより提供される。
【００８５】
それの初期状態において、すなわち、製造中は、記憶領域２４ｂはブランクである。任意のコンパイルされた又はインタープリタされたコードが読み込まれ又はインストールされる前の初期状態において記憶領域２４ｂには、バイナリパターンが適用される。例えば、このパターンは、すべて０に等しいか又はすべて１に等しいビットで構成される。変形例において、このパターンは、いくつかの０ビット又はいくつかの１ビットから構成されてもよく、したがって、その初期状態における記憶領域２４ｂのビットのイメージをより複雑にし、この記憶領域の安全性を改良することができる。特には、前述のようにランダム化されたイメージが使用されてもよい。
【００８６】
特には、この初期イメージは、外部の更新装置１６ａ／１６ｂにより知られているので、この装置が、記憶領域２４ｂのビットの変化、及び、したがって、コンパイルされた又はインタープリタされたコードでの新しいソフトウェア要素が記憶領域に読み込まれたときの、記憶領域２４ｂのビットセットからなるこの記憶領域２４ｂのイメージにおける変化を、正確に追跡することを可能にする。
【００８７】
変更不可記憶領域２４ｃは、本発明により、コード記憶領域２４ｂのサイズと完全性を管理するように構成されたセキュア素子の初期プログラムを含む。初期プログラムは、例えば、領域２４ｂのスタートのメモリアドレス及び領域２４ｂのエンドのメモリアドレスにより定義されるコード記憶領域２４ｂのサイズを与える。例えば、これらのアドレスは初期プログラムのレジスタキーに記憶される。
【００８８】
また、初期プログラムはコード記憶領域２４ｂのインタープリタされたコードでのソフトウェア要素の活性化及び無効化を制御する。換言すれば、記憶領域２４ｂに記憶されたコンパイルされた又はインタープリタされたコードの実行を可能とするか又は禁止とすることができるのは初期プログラムだけである。特には、それは、ソフトウェア要素の１つを更新しなければならないとき、又は、その中に新しいデータを読み込まなければならないときには、記憶領域２４ｂ内の任意の実行を無効とする。
【００８９】
また、初期プログラムは、コード記憶領域２４ｂを更新するための仕組みであって、このコード記憶領域２４ｂ内にインタープリタされたコードでのバイナリブロックを読み込むための更新コマンド又はスクリプトを実行するように構成される仕組みを有する。
【００９０】
ＲＯＭは、３つの領域を超えるように分割されてもよく、その場合でも、セキュア素子のコンパイルされた又はインタープリタされたコードのすべてのソフトウェア要素は、専用のコード記憶領域２４ｂに強制的に記憶される。
【００９１】
通信インターフェース２６は、例えば、電話通信ネットワーク又はリード／ライト  インターフェースを介してのデータの送受信に適応している。例えば、外部装置とセキュア素子がデータと署名とを送受信するのは、このインターフェースを介してである。また、ホスト装置がデータの取得のためのセキュア素子からの要求を送信することができ、セキュア素子に送信するために外部装置からこれらのデータを受信することができるのは、このインターフェースを介してである。
【００９２】
必要に応じて、また、このアーキテクチャ（通常、ホスト装置１０ａに対して）は、例えば、スクリーン、キーボードマウス、又は、タッチスクリーンのようなポインティングデバイスなどのＩ／Ｏ（入力／出力）で表される入力／出力インターフェースを有する。このインターフェースを用いて、例えば、ユーザは、既にメモリ内にあるコンパイルされた又はインタープリタされたコードでのオペレーティングシステム又はアプリケーションの更新、又は、コンパイルされた又はインタープリタされたコードでの新しいオペレーティングシステム又は新しいアプリケーションの読み込みを要求することができる。
【００９３】
必要に応じて、また、このアーキテクチャ（通常、外部装置１６ａ又は１６ｂ、及び、セキュア素子１２ａ又は１２ｂに対して）は、例えば、コンパイルされた又はインタープリタされたコードでの実行可能ファイルの署名又はデータなどを含むメッセージを暗号化／復号化するための、処理ユニット２０からの命令を受信する暗号プロセッサ２９を有する。この暗号化はネットワーク１４ａ上でのデータと署名の送信を安全に行う。
【００９４】
通信バスは、装置内に含まれる又はそれに接続される様々な素子間の通信と相互運用を提供する。通信バスの意義は、限定されるものではないが、特に、処理ユニットが、装置内の任意の素子に、直接に又はこの装置内の他の素子を介して命令を通信できることにある。
【００９５】
図３ａは、いくつかの実施形態による安全に行う方法の主なステップを示し、これらのステップは、外部装置（例えば、図１における装置１６ａ又は１６ｂ）により実行される。図３ｂは、いくつかの実施形態による安全に行う方法の主なステップを示し、これらのステップは、セキュア素子（例えば、図１における装置１２ａ又は１２ｂ）により、特に初期プログラム又は初期プログラムに提供される読み込みモジュールにより、実行される。
【００９６】
図３ａのステップ３０において、外部装置は、セキュア素子から送られた、データを取得するための要求を受信する。
【００９７】
要求を送信するための多くの可能なメカニズムが存在し、それらのいくつかは自動的に、他のものは、ユーザの自発的な行動に基づくものである。
【００９８】
非限定的な例であって、図２を参照して前述したように、ホスト装置の、例えば、図１ａの携帯端末１０ａのユーザは、この要求の生成と送信を開始する。例えば、ユーザは、携帯端末１０ａのキーパッド又はタッチスクリーンを使用して、携帯端末内に収納されているＳＩＭカードにインストールされている現在のものより、より最近のバージョンのアプリケーション又はオペレーティングシステムを外部の更新装置が有しているかどうかをチェックするよう携帯端末に要求してもよい。この状況において、携帯端末１０ａは、例えば、「Ｓｅｌｅｃｔ（Ｐｒｏｇｒａｍ）」コマンド（Ｐｒｏｇｒａｍはチェックされるべきオペレーティングシステム又アプリケーションである）、及び、「ＧｅｔＤａｔａ（９Ｆ７Ｆｈ）」コマンド、９Ｆ７Ｆｈは「カード製造ライフサイクル」として知られるトレーサビリティデータを特徴づけるパラメータである、を使用して、このオペレーティングシステム又はアプリケーションの現在のバージョンを見つけるためにセキュア素子に問い合わせをして、次に、この情報を、例えばＰＩＮＧコマンドを使用することにより自発的に、外部の更新装置に送信して、応答により、現在の、さもなければより最近のバージョンがあることを知ることができるようにする。
【００９９】
変形例において、同じ交換を使用して、バージョンの検証を、端末が起動するとき自動的にしてもよい。
【０１００】
他の変形例において、外部装置は、オペレーティングシステム又はアプリケーションの新バージョンの存在を、プッシュメカニズムを使用して、端末及びセキュア素子に自発的に知らせてもよい。
【０１０１】
更新装置によって、より最近のバージョンの存在を知らされた端末は、この情報をセキュア素子に送信し、次にセキュア素子は、オペレーティングシステム又はアプリケーションのコードの全部又は一部のより最近のバージョン（すなわち、更新）を取得するための要求を送信する。
【０１０２】
代替的に、セキュア素子と外部装置間の通信は、以下に記載する全体に対して、直接的である。したがって、端末は、交換されるデータ及びメッセージ（特には、更新が得られるという情報）を、それらを中断することなく、単に中継として機能して、送信する。
【０１０３】
いくつかの実施形態において、取得のためのこの要求は、セキュア素子を識別するための情報、例えば、セキュア素子の固有の識別子を含む。この固有の識別子は、例えば、更新装置が、セキュア素子の現在の又は「存在する」ソフトウェアコンフィギュレーション、特には、記憶領域２４ｂのそれを検索するため、関連するデータベースを使用することを可能にする。実際に、この種のデータベースは、セキュア素子で実行されるインストール及び更新のログと同様にこれらのインストールと更新の実行の指示とを記憶するために使用されてもよい。例えば、この指示は、読み込まれるデータのメモリのアドレス又は記憶位置を示すインストールスクリプトである。
【０１０４】
変形例において、取得のための要求は、セキュア素子のコード記憶領域２４ｂの現在のソフトウェアコンフィギュレーションの識別子を含む。
【０１０５】
例えば、この識別子は、外部装置に関連するデータベース内の、記憶領域２４ｂにおいて実行される読み込みのログが関連するソフトウェアコンフィギュレーションの固有の識別子である。
【０１０６】
この識別子及び関連するログにより、記憶領域２４ｂに現在記憶されているソフトウェア要素だけでなく、以前に読み込まれてその後消去されたものも、これらのソフトウェア要素がコード記憶領域２４ｂ内で互いに続けて起きた順序とともに、知ることが可能である。
【０１０７】
このログにより、コード記憶領域２４ｂの様々な場所で、特に、全体として考えられる記憶領域２４ｂの各ビットにおいて、互いに続けて起きた情報のすべての項目を取り出すことが可能である。したがって、この固有の識別子により識別されるソフトウェアコンフィギュレーションは、セキュア素子のコード記憶領域２４ｂの現在のイメージを表す、換言すれば、特には、過去に読み込まれ、その後、上書きされないけれども削除されたソフトウェア要素（それらがメモリにまだあるような）を考慮した、各ビットの値と位置を表す。
【０１０８】
例として、このソフトウェアコンフィギュレーション識別子は、セキュア素子から検索されるＣＰＬＣ（カード製造ライフサイクル：Ｃａｒｄ  Ｐｒｏｄｕｃｔｉｏｎ  Ｌｉｆｅ  Ｃｙｃｌｅ）データであって、通常はＰＩＮＧコマンドにより外部装置に送信されてもよいＣＰＬＣデータから決定されてもよい。ＣＰＬＣデータは、特に、セキュア素子の製造者の識別子、セキュア素子のタイプ、オペレーティングシステムの識別子、及び、オペレーティングシステムの現在のバージョンを含む。それらは、外部装置が、この情報が検索されたセキュア素子のコード記憶領域２４ｂの現在のイメージを検索することを可能にする。
【０１０９】
変形例において、取得のための要求は、関連するデータベース内に補充されたデータの検索に頼ることなく、記憶領域のイメージの復元のために必要な情報を含んでいてもよい。
【０１１０】
ステップ３１において、外部装置は、要求されたデータを、（例えば、内部記憶領域から、又は、第３者の装置から）検索して、次に、要求されたデータの読み込みの後にあるはずの、コード記憶領域２４ｂのビットのイメージをシミュレートする。換言すると、外部装置は、コード記憶領域２４ｂのビットそれぞれの位置と値を、それらが、要求されたデータを構成するコンパイルされた又はインタープリタされたコードの読み込みにより変更されようがされまいが、シミュレートする。
【０１１１】
特に、要求されたデータの読み込みは、セキュア素子により受信され、要求されたデータのすべて又はいくつかのために特定の位置を定義するコマンドセットを含む、（可能であれば、外部装置により生成された）インストール又は読み込みスクリプトにしたがってもよい。例えば、インストールスクリプトは、データが記憶される位置（メモリアドレスと長さ）（値）を示すＡＬＶ（「アドレス長値（ａｄｒｅｓｓ−ｌｅｎｇｔｈ−ｖａｌｕｅ）」を含んでいてもよい。したがって、外部装置は、セキュア素子がインストールスクリプトの受信に基づいて動作するのと同じやり方で要求されたデータのインストール又は読み込みを、シミュレーションにより再現することができる。
【０１１２】
したがって、シミュレートされたイメージは、ビットが、要求されたデータの読み込みにより変更されることと同じくそれらがこの読み込みにより変更されないことを許す。
【０１１３】
実際には、外部装置により生成されたインストールスクリプトは、コンパイルされた又はインタープリタされたコードの記憶に対する容量及び／又は要求されたデータに対するインストールパラメータ（前述のＡＬＶファイル）を拡大したり縮小したりするため、コード記憶領域２４ｂのコンテンツ、例えばそのサイズを変更するためのコマンドセットを含んでもよく、したがって、コード記憶領域の正確な位置（すなわち正確なアドレス）に各データビットを読み込ませることを可能にする。したがって、外部装置は、例えば、ソフトウェア要素の前のバージョンのビットをこのソフトウェアの新バージョンのビットで置き換えるために、各データビットに対し、他よりも位置の優先を与えてもよい。
【０１１４】
インストールスクリプトは、読み込まれるデータとは別に表されるけれども、読み込まれるデータは、インストールスクリプトの不可欠な部分を形成してもよい。したがって、スクリプトは、前述のＡＬＶファイルの値に、データを構成するコンパイルされた又はインタープリタされたコードの１つ又は複数のブロックあるいは全体を含んでもよい。
【０１１５】
さらに、インストールスクリプトは、ホスト端末とセキュア素子間の安全なチャネルを確立するためのコントロール信号を含んでもよく、それらの相互認証を提供してもよい。例として、これらのコマンドは、要求されたデータの読み込み中に、（通常は上記ＣＰＬＣデータの識別子に基づく）疑似ランダム値に基づいて生成されるセッションキーに基づく安全なチャネルが使用されるように、ＧＰ  ２．２．１  Ａｍｄ  Ｄ  ｖ１．１（ＳＣＰ０３）仕様に準拠する。この仕様により確立された安全なチャネルは、前述の要素（署名、コンパイルされた又はインタープリタされたコードなど）を送信するコマンドの、特には、ＡＬＶファイルの各エントリのための「Ｓｔｏｒｅ  Ｄａｔａ」コマンドの一連の事前生成を可能にする利点がある。
【０１１６】
ステップ３２において、その後、コード記憶領域２４ｂのビットセットのシミュレーションされたイメージの署名が外部装置により計算される。この署名は要求されたデータの読み込みにより変更されたビットの新しい値と、同様に、この読み込みにより変更された位置以外に位置しているコード記憶領域のビットの値との関数である。読み込みにより変更された位置以外の位置は、以前に読み込まれた他のデータ（ソフトウェア要素）のインタープリタされたコード、又は、初期のバイナリパターン、すなわちコード記憶領域のその最初の状態、すなわちブランクのときのビットのイメージに対応するパターンを含んでいてもよい。
【０１１７】
セキュア素子のコード記憶領域２４ｂへの任意の以前の読み込みと要求されたデータの実際の読み込みの間で、変更された位置以外に位置するビットは、コード記憶領域に対する位置又は値のいかなる変更も受けてはならないことに留意されたい。異常（悪意のある、又は、読み込みスクリプトの実行における論理エラーの結果）であるこれらの変更は、セキュア素子により計算されるコード記憶領域２４ｂの署名（以下に記述される）であって、期待値に関連し、記憶領域２４ｂのシミュレートされたイメージについて計算され、いかなるそのような変更もあってはならない記憶領域のイメージを特徴づける署名の変更を引き起こすであろう。
【０１１８】
実際には、例えば、この署名は、メッセージ認証コードＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）、ハッシュＭＡＣ、例えばＳＨＡ−２タイプのハッシュ関数の結果、又は、代替的に、巡回冗長コードのアプリケーションの結果である。署名は、信号コードブロックのビットのシミュレートされたイメージ、又は、記憶領域２４ｂ全体のビットのシミュレートされたイメージが分割されたバイナリ部分について計算されてもよい。
【０１１９】
特定の実施形態において、外部装置は、コード記憶領域をＰ個のサブ領域に仮想的に分割して、Ｐ個のサブ領域の１つに対するそれぞれのイメージ部に対する基本署名を計算する。次に、全体のコード記憶領域のイメージの署名がＰ個の計算された基本署名の合成により得られる。
【０１２０】
したがって、外部装置は、読み込みにより変更されるサブ領域に対する基本署名だけを有利に計算してもよく、変更されないサブ領域の基本署名を、それらが既に計算されているときは、再利用してもよい。
【０１２１】
特に、外部装置は、考えられている各サブ領域のコンテンツ、すなわち、それを形成しているビットセット（モジュールと呼ばれる）であって、他のサブ領域のコンテンツとは関係がないコンテンツを管理してもよい。換言すると、外部装置は、モジュールがコード記憶領域２４ｂ内でどのように互いに相対的に配置されているかを示す必要なしに、１つ又は複数のモジュール内の要求されたデータのいくつかの読み込み位置を示してもよい。
【０１２２】
基本署名の合成は、Ｐ個のサブ領域のＰ個の基本署名に適用される全単射関数を使用して実行されてもよい。これは、サブ領域の任意の順序（したがって、対応する基本署名の任意の順序）を考慮することを不要にする。この全単射関数は、外部装置とセキュア素子とで共有される秘密の関数でもよい。したがって、記憶領域全体の署名は、基本署名だけから取得することはできない、すなわち、全単射関数、又は、この関数の秘密のパラメータのいずれかの知識なしには、取得することはできない。
【０１２３】
例えば、排他的ＯＲ（ＸＯＲ）が使用されてもよく、ＭＡＣコードが、すべての基本署名について計算されてもよい。
【０１２４】
変形例において、次に、コード記憶領域全体のイメージの署名は、例えば、対応するサブ領域の順序又はそれらのコンテンツ（モジュールと呼ばれる）の順序に関連する所定の順序での基本署名の合成により取得されてもよい。この所定の順序は、外部装置とセキュア素子とで共有される秘密として事前に記憶されていてもよい。例えば、サブ領域は、識別子（経時的に変化する）を備えていてもよく、順序は、前記サブ領域の識別子の増加する又は減少する順序でもよい。
【０１２５】
ステップ３３において、要求されたデータは、安全なチャネルを確立して要求されたデータを読み込むため外部装置により生成されたインストールスクリプトとともに、それらの実行のため、すなわち、セキュア素子にデータを読み込むために、ステップ３２において計算された署名とともに送信される。
【０１２６】
実際には、署名は、それがセキュア素子により受信される前に、それを変更され又は傍受されるのを避けるために暗号化（または、符号化）されたコマンドで送信される。いくつかの実施形態において、要求されたデータ、インストールスクリプト及び署名は、すべて同じ暗号化（符号化）されたコマンドで送信される。
【０１２７】
他の実施形態において、データの活性化のための要求は、暗号化されたコマンドでの署名を伴って送信される。
【０１２８】
実際には、要求されたデータ、署名、及び必要であれば活性化要求が、ＳＭＳ（無線）により、インターネット、ＮＦＣ、ブルートゥース（登録商標）、有線接続、又は、任意の他の通信手段であって外部装置及びこれらの要素の受信者（すなわち、セキュア素子及び／又はホスト装置）により制御される任意の他の通信手段により送信されてもよい。
【０１２９】
セキュア素子により実行される動作に関しては、前述のように、データを取得するための要求が、外部装置がセキュア素子のコード記憶領域２４ｂ全体のビットのイメージをシミュレートするのを可能にするために、識別子を伴って送信される。
【０１３０】
データを取得するためのこの要求は、通常、記憶領域２４ｃに記憶された初期プログラムにより送信される。例えば、初期プログラムは、コード記憶領域２４ｂに記憶されたすべてのデータ（オペレーティングシステム及びアプリケーション）を、それらを更新又は新しいデータをインストールするために、非活性化するコマンド（例えば「ｃｈｍｏｄ」）を使用する。
【０１３１】
以下において、記載されたステップを実行するのは、特に断りがない限り、初期プログラム（または、初期プログラムのローディングモジュール）であると想定されている。
【０１３２】
また、外部装置に関連して前述したように、ホスト端末は、インストールスクリプト、読み込まれるデータ（スクリプトに含まれていても含まれていなくてもよい）、及び外部装置で計算された署名を受信する。
【０１３３】
受信されたインストールスクリプトは、ホスト端末により実行され、図３ｂに関連して以下に記述するセキュア素子との交換をもたらす。
【０１３４】
セキュア素子の初期プログラムにより実行されるその後のステップに関連する図３ｂでのステップ３４において、セキュア素子は、ステップ３３において外部装置により送信された、データ取得のための要求において要求されたデータと、ステップ３２において外部装置により計算された署名と、適切である場合には、要求されたデータの活性化のための要求とを一緒に受信する。
【０１３５】
実際には、ホスト端末は、ホスト端末とセキュア素子、特には、後者の初期プログラムとの相互認証と、それに続くこれら２つの構成要素間の安全な通信チャネルの設定と、要求されたデータの送信と、最後に外部装置により計算された数値署名と、が得られるインストールスクリプトを実行する。
【０１３６】
例えば、相互認証は以下のステップ、
‐ホスト端末は初期プログラムに端末のＩＤタームの識別子を送る、
‐初期プログラムは端末にランダム数Ｒ１を送る、
‐端末は計算して符号化された項目Ｃ１＝ｆ（ＩＤターム，Ｒ１）を初期プログラムに送る、
‐端末はランダム数Ｒ２を初期プログラムに送信する、及び
‐初期プログラムは符号化された項目Ｃ２＝ｆ（ＩＤターム，Ｒ２）を戻す、
を含む。
【０１３７】
初期プログラムとホスト端末それぞれによるＣ１とＣ２の検証は、これら２つの構成要素の相互認証を可能にする。
【０１３８】
次に、ＧＰ  ２．２．１  Ａｍｄ  Ｄ  ｖ１．１（ＳＣＰ０３）による安全なチャネルは、例えば、外部装置によりインストールスクリプト内に提供されるランダム値及び／又は疑似ランダム値（ランダム値とＣＰＬＣデータに基づく）を用いて実施される。
【０１３９】
読み込まれるためのデータと署名は、ホスト端末と初期プログラムとの同じ通信セッション中に送られる。データは、例えば、ＡＬＶトリプレット（ｔｒｉｐｌｅｔ）を使用する１つ又は複数のＳＣＰ０３「Ｓｔｏｒｅ  Ｄａｔａ」コマンドを使用して、モノリシックブロックで、又は、変形例として、独立した複数のブロックで送信されてもよい。
【０１４０】
ホスト端末からセキュア素子への要求されたデータの安全な読み込みは、外部装置とは独立して、すなわち、必ずしもホスト端末が外部装置と接続されることがなくても行われることに留意されたい。これは、端末が受信とは無相関なやり方で、例えば、初期プログラムがこの素子を引き継ぐときのセキュア素子の次の再スタートのときに、外部装置により送信されるインストールスクリプトにより可能になる。
【０１４１】
また、インストールスクリプトで提供される他のコマンドは、例えば、コード記憶領域２４ｂを縮小又は拡大するためのコマンドと読み込まれたデータを活性化するコマンドを実行するため、セキュア素子に送信される。
【０１４２】
ステップ３５において、次に、要求されたデータは、一括して又はブロックごとにセキュア素子のコード記憶領域２４ｂに読み込まれる。実際には、前述のインストールスクリプトは初期プログラムのローダーにより実行されて、モノシリックブロックの読み込み、又は、ＡＬＶ記憶位置の指示にしたがい連続したブロックの漸進的読み込みのいずれかにより要求されたデータの読み込みとインストールが行われる。
【０１４３】
コード記憶領域が前述のようにＰ個のサブ領域に区切られているとき、インストールスクリプトコンテンツにより、サブ領域は、読み込まれるデータを形成するコンパイルされた又はインタープリタされたコードの１つのブロック又は複数のブロックの読み込みにより変更されてもよい。他のサブ領域は、変更されなくともよい、すなわち、要求されたデータの読み込みの現在の動作がされている間は、読み込みは、これらの領域に対して全く実行されない。コード記憶領域がサブ領域に区分されている場合は、ブロックの読み込みに対するメモリアドレスは、特定のサブ領域の開始メモリアドレスに対して表されていてもよい。
【０１４４】
ブロックごとの読み込みの利点は、各ブロックは他のブロックとは独立して読み込まれてもよいことにある。
【０１４５】
例えば、読み込みは、インストールスクリプトで示されたメモリアドレスにブロックを直接記憶することを含んでもよい。したがって、ソフトウェア要素の更新の間、この読み込みタイプは、更新されるブロックを直接取り換えることを含む。
【０１４６】
変形例において、読み込まれるブロックは、インストールスクリプトにより特定される位置に配置され記憶される前に、一時記憶（リザーブ領域又は「スペアメモリ領域」）専用のコード記憶領域の一部にキューイングされてもよい。
【０１４７】
コード記憶領域２４ｂを更新するため初期プログラムにより使用される読み込み方法（直接又は間接）は、外部装置により知られていて、外部装置はコード記憶領域２４ｂの一部を形成するリザーブ領域のビットの状態を知ることができる。これは、ステップ３２において計算された署名は、セキュア素子のコード記憶領域２４ｂでの実際の変更に適合することを保証する。
【０１４８】
要求されたデータが、全体として読み込まれたとき（すなわち、モノリシックブロックが読み込まれたとき、又は、場合によっては、すべてのコードブロックが読み込まれたとき）、換言すると、読み込みセッションが終了したとき（セッションは、セキュア素子のオンとオフのスイッチングの複数の周期をカバーしてもよいことに留意されたい）、署名を計算するステップ（ステップ３６）が、セキュア素子の初期プログラムにより実行される。
【０１４９】
一般的なルールとして、このステップは、署名が、コード記憶領域全体のビットの現在のイメージから、すなわち要求されたデータの読み込みが完了したときのコード記憶領域２４ｂのビットの値から計算されることを除いて、外部装置により実行されるステップ３２と同じである。
【０１５０】
要求されたデータの読み込みの後に、原則として、変更されるであろうコード記憶領域のビットのシミュレーションに基づいて外部装置により計算される署名と対照的に、初期プログラムにより計算される署名は、コード記憶領域２４ｂのすべてのビット、したがって、領域２４ｂに対してなされてもよい任意の変更（悪意のあるもの又は読み込みエラーによるものであろうとなかろうと）を考慮する。
【０１５１】
ステップ３４で受信した署名が、前述のようにサブ領域の基本署名の合成の結果であるときは、また、基本署名は、関連するサブ領域のコードブロックの読み込みが完了した後に再度、セキュア素子の初期プログラムによりステップ３６で計算される。
【０１５２】
有利には、各基本署名はコードブロックが対応するサブ領域に読み込まれてすぐに、あるいは、完全に読み込みがされたなら、計算されてもよい。
【０１５３】
このケースにおいて、関連するサブ領域のコンテンツ（又はモジュールと呼ばれる）は、外部装置により予想されたものと同一である。したがって、サブ領域に関連する基本署名を計算するために、要求されたデータの完全な読み込み（したがって、他のサブ領域への読み込み）を待つ必要はない。結果的に、基本署名は、データ読み込みスクリプトの実行中に個別に計算されてもよく、したがって、読み込みの終了に達したとき、全体署名の計算時間が削減される。
【０１５４】
次に、これらの基本署名はステップ３２と同じやり方で、すなわちステップ３２で使用された合成方法にしたがい、全単射関数又は所定の順序での合成を使用して、合成される。初期プログラムと外部装置は、同じ合成を実行するように構成される。必要であれば、それらは、署名の計算のために実行される合成方法について合意するために命令を交換してもよい。
【０１５５】
要求されたデータのすべての読み込み後の、実際のコード記憶領域の全体の現在のイメージを反映したコード記憶領域の署名は、このようにして取得される。したがって、それは、コード記憶領域２４ｂにおいてなされた任意の予想外の変更を含む。
【０１５６】
ステップ３７において、コード記憶領域２４ｂの完全性は、ステップ３６でセキュア素子により計算された署名を、ステップ３４で外部装置から受信された署名と比較することにより検証される。これは、コード記憶領域全体が予想される外観を本当に有していること、すなわち、読み込まれたデータの各コードビットが外部装置により特定された位置に予想される値を有していること、及び、他のメモリビットが値と位置の両方に関して損傷を受けていないこと、を検証するプロセスである。
【０１５７】
計算された署名が異なる場合、これは、外部装置により生成されたコード記憶領域のシミュレーション（すなわち、コード記憶領域全体のビットのシミュレーション）との比較により、少なくとも１つのメモリビットが変更（追加、削除、変更）されていること、を意味する。このケースにおいて、セキュア素子の初期プログラムは、コード記憶領域２４ｂは損傷を受け、したがって、実行することができない、換言すると、このやり方で読み込まれたデータを活性化できない、とみなす。
【０１５８】
次に、セキュア素子は、異常を信号で、例えば外部装置に伝えてもよく、それに応じて、外部装置は、安全性の欠陥を直す試みにおいて新しいデータを送信してもよく（コードブロックがエラーで受信された場合）、また、故障が識別された論理的誤動作に起因している場合、例えば、コンパイルされた又はインタープリタされたコードがバッファ領域として１回ごとに使用されるべきリザーブ領域に恒久的に記録される場合には、この故障の再生を防ぐために新しい論理ルールをインストールしてもよい。変形例において、署名はセキュア素子の初期プログラムにより再計算されて、次に、セキュア素子の再始動後に再度検証されてもよい。
【０１５９】
セキュア素子により計算された署名と外部装置から受信した署名が一致する場合、セキュア素子の初期プログラムは、実行を可能にする、すなわち、このやり方で読み込まれたデータを活性化する（ステップ３８）。例として、初期プログラムは、実行における権利を変更するため、モード変更コマンド「ｃｈｍｏｄ］（例えば、「ｃｈｍｏｄ  ＋ｘ」を実行してもよい。
【０１６０】
様々な実施形態において、読み込まれたデータは、すぐに活性化（換言すると、実行可能にする）されてもよく、また、活性化は、セキュア素子の次の起動のときのみに行われてもよい。次の起動のときの活性化は、問題のデータがそれのオペレーティングシステムの更新に対応している場合、セキュア素子の動作を中断することがない利点を有する。
【０１６１】
いくつかの実施形態において、署名の計算（ステップ３６）と検証（ステップ３７）の新しいステップは、コード記憶領域がまだ損傷を受けていないことの連続的な検証を提供するため、セキュア素子の動作中に（例えば、定期的に、セキュア素子のスイッチングオフとは無関係に）実行される。このような方法で、最後の読み込みセッションの後に発生したコード記憶領域の任意の悪意ある更新が確認されてもよい。これらの新しい完全性の検証は、第三者（例えば、外部装置またはネットワークオペレータなど）の要求のときにセキュア素子がオンされたときはいつでも、またあるいは、所定のイベント（例えば、ユーザ要求、カウンタの終了、特定コマンドの受信、又は、プロセッサの低い利用率など）の発生ごとに、発生してもよい。
【０１６２】
コード記憶領域２４ｂの完全性の欠陥が検出された場合、初期プログラムは、この記憶領域のインタープリタされたコードを非活性化して外部装置に警告することを決定してもよい。インタープリタされたコードの再活性化は、完全に無傷なコード記憶領域２４ｂに復元されたときのみ起きる。
【０１６３】
前述の例は、単純に、本発明の多くの実施形態であり、それらに限定されるものではない。
【０１６４】
例えば、前述のように、要求されたデータブロックは、各ブロックに対する「Ｓｔｏｒｅ  Ｄａｔａ」コマンドの助けを借りて初期プログラムに送信されてもよく、次に、これらのブロックは、特定のメモリ位置に直接に、又は、リザーブ記憶領域の一時記憶を介して、読み込まれてもよい（ステップ３８）。
【０１６５】
変形例において、ホスト端末は、初期プログラムにより実行される、更新スクリプトと呼ばれる新しいスクリプトを送信してもよく、この更新スクリプトは、特定の読み込み位置の指示とともに、要求されたデータの様々なインタープリタされたコードブロックを含む。この更新スクリプトは、要求されたデータの様々なインタープリタされたコードブロックの漸進的な読み込みによりコード記憶領域２４ｂを変更するために、初期プログラムにより実行される前に、領域２４ｂのリザーブ記憶領域に記憶される。
【０１６６】
さらに、上記の例において、セキュア素子はデータを取得するための要求を送信する（ステップ３０）。本発明の変形例において、外部装置は、用語「ｐｕｓｈ」として知られている、前述の要求を必要としないメカニズムにより、セキュア素子に向けてデータをプッシュする。これらの変形例において、外部装置は、セキュア素子に対する読み込み履歴を（例えば、前述のデータベースを使用することにより）知っているので、例えば、セキュア素子に関連する更新があったときは、コード記憶領域のイメージをシミュレートして、署名を計算して（適切な場合には、基本署名を介して）、セキュア素子に「ｐｕｓｈ」モードでデータ全体を送信することが可能である。
【図１ａ】
0006585072.tif 000002
【図１ｂ】
0006585072.tif 000003
【図２】
0006585072.tif 000004
【図３ａ】
0006585072.tif 000005
【図３ｂ】
0006585072.tif 000006