(57)【要約】  本願発明は、署名の付け替えを行う手間が発生し、時間がかかるという課題を解決するためのものである。  本願発明のセキュアメモリカードでは、暗号データと署名対象データとを受信する通信手段と、任意のデータに対して暗復号処理を行う暗復号手段と、前記署名対象データと、前記暗復号手段で復号された前記暗号データに格納されている署名と、を照合する照合手段と、前記照合手段の照合結果に基づいて、前記署名対象データの正当性を判断する判断手段と、前記判断手段により前記署名対象データが正当であると判断されるとき、前記署名が含まれている前記暗号データの前記署名以外のデータを正当なデータとして記憶する記憶手段とを備える。
2008018457.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも、暗号データと署名対象データとを受信する通信手段と、
任意のデータに対して暗復号処理を行う暗復号手段と、
前記署名対象データと、前記暗復号手段で復号された前記暗号データに格納されている署名と、を照合する照合手段と、
前記照合手段の照合結果に基づいて、前記署名対象データの正当性を判断する判断手段と、
前記判断手段により前記署名対象データが正当であると判断されるとき、前記署名が含まれている前記暗号データの前記署名以外のデータを正当なデータとして記憶する記憶手段と
を備える、セキュアメモリカード。
【請求項２】
前記通信手段は、第１の暗号データと第２の暗号データとを受信し、
前記照合手段は、前記暗復号手段で復号された前記第１の暗号データに含まれる第１のデータである署名と、前記第２の暗号データを復号したデータとを照合し、
前記判断手段は、前記照合手段の照合結果に基づいて、前記第２の復号データの正当性を判断し、
前記記憶手段は、前記判断手段により、前記第２の暗号データが正当であると判断されるとき、前記第１の暗号データに含まれる第２のデータを正当なデータとして記憶する請求項１記載のセキュアメモリカード。
【請求項３】
さらに、前記通信手段は、第３の暗号データを受信し、
前記第１の暗号データに含まれる第３のデータは、前記第３の暗号データのハッシュであり、前記判断手段は、前記ハッシュを用いて、前記第３の暗号データの正当性を検証する、請求項２記載のセキュアメモリカード。
【請求項４】
前記第１の暗号データに含まれる複数の第３のデータは、複数の第３の暗号データそれぞれのハッシュであり、前記判断手段は、前記複数の第３のデータそれぞれのハッシュを用いて、前記複数の第３の暗号データそれぞれの正当性を判断する、請求項３記載のセキュアメモリカード。
【請求項５】
参照先を示すリンク情報が、前記第１の暗号データに含まれる、請求項２記載のセキュアメモリカード。
【請求項６】
さらに、前記記憶手段は、セキュアメモリカードの製造者が製造するときと、セキュアメモリカードを発行するときとのいずれかに設定した、第１の暗号鍵情報を記憶する、請求項2記載のセキュアメモリカード。
【請求項７】
さらに、前記通信手段は、第４の暗号データを受信し、
前記暗復号手段は、前記第１の暗号鍵情報を用いて前記第４の暗号データを復号し、復号した第４の暗号データを第２の暗号鍵として前記第１の暗号データと前記第２の暗号データと前記第３の暗号データとを復号する、請求項３記載のセキュアメモリカード。
【請求項８】
さらに、前記第２の暗号鍵と、復号した前記第１の暗号データと前記第２の暗号データと前記第３の暗号データとを含む格納データと、を管理する復号鍵管理手段を備える、請求項７記載のセキュアメモリカード。
【請求項９】
前記格納データを更新する際に、前記格納データを、前記第１の暗号鍵で復号した後、前記第２の暗号鍵で復号する、請求項８記載のセキュアメモリカード。
【請求項１０】
外部機器に対して、前記第２の暗号データと、前記第３の暗号データとの少なくとも一方のデータを記憶する前記記憶手段の領域を示す、領域情報を送信する領域制御手段を備え、前記領域情報を前記外部機器に送信することを特徴とする請求項３に記載のセキュアメモリカード。
【請求項１１】
前記署名は前記製造者によって作成される、請求項６記載のセキュアメモリカード。
【請求項１２】
前記第１の暗号データは、前記カード内で実行可能なアプリケーションを管理するためのデータであり、前記第２の暗号データは、前記実行可能なアプリケーションコード自体であり、前記第３の暗号データは、アプリケーションが使うデータであることを特徴とする請求項３に記載のセキュアメモリカード。
【請求項１３】
少なくとも、暗号データと署名対象データとを受信する通信手段と、
任意のデータに対して暗復号処理を行う暗復号手段と、
前記署名対象データと、前記暗復号手段で復号された前記暗号データに格納されている署名と、を照合する照合手段と、
前記照合手段の照合結果に基づいて、前記署名対象データの正当性を判断する判断手段と、
前記判断手段により前記署名対象データが正当であると判断されるとき、前記署名が含まれている前記暗号データの前記署名以外のデータを正当なデータとして記憶する記憶手段と
を備える、メモリコントローラ。
【請求項１４】
前記通信手段は、第１の暗号データと第２の暗号データとを受信し、
前記照合手段は、前記第１の暗号データに含まれる第１のデータである署名と、前記第２の暗号データを復号したデータとを照合し、
前記照合手段により、前記復号した第２の暗号データが正当であると判断されるとき、前記第１の暗号データに含まれる第２のデータを正当なデータとして前記記憶手段に記憶される請求項１３記載のメモリコントローラ。
【請求項１５】
さらに、前記通信手段は、第３の暗号データを受信し、
前記第１の暗号データに含まれる第３のデータは、前記第３の暗号データのハッシュであり、前記判断手段は、前記ハッシュを用いて、前記第３の暗号データの正当性を検証する、請求項１４記載のメモリコントローラ。
【請求項１６】
前記第１の暗号データは、前記カード内で実行可能なアプリケーションを管理するためのデータであり、前記第２の暗号データは、前記実行可能なアプリケーションコード自体であり、前記第３の暗号データは、アプリケーションが使うデータであることを特徴とする請求項１５に記載のメモリコントローラ。
【請求項１７】
アクセス装置と、前記アクセス装置からのアクセス指示に応じてデータの読み出し、書き込みを行うセキュアメモリカードとを有したセキュアメモリカードシステムであって、
前記セキュアメモリカードは、
不揮発性メモリと、
少なくとも、暗号データと署名対象データとを受信する通信手段と、
任意のデータに対して暗復号処理を行う暗復号手段と、
前記署名対象データと、前記暗復号手段で復号された前記暗号データに格納されている署名と、を照合する照合手段と、
前記照合手段の照合結果に基づいて、前記署名対象データの正当性を判断する判断手段と、
前記判断手段により前記署名対象データが正当であると判断されるとき、前記署名が含まれている前記暗号データの前記署名以外のデータを正当なデータとして記憶する記憶手段と
を備える、メモリコントローラを有し、
前記通信手段を使用して、前記判断手段が算出した結果を前記アクセス装置に通知することを特徴とするセキュアメモリカードシステム。
【請求項１８】
不揮発性メモリを有するセキュアメモリカードと接続して使用するアクセス装置であって、
前記アクセス装置は、
前記セキュアメモリカードと通信するための通信手段と、
前記セキュアメモリカードに送信するデータを記憶する記憶手段と、
前記記憶手段から前記セキュアメモリカードに送信するデータを読み出し、前記セキュアメモリカードが受信可能なデータに変換するプロトコル変換手段を有し、
前記セキュアメモリカードから通知される結果を受信し、前記結果に基づき、前記セキュアメモリカードとの通信を制御することを特徴とするアクセス装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性メモリの制御を行うメモリコントローラ、不揮発性メモリを備えた半導体メモリカード等のセキュアメモリカード、前記セキュアメモリカードとアクセス装置とを有するセキュアメモリカードシステムに関する。
【背景技術】
【０００２】
従来技術として、暗号化済みデータの配布と、この暗号化済みデータを暗号化する際に用いられる鍵の配布と、を異なるサーバが行うことで、ユーザに対して安全なコンテンツを配布し、販売することを可能にするものがある（特許文献１）。ここでユーザへ配布される暗号化済みデータは、複数の暗号化情報パーツと、暗号化情報パーツのリストと、そのリストへの署名とを含んでいる。【０００３】
【特許文献１】特許第３１３０２６７号
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記従来の技術では、リストの内容が変わるたびにリストに対する署名を付け替える必要がある。つまり、暗号化済みデータの一部を変更するたびに、リストの内容が変わるため、署名を付け直す必要があった。従って、署名の付け直しのために多くの時間と労力を必要としていた。【０００５】
そこで、本願発明では、署名の対象となるデータと、その署名と、署名対象ではない他のデータとを、まとめて暗号化したデータ構造にすることで、署名対象ではないデータの一部が変更された場合でも署名の付け直しが不要なメモリコントローラ及びセキュアメモリカードを提供する。
【課題を解決するための手段】
【０００６】
本発明におけるメモリコントローラは、暗号データと署名対象データを受信する通信手段と、データに対して暗復号処理を行う暗復号手段と、前記暗復号手段で復号された前記暗号データに付与されている署名と、前記署名対象データと、を照合する照合手段と、前記照合手段の照合結果に基づいて、前記署名対象データの正当性を判断する判断手段と、前記判断手段により前記署名対象データが正当であると判断されるとき、前記署名が含まれている前記暗号データの前記署名以外のデータを正当なデータとして記憶する記憶手段とを備えることを特徴とするメモリコントローラである。【０００７】
また、本発明におけるセキュアメモリカードは、不揮発性メモリと、前記不揮発メモリに対してデータの読み出し、書き込みを行う前記メモリコントローラと、前記暗号処理を行う暗復号手段と、を有し、セキュアメモリカードは暗号データと署名対象データとを受信する通信手段と、データに対して暗復号処理を行う暗復号手段と、前記暗復号手段で復号された前記暗号データに付与されている署名と、前記署名対象データと、を照合する照合手段と、前記照合手段の照合結果に基づいて、前記署名対象データの正当性を判断する判断手段と、前記判断手段により前記署名対象データが正当であると判断されるとき、前記署名が含まれている前記暗号データの残りのデータも正当なデータとして記憶する記憶手段とを備えている。【０００８】
また、本発明におけるセキュアメモリカードシステムは、セキュアメモリカードとアクセス装置から構成され、セキュアメモリカードは、暗号データと署名対象データとを受信する通信手段と、データに対して暗復号処理を行う暗復号手段と、前記暗復号手段で復号された前記暗号データに付与されている署名と、前記署名対象データと、を照合する照合手段と、前記照合手段による照合結果により、前記署名対象データの正当性を判断する判断手段と、前記判断部により前記署名対象データが正当であると判断されるとき、前記署名が含まれている前記暗号データの前記署名以外のデータを正当なデータとして記憶する記憶手段とを備えており、アクセス装置は、前記セキュアメモリカードと通信するための通信手段と、前記セキュアメモリカードに送信するデータを記憶する記憶手段と、前記記憶手段から前記セキュアメモリカードに送信するデータを読み出し、前記セキュアメモリカードが受信可能なデータに変換するプロトコル変換手段を有し、前記セキュアメモリカードから通知される結果を受信し、前記結果に基づき、前記セキュアメモリカードとの通信を制御する。
【発明の効果】
【０００９】
署名対象データと、署名と、署名対象ではない他のデータとが一緒に暗号化されたデータ構造にすることで、署名が正しく検証できた場合に一緒に暗号化された他のデータの正当性を合わせて信頼できるため、署名対象ではないデータの一部を変更する度に署名を付け替える必要がない。
【図面の簡単な説明】
【００１０】
【図１】サーバ、外部機器、カードの関係図
【図２】カード構成図
【図３】サーバ、外部機器、カードの構成図
【図４】プレイヤーの関係図
【図５】アプリ開発者、サービス提供者、カード製造者、カード間での処理フロー
【図６】サーバ運用者、サービス提供者間での処理フロー
【図７−ａ】サーバ運用者、サーバ、外部機器、カード間での処理フロー  ａ
【図７−ｂ】サーバ運用者、サーバ、外部機器、カード間での処理フロー  ｂ
【図７−ｃ】サーバ運用者、サーバ、外部機器、カード間での処理フロー  ｃ
【図８】個別イニシャルデータの例を示す図
【図９】管理データフォーマットの例を示す図
【図１０】サーバでのデータ格納構成とカードバージョン情報との関係図
【図１１】領域制御手段を含むカード構成図
【図１２】カードと外部機器間の通信フロー
【図１３】2系統保持するカードと外部機器間の通信フロー
【図１４】データ更新時での通信フロー
【図１５−ａ】データ更新時の処理フロー  ａ
【図１５−ｂ】データ更新時の処理フロー  ｂ
【図１６−ａ】2系統保持するカードとの処理フロー  ａ
【図１６−ｂ】2系統保持するカードとの処理フロー  ｂ
【図１６−ｃ】2系統保持するカードとの処理フロー  ｃ
【符号の説明】
【００１１】
１００  カード
１００１  通信手段
１００２  コマンド解釈手段
１００３  判断手段
１００４  数値計算手段
１００５  記憶手段
１００６  暗復号手段
１００７  照合手段
１００８  判断手段
１００９  ハッシュ生成手段
１０１０  領域制御手段
２００  外部機器
２００１  通信手段
２００２  プロトコル変換手段
２００３  一時記憶手段
３００  サーバ
３００１  通信手段
３００２  記憶制御手段
３００３  記憶手段
Ｐ１  カード製造者
Ｐ２  アプリケーション開発者
Ｐ３  サービス提供者
Ｐ４  サーバ運用者
Ｐ５  ユーザ
Ｐ６  カード販売者
Ｍ０１  製造者公開鍵
Ｍ０２  製造者秘密鍵
ＭＯ３  カード公開鍵
Ｍ０４  カード秘密鍵
Ａ０１  アプリケーションコード暗号鍵
Ａ０２  アプリケーションコード
Ａ０３  暗号化アプリケーションコード
Ａ０４  暗号化アプリケーションコード暗号鍵
Ａ０５  署名
Ｈ０１  個別イニシャルデータ暗号鍵
Ｈ０２  個別イニシャルデータ
Ｈ０３  暗号化個別イニシャルデータ
Ｈ０４  暗号化個別イニシャルデータ暗号鍵
Ｈ０５  個別イニシャルデータから生成したハッシュ
Ｈ０６  共通データ
Ｈ０７  管理データ
Ｈ０８  管理データ暗号鍵
Ｈ０９  暗号化した管理データ
Ｈ１０  暗号化した管理データ暗号鍵
【発明を実施するための最良の形態】
【００１２】
以下本発明の実施の形態について、図面を参照しながら説明する。尚、本発明は、これらの実施の形態に何ら限定されるものではなく、その要旨を逸脱しない範囲において、様々なる態様で実施し得る。【００１３】
（実施の形態１）
本実施の形態では、図１に示すようなサーバ（３００）、外部機器（２００）、カード（１００）から構成されるセキュアメモリカードシステムについて説明する。図２は、カード（１００）の構成を示す。図３は、図１に示したセキュアメモリカードシステムの詳細な構成を示す。以下、図３を用いて説明する。【００１４】
サーバ（３００）は、外部と通信する通信手段（３００１）と、記憶制御手段（３００２）と、記憶手段（３００３）とをもつ。この記憶手段（３００３）は、アプリケーションデータ、アプリケーションコード、対応するカード情報、その他外部端末に関する情報を保持している。ここで、アプリケーションコードとアプリケーションデータを足し合わせたものがアプリケーションである。アプリケーションコードは、実行可能なプログラムやコードなどのオブジェクトを指すものである。アプリケーションデータは、それらのコードが参照するデータを指し、アプリケーションに対して、動作や振る舞いなどを制御したり、初期設定値を与えたりする目的で用意するものである。尚、本実施の形態では、アプリケーションコードとアプリケーションデータとが分離しているものとして説明するが、アプリケーションデータが、アプリケーションコードの一部に含まれるものであってもよい。【００１５】
記憶制御手段（３００２）は、通信手段（３００１）経由で外部からの要求を受け、その要求に応じて、記憶手段（３００３）から選択的にデータを読み出すことができる。【００１６】
外部機器（２００）は、通信手段（２００１）、プロトコル変換手段（２００２）、一時記憶手段（２００３）を有する。通信手段（２００１）は、サーバ（３００）からデータやコードを受信する。プロトコル変換手段（２００２）は、このデータやコードをカード（１００）に送信可能なコマンドに変換する。通信手段（２００１）は、プロトコル変換手段（２００２）で変換されたコマンドをカード（１００）に渡す。なお、サーバ（３００）から予めカードのコマンド仕様に準じたデータを受信した場合は、外部機器（２００）は受信したデータをそのままカード（１００）に送信する。【００１７】
カード（１００）は、通信手段（１００１）、コマンド解釈手段（１００２）、数値計算手段（１００４）、記憶制御手段（１００３）、記憶手段（１００５）、暗復号手段（１００６）、照合手段（１００７）、ハッシュ生成手段（１００９）、判断手段（１００８）を有する。通信手段（１００１）は、外部機器（２００）からデータやコマンドを受信する。コマンド解釈手段（１００２）は、通信手段（１００１）を用いて受信したコマンドを解釈し、数値計算手段（１００４）にデータを渡す。数値計算手段（１００４）は、コマンド解釈手段（１００２）でコマンドを解釈した結果に応じて、データの配置およびデータの変換、データの演算を行う。また、数値計算手段（１００４）は、必要に応じて暗復号処理を行う暗復号手段（１００６）と、データの比較、照合を行う照合手段（１００７）と、データのハッシュ値を生成するハッシュ生成手段（１００９）と、記憶手段（１００５）を制御する記憶制御手段（１００３）とを用いて、暗号処理を行う。記憶手段（１００５）は、カード（１００）内のデータを保持しておく部分であり、記憶制御手段（１００３）を介してアクセスされる。照合手段（１００７）は、署名対象データと、暗復号手段（１００６）で復号された暗号データに格納されている署名と、を照合する。また、判断手段（１００８）は、照合手段（１００７）における照合結果により、データの正当性を判断する【００１８】
ここで、上記システム構成とは別に、カード（１００）の製造、アプリケーションなどの提供にかかわるプレイヤーの関係について図４を用いて、説明する。【００１９】
図４に示すように、カード（１００）を製造・発行するプレイヤー（Ｐ１）（以後、カード製造者とする）、アプリケーションを開発するプレイヤー（Ｐ２）（以後、アプリ開発者とする）、サービスを提供するプレイヤー（Ｐ３）（以後、サービス提供者とする）、サーバの運用を行うプレイヤー（Ｐ４）（以後、サーバ運用者とする）、外部機器（２００）を操作して、カードに対するデータをサーバに要求するトリガーを投げるプレイヤー（Ｐ５）（以後、ユーザとする）、の５者が存在する。なお、カードをユーザに販売するプレイヤー（Ｐ６）としてカード販売者が運用上は存在するが、本実施の形態には直接関係無いので説明を省略する。【００２０】
その他のプレイヤー（Ｐ１〜Ｐ４）は、ユーザ（Ｐ５）から見た場合、特に意識されるものではないが、システム上、実施する処理内容が異なると想定し、分けて考える。まず、カード製造者（Ｐ１）は、カードの製造からカードに必要なデータを設定して市場で使うことができるカードの有効化までを行うものであり、アプリ開発者（Ｐ２）に開発環境の貸し出しやアプリケーションコードの署名付けを行う。次に、アプリ開発者（Ｐ２）は、共通的、汎用的に配布可能なアプリケーションを開発し、複数のサービス提供者（Ｐ３）にアプリケーションコードを汎用的に提供することが可能である。続いて、サービス提供者（Ｐ３）は、アプリ開発者（Ｐ２）から受け取ったアプリケーションコードに、識別情報や鍵情報などのサービス固有の情報を入れることで、アプリケーションをカスタマイズすることができる。サービス提供者（Ｐ３）は前述したアプリケーションをカスタマイズして、実際のサービスを運営するものであると想定する。サーバ運用者（Ｐ４）は、外部機器（２００）からの要求に応じて、データを出力するＷｅｂサーバを運用する。【００２１】
以上に説明したプレイヤーモデルはあくまで一例に過ぎず、一プレイヤーがいくつかのプレイヤーを兼任する場合や、もしくは一プレイヤーの処理がより細分化される場合も、本特許で語られている範疇に含まれる。例えば、カード製造者（Ｐ１）は、カードの製造のみを行い、カードの有効化および開発環境の貸し出し、アプリケーションコードの署名付けを別のプレイヤーが行う場合もある。また、前記では説明を省略したカード販売者が店頭でカードの有効化を行う場合やサービス提供者が作成したデータをカード製造者が受けてカードに設定する場合も想定できる。尚、サービス提供者（Ｐ３）やカード製造者（Ｐ１）がアプリ開発者（Ｐ２）を兼任する場合も考えられる。【００２２】
次に図５、図６、図７−ａ、図７−ｂ、図７−ｃを使って、各プレイヤーが行う処理を説明する。【００２３】
図５に示すように、まず、カード製造者（Ｐ１）は、カード製造者のＲＳＡ鍵ペア（製造者鍵ペアＭ０１、Ｍ０２）を事前に生成する（Ｓ０１）。そして、生成した鍵のうち、製造者公開鍵（Ｍ０１）をカード（１００）に設定（格納）する（Ｓ０２）。製造者公開鍵（Ｍ０１）と対称な製造者秘密鍵（Ｍ０２）は、アプリ開発者（Ｐ２）が作成したアプリケーションに対する署名付けを行う際に用いられる。次に、カード製造者（Ｐ１）は、製造するカード（１００）に格納するＲＳＡ鍵ペア（カード鍵ペアＭ０３、Ｍ０４）を生成する（Ｓ０３）。生成した鍵のうち、カード公開鍵（Ｍ０３）は、アプリ開発者（Ｐ２）、サービス提供者（Ｐ３）に配布される（Ｓ０４）。一方、カード秘密鍵（Ｍ０４）はカード（１００）に格納される（Ｓ０５）。尚、カード製造者（Ｐ１）が生成する製造者鍵（Ｍ０１、Ｍ０２）やカード鍵（Ｍ０３、Ｍ０４）は、上述したＲＳＡ鍵であってもよいし、楕円暗号方式、ＤＨ鍵配送方式、エルガマル暗号方式など他の公開鍵暗号方式を利用したものであっても構わない。尚、同様にＲＳＡの鍵長も１０２４ｂｉｔ、２０４８ｂｉｔに限定されるわけではなく、カード運用のセキュリティポリシーに則って自由に変更しても構わない。【００２４】
アプリケーションコードへの署名付けは、アプリ開発者（Ｐ２）による申請、すなわちアプリケーションコードのカード製造者（Ｐ１）への送付（Ｓ０６）によって行われる。カード製造者（Ｐ１）は、提出されたアプリケーションの動作内容を確認し、問題がなければ、提出されたアプリケーションコードのハッシュデータを作成する。そして、作成したハッシュデータに対して、カード製造者（Ｐ１）は製造者秘密鍵（Ｍ０２）を使って、署名（Ａ０５）を生成する（Ｓ０７）。ここで生成された署名（Ａ０５）は、アプリ開発者（Ｐ２）に送付される（Ｓ０８）。【００２５】
なお、アプリ開発者（Ｐ２）は、カード製造者（Ｐ１）から事前にカード（１００）に対応した開発環境とカード公開鍵（Ｍ０３）を受託している。その開発環境を利用して、アプリ開発者（Ｐ２）はカード（１００）に対応したアプリケーションコードの開発を行う（Ｓ０９）。このステップＳ０９で完成したアプリケーションコードが、ステップＳ０６でカード製造者（Ｐ１）に送付されるアプリケーションコード（Ａ０２）である。【００２６】
アプリ開発者（Ｐ２）は、作成したアプリケーションコードをサービス提供者（Ｐ３）に譲渡する際には、アプリケーションコードを暗号化して渡す。暗号化する理由は、カード製造者（Ｐ１）が配布した開発環境を用いてアプリケーションコードを開発できるのはアプリ開発者（Ｐ２）だけだからであり、アプリケーションコードを暗号化せずにサービス提供者（Ｐ３）に渡してしまうと、サービス提供者（Ｐ３）はアプリケーションコード内容を閲覧でき、秘情報の流出になるからである。暗号化せずにコードを渡して、複数のプレイヤーが秘情報を共有している時に秘情報が漏洩した際、どちらの責任で発生したかは曖昧になってしまい、責任の切り分けができないという問題が考えられる。【００２７】
それに対しては、本実施例では、アプリ開発者（Ｐ２）が、独自に作成した暗号用鍵（Ａ０１）（以下、アプリケーションコード暗号鍵と呼ぶ）でアプリケーションコード（Ａ０２）を暗号化して、暗号化されたアプリケーションコード（Ａ０３）を生成する（Ｓ１０）。そして、アプリ開発者（Ｐ２）は、アプリケーションコード暗号鍵（Ａ０１）を事前に配布されたカード公開鍵（Ｍ０３）で暗号化し、暗号化されたアプリケーションコード暗号鍵（Ａ０４）を生成する（Ｓ１１）。その後アプリ開発者（Ｐ２）は、サービス提供者（Ｐ３）に、暗号化されたアプリケーションコード（Ａ０３）と、暗号化されたアプリケーションコード暗号鍵（Ａ０４）と、アプリケーションコードの署名（Ａ０５）を譲渡する（Ｓ１２）。サービス提供者（Ｐ３）は、受け取ったどちらの暗号データ（Ａ０３、Ａ０４）も復号することができない。【００２８】
次に、サービス提供者（Ｐ３）が行う作業について、図６を用いて説明する。サービス提供者（Ｐ３）は、アプリ開発者（Ｐ２）から受け取ったアプリケーションコードを個別にカスタマイズするためのアプリケーションデータ（Ｈ０２）（以下、個別イニシャルデータとする）を作成する（Ｓ２０）。尚、作成するすべてのデータについて、アプリケーション１つ１つ個別にデータを変更するか、あるデータは共通化するか等については、サービスの運用ポリシーに因るところであり、考慮しない。サービス提供者（Ｐ３）が個別イニシャルデータ（Ｈ０２）を作成する場合には、別途アプリ開発者（Ｐ２）からアプリケーションの外部仕様を受け取る必要がある。個別イニシャルデータのデータ構造の例として、図８に示すように、最初の１００ｂｙｔｅ（論理アドレス０−９９）は識別情報、次の１０００ｂｙｔｅ（論理アドレス１００−１０９９）は自己証明書データ、次の１０００ｂｙｔｅ（論理アドレス１１００−２０９９）はルート証明書データ、次の３０００ｂｙｔｅ（論理アドレス２１００−５０９９）はファイルシステム情報としてアプリケーションから参照するという外部仕様とする。データの開始地点には長さを示す情報を設定し、その領域のどこまでを有効なデータとしてアプリケーションが参照するべきかを示す。【００２９】
図６に戻り、サービス提供者（Ｐ３）は、アプリ開発者（Ｐ２）と同様に、作成した個別イニシャルデータ（Ｈ０２）を、独自に作成した鍵（Ｈ０１）（以下、個別イニシャルデータ暗号鍵と呼ぶ）で暗号化し、暗号化した個別イニシャルデータ（Ｈ０３）を作成する（Ｓ２１）。そしてサービス提供者（Ｐ３）は、個別イニシャルデータ暗号鍵（Ｈ０１）を事前にカード製造者（Ｐ１）から配布されているカードの公開鍵（Ｍ０３）で暗号化し、暗号化された個別イニシャルデータ暗号鍵（Ｈ０４）を作成する（Ｓ２２）。この際、サービス提供者（Ｐ３）は、作成した個別イニシャルデータ（Ｈ０２）に対してハッシュ（Ｈ０５）を生成する（Ｓ２３）。【００３０】
サービス提供者（Ｐ３）は、生成したハッシュ（Ｈ０５）と、アプリ開発者（Ｐ２）から受け取った署名（Ａ０５）と、共通データ（Ｈ０６）から、管理データ（Ｈ０７）を生成する。ここで、共通データ（Ｈ０６）とは、サービス提供者（Ｐ３）が作成する（Ｓ２４）、アプリケーションを識別するための識別情報や、著作権情報などのアプリケーション管理情報や、サービス提供者情報などを含むデータである。図９に管理データ（Ｈ０７）のフォーマット例を記載する。【００３１】
サービス提供者（Ｐ３）は、管理データ（Ｈ０７）を独自に生成した鍵（以下、管理データ暗号鍵（Ｈ０８）と呼ぶ）で暗号化し、暗号化された管理データ（Ｈ０９）を作成する（Ｓ２５）。続いて、サービス提供者（Ｐ３）は、管理データ暗号鍵（Ｈ０８）を事前にカード製造者（Ｐ１）から配布されているカードの公開鍵（Ｍ０３）を用いて暗号化し、暗号化された管理データ暗号鍵（Ｈ１０）を作成する（Ｓ２６）。【００３２】
なお、個別イニシャルデータ暗号鍵（Ｈ０１）と管理データ暗号鍵（Ｈ０８）は、サービス提供者（Ｐ３）自身が作成し管理するものなので、同じものを用意してもよいし、別々に用意してもよい。別々に用意した場合、管理の手間が増えるが、鍵漏洩におけるセキュリティ対策はより強固になるので、本実施例では別々に用意した場合について記載する。【００３３】
サービス提供者（Ｐ３）は、アプリ提供者（Ｐ２）から受け取った暗号化されたアプリケーションコード（Ａ０３）と、暗号化されたアプリケーションコード暗号鍵（Ａ０４）と、暗号化された個別イニシャルデータ（Ｈ０３）と、暗号化された個別イニシャルデータ暗号鍵（Ｈ０４）と、暗号化された管理データ（Ｈ０９）と、暗号化された管理データ暗号鍵（Ｈ１０）とをサーバ運用者（Ｐ４）に配布する（Ｓ２７）。なお、サーバ運用者（Ｐ４）は、受け取ったすべての暗号データ（Ａ０３、Ａ０４、Ｈ０３、Ｈ０４、Ｈ０９、Ｈ１０）を復号することができない。【００３４】
本実施例では、アプリケーションコード暗号鍵（Ａ０１）、個別イニシャルデータ暗号鍵（Ｈ０１）、管理データ暗号鍵（Ｈ０８）の３つの鍵に用いる暗号アルゴリズムとして、データの暗復号にかかる時間や鍵長を考慮して共通鍵暗号方式を用いた場合について説明した。しかし、共通鍵暗号方式に限定されず、公開鍵暗号方式を用いてもかまわない。尚、本実施例では共通鍵暗号方式のＡＥＳを用いているが、これに限定されず、ＤＥＳやＴ−ＤＥＳ、ＭＩＳＴＹ、Ｃａｍｅｌｌｉａ、ＲＣ６など知られている共通鍵暗号方式でもかまわない。尚、カードが暗号方式に対応するのであれば、今後公表される共通鍵暗号方式にも対応することは可能である。【００３５】
続いて、図７−ａを用いて説明する。サーバ運用者（Ｐ４）は、図６のＳ２７で受け取ったデータをサーバ（３００）の記憶手段（３００３）に登録する（Ｓ３０）。登録する際、サーバ（３００）は、サービス提供者（Ｐ３）から受け取ったデータが、どのカードの、どのバージョンに対応したものであるかを知る必要がある。カードの種別やバージョン情報を示す情報の例としては、カードの識別情報があり、カードの識別情報は、外部機器（２００）がカード（１００）から取得し、サーバ（３００）に対してデータ要求する際に一緒にサーバに送信される情報である。サーバ（３００）は、前記識別情報に対応する複数の暗号化データを外部機器に送信するために、事前に識別情報を知る必要がある。これらのデータは、サービス提供者（Ｐ３）、もしくはアプリ開発者（Ｐ２）から別途通知される情報である。【００３６】
カードが出力するバージョン情報とそれに対応したサーバ上のデータ管理形式の例を図１０に示す。カードが前記の識別情報（図１０では、カードＩＤ）を出力するためにコマンドが規定されており、カードの識別情報は、そのコマンドに対応したレスポンスデータで外部機器に通知される。コマンドは、カードに搭載されているアプリケーションや通信レイヤーで規定されたネゴシエーション時にやりとりされるものである。尚、１バージョンのカードだけを運用する場合には、事前にカードの種別やバージョン情報を交換する必要がない。【００３７】
サーバ（３００）が外部機器（２００）からのデータ要求に対して、データを送信する順番は、管理データ暗号鍵、管理データ、個別イニシャルデータ暗号鍵、個別イニシャルデータ、アプリケーションコード暗号鍵、アプリケーションコードの順とする。尚、前記の順番は、カード内でできるだけデータを一時的に保持せず、順次処理するために好適なものであり、カードに十分な一時記憶領域が存在する場合は、これに限定されるものではない。【００３８】
次に、カード（１００）と外部機器（２００）間の通信フローを図１２に示す。以下では、図７−ａも用いて説明する。
まず、カード（１００）において、通信手段（１００１）は、暗号化された管理データ暗号鍵（Ｈ１０）を外部機器（２００）経由で受信し（Ｃ０１）、コマンド解釈手段（１００２）に渡す。コマンド解釈手段（１００２）は、前記暗号化された管理データ暗号鍵（Ｈ１０）に付与されているコマンドをチェックし、そのコマンドが何を示しているか、どの目的で使われているのかを解釈する。本実施例では、コマンドの内容は、カード（１００）へのアプリケーションのインストールと想定して以下の動作を記載する。コマンド解釈手段（１００２）は、数値計算手段（１００４）にアプリケーションのインストールであることを通知し、受信データを渡す。数値計算手段（１００４）は、記憶手段（１００５）が保持するカードＲＳＡ秘密鍵（Ｍ０４）を記憶制御手段（１００３）経由で取得し、受信データを暗復号手段（１００６）で復号する（Ｓ３１）。すなわち、Ｓ３１において、カード（１００）は、カード秘密鍵（Ｍ０４）を用いて、暗号化された管理データ暗号鍵（Ｈ１０）を復号し、管理データ暗号鍵（Ｈ０８）を取得する。数値計算手段（１００４）は、復号した管理データ暗号鍵（Ｈ０８）を、記憶制御手段（１００３）を経由して記憶手段（１００５）で保持する。前記の処理が問題なく行えれば、カード（１００）は、外部機器（２００）およびサーバ（３００）に対して正常終了という意味合いを持つコードを出力する（C02）。【００３９】
次に通信手段（１００１）は、暗号化された管理データ（Ｈ０９）を外部機器経由で受信する（Ｃ０３）。数値計算手段（１００４）は、前記の管理データ暗号鍵（Ｈ０８）を用いて、暗復号手段（１００６）で暗号化された管理データ（Ｈ０９）の復号を行い、管理データ（Ｈ０７）を取得する（Ｓ３２）。復号により得られた管理データ（Ｈ０７）は、予め規定してあるフォーマット（図９）に従っているので、数値計算手段（１００４）は前記フォーマットに従って、データを読み出す。アプリケーションを識別するための情報は、すでにカード内に同じ識別情報を保有しているアプリケーションがないかを調べるために用いる（Ｓ３３）。すなわち、カード（１００）は、Ｓ３３において、管理データ（Ｈ０７）から共通データ（Ｈ０６）を取得し、内容を確認する。そしてカード（１００）は、確認した結果、問題があれば処理を停止し、なければ継続する。具体的には、同じ識別情報がすでにある場合、すなわち、管理データ（Ｈ０７）から共通データ（Ｈ０６）を取得して内容を確認した結果、問題がある場合は、数値計算手段（１００４）は、インストール処理を中止(停止)する。そして数値計算手段（１００４）は、外部機器（２００）に結果を出力する（Ｃ０４）際、正常終了ではなく、識別情報が重複しているというエラーコードにして出力する。重複していなければ、共通データ（Ｈ０６）を記憶制御手段（１００３）経由で記憶手段（１００５）に仮格納する（Ｓ３４）。尚、上記のエラーに限定したものではなく、異常動作をした場合、数値計算手段（１００４）は、事前に外部と取り交わされたその旨を示すコードを出力する。【００４０】
次に、図７−ｂを用いて説明する。カード（１００）において、通信手段（１００１）は、暗号化された個別イニシャルデータ暗号鍵（Ｈ０４）を外部機器（２００）経由で受信し（Ｃ０５）、数値計算手段（１００４）に渡す。数値計算手段（１００４）は、記憶手段（１００５）で保持するカードＲＳＡ秘密鍵（Ｍ０４）を使って、暗号化された個別イニシャルデータ暗号鍵（Ｈ０４）を暗復号手段（１００６）で復号し、個別イニシャルデータ暗号鍵（Ｈ０１）を取得する（Ｓ３５）。カード（１００）は、復号した個別イニシャルデータ暗号鍵（Ｈ０１）を記憶手段（１００５）で保持する。次に通信手段（１００１）は、サーバ（３００）から、暗号化された個別イニシャルデータ（Ｈ０３）を外部機器（２００）経由で受信する（Ｃ０７）。通信手段（１００１）は、前記データを数値計算手段（１００４）に渡す。数値計算手段（１００４）は、前記の個別イニシャルデータ暗号鍵（Ｈ０３）を用いて、暗号化された個別イニシャルデータ（Ｈ０３）の復号を暗復号手段（１００６）で行い、個別イニシャルデータ（Ｈ０２）を取得する（Ｓ３６）。個別イニシャルデータ（Ｈ０２）の内容は、後述のアプリケーションコード（Ａ０２）が解釈するものであり、カード（１００）が解釈する必要はない。数値計算手段（１００４）は、復号した個別イニシャルデータ（Ｈ０２）のハッシュをハッシュ生成手段（１００９）で生成し（Ｓ３７）、管理データに含まれている個別イニシャルデータのハッシュ（Ｈ０５）と同じであるかを、照合手段（１００７）を用いて確認する（Ｓ３８）。同じであれば、数値計算手段（１００４）は、個別イニシャルデータ（Ｈ０２）を記憶制御手段（１００３）経由で記憶手段（１００５）に仮格納する（Ｓ３９）。異なる場合、数値計算手段（１００４）はインストール処理を中止する（Ｓ４０）。カード（１００）は、外部機器（２００）、サーバ（３００）に結果を出力する（Ｃ０８）際、正常終了ではなく、ハッシュが異なるという旨を示すエラーコードを出力する。【００４１】
次に、図７−ｃを用いて説明する。カード（１００）において、通信手段（１００１）は、サーバ（３００）から、暗号化されたアプリケーションコード暗号鍵（Ａ０４）を外部機器（２００）経由で受信し（Ｃ０９）、数値計算手段（１００４）に渡す。数値計算手段（１００４）は、記憶手段（１００５）で保持するカードＲＳＡ秘密鍵（ＭＯ４）を使って、暗復号手段（１００６）で復号し、アプリケーションコード暗号鍵（Ａ０１）を取得する（Ｓ４１）。カード（１００）は、復号したアプリケーションコード暗号鍵（Ａ０１）を記憶手段（１００５）で保持する。次に通信手段（１００１）は、サーバ（３００）から、暗号化されたアプリケーションコード（Ａ０３）を外部機器（２００）経由で受信する（Ｃ１１）。通信手段（１００１）は、前記データを数値計算手段（１００４）に渡す。数値計算手段（１００４）は、前記のアプリケーションコード暗号鍵（Ａ０１）を用いて、暗号化されたアプリケーションコード（Ａ０３）の復号を暗復号手段（１００６）で行い、アプリケーションコード（Ａ０２）を取得する（Ｓ４２）。アプリケーションコード（Ａ０２）は、事前に製造者によって動作確認されているという前提があるので、カード（１００）で新たに前記アプリケーションコードの動作を検証する必要はない。数値計算手段（１００４）は、アプリケーションコード（Ａ０２）を記憶制御手段（１００３）経由で記憶手段（１００５）に仮格納する（Ｓ４３）。カードは復号したアプリケーションコード（Ａ０２）のハッシュをハッシュ生成手段（１００９）で生成する（Ｓ４４）。数値計算手段（１００４）は、製造者の公開鍵（Ｍ０１）を使って署名（Ａ０５）を暗復号手段（１００６）で復号し、ハッシュを取得し、前記生成したアプリケーションコードのハッシュと照合手段（１００７）で照合する（Ｓ４５）。同じであれば、数値計算手段（１００４）は、アプリケーションコード（Ａ０２）を記憶手段（１００５）に格納する。異なる場合、数値計算手段（１００４）はインストール処理を中止する（Ｓ４６）。数値計算手段（１００４）は、外部機器（２００）、サーバ（３００）に結果を出力する（Ｃ１０）際、正常終了ではなく、署名が異なるという旨を示すエラーコードを出力する。同じである場合、数値計算手段（１００４）はすべてのデータが正常であることを確認し、判断手段（１００８）に通知し、インストール処理を終了する。判断手段（１００８）は、署名が正当である通知を受け、署名と一緒に暗号化されていた個別イニシャルデータのハッシュ、共通データを正当であると判断し、該当アプリケーションに関連する共通データ、個別イニシャルデータ、アプリケーションコードをカード内で動作可能な状態に変更させる。具体的には、アプリケーションの状態は、記憶手段（１００６）で管理されており、外部機器（２００）からの要求によって、数値計算手段（１００４）が記憶制御手段（１００３）経由で記憶手段（１００５）から前記状態を確認し、アプリケーションとして動作可能と示されていれば、記憶手段（１００５）は、アプリケーションコードを呼び出し、コマンド解釈手段（１００２）から送られてくるコマンドをアプリケーションコードに渡すように動作することになる。【００４２】
本発明のダウンロード、インストール方法は、最終的な信頼ポイントをアプリケーションコードの署名確認においており、署名確認が正常に終了したことを受け、署名と一緒に暗号データに格納されていた個別イニシャルデータのハッシュを信頼し、そのハッシュと一致する個別イニシャルデータを信頼することになる。署名データは、製造者によって付与されており、署名生成に使用する製造者の秘密鍵は、カードには格納されておらず、市場に出ることがないため、漏洩の危険性は低い。また、アプリ開発者（Ｐ２）、サービス提供者（Ｐ３）が独自に鍵生成をしているため、どちらかで鍵が漏洩した場合も、その影響をもう一方が受ける心配がない。また、独自に生成した鍵を配布する方法は、公開鍵暗号方式を採用しているため、アプリ開発者同士、サービス提供者同士でも鍵を復号することはできず、カード秘密鍵を所有するカードだけが復号を行うことができる。【００４３】
次に、上記データの更新を行う手順を説明する。【００４４】
相互認証をしない場合、サーバ、カードがお互いに相手のなりすましを防ぐ方法がないため、サーバはどのカードにアプリケーションがインストールされたのか管理することができず、カードは、どのサービス提供者のアプリケーションをインストールしたのか分からない。そのため、カード上のアプリケーションを更新する場合、同じサービス提供者から配布されたアプリケーションであるかをカードが確認することができない。そのため、一旦アプリケーションを削除して、再度インストールすることはできるが、更新時に最初のアプリケーションとの関連性が立証できないため、一部のデータをカードに残しておき、データ処理部だけを変更するといった更新処理を実現することが出来ない課題がある。そこで、前述のダウンロード、インストール方法を用いてインストールしたアプリケーションを更新する際、外部認証無しで適切なサービス提供者からのアプリケーションの更新であることを検証し、更新処理を実現する方法を以下に説明する。【００４５】
データには前述したように、管理データ、個別イニシャルデータ、アプリケーションコードの３つが存在する。管理データは、個別イニシャルデータとアプリケーションコードに関連したデータを格納するため必ず存在するが、個別イニシャルデータ、もしくはアプリケーションコードだけを更新する場合が存在する。【００４６】
個別イニシャルデータだけを更新する場合は、管理データの中に、個別イニシャルデータのハッシュ（Ｈ０５）と、更新するアプリケーション識別情報（共通データ）（Ｈ０６）を格納して暗号化し、暗号化された個別イニシャルデータと一緒に送信する。アプリケーションコードだけを更新する場合、管理データの中に、アプリケーションコードの署名と、更新するアプリケーション識別情報（共通データ）（Ｈ０６）を格納して暗号化し、暗号化されたアプリケーションコードと一緒に送信する。【００４７】
前記の通り、本発明のダウンロード、インストール方法は、署名データに信頼ポイントを置くため、個別イニシャルデータだけの更新の場合、署名データ（Ａ０５）が含まれておらず、カードは信頼性を確立できない。そのため、更新を行う場合に備え、最初にインストールする際に、個別イニシャルデータ暗号鍵を一緒に保存しておき、更新時には、公開鍵で暗号化された鍵データから鍵を復号するのではなく、予めカード内で保持している個別イニシャルデータ暗号鍵を利用して復号を行う。サービス提供者しか知りえない個別イニシャルデータ暗号鍵を使うことができ、復号したデータのハッシュが管理データで送られてきたハッシュと一致するということは、最初にインストールしたサービス提供者（Ｐ３）、またはそれに準ずる情報を持つ代理のサービス提供者であることが分かる。この方法を使うことにより、カードによる外部認証や、サーバによるアプリケーション管理をすることなく、カードだけで、最初のインストール時と同一のサービス提供者だけを更新可能なプレイヤーに制限できる。【００４８】
アプリケーションコードについても、上記の方法を利用することで、最初にインストールした時のアプリ開発者（Ｐ２）だけに制限した更新処理にすることができる。アプリケーションコードには署名（Ａ０５）が付いているため、アプリケーションコード自体を改ざんすることができないが、更新時には、個別イニシャルデータ（Ｈ０２）との関連性が見出せないため、すでにカードにインストール済みの他の個別イニシャルデータを持つアプリケーションコードに対して、アプリケーションコード部分だけをすり替えて他のアプリケーションの個別イニシャルデータを参照することができてしまう。そのため、上記のような対策により更新を行うものに対して制限を付けることが重要である。【００４９】
カード（１００）と外部機器（２００）間の通信フローを図１４で示し、図１５−ａ、図１５−ｂを使って、各プレイヤーが行う処理フローを説明する。
アプリ開発者が再度アプリケーションコードを開発し、そのアプリケーションコードがサービス提供者を通じてサーバ運用者に納入され、暗号データになってサーバ運用者が登録する部分の処理については、新規インストールでのデータ準備と比較して、サービス提供者が個別イニシャルデータを生成しない部分と個別イニシャルデータのハッシュを管理データに含めない事が異なるだけなので、フローの説明については割愛する。【００５０】
まず、図１５−ａを用いて説明する。サーバ運用者（Ｐ４）は、サービス提供者（Ｐ３）から納入された、暗号化されたアプリケーションコード（A03）、暗号化された管理データ（H09）、暗号化された管理データ暗号鍵（H10）を更新用アプリケーションとして、サーバ（３００）に登録する（Ｚ００）。このとき、外部機器（２００）からの要求に対応するために、更新用アプリケーションのバージョン情報や説明などを付与して外部から明示的に分かるようにしておく。または外部機器（２００）からの更新要求に予めなんらかの情報が含まれている場合は、サーバ（３００）は前記情報に対応して、アプリケーションを配信することになる。その際、外部機器（２００）から送信される前記情報には、アプリケーションの識別情報やカードに格納されている現在のアプリケーションのバージョン情報、カード識別情報などがある。【００５１】
まず、カード（１００）において、通信手段（１００１）は、サーバ（３００）から、暗号化された管理データ暗号鍵（Ｈ１０）を外部機器（２００）経由で受信し（Ｚ０１）、コマンド解釈手段（１００２）に渡す。コマンド解釈手段（１００２）は、前記データに付与されているコマンドをチェックし、そのコマンドが何を示しているか、どの目的で使われているのかを解釈する。コマンドの内容は、アプリケーションコードの更新処理と想定して以下の動作を記載する。更新作業を判別する部分については、コマンド解釈手段（１００２）で更新処理であるかを確認する方法と、インストール処理として最初は処理し、アプリケーションの識別子に対応するアプリケーションの状態を確認することで、次に行う処理を更新処理としてカード（１００）が自動的に認識する方法がある。本実施例では、コマンドによる解釈を行い、処理内容を確定する場合を記載する。【００５２】
コマンド解釈手段（１００２）は、数値計算手段（１００４）にアプリケーションコードの更新処理であることを通知し、受信データを渡す。数値計算手段（１００４）は、記憶手段（１００５）が保持するカードＲＳＡ秘密鍵（Ｍ０４）を記憶制御手段（１００３）経由で取得し、受信データを暗復号手段（１００６）で復号し、管理データ暗号鍵（Ｈ０８）を取得する（Ｓ５１）。数値計算手段（１００４）は、復号した管理データ暗号鍵（Ｈ０８）を記憶制御手段（１００３）経由で記憶手段（１００５）に保持する（Ｓ５１）。前記の処理が問題なく行えれば、外部機器（２００）、サーバ（３００）に対して正常終了という意味合いを持つコードを出力する（Ｚ02）。【００５３】
次に通信手段（１００１）は、サーバ（３００）から、暗号化された管理データ（Ｈ０９）を外部機器（２００）経由で受信する（Ｚ０３）。数値計算手段（１００４）は、前記の管理データ暗号鍵（Ｈ０８）を用いて、暗復号手段（１００６）で暗号化された管理データ（Ｈ０９）の復号を行い、管理データ（Ｈ０７）を取得する（Ｓ５２）。復号した管理データ（Ｈ０７）は、予め規定してあるフォーマット（図９）に従っているので、数値計算手段（１００４）は前記フォーマットに従って、データを読み出す。更新の場合、すべてのデータが埋められているわけではなく、更新時に必要な情報が含まれていればよい。本実施例の場合は、アプリケーションコードの更新にあたるため、個別イニシャルデータのバージョン情報、個別イニシャルデータのサイズ、個別イニシャルデータのハッシュが記載されていなくて良く、アプリケーション識別子長、アプリケーション識別子、アプリケーションコードのバージョン情報、アプリケーションコードサイズ、アプリケーションコードの署名（Ａ０５）が必須になる。アプリケーションを識別するための情報は、更新するアプリケーションがカード（１００）内にあるかを調べるために用いる（Ｓ５３）。また更新対象のアプリケーションが更新可能な状態を保持しているかを、記憶手段（１００５）で保持しているアプリケーションの状態から確認する。同じ識別情報がない場合や更新可能な状態でない場合は、数値計算手段（１００４）はインストール処理を中止する。数値計算手段（１００４）は、外部機器（２００）、サーバ（３００）に結果を出力する（Ｚ０４）際、正常終了ではなく、対象アプリケーションがないというエラーコードにして出力する。対象アプリケーションがあれば、カード（１００）は、共通データを記憶制御手段（１００３）経由で記憶手段（１００５）に仮格納する（Ｓ５４）。尚、上記のエラーに限定したものではなく、異常動作をした場合は、事前に外部と取り交わされたその旨を示すコードを出力する。【００５４】
次に、図１５−ｂを用いて説明する。カード（１００）において、通信手段（１００１）は、サーバ（３００）から、暗号化されたアプリケーションコード（Ａ０３）を外部機器（２００）経由で受信する（Ｚ０５１）。通信手段（１００１）は、前記データを数値計算手段（１００４）に渡す。数値計算手段（１００４）は、更新対象のアプリケーションの識別子とアプリケーションコードの更新という情報から、最初のデータ格納時にデータを復号したアプリケーションコード暗号鍵（Ａ０１）を記憶手段（１００５）から取得する（Ｓ５５）。前記のアプリケーションコード暗号鍵（Ａ０１）を用いて、暗号化されたアプリケーションコード（Ａ０３）の復号を暗復号手段（１００６）で行う（Ｓ５６）。アプリケーションコードは、事前に製造者によって動作確認されているという前提があるので、カード（１００）で新たに前記アプリケーションコードの動作を検証する必要はない。数値計算手段（１００４）は、アプリケーションコードを記憶制御手段（１００３）経由で記憶手段（１００５）に仮格納する（Ｓ５７）。カード（１００）は、復号したアプリケーションコード（Ａ０２）のハッシュをハッシュ生成手段（１００９）で生成する（Ｓ５８）。数値計算手段（１００４）は、製造者の公開鍵（Ｍ０１）を使って署名（Ａ０５）を暗復号手段（１００６）で復号し、ハッシュを取得し、前記生成したアプリケーションコードのハッシュと照合手段（１００７）で照合する（Ｓ５９）。同じであれば、数値計算手段（１００４）は、アプリケーションコード（Ａ０２）を記憶手段（１００５）に格納する。異なる場合、数値計算手段（１００４）はインストール処理を中止する（Ｓ６０）。数値計算手段（１００４）は、外部機器（２００）、サーバ（３００）に結果を出力する（Ｚ０６）際、正常終了ではなく、署名が異なるという旨を示すエラーコードを出力する。同じである場合、数値計算手段（１００４）はすべてのデータが正常であることを確認し、判断手段（１００８）に通知し、インストール処理を終了する。判断手段（１００８）は、署名が正当である通知を受け、署名と一緒に暗号化されていた共通データを正当であると判断し、該当アプリケーションに関連する共通データ、アプリケーションコードをカード内で動作可能な状態に変更させる。【００５５】
また、前記の説明では、外部機器（２００）とカード（１００）間の通信路について詳細に記載していないが、高速に記憶部にアクセスできるが事前に領域指定が必要な通信路（以下、高速通信路と呼ぶ）と、それより速度は劣るが領域指定を内部で解釈して行ってくれる通信路（以下、低速通信路と呼ぶ）の２系統を保持するカード（図１１）がある。【００５６】
カードが複数の通信方式に対応している場合、その処理内容によって、インストール途中で方式の切り替えをしたい場合がある。サーバ上のデータが暗号化されている場合、サーバ、外部機器は、その内容を見ることができず、切り替えるタイミングを把握することができない。また、サーバが事前に切り替えるタイミングを別の平文情報として持っていても、外部機器経由で切り替えを指定した場合に、外部機器を認証ができていないカードは、そのコマンドを信用することができない課題がある。そこで、前述のダウンロード、インストール方法を用いても、カードがもつ複数の通信方法を適切に動的に切り替える方法を提供する。【００５７】
カード（１００）が内容を解釈してデータを格納する管理データ（Ｈ０７）は、低速通信路を使ってデータを書き込む必要があるが、カードが内容を解釈しない個別イニシャルデータ（Ｈ０２）、アプリケーションコード（Ａ０２）は、高速通信路を使ってデータを書き込むことができる。特に個別イニシャルデータ（Ｈ０２）、アプリケーションコード（Ａ０２）が大容量である場合は、その効果は大きく、インストール時間の短縮を図ることができる。また、低速通信路と高速通信路に分けた場合、そのデータが正常な外部機器（２００）から送られてきたかが不確かになるが、その部分は前記署名データ（Ａ０５）と前記ハッシュ（Ｈ０５）が２つの通信路の関連性を保障できるため問題ない。
カードが２系統通信路を保持している場合のカード（１００）と外部機器（２００）間の通信フローを図１３で示し、図１６−ａ、図１６−ｂ、図１６−ｃを使って、各プレイヤーが行う処理フローを説明する。【００５８】
まず、図１６−ａを用いて説明する。カード（１００）において、通信手段（１００１）は、サーバ（３００）から、暗号化された管理データ暗号鍵（Ｈ１０）を外部機器（２００）経由で受信し（Ｃ０１）、コマンド解釈手段（１００２）に渡す。コマンド解釈手段（１００２）は、前記データに付与されているコマンドをチェックし、そのコマンドが何を示しているか、どの目的で使われているのかを解釈する。本実施例では、コマンドの内容は、カードへのアプリケーションのインストールと想定して以下の動作を記載する。コマンド解釈手段（１００２）は、数値計算手段（１００４）にアプリケーションのインストールであることを通知し、受信データを渡す。数値計算手段（１００４）は、記憶手段（１００５）が保持するカードＲＳＡ秘密鍵（Ｍ０４）を記憶制御手段（１００３）経由で取得し、受信データを暗復号手段（１００６）で復号し、管理データ暗号鍵（Ｈ０８）を取得する（Ｓ３１）。数値計算手段（１００４）は、復号した管理データ暗号鍵（Ｈ０８）を、記憶制御手段（１００３）を経由して記憶手段（１００５）で保持する。前記の処理が問題なく行えれば、カード（１００）は、外部機器（２００）、サーバ（３００）に対して正常終了という意味合いを持つコードを出力する（C02）。【００５９】
次に通信手段（１００１）は、暗号化された管理データ（Ｈ０９）を外部機器（２００）経由で受信する（Ｃ０３）。数値計算手段（１００４）は、前記の管理データ暗号鍵（Ｈ０８）を用いて、暗復号手段（１００６）で暗号化された管理データ（Ｈ０９）の復号を行い、管理データ（Ｈ０７）を取得する（Ｓ３２）。復号した管理データ（Ｈ０７）は、予め規定してあるフォーマット（図９）に従っているので、数値計算手段（１００４）は前記フォーマットに従って、データを読み出す。アプリケーションを識別するための情報は、すでにカード（１００）内に同じ識別情報を保有しているアプリケーションがないかを調べるために用いる（Ｓ３３）。同じ識別情報がすでにある場合は、数値計算手段（１００４）はインストール処理を中止する。数値計算手段（１００４）は、外部機器（２００）、サーバ（３００）に結果を出力する（Ｃ０４）際、正常終了ではなく、識別情報が重複しているというエラーコードにして出力する。重複していなければ、共通データを記憶制御手段（１００３）経由で記憶手段（１００５）に仮格納する（Ｓ３４）。尚、上記のエラーに限定したものではなく、異常動作をした場合は、事前に外部と取り交わされたその旨を示すコードを出力する。【００６０】
次に、図１６−ｂを用いて説明する。カード（１００）において、通信手段（１００１）は、暗号化された個別イニシャルデータ暗号鍵（Ｈ０４）を外部機器（２００）経由で受信し（Ｃ０５）、数値計算手段（１００４）に渡す。数値計算手段（１００４）は、記憶手段（１００５）で保持するカードＲＳＡ秘密鍵（Ｍ０４）を使って、暗復号手段（１００６）で復号し、個別イニシャルデータ暗号鍵（Ｈ０１）を取得する（Ｓ３５）。復号した個別イニシャルデータ暗号鍵（Ｈ０１）をカード内の記憶手段（１００５）で保持する。数値計算手段（１００４）は、次の個別イニシャルデータを低速通信路ではなく、高速通信路を使って受信する判断をし、記憶制御手段（１００３）からデータを展開するアドレス情報を取得し、領域制御手段（1010）に通知する（Ｓ８０前段）。数値計算手段（１００４）は、復号した個別イニシャルデータ暗号鍵（Ｈ０１）を、領域制御手段（1010）に通知する。領域制御手段（１０１０）は、受信したアドレス情報を保持し、アドレス情報に対応した外部に公開するためのエリア番地とエリアサイズ（以下、前記２つの情報を合わせてエリア情報とする）を生成し（Ｓ８０後段）、数値計算手段（１００４）に送信する。数値計算手段（１００４）は、前記エリア情報を外部機器（２００）に出力する（Ｄ０１）。領域制御手段（１０１０）は、受信した個別イニシャルデータ暗号鍵（Ｈ０１）を復号用鍵として設定する。【００６１】
外部機器（２００）は、受信したエリア情報を使って、高速通信路を利用して、書き込むエリア番地と書き込むエリアサイズ（書込みサイズ）をカード（１００）に通知するコマンド（以下、領域情報設定コマンドとする）を送信する（Ｄ０２）。エリアサイズは、通知されたサイズより小さくなってもかまわない。通信手段（１００１）は、前記領域情報設定コマンドを受信し、そのデータをコマンド解釈手段（１００２）に送信する。コマンド解釈手段（１００２）は、前記領域情報設定コマンドを解釈し、領域制御手段（１０１０）にエリア番地と書込みサイズを通知する。領域制御手段（１０１０）は、エリア番地を確認し、書込みサイズを設定する（Ｓ８１）。番地が異なる場合や、サイズが予め通知したサイズより大きい場合はエラーとなる。【００６２】
次に通信手段（１００１）は、高速通信路を使って送信された暗号化された個別イニシャルデータ（Ｈ０３）を受信する（Ｄ０３）。通信手段（１００１）は、前記データをコマンド解釈手段（１００２）に渡す。コマンド解釈手段（１００２）は、受信したデータを領域制御手段（１０１０）に送信する。【００６３】
領域制御手段（１０１０）は、前記の個別イニシャルデータ暗号鍵（Ｈ０１）を用いて、暗号化された個別イニシャルデータ（Ｈ０３）の復号を暗復号手段（１００６）で行い、個別イニシャルデータ（Ｈ０３）を取得する（Ｓ８２）。そして領域制御手段（１０１０）は、復号した個別イニシャルデータ（Ｈ０２）を記憶手段（１００５）に仮格納する（Ｓ８４）。領域制御手段（１０１０）は個別イニシャルデータ（Ｈ０２）のハッシュをハッシュ生成手段（１００９）で生成する（Ｓ８３）。【００６４】
次に、通信手段（１００１）は、アプリケーション暗号鍵を暗号化したデータ（Ａ０４）を外部機器（２００）経由で受信し（Ｄ０４）、数値計算手段（１００４）に渡す。数値計算手段（１００４）は、領域制御手段（１０１０）で生成したハッシュを取得し、管理データに含まれていた個別イニシャルデータのハッシュ（Ｈ０５）と同じであるかを、照合手段（１００７）を用いて確認する（Ｓ８５）。【００６５】
続いて、図１６−ｃに移る。領域制御手段（１０１０）で生成したハッシュと、管理データに含まれていた個別イニシャルデータのハッシュ（Ｈ０５）が異なる場合、数値計算手段（１００４）はインストール処理を中止する。カード（１００）は、外部機器（２００）、サーバ（３００）に結果を出力する（Ｄ０５）際、正常終了ではなく、ハッシュが異なるという旨を示すエラーコードを出力する（Ｓ８６）。数値計算手段（１００４）は、記憶手段（１００５）で保持するカードＲＳＡ秘密鍵（ＭＯ４）を使って、暗復号手段（１００６）で暗号化されたアプリケーション暗号鍵（Ａ０４）を復号し、アプリケーションコード暗号鍵（Ａ０１）を取得する（Ｓ８７）。数値計算手段（１００４）は、次のアプリケーションコードを低速通信路ではなく、高速通信路を使ってコードを受信する判断をし、記憶制御手段（１００３）からコードを展開するアドレス情報を取得し、領域制御手段（1010）に通知する。数値計算手段（１００４）は、復号したアプリケーションコード暗号鍵（Ａ０１）を、領域制御手段（1010）に通知する。領域制御手段（１０１０）は、受信したアドレス情報を保持し、アドレス情報に対応した外部に公開するためのエリア番地とエリアサイズ（以下、前記２つの情報を合わせてエリア情報とする）を生成し、数値計算手段（１００４）に送信する（Ｓ８８）。数値計算手段（１００４）は、前記エリア情報を外部機器（２００）に出力する（Ｄ０５）。領域制御手段（１０１０）は、受信したアプリケーションコード暗号鍵（Ａ０１）を復号用鍵として設定する。【００６６】
外部機器（２００）は、受信したエリア情報を使って、高速通信路を利用して、書き込むエリア番地と書き込むエリアサイズ（書込みサイズ）をカードに通知するコマンド（以下、領域情報設定コマンドとする）を送信する（Ｄ０６）。エリアサイズは、通知されたサイズより小さくなってもかまわない。通信手段（１００１）は、前記領域情報設定コマンドを受信し、そのデータをコマンド解釈手段（１００２）に送信する。コマンド解釈手段（１００２）は、前記領域情報設定コマンドを解釈し、領域制御手段（１０１０）にエリア番地と書き込むサイズを通知する。領域制御手段（１０１０）は、エリア番地を確認し、書込みサイズを設定する（Ｓ８９）。番地が異なる場合や、サイズが予め通知したサイズより大きい場合はエラーとなる。【００６７】
次に通信手段（１００１）は、サーバ（３００）から、高速通信路を使って送信された暗号化されたアプリケーションコード（Ａ０３）を外部機器（２００）経由で受信する（Ｄ０７）。通信手段（１００１）は、前記データをコマンド解釈手段（１００２）に渡す。コマンド解釈手段（１００２）は、受信したデータを領域制御手段（１０１０）に送信する。【００６８】
領域制御手段（１０１０）は、前記のアプリケーション暗号鍵（Ａ０１）を用いて、暗号化された個別イニシャルデータの復号を暗復号手段（１００６）で行い、アプリケーションコード（Ａ０２）を取得する（Ｓ９０）。領域制御手段（１０１０）はアプリケーションコード（Ａ０２）のハッシュをハッシュ生成手段（１００９）で生成する（Ｓ９１）。数値計算手段（１００４）は、復号したアプリケーションコード（Ａ０２）を記憶手段（１００５）に仮格納する（Ｓ９２）。【００６９】
次に、通信手段（１００１）は、照合を要求するコマンドを外部機器（２００）から受信し（Ｄ０８）、数値計算手段（１００４）に渡す。数値計算手段（１００４）は、領域制御手段（１０１０）で生成したハッシュを取得し、製造者の公開鍵（Ｍ０１）を使って管理データに含まれていた署名（Ａ０５）を暗復号手段（１００６）で復号してハッシュを取得し、前記取得したアプリケーションコードのハッシュと照合手段（１００７）で照合する（Ｓ９３）。異なる場合、数値計算手段（１００４）はインストール処理を中止する。数値計算手段（１００４）は、外部機器（２００）、サーバ（３００）に結果を出力する（Ｄ０９）際、正常終了ではなく、ハッシュが異なるという旨を示すエラーコードを出力する。同じである場合、数値計算手段（１００４）は、判断手段（１００８）に署名が正常であることを通知し、インストール処理を終了する（Ｓ９４）。判断手段（１００８）は、署名が正当である通知を受け、署名と一緒に暗号化されていた個別イニシャルデータのハッシュ、共通データを正当であると判断し、該当アプリケーションに関連する共通データ、個別イニシャルデータ、アプリケーションコードをカード内で動作可能な状態に変更させる。数値計算手段（１００４）は、正常終了した旨を示すコードを外部機器（２００）、サーバ（３００）に出力する（Ｄ０９）。【００７０】
本発明では、外部機器（２００）は、カード（１００）からの出力データに付与された領域情報（Ｄ０１、Ｄ０５）を使って、高速通信路を使うタイミングと書き込み対象領域、対象領域サイズを知ることができる。外部機器（２００）は、受信した前記領域情報をカード（１００）に送信して、次に高速通信路を使って書き込む領域情報とサイズをカード（１００）に伝える（Ｄ０２、Ｄ０６）。その次に高速通信路を使って、カード（１００）にデータ（個別イニシャルデータ、アプリケーションコード）を書き込む（Ｄ０３、Ｄ０７）。【００７１】
本発明を使うことにより、外部機器（２００）がサーバ（３００）からの暗号データを受信するだけでは知りえない情報、すなわち、カード（１００）が通信路を複数持っているのか、またはどのタイミングで低速通信路と高速通信路を切り替えるのか、どこにデータを書き込むのかという点を一度に通知することができる。【００７２】
外部機器（２００）は、前記の通信路の本数についてはカード（１００）の識別情報から判別することも可能であり、タイミングについてはカード（１００）に送信する暗号データの種別を事前に外部機器（２００）が知っていれば、切り替えることが可能である。だが、データを書き込む領域についてはカード（１００）から情報を取得しないと知ることが不可能である。そのため前記領域情報を取得した時に切り替え作業を行うことが、他の判別方法を行わずに済み、効率が良い。【００７３】
また、アプリ開発者（Ｐ２）がカード製造者（Ｐ１）に対して署名の申請をする方法において、アプリ開発者（Ｐ２）を物理的、視覚的、社会的に確認する方法は、システムの規定外であり、公共機関、金融機関等が実施している本人確認方法を利用しても構わない。また、生成された署名を配送する仕組みや、カード製造者（Ｐ１）からアプリ開発者（Ｐ２）に配布される開発環境を配送する仕組みにおいても同様に、一般的な配布方法を採用するとし言及しない。また、上記の開発環境を使って、署名の申請を行い、アプリ開発者先にある開発環境と製造者間で暗号セッションを構築し署名を配送することも可能であるが、開発環境の配布が正しく安全にできないと実現できない。【００７４】
本実施例では、プレイヤーとしてアプリ開発者、サービス提供者、サーバ運用者の3者に分けているが、3者の処理内容として、共通に使うデータを構築する、個別に使うデータを構築する、それを配信するという形態に限定されるわけではない。最終的な信用ポイントを製造者が付与するアプリケーションの署名においており、それに関連付けされたデータを含めて信用してインストールするところが本特許の目的であり、前記の3者が行う処理内容の変更によって、本発明は何ら影響を受けない。【００７５】
尚、本実施例では、全カードに共通のカードＲＳＡ秘密鍵（Ｍ０４）を設定しているが、何らそれを限定するものではなく、全カードに個別のカードＲＳＡ秘密鍵（Ｍ０４）が設定されていても問題ない。その場合は、カードＲＳＡ秘密鍵（Ｍ０４）に対応する公開鍵証明書をカード内で保持しておき、サーバにその公開鍵証明書を送付する。サーバ側は、証明書の正当性を検証後に、その証明書に含まれる公開鍵を利用して、データ（個別イニシャルデータ、アプリケーションコード）を暗号化することができるので、カード個別にデータを送付することが可能である。【００７６】
尚、本実施例では、カードにカード製造者（Ｐ１）の公開鍵（Ｍ０１）を設定しているが、何らそれを限定するものではなく、カード製造者から署名処理の権限を委譲された事業者であれば、代理で署名処理を行う事ができる。その場合は、カード製造者は、権限を委譲する事業者の公開鍵ペアにカード製造者の秘密鍵を用いて、証明書を発行する。委譲された事業者は、自身の秘密鍵を使って、アプリケーションコードに署名を付与する。委譲された事業者は、製造者が発行した前記証明書をカードに送付する。カードは、受信した証明書に対して、カード内にあるカード製造者の公開鍵（Ｍ０１）を用いて証明書検証を行い、正当であると判断できたら、証明書に含まれる公開鍵をアプリケーションの署名検証用鍵として用いる。委譲された事業者が生成した署名を含む暗号データをカードに送付すると、カードは、前記署名検証用鍵を使用するため、委譲された事業者が生成した署名の正当性を確認することができる。【００７７】
尚、本実施例で記載しているハッシュを生成する方法は一方向性関数を使っており、従来技術では、ＳＨＡ−１やＭＤ５、ＳＨＡ−２５６などを指している。使用する目的とするところは、大規模なデータを要約し、少ないデータ量で識別することであり、前記データがすでに小さいもので、ハッシュをする生成する必要がなければそのままの値を比較しても良い。【００７８】
尚、本実施例で記載している署名は公開鍵暗号方式の場合に限って記載しているのではなく、利用する暗号アルゴリズムが共通鍵暗号方式であれば、署名はメッセージ認証コード（ＭＡＣ：Ｍａｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）に当たる。署名の生成方法に関して、本実施例ではハッシュを作成してから秘密鍵にて署名を施しているが、前記ハッシュを生成する方法でも記載したが、データがすでに小さいものであれば、前記データをそのまま利用しても構わない。【００７９】
尚、本実施例では、サーバと外部機器間の通信路については、ＨＴＴＰ、もしくはＨＴＴＰＳと記載したが、それに限定されるものではなく、有線、無線に関係無く、一般的にサーバと外部機器が通信する方法であれば、本発明に何ら影響はない。よって、サーバと外部機器が独自に暗号通信を行うことも可能であり、前記暗号通信を行うことによってカードの振る舞いは変わらない。【００８０】
本実施例で示しているシステムが、本発明のセキュアメモリカードシステムの一例であり、システム内で使用されているカードがセキュアメモリカードにあたり、外部機器がアクセス装置にあたる。またカード内に含まれる記憶手段が不揮発性メモリにあたり、それ以外の手段を実現しているのが、本発明のメモリコントローラにあたる。【００８１】
本発明を詳細にまた特定の実施態様を参照して説明したが、本発明の精神と範囲を逸脱することなく様々な変更や修正を加えることができることは当業者にとって明らかである。
本出願は、2006年8月10日出願の日本特許出願（特願2006−218795）に基づくものであり、その内容はここに参照として取り込まれる。
【産業上の利用可能性】
【００８２】
本発明にかかるセキュアメモリカードは、データを受信し、保存するセキュアメモリカードとして利用できる。
【図１】
2008018457.tif 000003
【図２】
2008018457.tif 000004
【図３】
2008018457.tif 000005
【図４】
2008018457.tif 000006
【図５】
2008018457.tif 000007
【図６】
2008018457.tif 000008
【図７−ａ】
2008018457.tif 000009
【図７−ｂ】
2008018457.tif 000010
【図７−ｃ】
2008018457.tif 000011
【図８】
2008018457.tif 000012
【図９】
2008018457.tif 000013
【図１０】
2008018457.tif 000014
【図１１】
2008018457.tif 000015
【図１２】
2008018457.tif 000016
【図１３】
2008018457.tif 000017
【図１４】
2008018457.tif 000018
【図１５−ａ】
2008018457.tif 000019
【図１５−ｂ】
2008018457.tif 000020
【図１６−ａ】
2008018457.tif 000021
【図１６−ｂ】
2008018457.tif 000022
【図１６−ｃ】
2008018457.tif 000023
【手続補正書】
【提出日】平成20年3月19日(2008.3.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
少なくとも、暗号データと署名対象データとを受信する通信手段と、
任意のデータに対して暗復号処理を行う暗復号手段と、
前記署名対象データと、前記暗復号手段で復号された前記暗号データに格納されている署名と、を照合する照合手段と、
前記照合手段の照合結果に基づいて、前記署名対象データの正当性を判断する判断手段と、
前記判断手段により前記署名対象データが正当であると判断されるとき、前記署名が含まれている前記暗号データの前記署名以外のデータを正当なデータとして記憶する記憶手段と
を備える、セキュアメモリカード。
【請求項２】
前記通信手段は、第１の暗号データと第２の暗号データとを受信し、
前記照合手段は、前記暗復号手段で復号された前記第１の暗号データに含まれる第１のデータである署名と、前記第２の暗号データを復号したデータとを照合し、
前記判断手段は、前記照合手段の照合結果に基づいて、前記第２の復号データの正当性を判断し、
前記記憶手段は、前記判断手段により、前記第２の暗号データが正当であると判断されるとき、前記第１の暗号データに含まれる第２のデータを正当なデータとして記憶する請求項１記載のセキュアメモリカード。
【請求項３】
さらに、前記通信手段は、第３の暗号データを受信し、
前記第１の暗号データに含まれる第３のデータは、前記第３の暗号データのハッシュであり、前記判断手段は、前記ハッシュを用いて、前記第３の暗号データの正当性を検証する、請求項２記載のセキュアメモリカード。
【請求項４】
前記第１の暗号データに含まれる複数の第３のデータは、複数の第３の暗号データそれぞれのハッシュであり、前記判断手段は、前記複数の第３のデータそれぞれのハッシュを用いて、前記複数の第３の暗号データそれぞれの正当性を判断する、請求項３記載のセキュアメモリカード。
【請求項５】
参照先を示すリンク情報が、前記第１の暗号データに含まれる、請求項２乃至４いずれか一項に記載のセキュアメモリカード。
【請求項６】
さらに、前記記憶手段は、セキュアメモリカードの製造者が製造するときと、セキュアメモリカードを発行するときとのいずれかに設定した、第１の暗号鍵情報を記憶する、請求項２乃至５いずれか一項に記載のセキュアメモリ
カード。
【請求項７】
さらに、前記通信手段は、第４の暗号データを受信し、
前記暗復号手段は、前記第１の暗号鍵情報を用いて前記第４の暗号データを復号し、復号した第４の暗号データを第２の暗号鍵として前記第１の暗号データと前記第２の暗号データと前記第３の暗号データとを復号する、請求項６記載のセキュアメモリカード。
【請求項８】
さらに、前記第２の暗号鍵と、復号した前記第１の暗号データと前記第２の暗号データと前記第３の暗号データとを含む格納データと、を管理する復号鍵管理手段を備える、請求項７記載のセキュアメモリカード。
【請求項９】
前記格納データを更新する際に、前記格納データを、前記第１の暗号鍵で復号した後、前記第２の暗号鍵で復号する、請求項８記載のセキュアメモリカード。
【請求項１０】
外部機器に対して、前記第２の暗号データと、前記第３の暗号データとの少なくとも一方のデータを記憶する前記記憶手段の領域を示す、領域情報を送信する領域制御手段を備え、前記領域情報を前記外部機器に送信することを特徴とする請求項３乃至９いずれか一項に記載のセキュアメモリカード。
【請求項１１】
前記署名は前記製造者によって作成される、請求項６記載のセキュアメモリカード。
【請求項１２】
前記第１の暗号データは、前記カード内で実行可能なアプリケーションを管理するためのデータであり、前記第２の暗号データは、前記実行可能なアプリケーションコード自体であり、前記第３の暗号データは、アプリケーションが使うデータであることを特徴とする請求項３乃至１１いずれか一項に記載のセキュアメモリカード。
【請求項１３】
少なくとも、暗号データと署名対象データとを受信する通信手段と、
任意のデータに対して暗復号処理を行う暗復号手段と、
前記署名対象データと、前記暗復号手段で復号された前記暗号データに格納されている署名と、を照合する照合手段と、
前記照合手段の照合結果に基づいて、前記署名対象データの正当性を判断する判断手段と、
前記判断手段により前記署名対象データが正当であると判断されるとき、前記署名が含まれている前記暗号データの前記署名以外のデータを正当なデータとして記憶する記憶手段と
を備える、メモリコントローラ。
【請求項１４】
前記通信手段は、第１の暗号データと第２の暗号データとを受信し、
前記照合手段は、前記第１の暗号データに含まれる第１のデータである署名と、前記第２の暗号データを復号したデータとを照合し、
前記照合手段により、前記復号した第２の暗号データが正当であると判断されるとき、前記第１の暗号データに含まれる第２のデータを正当なデータとして前記記憶手段に記憶される請求項１３記載のメモリコントローラ。
【請求項１５】
さらに、前記通信手段は、第３の暗号データを受信し、
前記第１の暗号データに含まれる第３のデータは、前記第３の暗号データのハッシュであり、前記判断手段は、前記ハッシュを用いて、前記第３の暗号データの正当性を検証する、請求項１４記載のメモリコントローラ。
【請求項１６】
前記第１の暗号データは、前記カード内で実行可能なアプリケーションを管理するためのデータであり、前記第２の暗号データは、前記実行可能なアプリケーションコード自体であり、前記第３の暗号データは、アプリケーションが使うデータであることを特徴とする請求項１５に記載のメモリコントローラ。
【請求項１７】
アクセス装置と、前記アクセス装置からのアクセス指示に応じてデータの読み出し、書き込みを行うセキュアメモリカードとを有したセキュアメモリカードシステムであって、
前記セキュアメモリカードは、
不揮発性メモリと、
少なくとも、暗号データと署名対象データとを受信する通信手段と、
任意のデータに対して暗復号処理を行う暗復号手段と、
前記署名対象データと、前記暗復号手段で復号された前記暗号データに格納されている署名と、を照合する照合手段と、
前記照合手段の照合結果に基づいて、前記署名対象データの正当性を判断する判断手段と、
前記判断手段により前記署名対象データが正当であると判断されるとき、前記署名が含まれている前記暗号データの前記署名以外のデータを正当なデータとして記憶する記憶手段と
を備える、メモリコントローラを有し、
前記通信手段を使用して、前記判断手段が算出した結果を前記アクセス装置に通知することを特徴とするセキュアメモリカードシステム。
【請求項１８】
不揮発性メモリを有するセキュアメモリカードと接続して使用するアクセス装置であって、
前記アクセス装置は、
前記セキュアメモリカードと通信するための通信手段と、
前記セキュアメモリカードに送信するデータを記憶する記憶手段と、
前記記憶手段から前記セキュアメモリカードに送信するデータを読み出し、前記セキュアメモリカードが受信可能なデータに変換するプロトコル変換手段を有し、
前記セキュアメモリカードから通知される結果を受信し、前記結果に基づき、前記セキュアメモリカードとの通信を制御することを特徴とするアクセス装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【書類名】  明細書
【発明の名称】  メモリコントローラ、セキュアメモリカード、及びセキュアメモリカードシステム
【技術分野】
【０００１】
本発明は、不揮発性メモリの制御を行うメモリコントローラ、不揮発性メモリを備えた半導体メモリカード等のセキュアメモリカード、前記セキュアメモリカードとアクセス装置とを有するセキュアメモリカードシステムに関する。
【背景技術】
【０００２】
従来技術として、暗号化済みデータの配布と、この暗号化済みデータを暗号化する際に用いられる鍵の配布と、を異なるサーバが行うことで、ユーザに対して安全なコンテンツを配布し、販売することを可能にするものがある（特許文献１）。ここでユーザへ配布される暗号化済みデータは、複数の暗号化情報パーツと、暗号化情報パーツのリストと、そのリストへの署名とを含んでいる。
【０００３】
【特許文献１】特許第３１３０２６７号
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記従来の技術では、リストの内容が変わるたびにリストに対する署名を付け替える必要がある。つまり、暗号化済みデータの一部を変更するたびに、リストの内容が変わるため、署名を付け直す必要があった。従って、署名の付け直しのために多くの時間と労力を必要としていた。
【０００５】
そこで、本願発明では、署名の対象となるデータと、その署名と、署名対象ではない他のデータとを、まとめて暗号化したデータ構造にすることで、署名対象ではないデータの一部が変更された場合でも署名の付け直しが不要なメモリコントローラ及びセキュアメモリカードを提供する。
【課題を解決するための手段】
【０００６】
本発明におけるメモリコントローラは、暗号データと署名対象データを受信する通信手段と、データに対して暗復号処理を行う暗復号手段と、前記暗復号手段で復号された前記暗号データに付与されている署名と、前記署名対象データと、を照合する照合手段と、前記照合手段の照合結果に基づいて、前記署名対象データの正当性を判断する判断手段と、前記判断手段により前記署名対象データが正当であると判断されるとき、前記署名が含まれている前記暗号データの前記署名以外のデータを正当なデータとして記憶する記憶手段とを備えることを特徴とするメモリコントローラである。
【０００７】
また、本発明におけるセキュアメモリカードは、不揮発性メモリと、前記不揮発メモリに対してデータの読み出し、書き込みを行う前記メモリコントローラと、前記暗号処理を行う暗復号手段と、を有し、セキュアメモリカードは暗号データと署名対象データとを受信する通信手段と、データに対して暗復号処理を行う暗復号手段と、前記暗復号手段で復号された前記暗号データに付与されている署名と、前記署名対象データと、を照合する照合手段と、前記照合手段の照合結果に基づいて、前記署名対象データの正当性を判断する判断手段と、前記判断手段により前記署名対象データが正当であると判断されるとき、前記署名が含まれている前記暗号データの残りのデータも正当なデータとして記憶する記憶手段とを備えている。
【０００８】
また、本発明におけるセキュアメモリカードシステムは、セキュアメモリカードとアクセス装置から構成され、セキュアメモリカードは、暗号データと署名対象データとを受信する通信手段と、データに対して暗復号処理を行う暗復号手段と、前記暗復号手段で復号された前記暗号データに付与されている署名と、前記署名対象データと、を照合する照合手段と、前記照合手段による照合結果により、前記署名対象データの正当性を判断する判断手段と、前記判断部により前記署名対象データが正当であると判断されるとき、前記署名が含まれている前記暗号データの前記署名以外のデータを正当なデータとして記憶する記憶手段とを備えており、アクセス装置は、前記セキュアメモリカードと通信するための通信手段と、前記セキュアメモリカードに送信するデータを記憶する記憶手段と、前記記憶手段から前記セキュアメモリカードに送信するデータを読み出し、前記セキュアメモリカードが受信可能なデータに変換するプロトコル変換手段を有し、前記セキュアメモリカードから通知される結果を受信し、前記結果に基づき、前記セキュアメモリカードとの通信を制御する。
【０００９】
【発明の効果】
署名対象データと、署名と、署名対象ではない他のデータとが一緒に暗号化されたデータ構造にすることで、署名が正しく検証できた場合に一緒に暗号化された他のデータの正当性を合わせて信頼できるため、署名対象ではないデータの一部を変更する度に署名を付け替える必要がない。
【発明を実施するための最良の形態】
【００１０】
以下本発明の実施の形態について、図面を参照しながら説明する。尚、本発明は、これらの実施の形態に何ら限定されるものではなく、その要旨を逸脱しない範囲において、様々なる態様で実施し得る。
【００１１】
（実施の形態１）
本実施の形態では、図１に示すようなサーバ（３００）、外部機器（２００）、カード（１００）から構成されるセキュアメモリカードシステムについて説明する。図２は、カード（１００）の構成を示す。図３は、図１に示したセキュアメモリカードシステムの詳細な構成を示す。以下、図３を用いて説明する。
【００１２】
サーバ（３００）は、外部と通信する通信手段（３００１）と、記憶制御手段（３００２）と、記憶手段（３００３）とをもつ。この記憶手段（３００３）は、アプリケーションデータ、アプリケーションコード、対応するカード情報、その他外部端末に関する情報を保持している。ここで、アプリケーションコードとアプリケーションデータを足し合わせたものがアプリケーションである。アプリケーションコードは、実行可能なプログラムやコードなどのオブジェクトを指すものである。アプリケーションデータは、それらのコードが参照するデータを指し、アプリケーションに対して、動作や振る舞いなどを制御したり、初期設定値を与えたりする目的で用意するものである。尚、本実施の形態では、アプリケーションコードとアプリケーションデータとが分離しているものとして説明するが、アプリケーションデータが、アプリケーションコードの一部に含まれるものであってもよい。
【００１３】
記憶制御手段（３００２）は、通信手段（３００１）経由で外部からの要求を受け、その要求に応じて、記憶手段（３００３）から選択的にデータを読み出すことができる。
【００１４】
外部機器（２００）は、通信手段（２００１）、プロトコル変換手段（２００２）、一時記憶手段（２００３）を有する。通信手段（２００１）は、サーバ（３００）からデータやコードを受信する。プロトコル変換手段（２００２）は、このデータやコードをカード（１００）に送信可能なコマンドに変換する。通信手段（２００１）は、プロトコル変換手段（２００２）で変換されたコマンドをカード（１００）に渡す。なお、サーバ（３００）から予めカードのコマンド仕様に準じたデータを受信した場合は、外部機器（２００）は受信したデータをそのままカード（１００）に送信する。
【００１５】
カード（１００）は、通信手段（１００１）、コマンド解釈手段（１００２）、数値計算手段（１００４）、記憶制御手段（１００３）、記憶手段（１００５）、暗復号手段（１００６）、照合手段（１００７）、ハッシュ生成手段（１００９）、判断手段（１００８）を有する。通信手段（１００１）は、外部機器（２００）からデータやコマンドを受信する。コマンド解釈手段（１００２）は、通信手段（１００１）を用いて受信したコマンドを解釈し、数値計算手段（１００４）にデータを渡す。数値計算手段（１００４）は、コマンド解釈手段（１００２）でコマンドを解釈した結果に応じて、データの配置およびデータの変換、データの演算を行う。また、数値計算手段（１００４）は、必要に応じて暗復号処理を行う暗復号手段（１００６）と、データの比較、照合を行う照合手段（１００７）と、データのハッシュ値を生成するハッシュ生成手段（１００９）と、記憶手段（１００５）を制御する記憶制御手段（１００３）とを用いて、暗号処理を行う。記憶手段（１００５）は、カード（１００）内のデータを保持しておく部分であり、記憶制御手段（１００３）を介してアクセスされる。照合手段（１００７）は、署名対象データと、暗復号手段（１００６）で復号された暗号データに格納されている署名と、を照合する。また、判断手段（１００８）は、照合手段（１００７）における照合結果により、データの正当性を判断する
【００１６】
ここで、上記システム構成とは別に、カード（１００）の製造、アプリケーションなどの提供にかかわるプレイヤーの関係について図４を用いて、説明する。
【００１７】
図４に示すように、カード（１００）を製造・発行するプレイヤー（Ｐ１）（以後、カード製造者とする）、アプリケーションを開発するプレイヤー（Ｐ２）（以後、アプリ開発者とする）、サービスを提供するプレイヤー（Ｐ３）（以後、サービス提供者とする）、サーバの運用を行うプレイヤー（Ｐ４）（以後、サーバ運用者とする）、外部機器（２００）を操作して、カードに対するデータをサーバに要求するトリガーを投げるプレイヤー（Ｐ５）（以後、ユーザとする）、の５者が存在する。なお、カードをユーザに販売するプレイヤー（Ｐ６）としてカード販売者が運用上は存在するが、本実施の形態には直接関係無いので説明を省略する。
【００１８】
その他のプレイヤー（Ｐ１〜Ｐ４）は、ユーザ（Ｐ５）から見た場合、特に意識されるものではないが、システム上、実施する処理内容が異なると想定し、分けて考える。まず、カード製造者（Ｐ１）は、カードの製造からカードに必要なデータを設定して市場で使うことができるカードの有効化までを行うものであり、アプリ開発者（Ｐ２）に開発環境の貸し出しやアプリケーションコードの署名付けを行う。次に、アプリ開発者（Ｐ２）は、共通的、汎用的に配布可能なアプリケーションを開発し、複数のサービス提供者（Ｐ３）にアプリケーションコードを汎用的に提供することが可能である。続いて、サービス提供者（Ｐ３）は、アプリ開発者（Ｐ２）から受け取ったアプリケーションコードに、識別情報や鍵情報などのサービス固有の情報を入れることで、アプリケーションをカスタマイズすることができる。サービス提供者（Ｐ３）は前述したアプリケーションをカスタマイズして、実際のサービスを運営するものであると想定する。サーバ運用者（Ｐ４）は、外部機器（２００）からの要求に応じて、データを出力するＷｅｂサーバを運用する。
【００１９】
以上に説明したプレイヤーモデルはあくまで一例に過ぎず、一プレイヤーがいくつかのプレイヤーを兼任する場合や、もしくは一プレイヤーの処理がより細分化される場合も、本特許で語られている範疇に含まれる。例えば、カード製造者（Ｐ１）は、カードの製造のみを行い、カードの有効化および開発環境の貸し出し、アプリケーションコードの署名付けを別のプレイヤーが行う場合もある。また、前記では説明を省略したカード販売者が店頭でカードの有効化を行う場合やサービス提供者が作成したデータをカード製造者が受けてカードに設定する場合も想定できる。尚、サービス提供者（Ｐ３）やカード製造者（Ｐ１）がアプリ開発者（Ｐ２）を兼任する場合も考えられる。
【００２０】
次に図５、図６、図７−ａ、図７−ｂ、図７−ｃを使って、各プレイヤーが行う処理を説明する。
【００２１】
図５に示すように、まず、カード製造者（Ｐ１）は、カード製造者のＲＳＡ鍵ペア（製造者鍵ペアＭ０１、Ｍ０２）を事前に生成する（Ｓ０１）。そして、生成した鍵のうち、製造者公開鍵（Ｍ０１）をカード（１００）に設定（格納）する（Ｓ０２）。製造者公開鍵（Ｍ０１）と対称な製造者秘密鍵（Ｍ０２）は、アプリ開発者（Ｐ２）が作成したアプリケーションに対する署名付けを行う際に用いられる。次に、カード製造者（Ｐ１）は、製造するカード（１００）に格納するＲＳＡ鍵ペア（カード鍵ペアＭ０３、Ｍ０４）を生成する（Ｓ０３）。生成した鍵のうち、カード公開鍵（Ｍ０３）は、アプリ開発者（Ｐ２）、サービス提供者（Ｐ３）に配布される（Ｓ０４）。一方、カード秘密鍵（Ｍ０４）はカード（１００）に格納される（Ｓ０５）。尚、カード製造者（Ｐ１）が生成する製造者鍵（Ｍ０１、Ｍ０２）やカード鍵（Ｍ０３、Ｍ０４）は、上述したＲＳＡ鍵であってもよいし、楕円暗号方式、ＤＨ鍵配送方式、エルガマル暗号方式など他の公開鍵暗号方式を利用したものであっても構わない。尚、同様にＲＳＡの鍵長も１０２４ｂｉｔ、２０４８ｂｉｔに限定されるわけではなく、カード運用のセキュリティポリシーに則って自由に変更しても構わない。
【００２２】
アプリケーションコードへの署名付けは、アプリ開発者（Ｐ２）による申請、すなわちアプリケーションコードのカード製造者（Ｐ１）への送付（Ｓ０６）によって行われる。カード製造者（Ｐ１）は、提出されたアプリケーションの動作内容を確認し、問題がなければ、提出されたアプリケーションコードのハッシュデータを作成する。そして、作成したハッシュデータに対して、カード製造者（Ｐ１）は製造者秘密鍵（Ｍ０２）を使って、署名（Ａ０５）を生成する（Ｓ０７）。ここで生成された署名（Ａ０５）は、アプリ開発者（Ｐ２）に送付される（Ｓ０８）。
【００２３】
なお、アプリ開発者（Ｐ２）は、カード製造者（Ｐ１）から事前にカード（１００）に対応した開発環境とカード公開鍵（Ｍ０３）を受託している。その開発環境を利用して、アプリ開発者（Ｐ２）はカード（１００）に対応したアプリケーションコードの開発を行う（Ｓ０９）。このステップＳ０９で完成したアプリケーションコードが、ステップＳ０６でカード製造者（Ｐ１）に送付されるアプリケーションコード（Ａ０２）である。
【００２４】
アプリ開発者（Ｐ２）は、作成したアプリケーションコードをサービス提供者（Ｐ３）に譲渡する際には、アプリケーションコードを暗号化して渡す。暗号化する理由は、カード製造者（Ｐ１）が配布した開発環境を用いてアプリケーションコードを開発できるのはアプリ開発者（Ｐ２）だけだからであり、アプリケーションコードを暗号化せずにサービス提供者（Ｐ３）に渡してしまうと、サービス提供者（Ｐ３）はアプリケーションコード内容を閲覧でき、秘情報の流出になるからである。暗号化せずにコードを渡して、複数のプレイヤーが秘情報を共有している時に秘情報が漏洩した際、どちらの責任で発生したかは曖昧になってしまい、責任の切り分けができないという問題が考えられる。
【００２５】
それに対しては、本実施例では、アプリ開発者（Ｐ２）が、独自に作成した暗号用鍵（Ａ０１）（以下、アプリケーションコード暗号鍵と呼ぶ）でアプリケーションコード（Ａ０２）を暗号化して、暗号化されたアプリケーションコード（Ａ０３）を生成する（Ｓ１０）。そして、アプリ開発者（Ｐ２）は、アプリケーションコード暗号鍵（Ａ０１）を事前に配布されたカード公開鍵（Ｍ０３）で暗号化し、暗号化されたアプリケーションコード暗号鍵（Ａ０４）を生成する（Ｓ１１）。その後アプリ開発者（Ｐ２）は、サービス提供者（Ｐ３）に、暗号化されたアプリケーションコード（Ａ０３）と、暗号化されたアプリケーションコード暗号鍵（Ａ０４）と、アプリケーションコードの署名（Ａ０５）を譲渡する（Ｓ１２）。サービス提供者（Ｐ３）は、受け取ったどちらの暗号データ（Ａ０３、Ａ０４）も復号することができない。
【００２６】
次に、サービス提供者（Ｐ３）が行う作業について、図６を用いて説明する。サービス提供者（Ｐ３）は、アプリ開発者（Ｐ２）から受け取ったアプリケーションコードを個別にカスタマイズするためのアプリケーションデータ（Ｈ０２）（以下、個別イニシャルデータとする）を作成する（Ｓ２０）。尚、作成するすべてのデータについて、アプリケーション１つ１つ個別にデータを変更するか、あるデータは共通化するか等については、サービスの運用ポリシーに因るところであり、考慮しない。サービス提供者（Ｐ３）が個別イニシャルデータ（Ｈ０２）を作成する場合には、別途アプリ開発者（Ｐ２）からアプリケーションの外部仕様を受け取る必要がある。個別イニシャルデータのデータ構造の例として、図８に示すように、最初の１００ｂｙｔｅ（論理アドレス０−９９）は識別情報、次の１０００ｂｙｔｅ（論理アドレス１００−１０９９）は自己証明書データ、次の１０００ｂｙｔｅ（論理アドレス１１００−２０９９）はルート証明書データ、次の３０００ｂｙｔｅ（論理アドレス２１００−５０９９）はファイルシステム情報としてアプリケーションから参照するという外部仕様とする。データの開始地点には長さを示す情報を設定し、その領域のどこまでを有効なデータとしてアプリケーションが参照するべきかを示す。
【００２７】
図６に戻り、サービス提供者（Ｐ３）は、アプリ開発者（Ｐ２）と同様に、作成した個別イニシャルデータ（Ｈ０２）を、独自に作成した鍵（Ｈ０１）（以下、個別イニシャルデータ暗号鍵と呼ぶ）で暗号化し、暗号化した個別イニシャルデータ（Ｈ０３）を作成する（Ｓ２１）。そしてサービス提供者（Ｐ３）は、個別イニシャルデータ暗号鍵（Ｈ０１）を事前にカード製造者（Ｐ１）から配布されているカードの公開鍵（Ｍ０３）で暗号化し、暗号化された個別イニシャルデータ暗号鍵（Ｈ０４）を作成する（Ｓ２２）。この際、サービス提供者（Ｐ３）は、作成した個別イニシャルデータ（Ｈ０２）に対してハッシュ（Ｈ０５）を生成する（Ｓ２３）。
【００２８】
サービス提供者（Ｐ３）は、生成したハッシュ（Ｈ０５）と、アプリ開発者（Ｐ２）から受け取った署名（Ａ０５）と、共通データ（Ｈ０６）から、管理データ（Ｈ０７）を生成する。ここで、共通データ（Ｈ０６）とは、サービス提供者（Ｐ３）が作成する（Ｓ２４）、アプリケーションを識別するための識別情報や、著作権情報などのアプリケーション管理情報や、サービス提供者情報などを含むデータである。図９に管理データ（Ｈ０７）のフォーマット例を記載する。
【００２９】
サービス提供者（Ｐ３）は、管理データ（Ｈ０７）を独自に生成した鍵（以下、管理データ暗号鍵（Ｈ０８）と呼ぶ）で暗号化し、暗号化された管理データ（Ｈ０９）を作成する（Ｓ２５）。続いて、サービス提供者（Ｐ３）は、管理データ暗号鍵（Ｈ０８）を事前にカード製造者（Ｐ１）から配布されているカードの公開鍵（Ｍ０３）を用いて暗号化し、暗号化された管理データ暗号鍵（Ｈ１０）を作成する（Ｓ２６）。
【００３０】
なお、個別イニシャルデータ暗号鍵（Ｈ０１）と管理データ暗号鍵（Ｈ０８）は、サービス提供者（Ｐ３）自身が作成し管理するものなので、同じものを用意してもよいし、別々に用意してもよい。別々に用意した場合、管理の手間が増えるが、鍵漏洩におけるセキュリティ対策はより強固になるので、本実施例では別々に用意した場合について記載する。
【００３１】
サービス提供者（Ｐ３）は、アプリ提供者（Ｐ２）から受け取った暗号化されたアプリケーションコード（Ａ０３）と、暗号化されたアプリケーションコード暗号鍵（Ａ０４）と、暗号化された個別イニシャルデータ（Ｈ０３）と、暗号化された個別イニシャルデータ暗号鍵（Ｈ０４）と、暗号化された管理データ（Ｈ０９）と、暗号化された管理データ暗号鍵（Ｈ１０）とをサーバ運用者（Ｐ４）に配布する（Ｓ２７）。なお、サーバ運用者（Ｐ４）は、受け取ったすべての暗号データ（Ａ０３、Ａ０４、Ｈ０３、Ｈ０４、Ｈ０９、Ｈ１０）を復号することができない。
【００３２】
本実施例では、アプリケーションコード暗号鍵（Ａ０１）、個別イニシャルデータ暗号鍵（Ｈ０１）、管理データ暗号鍵（Ｈ０８）の３つの鍵に用いる暗号アルゴリズムとして、データの暗復号にかかる時間や鍵長を考慮して共通鍵暗号方式を用いた場合について説明した。しかし、共通鍵暗号方式に限定されず、公開鍵暗号方式を用いてもかまわない。尚、本実施例では共通鍵暗号方式のＡＥＳを用いているが、これに限定されず、ＤＥＳやＴ−ＤＥＳ、ＭＩＳＴＹ、Ｃａｍｅｌｌｉａ、ＲＣ６など知られている共通鍵暗号方式でもかまわない。尚、カードが暗号方式に対応するのであれば、今後公表される共通鍵暗号方式にも対応することは可能である。
【００３３】
続いて、図７−ａを用いて説明する。サーバ運用者（Ｐ４）は、図６のＳ２７で受け取ったデータをサーバ（３００）の記憶手段（３００３）に登録する（Ｓ３０）。登録する際、サーバ（３００）は、サービス提供者（Ｐ３）から受け取ったデータが、どのカードの、どのバージョンに対応したものであるかを知る必要がある。カードの種別やバージョン情報を示す情報の例としては、カードの識別情報があり、カードの識別情報は、外部機器（２００）がカード（１００）から取得し、サーバ（３００）に対してデータ要求する際に一緒にサーバに送信される情報である。サーバ（３００）は、前記識別情報に対応する複数の暗号化データを外部機器に送信するために、事前に識別情報を知る必要がある。これらのデータは、サービス提供者（Ｐ３）、もしくはアプリ開発者（Ｐ２）から別途通知される情報である。
【００３４】
カードが出力するバージョン情報とそれに対応したサーバ上のデータ管理形式の例を図１０に示す。カードが前記の識別情報（図１０では、カードＩＤ）を出力するためにコマンドが規定されており、カードの識別情報は、そのコマンドに対応したレスポンスデータで外部機器に通知される。コマンドは、カードに搭載されているアプリケーションや通信レイヤーで規定されたネゴシエーション時にやりとりされるものである。尚、１バージョンのカードだけを運用する場合には、事前にカードの種別やバージョン情報を交換する必要がない。
【００３５】
サーバ（３００）が外部機器（２００）からのデータ要求に対して、データを送信する順番は、管理データ暗号鍵、管理データ、個別イニシャルデータ暗号鍵、個別イニシャルデータ、アプリケーションコード暗号鍵、アプリケーションコードの順とする。尚、前記の順番は、カード内でできるだけデータを一時的に保持せず、順次処理するために好適なものであり、カードに十分な一時記憶領域が存在する場合は、これに限定されるものではない。
【００３６】
次に、カード（１００）と外部機器（２００）間の通信フローを図１２に示す。以下では、図７−ａも用いて説明する。
まず、カード（１００）において、通信手段（１００１）は、暗号化された管理データ暗号鍵（Ｈ１０）を外部機器（２００）経由で受信し（Ｃ０１）、コマンド解釈手段（１００２）に渡す。コマンド解釈手段（１００２）は、前記暗号化された管理データ暗号鍵（Ｈ１０）に付与されているコマンドをチェックし、そのコマンドが何を示しているか、どの目的で使われているのかを解釈する。本実施例では、コマンドの内容は、カード（１００）へのアプリケーションのインストールと想定して以下の動作を記載する。コマンド解釈手段（１００２）は、数値計算手段（１００４）にアプリケーションのインストールであることを通知し、受信データを渡す。数値計算手段（１００４）は、記憶手段（１００５）が保持するカードＲＳＡ秘密鍵（Ｍ０４）を記憶制御手段（１００３）経由で取得し、受信データを暗復号手段（１００６）で復号する（Ｓ３１）。すなわち、Ｓ３１において、カード（１００）は、カード秘密鍵（Ｍ０４）を用いて、暗号化された管理データ暗号鍵（Ｈ１０）を復号し、管理データ暗号鍵（Ｈ０８）を取得する。数値計算手段（１００４）は、復号した管理データ暗号鍵（Ｈ０８）を、記憶制御手段（１００３）を経由して記憶手段（１００５）で保持する。前記の処理が問題なく行えれば、カード（１００）は、外部機器（２００）およびサーバ（３００）に対して正常終了という意味合いを持つコードを出力する（C02）。
【００３７】
次に通信手段（１００１）は、暗号化された管理データ（Ｈ０９）を外部機器経由で受信する（Ｃ０３）。数値計算手段（１００４）は、前記の管理データ暗号鍵（Ｈ０８）を用いて、暗復号手段（１００６）で暗号化された管理データ（Ｈ０９）の復号を行い、管理データ（Ｈ０７）を取得する（Ｓ３２）。復号により得られた管理データ（Ｈ０７）は、予め規定してあるフォーマット（図９）に従っているので、数値計算手段（１００４）は前記フォーマットに従って、データを読み出す。アプリケーションを識別するための情報は、すでにカード内に同じ識別情報を保有しているアプリケーションがないかを調べるために用いる（Ｓ３３）。すなわち、カード（１００）は、Ｓ３３において、管理データ（Ｈ０７）から共通データ（Ｈ０６）を取得し、内容を確認する。そしてカード（１００）は、確認した結果、問題があれば処理を停止し、なければ継続する。具体的には、同じ識別情報がすでにある場合、すなわち、管理データ（Ｈ０７）から共通データ（Ｈ０６）を取得して内容を確認した結果、問題がある場合は、数値計算手段（１００４）は、インストール処理を中止(停止)する。そして数値計算手段（１００４）は、外部機器（２００）に結果を出力する（Ｃ０４）際、正常終了ではなく、識別情報が重複しているというエラーコードにして出力する。重複していなければ、共通データ（Ｈ０６）を記憶制御手段（１００３）経由で記憶手段（１００５）に仮格納する（Ｓ３４）。尚、上記のエラーに限定したものではなく、異常動作をした場合、数値計算手段（１００４）は、事前に外部と取り交わされたその旨を示すコードを出力する。
【００３８】
次に、図７−ｂを用いて説明する。カード（１００）において、通信手段（１００１）は、暗号化された個別イニシャルデータ暗号鍵（Ｈ０４）を外部機器（２００）経由で受信し（Ｃ０５）、数値計算手段（１００４）に渡す。数値計算手段（１００４）は、記憶手段（１００５）で保持するカードＲＳＡ秘密鍵（Ｍ０４）を使って、暗号化された個別イニシャルデータ暗号鍵（Ｈ０４）を暗復号手段（１００６）で復号し、個別イニシャルデータ暗号鍵（Ｈ０１）を取得する（Ｓ３５）。カード（１００）は、復号した個別イニシャルデータ暗号鍵（Ｈ０１）を記憶手段（１００５）で保持する。次に通信手段（１００１）は、サーバ（３００）から、暗号化された個別イニシャルデータ（Ｈ０３）を外部機器（２００）経由で受信する（Ｃ０７）。通信手段（１００１）は、前記データを数値計算手段（１００４）に渡す。数値計算手段（１００４）は、前記の個別イニシャルデータ暗号鍵（Ｈ０３）を用いて、暗号化された個別イニシャルデータ（Ｈ０３）の復号を暗復号手段（１００６）で行い、個別イニシャルデータ（Ｈ０２）を取得する（Ｓ３６）。個別イニシャルデータ（Ｈ０２）の内容は、後述のアプリケーションコード（Ａ０２）が解釈するものであり、カード（１００）が解釈する必要はない。数値計算手段（１００４）は、復号した個別イニシャルデータ（Ｈ０２）のハッシュをハッシュ生成手段（１００９）で生成し（Ｓ３７）、管理データに含まれている個別イニシャルデータのハッシュ（Ｈ０５）と同じであるかを、照合手段（１００７）を用いて確認する（Ｓ３８）。同じであれば、数値計算手段（１００４）は、個別イニシャルデータ（Ｈ０２）を記憶制御手段（１００３）経由で記憶手段（１００５）に仮格納する（Ｓ３９）。異なる場合、数値計算手段（１００４）はインストール処理を中止する（Ｓ４０）。カード（１００）は、外部機器（２００）、サーバ（３００）に結果を出力する（Ｃ０８）際、正常終了ではなく、ハッシュが異なるという旨を示すエラーコードを出力する。
【００３９】
次に、図７−ｃを用いて説明する。カード（１００）において、通信手段（１００１）は、サーバ（３００）から、暗号化されたアプリケーションコード暗号鍵（Ａ０４）を外部機器（２００）経由で受信し（Ｃ０９）、数値計算手段（１００４）に渡す。数値計算手段（１００４）は、記憶手段（１００５）で保持するカードＲＳＡ秘密鍵（ＭＯ４）を使って、暗復号手段（１００６）で復号し、アプリケーションコード暗号鍵（Ａ０１）を取得する（Ｓ４１）。カード（１００）は、復号したアプリケーションコード暗号鍵（Ａ０１）を記憶手段（１００５）で保持する。次に通信手段（１００１）は、サーバ（３００）から、暗号化されたアプリケーションコード（Ａ０３）を外部機器（２００）経由で受信する（Ｃ１１）。通信手段（１００１）は、前記データを数値計算手段（１００４）に渡す。数値計算手段（１００４）は、前記のアプリケーションコード暗号鍵（Ａ０１）を用いて、暗号化されたアプリケーションコード（Ａ０３）の復号を暗復号手段（１００６）で行い、アプリケーションコード（Ａ０２）を取得する（Ｓ４２）。アプリケーションコード（Ａ０２）は、事前に製造者によって動作確認されているという前提があるので、カード（１００）で新たに前記アプリケーションコードの動作を検証する必要はない。数値計算手段（１００４）は、アプリケーションコード（Ａ０２）を記憶制御手段（１００３）経由で記憶手段（１００５）に仮格納する（Ｓ４３）。カードは復号したアプリケーションコード（Ａ０２）のハッシュをハッシュ生成手段（１００９）で生成する（Ｓ４４）。数値計算手段（１００４）は、製造者の公開鍵（Ｍ０１）を使って署名（Ａ０５）を暗復号手段（１００６）で復号し、ハッシュを取得し、前記生成したアプリケーションコードのハッシュと照合手段（１００７）で照合する（Ｓ４５）。同じであれば、数値計算手段（１００４）は、アプリケーションコード（Ａ０２）を記憶手段（１００５）に格納する。異なる場合、数値計算手段（１００４）はインストール処理を中止する（Ｓ４６）。数値計算手段（１００４）は、外部機器（２００）、サーバ（３００）に結果を出力する（Ｃ１０）際、正常終了ではなく、署名が異なるという旨を示すエラーコードを出力する。同じである場合、数値計算手段（１００４）はすべてのデータが正常であることを確認し、判断手段（１００８）に通知し、インストール処理を終了する。判断手段（１００８）は、署名が正当である通知を受け、署名と一緒に暗号化されていた個別イニシャルデータのハッシュ、共通データを正当であると判断し、該当アプリケーションに関連する共通データ、個別イニシャルデータ、アプリケーションコードをカード内で動作可能な状態に変更させる。具体的には、アプリケーションの状態は、記憶手段（１００６）で管理されており、外部機器（２００）からの要求によって、数値計算手段（１００４）が記憶制御手段（１００３）経由で記憶手段（１００５）から前記状態を確認し、アプリケーションとして動作可能と示されていれば、記憶手段（１００５）は、アプリケーションコードを呼び出し、コマンド解釈手段（１００２）から送られてくるコマンドをアプリケーションコードに渡すように動作することになる。
【００４０】
本発明のダウンロード、インストール方法は、最終的な信頼ポイントをアプリケーションコードの署名確認においており、署名確認が正常に終了したことを受け、署名と一緒に暗号データに格納されていた個別イニシャルデータのハッシュを信頼し、そのハッシュと一致する個別イニシャルデータを信頼することになる。署名データは、製造者によって付与されており、署名生成に使用する製造者の秘密鍵は、カードには格納されておらず、市場に出ることがないため、漏洩の危険性は低い。また、アプリ開発者（Ｐ２）、サービス提供者（Ｐ３）が独自に鍵生成をしているため、どちらかで鍵が漏洩した場合も、その影響をもう一方が受ける心配がない。また、独自に生成した鍵を配布する方法は、公開鍵暗号方式を採用しているため、アプリ開発者同士、サービス提供者同士でも鍵を復号することはできず、カード秘密鍵を所有するカードだけが復号を行うことができる。
【００４１】
次に、上記データの更新を行う手順を説明する。
【００４２】
相互認証をしない場合、サーバ、カードがお互いに相手のなりすましを防ぐ方法がないため、サーバはどのカードにアプリケーションがインストールされたのか管理することができず、カードは、どのサービス提供者のアプリケーションをインストールしたのか分からない。そのため、カード上のアプリケーションを更新する場合、同じサービス提供者から配布されたアプリケーションであるかをカードが確認することができない。そのため、一旦アプリケーションを削除して、再度インストールすることはできるが、更新時に最初のアプリケーションとの関連性が立証できないため、一部のデータをカードに残しておき、データ処理部だけを変更するといった更新処理を実現することが出来ない課題がある。そこで、前述のダウンロード、インストール方法を用いてインストールしたアプリケーションを更新する際、外部認証無しで適切なサービス提供者からのアプリケーションの更新であることを検証し、更新処理を実現する方法を以下に説明する。
【００４３】
データには前述したように、管理データ、個別イニシャルデータ、アプリケーションコードの３つが存在する。管理データは、個別イニシャルデータとアプリケーションコードに関連したデータを格納するため必ず存在するが、個別イニシャルデータ、もしくはアプリケーションコードだけを更新する場合が存在する。
【００４４】
個別イニシャルデータだけを更新する場合は、管理データの中に、個別イニシャルデータのハッシュ（Ｈ０５）と、更新するアプリケーション識別情報（共通データ）（Ｈ０６）を格納して暗号化し、暗号化された個別イニシャルデータと一緒に送信する。アプリケーションコードだけを更新する場合、管理データの中に、アプリケーションコードの署名と、更新するアプリケーション識別情報（共通データ）（Ｈ０６）を格納して暗号化し、暗号化されたアプリケーションコードと一緒に送信する。
【００４５】
前記の通り、本発明のダウンロード、インストール方法は、署名データに信頼ポイントを置くため、個別イニシャルデータだけの更新の場合、署名データ（Ａ０５）が含まれておらず、カードは信頼性を確立できない。そのため、更新を行う場合に備え、最初にインストールする際に、個別イニシャルデータ暗号鍵を一緒に保存しておき、更新時には、公開鍵で暗号化された鍵データから鍵を復号するのではなく、予めカード内で保持している個別イニシャルデータ暗号鍵を利用して復号を行う。サービス提供者しか知りえない個別イニシャルデータ暗号鍵を使うことができ、復号したデータのハッシュが管理データで送られてきたハッシュと一致するということは、最初にインストールしたサービス提供者（Ｐ３）、またはそれに準ずる情報を持つ代理のサービス提供者であることが分かる。この方法を使うことにより、カードによる外部認証や、サーバによるアプリケーション管理をすることなく、カードだけで、最初のインストール時と同一のサービス提供者だけを更新可能なプレイヤーに制限できる。
【００４６】
アプリケーションコードについても、上記の方法を利用することで、最初にインストールした時のアプリ開発者（Ｐ２）だけに制限した更新処理にすることができる。アプリケーションコードには署名（Ａ０５）が付いているため、アプリケーションコード自体を改ざんすることができないが、更新時には、個別イニシャルデータ（Ｈ０２）との関連性が見出せないため、すでにカードにインストール済みの他の個別イニシャルデータを持つアプリケーションコードに対して、アプリケーションコード部分だけをすり替えて他のアプリケーションの個別イニシャルデータを参照することができてしまう。そのため、上記のような対策により更新を行うものに対して制限を付けることが重要である。
【００４７】
カード（１００）と外部機器（２００）間の通信フローを図１４で示し、図１５−ａ、図１５−ｂを使って、各プレイヤーが行う処理フローを説明する。
アプリ開発者が再度アプリケーションコードを開発し、そのアプリケーションコードがサービス提供者を通じてサーバ運用者に納入され、暗号データになってサーバ運用者が登録する部分の処理については、新規インストールでのデータ準備と比較して、サービス提供者が個別イニシャルデータを生成しない部分と個別イニシャルデータのハッシュを管理データに含めない事が異なるだけなので、フローの説明については割愛する。
【００４８】
まず、図１５−ａを用いて説明する。サーバ運用者（Ｐ４）は、サービス提供者（Ｐ３）から納入された、暗号化されたアプリケーションコード（A03）、暗号化された管理データ（H09）、暗号化された管理データ暗号鍵（H10）を更新用アプリケーションとして、サーバ（３００）に登録する（Ｚ００）。このとき、外部機器（２００）からの要求に対応するために、更新用アプリケーションのバージョン情報や説明などを付与して外部から明示的に分かるようにしておく。または外部機器（２００）からの更新要求に予めなんらかの情報が含まれている場合は、サーバ（３００）は前記情報に対応して、アプリケーションを配信することになる。その際、外部機器（２００）から送信される前記情報には、アプリケーションの識別情報やカードに格納されている現在のアプリケーションのバージョン情報、カード識別情報などがある。
【００４９】
まず、カード（１００）において、通信手段（１００１）は、サーバ（３００）から、暗号化された管理データ暗号鍵（Ｈ１０）を外部機器（２００）経由で受信し（Ｚ０１）、コマンド解釈手段（１００２）に渡す。コマンド解釈手段（１００２）は、前記データに付与されているコマンドをチェックし、そのコマンドが何を示しているか、どの目的で使われているのかを解釈する。コマンドの内容は、アプリケーションコードの更新処理と想定して以下の動作を記載する。更新作業を判別する部分については、コマンド解釈手段（１００２）で更新処理であるかを確認する方法と、インストール処理として最初は処理し、アプリケーションの識別子に対応するアプリケーションの状態を確認することで、次に行う処理を更新処理としてカード（１００）が自動的に認識する方法がある。本実施例では、コマンドによる解釈を行い、処理内容を確定する場合を記載する。
【００５０】
コマンド解釈手段（１００２）は、数値計算手段（１００４）にアプリケーションコードの更新処理であることを通知し、受信データを渡す。数値計算手段（１００４）は、記憶手段（１００５）が保持するカードＲＳＡ秘密鍵（Ｍ０４）を記憶制御手段（１００３）経由で取得し、受信データを暗復号手段（１００６）で復号し、管理データ暗号鍵（Ｈ０８）を取得する（Ｓ５１）。数値計算手段（１００４）は、復号した管理データ暗号鍵（Ｈ０８）を記憶制御手段（１００３）経由で記憶手段（１００５）に保持する（Ｓ５１）。前記の処理が問題なく行えれば、外部機器（２００）、サーバ（３００）に対して正常終了という意味合いを持つコードを出力する（Ｚ02）。
【００５１】
次に通信手段（１００１）は、サーバ（３００）から、暗号化された管理データ（Ｈ０９）を外部機器（２００）経由で受信する（Ｚ０３）。数値計算手段（１００４）は、前記の管理データ暗号鍵（Ｈ０８）を用いて、暗復号手段（１００６）で暗号化された管理データ（Ｈ０９）の復号を行い、管理データ（Ｈ０７）を取得する（Ｓ５２）。復号した管理データ（Ｈ０７）は、予め規定してあるフォーマット（図９）に従っているので、数値計算手段（１００４）は前記フォーマットに従って、データを読み出す。更新の場合、すべてのデータが埋められているわけではなく、更新時に必要な情報が含まれていればよい。本実施例の場合は、アプリケーションコードの更新にあたるため、個別イニシャルデータのバージョン情報、個別イニシャルデータのサイズ、個別イニシャルデータのハッシュが記載されていなくて良く、アプリケーション識別子長、アプリケーション識別子、アプリケーションコードのバージョン情報、アプリケーションコードサイズ、アプリケーションコードの署名（Ａ０５）が必須になる。アプリケーションを識別するための情報は、更新するアプリケーションがカード（１００）内にあるかを調べるために用いる（Ｓ５３）。また更新対象のアプリケーションが更新可能な状態を保持しているかを、記憶手段（１００５）で保持しているアプリケーションの状態から確認する。同じ識別情報がない場合や更新可能な状態でない場合は、数値計算手段（１００４）はインストール処理を中止する。数値計算手段（１００４）は、外部機器（２００）、サーバ（３００）に結果を出力する（Ｚ０４）際、正常終了ではなく、対象アプリケーションがないというエラーコードにして出力する。対象アプリケーションがあれば、カード（１００）は、共通データを記憶制御手段（１００３）経由で記憶手段（１００５）に仮格納する（Ｓ５４）。尚、上記のエラーに限定したものではなく、異常動作をした場合は、事前に外部と取り交わされたその旨を示すコードを出力する。
【００５２】
次に、図１５−ｂを用いて説明する。カード（１００）において、通信手段（１００１）は、サーバ（３００）から、暗号化されたアプリケーションコード（Ａ０３）を外部機器（２００）経由で受信する（Ｚ０５１）。通信手段（１００１）は、前記データを数値計算手段（１００４）に渡す。数値計算手段（１００４）は、更新対象のアプリケーションの識別子とアプリケーションコードの更新という情報から、最初のデータ格納時にデータを復号したアプリケーションコード暗号鍵（Ａ０１）を記憶手段（１００５）から取得する（Ｓ５５）。前記のアプリケーションコード暗号鍵（Ａ０１）を用いて、暗号化されたアプリケーションコード（Ａ０３）の復号を暗復号手段（１００６）で行う（Ｓ５６）。アプリケーションコードは、事前に製造者によって動作確認されているという前提があるので、カード（１００）で新たに前記アプリケーションコードの動作を検証する必要はない。数値計算手段（１００４）は、アプリケーションコードを記憶制御手段（１００３）経由で記憶手段（１００５）に仮格納する（Ｓ５７）。カード（１００）は、復号したアプリケーションコード（Ａ０２）のハッシュをハッシュ生成手段（１００９）で生成する（Ｓ５８）。数値計算手段（１００４）は、製造者の公開鍵（Ｍ０１）を使って署名（Ａ０５）を暗復号手段（１００６）で復号し、ハッシュを取得し、前記生成したアプリケーションコードのハッシュと照合手段（１００７）で照合する（Ｓ５９）。同じであれば、数値計算手段（１００４）は、アプリケーションコード（Ａ０２）を記憶手段（１００５）に格納する。異なる場合、数値計算手段（１００４）はインストール処理を中止する（Ｓ６０）。数値計算手段（１００４）は、外部機器（２００）、サーバ（３００）に結果を出力する（Ｚ０６）際、正常終了ではなく、署名が異なるという旨を示すエラーコードを出力する。同じである場合、数値計算手段（１００４）はすべてのデータが正常であることを確認し、判断手段（１００８）に通知し、インストール処理を終了する。判断手段（１００８）は、署名が正当である通知を受け、署名と一緒に暗号化されていた共通データを正当であると判断し、該当アプリケーションに関連する共通データ、アプリケーションコードをカード内で動作可能な状態に変更させる。
【００５３】
また、前記の説明では、外部機器（２００）とカード（１００）間の通信路について詳細に記載していないが、高速に記憶部にアクセスできるが事前に領域指定が必要な通信路（以下、高速通信路と呼ぶ）と、それより速度は劣るが領域指定を内部で解釈して行ってくれる通信路（以下、低速通信路と呼ぶ）の２系統を保持するカード（図１１）がある。
【００５４】
カードが複数の通信方式に対応している場合、その処理内容によって、インストール途中で方式の切り替えをしたい場合がある。サーバ上のデータが暗号化されている場合、サーバ、外部機器は、その内容を見ることができず、切り替えるタイミングを把握することができない。また、サーバが事前に切り替えるタイミングを別の平文情報として持っていても、外部機器経由で切り替えを指定した場合に、外部機器を認証ができていないカードは、そのコマンドを信用することができない課題がある。そこで、前述のダウンロード、インストール方法を用いても、カードがもつ複数の通信方法を適切に動的に切り替える方法を提供する。
【００５５】
カード（１００）が内容を解釈してデータを格納する管理データ（Ｈ０７）は、低速通信路を使ってデータを書き込む必要があるが、カードが内容を解釈しない個別イニシャルデータ（Ｈ０２）、アプリケーションコード（Ａ０２）は、高速通信路を使ってデータを書き込むことができる。特に個別イニシャルデータ（Ｈ０２）、アプリケーションコード（Ａ０２）が大容量である場合は、その効果は大きく、インストール時間の短縮を図ることができる。また、低速通信路と高速通信路に分けた場合、そのデータが正常な外部機器（２００）から送られてきたかが不確かになるが、その部分は前記署名データ（Ａ０５）と前記ハッシュ（Ｈ０５）が２つの通信路の関連性を保障できるため問題ない。
カードが２系統通信路を保持している場合のカード（１００）と外部機器（２００）間の通信フローを図１３で示し、図１６−ａ、図１６−ｂ、図１６−ｃを使って、各プレイヤーが行う処理フローを説明する。
【００５６】
まず、図１６−ａを用いて説明する。カード（１００）において、通信手段（１００１）は、サーバ（３００）から、暗号化された管理データ暗号鍵（Ｈ１０）を外部機器（２００）経由で受信し（Ｃ０１）、コマンド解釈手段（１００２）に渡す。コマンド解釈手段（１００２）は、前記データに付与されているコマンドをチェックし、そのコマンドが何を示しているか、どの目的で使われているのかを解釈する。本実施例では、コマンドの内容は、カードへのアプリケーションのインストールと想定して以下の動作を記載する。コマンド解釈手段（１００２）は、数値計算手段（１００４）にアプリケーションのインストールであることを通知し、受信データを渡す。数値計算手段（１００４）は、記憶手段（１００５）が保持するカードＲＳＡ秘密鍵（Ｍ０４）を記憶制御手段（１００３）経由で取得し、受信データを暗復号手段（１００６）で復号し、管理データ暗号鍵（Ｈ０８）を取得する（Ｓ３１）。数値計算手段（１００４）は、復号した管理データ暗号鍵（Ｈ０８）を、記憶制御手段（１００３）を経由して記憶手段（１００５）で保持する。前記の処理が問題なく行えれば、カード（１００）は、外部機器（２００）、サーバ（３００）に対して正常終了という意味合いを持つコードを出力する（C02）。
【００５７】
次に通信手段（１００１）は、暗号化された管理データ（Ｈ０９）を外部機器（２００）経由で受信する（Ｃ０３）。数値計算手段（１００４）は、前記の管理データ暗号鍵（Ｈ０８）を用いて、暗復号手段（１００６）で暗号化された管理データ（Ｈ０９）の復号を行い、管理データ（Ｈ０７）を取得する（Ｓ３２）。復号した管理データ（Ｈ０７）は、予め規定してあるフォーマット（図９）に従っているので、数値計算手段（１００４）は前記フォーマットに従って、データを読み出す。アプリケーションを識別するための情報は、すでにカード（１００）内に同じ識別情報を保有しているアプリケーションがないかを調べるために用いる（Ｓ３３）。同じ識別情報がすでにある場合は、数値計算手段（１００４）はインストール処理を中止する。数値計算手段（１００４）は、外部機器（２００）、サーバ（３００）に結果を出力する（Ｃ０４）際、正常終了ではなく、識別情報が重複しているというエラーコードにして出力する。重複していなければ、共通データを記憶制御手段（１００３）経由で記憶手段（１００５）に仮格納する（Ｓ３４）。尚、上記のエラーに限定したものではなく、異常動作をした場合は、事前に外部と取り交わされたその旨を示すコードを出力する。
【００５８】
次に、図１６−ｂを用いて説明する。カード（１００）において、通信手段（１００１）は、暗号化された個別イニシャルデータ暗号鍵（Ｈ０４）を外部機器（２００）経由で受信し（Ｃ０５）、数値計算手段（１００４）に渡す。数値計算手段（１００４）は、記憶手段（１００５）で保持するカードＲＳＡ秘密鍵（Ｍ０４）を使って、暗復号手段（１００６）で復号し、個別イニシャルデータ暗号鍵（Ｈ０１）を取得する（Ｓ３５）。復号した個別イニシャルデータ暗号鍵（Ｈ０１）をカード内の記憶手段（１００５）で保持する。数値計算手段（１００４）は、次の個別イニシャルデータを低速通信路ではなく、高速通信路を使って受信する判断をし、記憶制御手段（１００３）からデータを展開するアドレス情報を取得し、領域制御手段（1010）に通知する（Ｓ８０前段）。数値計算手段（１００４）は、復号した個別イニシャルデータ暗号鍵（Ｈ０１）を、領域制御手段（1010）に通知する。領域制御手段（１０１０）は、受信したアドレス情報を保持し、アドレス情報に対応した外部に公開するためのエリア番地とエリアサイズ（以下、前記２つの情報を合わせてエリア情報とする）を生成し（Ｓ８０後段）、数値計算手段（１００４）に送信する。数値計算手段（１００４）は、前記エリア情報を外部機器（２００）に出力する（Ｄ０１）。領域制御手段（１０１０）は、受信した個別イニシャルデータ暗号鍵（Ｈ０１）を復号用鍵として設定する。
【００５９】
外部機器（２００）は、受信したエリア情報を使って、高速通信路を利用して、書き込むエリア番地と書き込むエリアサイズ（書込みサイズ）をカード（１００）に通知するコマンド（以下、領域情報設定コマンドとする）を送信する（Ｄ０２）。エリアサイズは、通知されたサイズより小さくなってもかまわない。通信手段（１００１）は、前記領域情報設定コマンドを受信し、そのデータをコマンド解釈手段（１００２）に送信する。コマンド解釈手段（１００２）は、前記領域情報設定コマンドを解釈し、領域制御手段（１０１０）にエリア番地と書込みサイズを通知する。領域制御手段（１０１０）は、エリア番地を確認し、書込みサイズを設定する（Ｓ８１）。番地が異なる場合や、サイズが予め通知したサイズより大きい場合はエラーとなる。
【００６０】
次に通信手段（１００１）は、高速通信路を使って送信された暗号化された個別イニシャルデータ（Ｈ０３）を受信する（Ｄ０３）。通信手段（１００１）は、前記データをコマンド解釈手段（１００２）に渡す。コマンド解釈手段（１００２）は、受信したデータを領域制御手段（１０１０）に送信する。
【００６１】
領域制御手段（１０１０）は、前記の個別イニシャルデータ暗号鍵（Ｈ０１）を用いて、暗号化された個別イニシャルデータ（Ｈ０３）の復号を暗復号手段（１００６）で行い、個別イニシャルデータ（Ｈ０３）を取得する（Ｓ８２）。そして領域制御手段（１０１０）は、復号した個別イニシャルデータ（Ｈ０２）を記憶手段（１００５）に仮格納する（Ｓ８４）。領域制御手段（１０１０）は個別イニシャルデータ（Ｈ０２）のハッシュをハッシュ生成手段（１００９）で生成する（Ｓ８３）。
【００６２】
次に、通信手段（１００１）は、アプリケーション暗号鍵を暗号化したデータ（Ａ０４）を外部機器（２００）経由で受信し（Ｄ０４）、数値計算手段（１００４）に渡す。数値計算手段（１００４）は、領域制御手段（１０１０）で生成したハッシュを取得し、管理データに含まれていた個別イニシャルデータのハッシュ（Ｈ０５）と同じであるかを、照合手段（１００７）を用いて確認する（Ｓ８５）。
【００６３】
続いて、図１６−ｃに移る。領域制御手段（１０１０）で生成したハッシュと、管理データに含まれていた個別イニシャルデータのハッシュ（Ｈ０５）が異なる場合、数値計算手段（１００４）はインストール処理を中止する。カード（１００）は、外部機器（２００）、サーバ（３００）に結果を出力する（Ｄ０５）際、正常終了ではなく、ハッシュが異なるという旨を示すエラーコードを出力する（Ｓ８６）。数値計算手段（１００４）は、記憶手段（１００５）で保持するカードＲＳＡ秘密鍵（ＭＯ４）を使って、暗復号手段（１００６）で暗号化されたアプリケーション暗号鍵（Ａ０４）を復号し、アプリケーションコード暗号鍵（Ａ０１）を取得する（Ｓ８７）。数値計算手段（１００４）は、次のアプリケーションコードを低速通信路ではなく、高速通信路を使ってコードを受信する判断をし、記憶制御手段（１００３）からコードを展開するアドレス情報を取得し、領域制御手段（1010）に通知する。数値計算手段（１００４）は、復号したアプリケーションコード暗号鍵（Ａ０１）を、領域制御手段（1010）に通知する。領域制御手段（１０１０）は、受信したアドレス情報を保持し、アドレス情報に対応した外部に公開するためのエリア番地とエリアサイズ（以下、前記２つの情報を合わせてエリア情報とする）を生成し、数値計算手段（１００４）に送信する（Ｓ８８）。数値計算手段（１００４）は、前記エリア情報を外部機器（２００）に出力する（Ｄ０５）。領域制御手段（１０１０）は、受信したアプリケーションコード暗号鍵（Ａ０１）を復号用鍵として設定する。
【００６４】
外部機器（２００）は、受信したエリア情報を使って、高速通信路を利用して、書き込むエリア番地と書き込むエリアサイズ（書込みサイズ）をカードに通知するコマンド（以下、領域情報設定コマンドとする）を送信する（Ｄ０６）。エリアサイズは、通知されたサイズより小さくなってもかまわない。通信手段（１００１）は、前記領域情報設定コマンドを受信し、そのデータをコマンド解釈手段（１００２）に送信する。コマンド解釈手段（１００２）は、前記領域情報設定コマンドを解釈し、領域制御手段（１０１０）にエリア番地と書き込むサイズを通知する。領域制御手段（１０１０）は、エリア番地を確認し、書込みサイズを設定する（Ｓ８９）。番地が異なる場合や、サイズが予め通知したサイズより大きい場合はエラーとなる。
【００６５】
次に通信手段（１００１）は、サーバ（３００）から、高速通信路を使って送信された暗号化されたアプリケーションコード（Ａ０３）を外部機器（２００）経由で受信する（Ｄ０７）。通信手段（１００１）は、前記データをコマンド解釈手段（１００２）に渡す。コマンド解釈手段（１００２）は、受信したデータを領域制御手段（１０１０）に送信する。
【００６６】
領域制御手段（１０１０）は、前記のアプリケーション暗号鍵（Ａ０１）を用いて、暗号化された個別イニシャルデータの復号を暗復号手段（１００６）で行い、アプリケーションコード（Ａ０２）を取得する（Ｓ９０）。領域制御手段（１０１０）はアプリケーションコード（Ａ０２）のハッシュをハッシュ生成手段（１００９）で生成する（Ｓ９１）。数値計算手段（１００４）は、復号したアプリケーションコード（Ａ０２）を記憶手段（１００５）に仮格納する（Ｓ９２）。
【００６７】
次に、通信手段（１００１）は、照合を要求するコマンドを外部機器（２００）から受信し（Ｄ０８）、数値計算手段（１００４）に渡す。数値計算手段（１００４）は、領域制御手段（１０１０）で生成したハッシュを取得し、製造者の公開鍵（Ｍ０１）を使って管理データに含まれていた署名（Ａ０５）を暗復号手段（１００６）で復号してハッシュを取得し、前記取得したアプリケーションコードのハッシュと照合手段（１００７）で照合する（Ｓ９３）。異なる場合、数値計算手段（１００４）はインストール処理を中止する。数値計算手段（１００４）は、外部機器（２００）、サーバ（３００）に結果を出力する（Ｄ０９）際、正常終了ではなく、ハッシュが異なるという旨を示すエラーコードを出力する。同じである場合、数値計算手段（１００４）は、判断手段（１００８）に署名が正常であることを通知し、インストール処理を終了する（Ｓ９４）。判断手段（１００８）は、署名が正当である通知を受け、署名と一緒に暗号化されていた個別イニシャルデータのハッシュ、共通データを正当であると判断し、該当アプリケーションに関連する共通データ、個別イニシャルデータ、アプリケーションコードをカード内で動作可能な状態に変更させる。数値計算手段（１００４）は、正常終了した旨を示すコードを外部機器（２００）、サーバ（３００）に出力する（Ｄ０９）。
【００６８】
本発明では、外部機器（２００）は、カード（１００）からの出力データに付与された領域情報（Ｄ０１、Ｄ０５）を使って、高速通信路を使うタイミングと書き込み対象領域、対象領域サイズを知ることができる。外部機器（２００）は、受信した前記領域情報をカード（１００）に送信して、次に高速通信路を使って書き込む領域情報とサイズをカード（１００）に伝える（Ｄ０２、Ｄ０６）。その次に高速通信路を使って、カード（１００）にデータ（個別イニシャルデータ、アプリケーションコード）を書き込む（Ｄ０３、Ｄ０７）。
【００６９】
本発明を使うことにより、外部機器（２００）がサーバ（３００）からの暗号データを受信するだけでは知りえない情報、すなわち、カード（１００）が通信路を複数持っているのか、またはどのタイミングで低速通信路と高速通信路を切り替えるのか、どこにデータを書き込むのかという点を一度に通知することができる。
【００７０】
外部機器（２００）は、前記の通信路の本数についてはカード（１００）の識別情報から判別することも可能であり、タイミングについてはカード（１００）に送信する暗号データの種別を事前に外部機器（２００）が知っていれば、切り替えることが可能である。だが、データを書き込む領域についてはカード（１００）から情報を取得しないと知ることが不可能である。そのため前記領域情報を取得した時に切り替え作業を行うことが、他の判別方法を行わずに済み、効率が良い。
【００７１】
また、アプリ開発者（Ｐ２）がカード製造者（Ｐ１）に対して署名の申請をする方法において、アプリ開発者（Ｐ２）を物理的、視覚的、社会的に確認する方法は、システムの規定外であり、公共機関、金融機関等が実施している本人確認方法を利用しても構わない。また、生成された署名を配送する仕組みや、カード製造者（Ｐ１）からアプリ開発者（Ｐ２）に配布される開発環境を配送する仕組みにおいても同様に、一般的な配布方法を採用するとし言及しない。また、上記の開発環境を使って、署名の申請を行い、アプリ開発者先にある開発環境と製造者間で暗号セッションを構築し署名を配送することも可能であるが、開発環境の配布が正しく安全にできないと実現できない。
【００７２】
本実施例では、プレイヤーとしてアプリ開発者、サービス提供者、サーバ運用者の3者に分けているが、3者の処理内容として、共通に使うデータを構築する、個別に使うデータを構築する、それを配信するという形態に限定されるわけではない。最終的な信用ポイントを製造者が付与するアプリケーションの署名においており、それに関連付けされたデータを含めて信用してインストールするところが本特許の目的であり、前記の3者が行う処理内容の変更によって、本発明は何ら影響を受けない。
【００７３】
尚、本実施例では、全カードに共通のカードＲＳＡ秘密鍵（Ｍ０４）を設定しているが、何らそれを限定するものではなく、全カードに個別のカードＲＳＡ秘密鍵（Ｍ０４）が設定されていても問題ない。その場合は、カードＲＳＡ秘密鍵（Ｍ０４）に対応する公開鍵証明書をカード内で保持しておき、サーバにその公開鍵証明書を送付する。サーバ側は、証明書の正当性を検証後に、その証明書に含まれる公開鍵を利用して、データ（個別イニシャルデータ、アプリケーションコード）を暗号化することができるので、カード個別にデータを送付することが可能である。
【００７４】
尚、本実施例では、カードにカード製造者（Ｐ１）の公開鍵（Ｍ０１）を設定しているが、何らそれを限定するものではなく、カード製造者から署名処理の権限を委譲された事業者であれば、代理で署名処理を行う事ができる。その場合は、カード製造者は、権限を委譲する事業者の公開鍵ペアにカード製造者の秘密鍵を用いて、証明書を発行する。委譲された事業者は、自身の秘密鍵を使って、アプリケーションコードに署名を付与する。委譲された事業者は、製造者が発行した前記証明書をカードに送付する。カードは、受信した証明書に対して、カード内にあるカード製造者の公開鍵（Ｍ０１）を用いて証明書検証を行い、正当であると判断できたら、証明書に含まれる公開鍵をアプリケーションの署名検証用鍵として用いる。委譲された事業者が生成した署名を含む暗号データをカードに送付すると、カードは、前記署名検証用鍵を使用するため、委譲された事業者が生成した署名の正当性を確認することができる。
【００７５】
尚、本実施例で記載しているハッシュを生成する方法は一方向性関数を使っており、従来技術では、ＳＨＡ−１やＭＤ５、ＳＨＡ−２５６などを指している。使用する目的とするところは、大規模なデータを要約し、少ないデータ量で識別することであり、前記データがすでに小さいもので、ハッシュをする生成する必要がなければそのままの値を比較しても良い。
【００７６】
尚、本実施例で記載している署名は公開鍵暗号方式の場合に限って記載しているのではなく、利用する暗号アルゴリズムが共通鍵暗号方式であれば、署名はメッセージ認証コード（ＭＡＣ：Ｍａｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）に当たる。署名の生成方法に関して、本実施例ではハッシュを作成してから秘密鍵にて署名を施しているが、前記ハッシュを生成する方法でも記載したが、データがすでに小さいものであれば、前記データをそのまま利用しても構わない。
【００７７】
尚、本実施例では、サーバと外部機器間の通信路については、ＨＴＴＰ、もしくはＨＴＴＰＳと記載したが、それに限定されるものではなく、有線、無線に関係無く、一般的にサーバと外部機器が通信する方法であれば、本発明に何ら影響はない。よって、サーバと外部機器が独自に暗号通信を行うことも可能であり、前記暗号通信を行うことによってカードの振る舞いは変わらない。
【００７８】
本実施例で示しているシステムが、本発明のセキュアメモリカードシステムの一例であり、システム内で使用されているカードがセキュアメモリカードにあたり、外部機器がアクセス装置にあたる。またカード内に含まれる記憶手段が不揮発性メモリにあたり、それ以外の手段を実現しているのが、本発明のメモリコントローラにあたる。
【００７９】
本発明を詳細にまた特定の実施態様を参照して説明したが、本発明の精神と範囲を逸脱することなく様々な変更や修正を加えることができることは当業者にとって明らかである。
本出願は、2006年8月10日出願の日本特許出願（特願2006−218795）に基づくものであり、その内容はここに参照として取り込まれる。
【産業上の利用可能性】
【００８０】
本発明にかかるセキュアメモリカードは、データを受信し、保存するセキュアメモリカードとして利用できる。
【図面の簡単な説明】
【００８１】
【図１】サーバ、外部機器、カードの関係図
【図２】カード構成図
【図３】サーバ、外部機器、カードの構成図
【図４】プレイヤーの関係図
【図５】アプリ開発者、サービス提供者、カード製造者、カード間での処理フロー
【図６】サーバ運用者、サービス提供者間での処理フロー
【図７−ａ】サーバ運用者、サーバ、外部機器、カード間での処理フロー  １
【図７−ｂ】サーバ運用者、サーバ、外部機器、カード間での処理フロー  ２
【図７−ｃ】サーバ運用者、サーバ、外部機器、カード間での処理フロー  ３
【図８】個別イニシャルデータの例を示す図
【図９】管理データフォーマットの例を示す図
【図１０】サーバでのデータ格納構成とカードバージョン情報との関係図
【図１１】領域制御手段を含むカード構成図
【図１２】カードと外部機器間の通信フロー
【図１３】２系統保持するカードと外部機器間の通信フロー
【図１４】データ更新時での通信フロー
【図１５−ａ】データ更新時の処理フロー  １
【図１５−ｂ】データ更新時の処理フロー  ２
【図１６−ａ】２系統保持するカードとの処理フロー  １
【図１６−ｂ】２系統保持するカードとの処理フロー  ２
【図１６−ｃ】２統保持するカードとの処理フロー  ３
【符号の説明】
【００８２】
１００  カード
１００１  通信手段
１００２  コマンド解釈手段
１００３  判断手段
１００４  数値計算手段
１００５  記憶手段
１００６  暗復号手段
１００７  照合手段
１００８  判断手段
１００９  ハッシュ生成手段
１０１０  領域制御手段
２００  外部機器
２００１  通信手段
２００２  プロトコル変換手段
２００３  一時記憶手段
３００  サーバ
３００１  通信手段
３００２  記憶制御手段
３００３  記憶手段
Ｐ１  カード製造者
Ｐ２  アプリケーション開発者
Ｐ３  サービス提供者
Ｐ４  サーバ運用者
Ｐ５  ユーザ
Ｐ６  カード販売者
Ｍ０１  製造者公開鍵
Ｍ０２  製造者秘密鍵
ＭＯ３  カード公開鍵
Ｍ０４  カード秘密鍵
Ａ０１  アプリケーションコード暗号鍵
Ａ０２  アプリケーションコード
Ａ０３  暗号化アプリケーションコード
Ａ０４  暗号化アプリケーションコード暗号鍵
Ａ０５  署名
Ｈ０１  個別イニシャルデータ暗号鍵
Ｈ０２  個別イニシャルデータ
Ｈ０３  暗号化個別イニシャルデータ
Ｈ０４  暗号化個別イニシャルデータ暗号鍵
Ｈ０５  個別イニシャルデータから生成したハッシュ
Ｈ０６  共通データ
Ｈ０７  管理データ
Ｈ０８  管理データ暗号鍵
Ｈ０９  暗号化した管理データ
Ｈ１０  暗号化した管理データ暗号鍵
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2008018457.tif 000024
【図２】
2008018457.tif 000025
【図３】
2008018457.tif 000026
【図４】
2008018457.tif 000027
【図５】
2008018457.tif 000028
【図６】
2008018457.tif 000029
【図７−ａ】
2008018457.tif 000030
【図７−ｂ】
2008018457.tif 000031
【図７−ｃ】
2008018457.tif 000032
【図８】
2008018457.tif 000033
【図９】
2008018457.tif 000034
【図１０】
2008018457.tif 000035
【図１１】
2008018457.tif 000036
【図１２】
2008018457.tif 000037
【図１３】
2008018457.tif 000038
【図１４】
2008018457.tif 000039
【図１５−ａ】
2008018457.tif 000040
【図１５−ｂ】
2008018457.tif 000041
【図１６−ａ】
2008018457.tif 000042
【図１６−ｂ】
2008018457.tif 000043
【図１６−ｃ】
2008018457.tif 000044
【国際調査報告】
2008018457.tif 000045
2008018457.tif 000046