(57)【要約】 【課題】  署名の検証または生成に必要な機密情報が外部に簡単に漏れることがなく、メモリの使用効率を向上させた通信装置、デジタル署名検証方法、およびデジタル署名生成方法を提供することを目的とする。【解決手段】  Ｊａｖａアプリケーション１０６は、受信した署名対象データに対して署名の検証を必要とするか否かを判断する。Ｊａｖａアプリケーション１０６は、署名の検証が必要であると判断した場合は、プラットフォーム１０２のＰＫＩ１０３に、受信された署名対象データを出力する。ＰＫＩ１０３は、Ｊａｖａアプリケーション１０６から出力されたデータに付加されている署名に対する検証および署名の生成を行って、Ｊａｖａアプリケーション１０６に通知する。【選択図】  図１
2006197127.tif 000002
【特許請求の範囲】
【請求項１】
装置に備えられている構成要素を制御するプラットフォームプログラムと、前記プラットフォームプログラム上で動作し、データ受信機能を有するアプリケーションと、を含む通信装置において、
前記アプリケーションは、受信されたデータに対して署名の検証を必要とするか否かを判断し、
前記アプリケーションは、署名の検証が必要であると判断した場合は、前記プラットフォームプログラムに、受信されたデータを出力し、
前記プラットフォームプログラムは、前記アプリケーションから出力されたデータに付加されている署名の検証を行う、
ことを特徴とする通信装置。
【請求項２】
装置に備えられている構成要素を制御するプラットフォームプログラムと、前記プラットフォームプログラム上で動作し、データ受信機能を有するアプリケーションと、を含む通信装置において、
前記アプリケーションは、受信されたデータに対する署名の生成を前記通信装置において可能とするか否かを判断し、
前記アプリケーションは、署名の生成が前記通信装置において可能であると判断した場合は、前記プラットフォームプログラムに、受信されたデータを出力し、
前記プラットフォームプログラムは、前記アプリケーションから出力されたデータに対して署名の生成を行い、
前記アプリケーションは署名されたデータを送信する、
ことを特徴とする通信装置。
【請求項３】
前記通信装置に対して着脱自在であって、受信されたデータに対して署名の生成を行う外部メモリをさらに備え、
前記プラットフォームプログラムは、前記外部メモリにデータを出力し、前記外部メモリから署名されたデータを入力することにより署名の生成を行う、
ことを特徴とする請求項２に記載の通信装置。
【請求項４】
前記アプリケーションは、前記外部メモリの機能を示すバージョン情報を検証し、バージョン情報に基づいて予め定められた機能を有していないと判断した場合は、前記プラットフォームプログラムにデータを出力せず、バージョン情報に基づいて予め定められた機能を有していると判断した場合は、前記プラットフォームプログラムにデータを出力する、
ことを特徴とする請求項３に記載の通信装置。
【請求項５】
前記通信装置に内蔵され、受信されたデータに対して署名生成を行うための署名生成情報を記憶する内部メモリを備え、
前記プラットフォームは、前記内部メモリから前記署名生成情報を抽出し、前記署名生成情報を用いて前記データに対する署名生成を行うことを特徴とする請求項２に記載の通信装置。
【請求項６】
装置に備えられている構成要素を制御するプラットフォームプログラムと、前記プラットフォームプログラム上で動作し、データ受信機能を有するアプリケーションと、を含む通信装置のデジタル署名検証方法において、
前記アプリケーションが、受信されたデータに対する署名の検証を必要とするか否かを判断する判断ステップと、
前記アプリケーションが、前記判断ステップで署名の検証が必要であると判断した場合は、前記プラットフォームプログラムに、受信されたデータを出力する出力ステップと、
前記プラットフォームプログラムが、前記出力ステップで前記アプリケーションから出力されたデータに付加されている署名の検証を行う検証ステップと、
を備えることを特徴とするデジタル署名検証方法。
【請求項７】
装置に備えられている構成要素を制御するプラットフォームプログラムと、前記プラットフォームプログラム上で動作し、データ受信機能を有するアプリケーションと、を含む通信装置のデジタル署名生成方法において、
前記アプリケーションが、受信されたデータに対する署名の生成を前記通信装置において可能とするか否かを判断する判断ステップと、
前記アプリケーションが、前記判断ステップで署名の生成が前記通信装置において可能であると判断した場合は、前記プラットフォームプログラムに、受信されたデータを出力する出力ステップと、
前記プラットフォームプログラムが、前記出力ステップで前記アプリケーションから出力されたデータに対して署名の生成を行い、署名したデータを前記アプリケーションに出力する署名ステップと、
前記アプリケーションが、前記署名ステップで署名されたデータを送信する送信ステップと、
を備えることを特徴とするデジタル署名生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デジタル署名の検証または生成を行う通信装置、デジタル署名検証方法およびデジタル署名生成方法に関する。
【背景技術】
【０００２】
ネットワークを介してデータを受信する通信端末において、セキュリティを確保するために、受信したデータに対する認証処理を行っている。具体的には、特許文献１に記載されているように、通信端末は秘密鍵を用いて暗号化されたデータを受信し、受信した通信端末は認証機関である認定サーバの公開鍵を用いて復号化することにより、通信端末は受信したデータが認定されたデータであることを判断することができる。
【特許文献１】特開２００３−３３７６３０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
特許文献１に記載されている通信端末は、ＣＰＵによりデータを受信する処理を行い、受信したデータを検証する処理を行っている。ここで、近年、Ｊａｖａで記述されたＪａｖａアプリケーションを外部からダウンロードしてインストールすることができることから、データの受信処理およびデータの検証処理を、Ｊａｖａアプリケーションを用いて行うことが考えられる。なお、Ｊａｖａは、米国Sun Microsystems, Incの登録商標である。
【０００４】
しかしながら、データの署名検証および生成を行うためにルート証明書などを用いる必要があるが、ルート証明書は機密性の高い情報であることから、Ｊａｖａアプリケーションのように外部からダウンロードすることによりインストールすることを前提にしているアプリケーションで簡単に扱うことができるとすると、ルート証明書などが外部に漏れるおそれがある。したがって、Ｊａｖａアプリケーションからルート証明書などを扱うことができない仕組みが必要とされる。
【０００５】
また、Ｊａｖａアプリケーションでデータの受信処理およびデータの検証処理の両方を行わせる場合であって、Ｊａｖａアプリケーションを複数インストールしている場合、重複した機能を通信端末は備えることになり、メモリの使用効率が悪くなる。
【０００６】
そこで、本発明は、署名の検証または生成に必要な機密情報が外部に簡単に漏れることがなく、メモリの使用効率を向上させた通信装置、デジタル署名検証方法、およびデジタル署名生成方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述の課題を解決するため、本発明の通信装置は、装置に備えられている構成要素を制御するプラットフォームプログラムと、上記プラットフォームプログラム上で動作し、データ受信機能を有するアプリケーションと、を含む通信装置において、上記アプリケーションは、受信されたデータに対して署名の検証を必要とするか否かを判断し、上記アプリケーションは、署名の検証が必要であると判断した場合は、上記プラットフォームプログラムに、受信されたデータを出力し、上記プラットフォームプログラムは、上記アプリケーションから出力されたデータに付加されている署名の検証を行う構成を備えている。
【０００８】
また、本発明のデジタル署名検証方法は、装置に備えられている構成要素を制御するプラットフォームプログラムと、上記プラットフォームプログラム上で動作し、データ受信機能を有するアプリケーションと、を含む通信装置のデジタル署名検証方法において、上記アプリケーションが、受信されたデータに対する署名の検証を必要とするか否かを判断する判断ステップと、上記アプリケーションが、上記判断ステップで署名の検証が必要であると判断した場合は、上記プラットフォームプログラムに、受信されたデータを出力する出力ステップと、上記プラットフォームプログラムが、上記出力ステップで上記アプリケーションから出力されたデータに付加されている署名の検証を行う検証ステップと、を備えている。
【０００９】
この発明によれば、通信装置の構成要素を制御するプラットフォームプログラム上で動作するアプリケーションが、受信されたデータに対する署名の検証を必要とするか否かを判断し、署名の検証が必要である場合には、プラットフォームプログラムにデータを出力して、プラットフォームプログラムがデータに付加されている署名の検証を行うことができる。これにより、本発明は、ユーザが直接扱うことができないプラットフォームプログラムで署名の検証を行い、署名検証に関する機密情報の漏洩を高いレベルで防ぐことができ、高度なセキュリティサービスを実現することができる。また、検証機能を重複して通信装置内に記憶させることを防止することができ、通信装置のリソースの有効利用を可能とする。さらに、アプリケーションに署名検証のための検証機能を不要とすることができ、アプリケーションの開発に対するコスト低減を可能とする。
【００１０】
また、本発明の通信装置は、装置に備えられている構成要素を制御するプラットフォームプログラムと、上記プラットフォームプログラム上で動作し、データ受信機能を有するアプリケーションと、を含む通信装置において、上記アプリケーションは、受信されたデータに対する署名の生成を上記通信装置において可能とするか否かを判断し、上記アプリケーションは、署名の生成が上記通信装置において可能であると判断した場合は、上記プラットフォームプログラムに、受信されたデータを出力し、上記プラットフォームプログラムは、上記アプリケーションから出力されたデータに対して署名の生成を行い、上記アプリケーションは署名されたデータを送信する構成を備えている。
【００１１】
また、本発明のデジタル署名生成方法は、装置に備えられている構成要素を制御するプラットフォームプログラムと、上記プラットフォームプログラム上で動作し、データ受信機能を有するアプリケーションと、を含む通信装置のデジタル署名生成方法において、上記アプリケーションが、受信されたデータに対する署名の生成を上記通信装置において可能とするか否かを判断する判断ステップと、上記アプリケーションが、上記判断ステップで署名の生成が上記通信装置において可能であると判断した場合は、上記プラットフォームプログラムに、受信されたデータを出力する出力ステップと、上記プラットフォームプログラムが、上記出力ステップで上記アプリケーションから出力されたデータに対して署名の生成を行い、署名したデータを上記アプリケーションに出力する署名ステップと、上記アプリケーションが、上記署名ステップで署名されたデータを送信する送信ステップと、を備えている。
【００１２】
この発明によれば、アプリケーションで、通信装置において署名生成を可能とするか否かが判断され、署名生成が可能と判断された場合、プラットフォームプログラムにおいて署名の生成を行い、アプリケーションにおいて署名生成されたデータを送信することができる。これにより、ユーザが操作することのできないプラットフォームプログラムで署名生成を行うことにより、署名生成に関する機密情報の漏洩を高いレベルで防ぐことができ、高度なセキュリティサービスを実現することができる。また、署名生成機能を重複して通信装置内に記憶させることを防止することができ、通信装置のリソースの有効利用を可能とする。さらに、アプリケーションに署名生成のための生成機能を不要とすることができ、アプリケーションの開発に対するコスト低減を可能とする。
【００１３】
また、本発明の通信装置は、上記通信装置に対して着脱自在であって、受信されたデータに対して署名の生成を行う外部メモリをさらに備え、上記プラットフォームプログラムは、上記外部メモリにデータを出力し、上記外部メモリから署名されたデータを入力することにより署名の生成を行う、ことが好ましい。
【００１４】
この発明によれば、プラットフォームプログラムはＵＩＭなどの外部メモリに対してデータを送信し、外部メモリがデータを受信して、受信したデータに対して署名の生成を行うことができる。これにより、一般ユーザが直接扱うことができないプラットフォームプログラムを用いて外部メモリの署名生成に関する機密情報（ルート証明書、秘密鍵など）の漏洩を高いレベルで防ぐことができ、高度なセキュリティサービスを実現することができる。
【００１５】
また、本発明の通信装置の上記アプリケーションは、上記外部メモリの機能を示すバージョン情報を検証し、バージョン情報に基づいて予め定められた機能を有していないと判断した場合は、上記プラットフォームプログラムにデータを出力せず、バージョン情報に基づいて予め定められた機能を有していると判断した場合は、上記プラットフォームプログラムにデータを出力する、ことが好ましい。
【００１６】
この発明によれば、外部メモリのバージョン情報をアプリケーションが検証して、バージョン情報に基づいて予め定めた機能を有していない外部メモリが装着されていたと判断する場合には、署名生成処理を続行しないようにプラットフォームプログラムに署名生成の対象となるデータを出力せず、バージョン情報が予め定めた機能を有している外部メモリが装着されていたと判断する場合には、上記プラットフォームプログラムにデータを出力するようにしたものである。これにより、外部メモリが、秘密鍵がないなど署名生成に対応したものではない場合には、プラットフォームプログラムによる無駄な処理を防止することができる。
【００１７】
本発明の通信装置は、上記通信装置に内蔵され、受信されたデータに対して署名生成を行うための署名生成情報を記憶する内部メモリを備え、上記プラットフォームは、上記内部メモリから上記署名生成情報を抽出し、上記署名生成情報を用いて上記データに対する署名生成を行うことが好ましい。
【００１８】
この発明によれば、内部メモリに署名生成情報を記憶させ、この署名生成情報を用いてプラットフォームにおいて署名生成を行うことができ、署名生成のための外部メモリを備える必要がなく、低コストで署名生成機能を実現できる。さらに、内部メモリは通信装置に内蔵されたものであるため、署名生成情報などの重要機密情報に対する機密性を向上させることができる。
【発明の効果】
【００１９】
本発明は、通信装置の構成要素を制御するプラットフォームプログラム上で動作するアプリケーションが、受信されたデータに対する署名の検証を必要とするか否かを判断し、署名の検証が必要である場合には、プラットフォームプログラムにデータを出力して、プラットフォームプログラムがデータに付加されている署名の検証を行うことができる。これにより、本発明は、ユーザが直接扱うことができないプラットフォームプログラムで署名の検証を行い、署名検証に関する機密情報の漏洩を高いレベルで防ぐことができ、高度なセキュリティサービスを実現することができる。また、検証機能を重複して通信装置内に記憶させることを防止することができ、通信装置のリソースの有効利用を可能とする。さらに、アプリケーションに署名検証のための検証機能を不要とすることができ、アプリケーションの開発に対するコスト低減を可能とする。
【００２０】
また、本発明は、アプリケーションで、通信装置において署名生成を可能とするか否かが判断され、署名生成が可能と判断された場合、プラットフォームプログラムにおいて署名の生成を行い、アプリケーションにおいて署名生成されたデータを送信することができる。これにより、ユーザが操作することのできないプラットフォームプログラムで署名生成を行うことにより、署名生成に関する機密情報の漏洩を高いレベルで防ぐことができ、高度なセキュリティサービスを実現することができる。また、署名生成機能を重複して通信装置内に記憶させることを防止することができ、通信装置のリソースの有効利用を可能とする。さらに、アプリケーションに署名生成のための生成機能を不要とすることができ、アプリケーションの開発に対するコスト低減を可能とする。
【発明を実施するための最良の形態】
【００２１】
本発明は、一実施形態のために示された添付図面を参照して以下の詳細な記述を考慮することによって容易に理解することができる。引き続いて、添付図面を参照しながら本発明の実施形態を説明する。可能な場合には、同一の部分には同一の符号を付して、重複する説明を省略する。
【００２２】
図１は、本実施形態における通信装置である移動機１００のソフトウエアブロック構成図である。移動機１００は、図示しないＣＰＵ、ＲＡＭ、ＥＥＰＲＯＭＲＯＭ、無線通信部、ディスプレイ、操作ボタン、マイク、およびスピーカなどのハードウエアを含んで構成されている。また、移動機１００は、これらハードウエアを動作させるための、ＯＳ（Operating System）１０１、プラットフォーム１０２（プラットフォームプログラム）、ＪａｖａＶＭ（Virtual Machine）１０５、Ｊａｖａアプリケーション１０６、ネイティブアプリケーション１０７などのプログラムを含んで構成されている。また、プラットフォーム１０２は、ＰＫＩ（Public Key Infrastructure）１０３、およびＣＤＦ（Certificate Download Function）１０４を含んで構成されている。上述ＲＯＭおよびＥＥＰＲＯＭは上述プログラムを記憶し、ＣＰＵはこれらプログラム（ソフトウエア）を実行する。
【００２３】
また、移動機１００は外部メモリであるＵＩＭ（User Identity Module）２００を着脱自在に装着することができる。このＵＩＭ２００は、例えば、ＩＣメモリであって、ＣＰＵ、ＲＡＭ、およびＲＯＭを含んで構成され、デジタル署名生成機能のための演算機能を有している。ＵＩＭ２００は、ルート証明書、サブルート証明書、秘密鍵、およびクライアント証明書などのセキュリティに関する重要機密情報のほか、ＵＩＭ２００の機能を表すバージョン情報を記憶している。さらに、ＵＩＭ２００は、移動機１００の加入者情報である電話番号情報およびＩＤ情報を記憶している。
【００２４】
以下、移動機１００を構成するプログラムについて説明する。ＯＳ１０１は、移動機１００を動かすための基本的なソフトウエアであって、プラットフォーム１０２は、このＯＳ１０１上で動作する。
【００２５】
プラットフォーム１０２は、移動機１００の操作ボタンに対する入出力、無線通信部に対する入出力、ＵＩＭ２００に対する入出力などを制御し、移動機１００に備えられている各構成要素（ハードウエア）を統括的に制御する制御プログラムである。このプラットフォーム１０２は、ＰＫＩ１０３およびＣＤＦ１０４を備え、ＰＫＩ１０３およびＣＤＦ１０４を用いてＵＩＭ２００からルート証明書、サブルート証明書、クライアント証明書および秘密鍵などの機密情報を取り出すことができ、プラットフォーム１０２は、ＣＰＵによる動作と協働して、署名の検証を行うための処理を実行する署名検証手段、および署名の生成を行うための処理を実行する署名生成手段として機能する。
【００２６】
ＰＫＩ１０３は、Ｊａｖａアプリケーション１０６から送られたデジタル署名が付与された署名対象データ（署名付きデータ）の署名の検証を行い、また署名対象データに対してデジタル署名生成のための処理を実行するプログラムである。ＰＫＩ１０３は、署名対象データの署名検証をする場合は、ルート証明書およびサブルート証明書を用いて証明書パスを検証して本人性の検証を行い、署名対象データのＨａｓｈ値を計算することで改竄の有無を判断する。また、ＰＫＩ１０３は、署名生成のための処理を実行する場合、Ｊａｖａアプリケーション１０６から送られた署名付きデータのＨａｓｈ値を計算し、このＨａｓｈ値を用いてＵＩＭ２００で署名の生成を行うよう、ＣＤＦ１０４に対して指示を出力する。なお、Ｈａｓｈ値とは、Ｈａｓｈ関数から算出された値である。ハッシュ関数とは、例えば「ＳＨＡ−１」や「ＭＤ５」である。これらハッシュ関数は、いずれも１方向関数であるため、生成データから原文を推定することを不可能とする関数である。
【００２７】
また、ＰＫＩ１０３は、ＵＩＭ２００からクライアント証明書を取り出すようＣＤＦ１０４に指示を出力する。さらに、ＰＫＩ１０３は、ＣＤＦ１０４を介してＵＩＭ２００から署名値およびクライアント証明書を取り出すと、ＰＫＣＳ＃７で規定されるデジタル署名のフォーマット形式に変換して、署名付きデータを生成し、Ｊａｖａアプリケーション１０６に出力する。なお、クライアント証明書の取得処理は、事前にＰＫＩ１０３にて保持している場合は、省略可能である。
【００２８】
ＣＤＦ１０４は、ＵＩＭ２００に対して直接アクセスすることのできるプログラムであって、ＰＫＩ１０３からの指示に応じてＵＩＭ２００からルート証明書、サブルート証明書、クライアント証明書または署名値を取り出すためのプログラムである。
【００２９】
ＪａｖａＶＭ１０５は、オブジェクト指向のインタープリタ言語であるＪａｖａで記述されたＪａｖａアプリケーションを動作させるための環境を有するミドルウエアである。ＪａｖａＶＭ１０５は、Ｊａｖａコンパイラによって生成された中間コードを逐次解釈しながら、Ｊａｖａアプリケーション１０６の実行を制御する。
【００３０】
Ｊａｖａアプリケーション１０６は、Ｊａｖａで記述されたプログラムであって、本実施形態においてはネットワーク上のコンテンツプロバイダからダウンロードすることで移動機１００に動作可能に記憶されているプログラムであって、ＪａｖａＶＭ１０５を介してプラットフォーム１０２上で動作するプログラムである。このＪａｖａアプリケーション１０６は、ＣＰＵによる動作と協働して、受信されたデータに対して署名の検証を必要とするかまたは署名の生成を可能とするか否かを判断する判断手段、および署名の検証または署名の生成が必要または可能であると判断した場合は、プラットフォーム１０２に受信したデータを出力する出力手段として機能する。また、Ｊａｖａアプリケーション１０６は、ＣＰＵによる動作と協働して署名がされたデータをコンテンツプロバイダに送信する送信手段として機能する。さらに、Ｊａｖａアプリケーション１０６は、ＣＰＵによる動作と協働して、ＵＩＭ２００からバージョン情報を取り出すバージョン情報取得手段、およびＵＩＭ２００が所定の機能を有しているか否かを判断する判断手段として機能する。
【００３１】
具体的には、Ｊａｖａアプリケーション１０６は、移動機１００の無線通信を利用した通信機能を有しており、コンテンツプロバイダに対してデータの送受信を行うことができる。また、Ｊａｖａアプリケーション１０６は、コンテンツプロバイダから受信した署名対象データが署名付きデータであるかを判断し、署名付きデータであると判断した場合には、署名検証を行うよう署名付きデータをＰＫＩ１０３に送信し、その検証結果をＰＫＩ１０３から受信する。また、Ｊａｖａアプリケーション１０６は、ＵＩＭ２００が所定の機能（署名生成機能）を有しているか否かをバージョン情報に基づいて判断するために、ＵＩＭ２００に対してアクセスし、ＵＩＭ２００のバージョン情報を取り出すことができる。さらに、Ｊａｖａアプリケーション１０６は、ＰＫＩ１０３から署名生成がされた署名付きデータを受信すると、当該署名生成がされた署名付きデータをコンテンツプロバイダに返送する。なお、本実施形態においては、Ｊａｖａアプリケーション１０６は、Ｊａｖａアプリケーションに限定するものではなく、外部（ネットワークまたは外部記憶媒体）からダウンロードすることのできるアプリケーションであればよい。
【００３２】
ネイティブアプリケーション１０７は、移動機１００に予めインストールされているアプリケーションプログラムであって、例えば、通信制御を実行する通信制御プログラム、操作ボタン（図示せず）を操作させるための操作制御プログラム、ディスプレイ（図示せず）に情報を表示させるための表示制御プログラムなどである。
【００３３】
以上のとおり移動機１００は構成されているが、ＵＩＭ２００のような外部メモリに代えて、移動機１００に内蔵する内部メモリ（図示せず）にルート証明書およびサブルート証明書などのセキュリティに関する重要機密情報、また、秘密鍵、およびクライアント証明書などの署名生成情報を記憶させるようにしてもよい。この内部メモリを用いた場合、移動機１００のプラットフォーム１０２は、内部メモリから署名生成情報を抽出して抽出した署名生成情報を用いてデジタル署名生成を行うための演算機能を備えるか、または、プラットフォーム１０２とは別に構成されている演算プログラム若しくは演算ハードウエアと協働してデジタル署名生成のための演算機能を実現できるように構成されていることが好ましい。
【００３４】
次に、このように構成された移動機１００の動作について説明する。図２は、本実施形態の移動機１００におけるＪａｖａアプリケーション１０６の動作を示すフローチャートである。
【００３５】
移動機１００において、署名生成を行う対象である署名対象データ（署名生成要求を示す情報を含む）が、Ｊａｖａアプリケーション１０６の通信機能を用いてコンテンツプロバイダ（ＣＰ）から受信される（Ｓ１０１）。受信した署名対象データが、署名付きデータであるか否かがＪａｖａアプリケーション１０６により判断される（Ｓ１０２）。具体的には、コンテンツプロバイダからＨＴＴＰレスポンスを受信した際、ＨＴＴＰレスポンスヘッダ内の“Content-Type”の数値情報に、署名付きデータであることを示す数値情報が記述されているか否かが、Ｊａｖａアプリケーション１０６により判断される。
【００３６】
Ｓ１０２において、受信した署名対象データが署名付きデータであると、Ｊａｖａアプリケーション１０６により判断された場合、署名対象データはプラットフォーム１０２のＰＫＩ１０３に出力される（Ｓ１０３）。ＰＫＩ１０３により署名検証がされ、Ｊａｖａアプリケーション１０６では署名検証結果待ち状態となる（Ｓ０１４）。ＰＫＩ１０３から検証結果がＪａｖａアプリケーション１０６により受信される（Ｓ１０５）。署名検証についての詳細は図３にて詳述する。
【００３７】
Ｊａｖａアプリケーション１０６では、検証結果が判断される（Ｓ１０６）。Ｓ１０６において、検証結果がＯＫであると、Ｊａｖａアプリケーション１０６により判断された場合、ＵＩＭ２００において署名生成を可能とするかが判断されるためにＵＩＭ２００のバージョンが所定バージョン以上であるかの問合せ要求が、Ｊａｖａアプリケーション１０６によりＵＩＭ２００に対して行われる。そして、ＵＩＭ２００のバージョンが所定バージョン（例えば、バージョン２）以上であるかが、Ｊａｖａアプリケーション１０６により判断される（Ｓ１０７）。なお、このＳ１０７の署名生成を可能とするかの判断ステップに先立って、コンテンツプロバイダから署名生成の要求があったか否かを判断するための、署名生成要否判断ステップを備えるようにしても良い。この場合においては、コンテンツプロバイダから署名生成の要求があれば、Ｓ１０７に進み、要求がなければ、コンテンツプロバイダに署名検証の結果を通知する処理が行われ、その後Ｊａｖａアプリケーション１０６による処理を終了してもよい。
【００３８】
Ｓ１０７において、ＵＩＭ２００が所定のバージョン以上のものであることが、Ｊａｖａアプリケーション１０６により判断された場合、ＵＩＭ２００は所定の機能（署名生成機能）を有していると判断され、署名対象データは、まずＰＫＩ１０３に出力される（Ｓ１０８）。署名対象データが出力されたＰＫＩ１０３では、署名生成を行うための処理が実行され、Ｊａｖａアプリケーション１０６では署名生成の処理待ち状態となる（Ｓ１０９）。
【００３９】
その後、署名がされた署名対象データ、すなわち署名付きデータが、ＰＫＩ１０３からＪａｖａアプリケーション１０６に出力され（Ｓ１１０）、署名付きデータは、Ｊａｖａアプリケーション１０６によりコンテンツプロバイダに送信される（Ｓ１１１）。
【００４０】
Ｓ１０７において、ＵＩＭ２００のバージョンが所定値以上ではなく、ＵＩＭ２００が所定の機能（署名生成機能）を有していないと、Ｊａｖａアプリケーション１０６により判断される場合、バージョンエラーにより署名生成不可であることがまず移動機画面上に表示され、ユーザの確認後（または、ユーザが確認操作を行った後）に、コンテンツプロバイダに通知される（Ｓ１１２）。エラー内容をユーザに一度通知して確認させることで、ＵＩＭ２００が署名機能に対応していないのか、または別のエラーがあったのか（コンテンツプロバイダからのデータの署名に不正があったか）、をユーザに知らしめることができ、利便性を向上させることができる。
【００４１】
また、Ｓ１０６において、ＰＫＩ１０３内における署名の検証処理において検証結果がＯＫではないと、Ｊａｖａアプリケーション１０６により判断された場合、署名検証に失敗したこと（署名が不正であること）が移動機画面上に表示され、ユーザの確認後（または、ユーザが確認操作を行った後）に、コンテンツプロバイダに通知される（Ｓ１１３）。エラー内容をユーザに一度通知して確認させることで、コンテンツプロバイダからのデータの署名に不正などで署名検証に失敗したのか、または別のエラーがあったのか（ＵＩＭ２００が署名機能に対応していないのか）、をユーザに知らしめることができ、利便性を向上させることができる。
【００４２】
以上のとおりＪａｖａアプリケーション１０６は、コンテンツプロバイダから署名対象データを受信し、また署名付きのデータをコンテンツプロバイダに送信し、プラットフォーム１０２またはＵＩＭ２００が署名検証および署名生成を行うことができるように、移動機１００を構成している。よって、Ｊａｖａアプリケーション１０６に署名検証および署名生成のための機能を搭載する必要がなくなる。
【００４３】
次に、ＰＫＩ１０３における署名検証処理について図３を用いて説明する。図３は、ＰＫＩ１０３の動作を示すフローチャートである。
【００４４】
ＰＫＩ１０３において、署名付きデータがＪａｖａアプリケーション１０６から受信される（Ｓ２０１）。ＰＫＩ１０３により署名検証が行われる際に、ルート証明書およびサブルート証明書がＣＤＦ１０４を介してＵＩＭ２００から取り出される。取り出されたルート証明書およびサブルート証明書を用いた証明書パスに基づいて、受信された署名付きデータに対する本人性の検証が行われる（Ｓ２０２）。ここで、証明書パスとは、証明書の信頼性を確認させるための情報の一つであって、信頼できる証明機関から発行される証明書で構成された、連続した信頼できる証明書のチェーン情報である。このチェーン情報は、特定の証明書（サブルート証明書）からルート証明機関が発行する証明書（ルート証明書）までが含まれた証明書の情報である。なお、サブルート証明書は、証明書のチェーン情報におけるルート証明書を除いた、全てまたは一部の証明書情報をいう。
【００４５】
そして、署名対象データに含まれているＨａｓｈ値と署名対象データから算出したＨａｓｈ値とが比較される。ここで、Ｈａｓｈ値が一致している場合は、改竄はないと、ＰＫＩ１０３により判断される。また、Ｈａｓｈ値が一致していない場合は、改竄があったとＰＫＩ１０３により判断される（Ｓ２０３）。
【００４６】
改竄の判断後、本人性の検証および改竄の有無を示した検証結果を示す情報が、ＰＫＩ１０３によりＪａｖａアプリケーション１０６に出力される（Ｓ２０４）。
【００４７】
以上のとおり、ＰＫＩ１０３における署名検証処理では、本人性の検証と改竄の有無の検出を行うことができる。
【００４８】
次に、ＰＫＩ１０３における署名対象データに対する署名生成処理について、図４および図５を用いて説明する。図４は、ＰＫＩ１０３における署名生成処理のための動作を示すフローチャートであり、図５は、ＵＩＭ２００における署名生成処理のための動作を示すフローチャートである。
【００４９】
図４に示すように、ＰＫＩ１０３において、署名対象データは、Ｊａｖａアプリケーション１０６から送信されて、ＰＫＩ１０３で受信される（Ｓ３０１）。受信された署名対象データのＨａｓｈ値が、ＰＫＩ１０３により計算される（Ｓ３０２）。計算されたＨａｓｈ値は、ＣＤＦ１０４に署名生成要求信号とともに出力され、Ｈａｓｈ値および署名生成要求信号はＣＤＦ１０４によりＵＩＭ２００に出力される（Ｓ３０３）。
【００５０】
ＰＫＩ１０３においては、ＵＩＭ２００から署名値を受信するための受信待ち状態となる（Ｓ３０４）。一方、ＵＩＭ２００では、署名値を生成する処理が行われている。ここで、図５を用いてＵＩＭ２００の動作を説明する。ＣＤＦ１０４を介して、ＰＫＩ１０３からＨａｓｈ値および署名生成要求信号が受信される（Ｓ４０２）。受信したＨａｓｈ値は、ＵＩＭ２００に保持されている秘密鍵により暗号化され、署名値が生成される（Ｓ４０２）。そして、署名値は、ＣＤＦ１０４を介してＰＫＩ１０３に出力される（Ｓ４０３）。
【００５１】
このように、ＵＩＭ２００では、署名生成のための署名値が生成される。図４に戻り、引き続き説明する。ＰＫＩ１０３では、ＵＩＭ２００から署名値が受信される（Ｓ３０５）。その後、クライアント証明書が、ＰＫＩ１０３に保持されているかが、判断される（Ｓ３０６）。Ｓ３０６において、クライアント証明書がＰＫＩ１０３に保持されていないと判断された場合、署名値およびクライアント証明書を用いた署名付きデータの生成が行われる。具体的には、ＰＫＣＳ＃７のフォーマットに従ったデジタル署名を行った署名付きデータの生成が行われる（Ｓ３０８）。
【００５２】
また、Ｓ３０６において、クライアント証明書がＰＫＩ１０３により保持されていなかった場合、クライアント証明書は、ＰＫＩ１０３により、ＣＤＦ１０４を介してＵＩＭ２００から読み出され、取得される。取得されたクライアント証明書および署名値を用いて、ＰＫＣＳ＃７のフォーマットに従ったデジタル署名を行った署名付きデータが生成される（Ｓ３０８）。その後、署名付きデータは、Ｊａｖａアプリケーション１０６に出力される（Ｓ３０９）。
【００５３】
以上のとおり、プラットフォーム１０２のＰＫＩ１０３は、署名生成のための処理を実行することができ、Ｊａｖａアプリケーション１０６ではなく、ＰＫＩ１０３が、署名生成のための処理を実行することにより、ＵＩＭ２００に対するアクセスを容易かつ安全なものとし、署名生成を安全かつ確実に行うことができる。
【００５４】
次に、移動機１００、コンテンツプロバイダ（ＣＰ）およびＵＩＭ２００における信号の送受信の概略を、シーケンス図を用いて説明する。図６は、署名検証から署名生成までを行うときのシーケンス図である。
【００５５】
コンテンツプロバイダ（ＣＰ）から署名生成要求を含んだ署名対象データ（署名付きデータ）が送信され、Ｊａｖａアプリケーション１０６で受信される（Ｓ１０１）。Ｊａｖａアプリケーション１０６では、受信した署名対象データをＰＫＩ１０３に出力する（Ｓ１０３）。ＰＫＩ１０３では、ＣＤＦ１０４を介してＵＩＭ２００からルート証明書およびサブルート証明書を取り出して、ルート証明書およびサブルート証明書を用いた署名対象データの署名検証を行って（Ｓ２０２、Ｓ２０３）、その検証結果をＪａｖａアプリケーション１０６に通知する（Ｓ２０４）。
【００５６】
そして、Ｊａｖａアプリケーション１０６では、ＵＩＭ２００のバージョン情報を問合せて取得する（Ｓ１０７）。ここでは、所定のバージョン情報を取得できたため、Ｊａｖａアプリケーション１０６では、署名対象データをＰＫＩ１０３に出力する（Ｓ１０８）。
【００５７】
ＰＫＩ１０３では、署名対象データからＨａｓｈ値を算出し（Ｓ３０２）、ＣＤＦ１０４に署名生成要求信号およびＨａｓｈ値を出力する（Ｓ３０３）。ＣＤＦ１０４では、これをＵＩＭ２００に転送し、ＵＩＭ２００では、署名生成処理を行い、署名値を算出して、ＣＤＦ１０４に出力する（Ｓ４０１、Ｓ４０２、Ｓ４０３）。
【００５８】
ＰＫＩ１０３では、ＣＤＦ１０４を介して署名値を受信する（Ｓ３０５）。そして、ＰＫＩ１０３では、クライアント証明書をＵＩＭ２００から読み出す（Ｓ３０７）。ＰＫＩ１０３では、読み出したクライアント証明書および署名値を用いてＰＫＣＳ＃７のデジタル署名のフォーマットにしたがってデジタル署名を、署名対象データに対して行い、署名付きデータを生成する（Ｓ３０８）。ＰＫＩ１０３では、生成した署名付きデータをＪａｖａアプリケーション１０６に出力する（Ｓ３０９）。
【００５９】
Ｊａｖａアプリケーション１０６では、送信された署名付きデータをコンテンツプロバイダに送信する（Ｓ１１１）。
【００６０】
コンテンツプロバイダでは、受信した署名付きデータの署名検証を行って（Ｓ１１１ａ）、正当な署名であることを判断すると、検証ＯＫであることを示す信号を移動機１００（Ｊａｖａアプリケーション１０６）に送信する（Ｓ１１１ｂ）。
【００６１】
このように、本実施形態の通信システムでは、Ｊａｖａアプリケーション１０６によりデータの送受信を行い、プラットフォーム１０２（ＰＫＩ１０３）およびＵＩＭ２００において、署名の検証および署名の生成を行うことができる。
【００６２】
次に、ＰＫＩ１０３における署名検証にエラーが発生したときの処理について説明する。図７は、署名検証にエラーが発生したときのシーケンス図である。
【００６３】
コンテンツプロバイダ（ＣＰ）から署名生成要求を含んだ署名対象データ（署名付きデータ）が送信され、Ｊａｖａアプリケーション１０６で受信される（Ｓ１０１）。Ｊａｖａアプリケーション１０６では、受信した署名対象データをＰＫＩ１０３に出力する（Ｓ１０３）。ＰＫＩ１０３では、ＣＤＦ１０４を介してＵＩＭ２００からルート証明書およびサブルート証明書を取り出して、ルート証明書およびサブルート証明書を用いた署名対象データの署名検証を行って（Ｓ２０２、Ｓ２０３）、その検証結果をＪａｖａアプリケーション１０６に通知する（Ｓ２０４）。ここでは、署名検証の結果、署名に不正があったと判断されたため、Ｊａｖａアプリケーション１０６では、署名に不正があり、検証に失敗したことを示す検証エラーをコンテンツプロバイダに出力する（Ｓ１１３）。
【００６４】
このように、署名に不正がって検証に失敗した場合、Ｊａｖａアプリケーション１０６ではその旨をＰＫＩ１０３から受信して、Ｊａｖａアプリケーション１０６はエラーがあった旨をコンテンツプロバイダに送信することができる。
【００６５】
次に、ＵＩＭ２００にバージョンエラーが発生したときの処理について説明する。図８は、ＵＩＭ２００におけるバージョンエラーが発生したときのシーケンス図である。
【００６６】
コンテンツプロバイダ（ＣＰ）から署名生成要求を含んだ署名対象データ（署名付きデータ）が送信され、Ｊａｖａアプリケーション１０６で受信される（Ｓ１０１）。Ｊａｖａアプリケーション１０６では、受信した署名対象データをＰＫＩ１０３に出力する（Ｓ１０３）。ＰＫＩ１０３では、ＣＤＦ１０４を介してＵＩＭ２００からルート証明書およびサブルート証明書を取り出して、ルート証明書およびサブルート証明書を用いた署名対象データの署名検証を行って（Ｓ２０２、Ｓ２０３）、その検証結果をＪａｖａアプリケーション１０６に通知する（Ｓ２０４）。
【００６７】
そして、Ｊａｖａアプリケーション１０６では、ＵＩＭ２００のバージョン情報を問合せて取得する（Ｓ１０７）。ここでは、ＵＩＭ２００の仕様が古く、バージョン情報が所定値以上ではないため、Ｊａｖａアプリケーション１０６では、ＵＩＭ２００で署名生成を行わせることができないと判断し、署名生成に失敗したとして、その旨をコンテンツプロバイダに送信する（Ｓ１０８）。
【００６８】
このように、ＵＩＭ２００のバージョン情報が所定値以上ではなく、ＵＩＭ２００で署名生成を行わせることができないと、Ｊａｖａアプリケーション１０６で判断できると、その旨をコンテンツプロバイダに送信することにより、無駄な署名生成のための処理をＰＫＩ１０３に行わせることがなく、処理を効率的に行うことができる。
【００６９】
次に、本実施形態の移動機１００の作用効果について説明する。本実施形態の移動機１００によれば、移動機１００の構成要素である各デバイスを制御するプラットフォーム１０２上で動作するＪａｖａアプリケーション１０６が、受信されたデータに対する署名の検証を必要とするか否かを判断し、署名の検証が必要である場合には、プラットフォーム１０２にデータを出力して、プラットフォーム１０２がデータに付加されている署名の検証を行うことができる。これにより、ユーザが解析など直接扱うことのできないプラットフォーム１０２で署名の検証を行い、署名検証に関する機密情報の漏洩を高いレベルで防ぐことができ、高度なセキュリティサービスを実現することができる。また、検証機能を重複して移動機１００内に記憶させることを防止することができ、移動機１００のリソースの有効利用を可能とする。さらに、Ｊａｖａアプリケーション１０６に署名検証のための検証機能を不要とすることができ、Ｊａｖａアプリケーション１０６の開発に対するコスト低減を可能とする。
【００７０】
また、本実施形態の移動機１００によれば、Ｊａｖａアプリケーション１０６において署名生成が可能か否かが判断され、署名生成が可能と判断された場合、プラットフォーム１０２において署名の生成を行い、Ｊａｖａアプリケーション１０６において署名生成されたデータを送信することができる。これにより、ユーザが解析など直接扱うことができないプラットフォーム１０２で署名生成を行うことにより、署名生成に関する機密情報の漏洩を高いレベルで防ぐことができ、高度なセキュリティサービスを実現することができる。また、署名生成機能を重複して移動機１００内に記憶させることを防止することができ、移動機１００のリソースの有効利用を可能とする。さらに、Ｊａｖａアプリケーション１０６に署名生成のための生成機能を不要とすることができ、Ｊａｖａアプリケーション１０６の開発に対するコスト低減を可能とする。
【００７１】
また、本実施形態の移動機１００によれば、プラットフォーム１０２はＵＩＭ２００に対してデータを送信し、ＵＩＭ２００がデータを受信して、ＵＩＭ２００が受信したデータに対して署名の生成を行うことができる。これにより、一般ユーザが直接扱うことができないプラットフォーム１０２を用いてＵＩＭ２００の署名生成に関する機密情報（ルート証明書、秘密鍵など）の漏洩を高いレベルで防ぐことができ、高度なセキュリティサービスを実現することができる。
【００７２】
また、本実施形態の移動機１００によれば、ＵＩＭ２００のバージョン情報をＪａｖａアプリケーション１０６が検証して、予め定めたバージョン以下のＵＩＭ２００が装着されていた場合には、ＵＩＭ２００が所定の機能（署名生成機能）を有していないと判断することができ、署名生成処理を続行しないようにプラットフォーム１０２に署名生成の対象となるデータを出力せず、バージョン情報が予め定めたバージョン以上と判断した場合は、ＵＩＭ２００が所定の機能（署名生成機能）を有していると判断することができ、上記プラットフォーム１０２にデータを出力するようにしたものである。これにより、ＵＩＭ２００のバージョン情報が予め定めたバージョン未満である場合には、秘密鍵がないなど署名生成機能を有していないとＪａｖａアプリケーション１０６は判断することができ、プラットフォーム１０２による無駄な処理を実行することを防止することができる。また、ＵＩＭ２００のバージョン情報が予め定めたバージョン以上である場合には、署名生成を行うことができるものと、Ｊａｖａアプリケーション１０６は判断することができ、プラットフォーム１０２による確実な署名生成処理を実行させることができる。
【００７３】
さらに移動機１００は、移動機１００本体に内蔵され、受信されたデータに対して署名生成を行うための署名生成情報（秘密鍵など）を記憶する内部メモリ（図示せず）を備え、プラットフォーム１０２は、内部メモリから署名生成情報抽出し、署名生成情報を用いてデータに対する署名生成を行うことが好ましい。
【００７４】
この発明によれば、内部メモリに署名生成情報を記憶させ、これを用いてプラットフォーム１０２において署名生成を行うことができ、署名生成のための外部メモリ（例えばＵＩＭ２００）を備える必要がなく、低コストで署名生成機能を実現できる。さらに、署名生成情報などの重要機密情報に対する機密性を向上させることができる。
【図面の簡単な説明】
【００７５】
【図１】移動機１００のソフトブロック構成図である。
【図２】移動機１００におけるＪａｖａアプリケーション１０６の動作を示すフローチャートである。
【図３】ＰＫＩ１０３の動作を示すフローチャートである。
【図４】ＰＫＩ１０３の署名生成処理のための動作を示すフローチャートである。
【図５】ＵＩＭ２００の署名生成処理のための動作を示すフローチャートである。
【図６】署名検証から署名生成までを行うときのシーケンス図である。
【図７】署名検証にエラーが発生したときのシーケンス図である。
【図８】ＵＩＭ２００におけるバージョンエラーが発生したときのシーケンス図である。
【符号の説明】
【００７６】
１００…移動機、１０１…ＯＳ、１０２…プラットフォーム、１０３…ＰＫＩ、１０４…ＣＤＦ、１０５…ＪａｖａＶＭ、１０６…Ｊａｖａアプリケーション、１０７…ネイティブアプリケーション、ＵＩＭ…２００。
【図１】
2006197127.tif 000003
【図２】
2006197127.tif 000004
【図３】
2006197127.tif 000005
【図４】
2006197127.tif 000006
【図５】
2006197127.tif 000007
【図６】
2006197127.tif 000008
【図７】
2006197127.tif 000009
【図８】
2006197127.tif 000010