(57)【特許請求の範囲】
【請求項１】
ＨＳＭ（Hardware Security Module）と接続された検証サーバで、証明書の検証要求の受付、認証パスの構築及び前記認証パスの検証を行う、検証サーバであって、
ソフトウェア暗号モジュールを記憶する記憶部と、
前記認証パス検証処理における、証明書、証明書失効リスト又はＯＣＳＰレスポンスの署名検証処理において、
前記ソフトウェア暗号モジュールを用いて、前記証明書、証明書失効リスト又はＯＣＳＰレスポンスのハッシュ値を計算し、
前記ソフトウェア暗号モジュールを用いて、証明対象の前記証明書、証明書失効リスト又はＯＣＳＰレスポンスの署名値を復号し、
前記計算したハッシュ値と前記復号データとを比較することで、前記署名検証処理を行い、
前記ソフトウェア暗号モジュールを用いて、前記署名検証結果のハッシュ値を計算し、
前記署名検証結果のハッシュ値を、前記ＨＳＭ及び該ＨＳＭ内の秘密鍵を用いて暗号化し、署名値を生成する制御部と、を有する、
ことを特徴とする検証サーバ。
【請求項２】
ＨＳＭ（Hardware Security Module）と接続された検証サーバで、証明書の検証要求の受付、認証パスの構築及び前記認証パスの検証を行う、検証サーバにおける検証方法であって、
前記検証サーバは、ソフトウェア暗号モジュールを記憶する記憶部を備え、
前記検証サーバにより、
前記認証パス検証処理における、証明書、証明書失効リスト又はＯＣＳＰレスポンスの署名検証処理において、
前記ソフトウェア暗号モジュールを用いて、前記証明書、証明書失効リスト又はＯＣＳＰレスポンスのハッシュ値を計算し、
前記ソフトウェア暗号モジュールを用いて、証明対象の前記証明書、証明書失効リスト又はＯＣＳＰレスポンスの署名値を復号し、
前記計算したハッシュ値と前記復号データとを比較することで、前記署名検証処理を行い、
前記ソフトウェア暗号モジュールを用いて、前記署名検証結果のハッシュ値を計算し、
前記署名検証結果のハッシュ値を、前記ＨＳＭ及び該ＨＳＭ内の秘密鍵を用いて暗号化し、署名値を生成する処理を実施する、
ことを特徴とする検証方法。
【請求項３】
ＨＳＭ（Hardware Security Module）と接続されたコンピュータに、証明書の検証要求の受付、認証パスの構築及び前記認証パスの検証を実行させる検証プログラムであって、
前記コンピュータは、ソフトウェア暗号モジュールを記憶する記憶部を備え、
前記コンピュータに、
前記認証パス検証処理における、証明書、証明書失効リスト又はＯＣＳＰレスポンスの署名検証処理において、
前記ソフトウェア暗号モジュールを用いて、前記証明書、証明書失効リスト又はＯＣＳＰレスポンスのハッシュ値を計算し、
前記ソフトウェア暗号モジュールを用いて、証明対象の前記証明書、証明書失効リスト又はＯＣＳＰレスポンスの署名値を復号し、
前記計算したハッシュ値と前記復号データとを比較することで、前記署名検証処理を行い、
前記ソフトウェア暗号モジュールを用いて、前記署名検証結果のハッシュ値を計算し、
前記署名検証結果のハッシュ値を、前記ＨＳＭ及び該ＨＳＭ内の秘密鍵を用いて暗号化し、署名値を生成する処理を実行させる、
ことを特徴とする検証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、証明書の検証処理を行う技術に関する。
【背景技術】
【０００２】
電子文書など電子データを送付する際に、対象となる電子データに対して、送信者の電子署名（以下、「署名」ともいう）と公開鍵証明書（以下、「証明書」ともいう）を添付することが行われる。このような署名及び証明書が添付された電子データを受信した受信者側では、添付された署名と証明書の検証を行い、送付されたデータが改ざんされていないこと、および、確かに送信者本人から送られてきた電子データであること、を確認する。
【０００３】
公開鍵証明書の発行と検証は、公開鍵基盤において行われ、その標準仕様はＲＦＣ５２８０（Internet X.509 Public Key Infrastructure Certificate and CRL Profile）等にて規定されている。このうち、証明書の検証については、ＲＦＣ５２８０の６章（Certificate Path Validation）に規定されているように、受信者（以下「検証者」ともいう）は自身の信頼する認証局（Certificate Authority：以下「ＣＡ」ともいう）の証明書を起点として、検証対象の証明書までの認証パスの構築と、構築した当該認証パスの検証を実施する。
【０００４】
証明書の検証処理は、認証局が多数存在し、それぞれが相互認証で接続するような複雑な構成である場合、認証パスの構築および認証パスの検証が複雑な処理となってしまう。このため、検証者の装置の代わりに証明書の検証処理を行い、検証結果を検証者に送信するサービスを提供するサーバ（以下「検証サーバ」という）が使用されており、その標準プロトコルはＲＦＣ５０５５（Server-Based Certificate Validation Protocol）にて規定されている。検証サーバは、検証者から証明書の検証要求を受け付けると、当該検証者の信頼する認証局と当該検証対象証明書との間の認証パスの構築と、構築した当該認証パスの検証を行い、その結果に対して、当該検証サーバの署名及び証明書を付与して、検証者へ送信する。検証者は、当該検証結果を検証サーバより受け取ったら、当該検証結果に添付された当該検証サーバの署名および証明書の検証を行い、当該検証結果が信頼できるものであることを確認する。
【０００５】
そして、このような検証サーバにおいては、認証パスの検証処理における証明書や証明書失効リスト（Certificate Revocation List：以下「ＣＲＬ」という）の署名検証処理や、検証結果に対する検証サーバの署名生成処理等の、暗号演算を実施する必要がある。このような暗号演算の処理負担を軽減するために、非特許文献１、２、３に記載されているような機器（Ｈａｒｄｗａｒｅ  Ｓｅｃｕｒｉｔｙ  Ｍｏｄｕｌｅ：以下「ＨＳＭ」という）が使用されている。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】ＳａｆｅＮｅｔ、"Ｌｕｎａ  ＳＡ  ４．２"、[online]、ＳａｆｅＮｅｔ、P.１、[平成２０年１月２１日検索]、インターネット＜http://www.safenet-inc.com/library/3/Luna_SA.pdf＞
【非特許文献２】ＳａｆｅＮｅｔ、"Ｌｕｎａ  ＰＣＭ  ２．２"、[online]、ＳａｆｅＮｅｔ、P.１、[平成２０年１月２１日検索]、インターネット＜http://www.safenet-inc.com/library/3/LunaPCM.pdf＞
【非特許文献３】ｎＣｉｐｈｅｒ、"ｎｅｔＨＳＭ"、[online]、ｎＣｉｐｈｅｒ、Ｐ．１、[平成２０年１月２１日検索]、インターネット＜http://www.ncipher.com/uploads/resources/nethsm.pdf＞
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記非特許文献１、２、３のようなＨＳＭを用いて、検証サーバにおける暗号演算処理を行う場合には、ＨＳＭの処理性能よりも検証サーバの処理性能が良い場合や膨大な検証要求を受け付けたような場合には、ＨＳＭでの処理がボトルネックとなってしまい、検証サーバ全体の処理性能が上がらないときがある。
【０００８】
そこで、本発明は、ＨＳＭを用いる検証サーバにおいて、検証要求を受け付けてから検証結果を応答するまでの時間を短くし、検証サーバの処理性能を向上することを目的とする。
【課題を解決するための手段】
【０００９】
以上の課題を解決するため、本発明の一態様は、検証サーバにおいてＨＳＭ等の暗号モジュールを複数備えておき、最も負荷のかかっていない暗号モジュールを用いて暗号演算を行うようにする。
例えば、本発明は、証明書の検証処理を行う検証サーバであって、前記検証処理に含まれる暗号演算を行う複数の暗号モジュールと、制御部と、を備え、前記制御部は、前記暗号モジュールの負荷状態を調べる処理と、調べた負荷状態が最も軽い暗号モジュールを選択して、前記暗号演算を行う処理と、を行うこと、を特徴とする。
【００１０】
また、以上の課題を解決するため、本発明の他の態様は、ＨＳＭの処理性能よりも、検証サーバの処理性能が明らかに良い場合に、検証サーバのソフトウェア暗号モジュールと、ＨＳＭとに、それぞれ、特定の処理を実施させる。
例えば、本発明は、ＨＳＭと接続された検証サーバで、証明書の検証要求の受付、認証パスの構築及び前記認証パスの検証を行う、検証サーバであって、ソフトウェア暗号モジュールを記憶する記憶部と、前記認証パス検証処理における、証明書、証明書失効リスト又はＯＣＳＰレスポンスの署名検証処理において、前記ソフトウェア暗号モジュールを用いて、前記証明書、証明書失効リスト又はＯＣＳＰレスポンスのハッシュ値を計算し、前記ソフトウェア暗号モジュールを用いて、証明対象の前記証明書、証明書失効リスト又はＯＣＳＰレスポンスの署名値を復号し、前記計算したハッシュ値と前記復号データとを比較することで、前記署名検証処理を行い、前記ソフトウェア暗号モジュールを用いて、前記署名検証結果のハッシュ値を計算し、前記署名検証結果のハッシュ値を、前記ＨＳＭ及び該ＨＳＭ内の秘密鍵を用いて暗号化し、署名値を生成する制御部と、を有することを特徴とする。
【発明の効果】
【００１１】
以上のように、本発明によれば、ＨＳＭを用いる検証サーバにおいて、検証要求を受け付けてから検証結果を応答するまでの時間を短くし、検証サーバの処理性能を向上することができる。
【図面の簡単な説明】
【００１２】
【図１】検証システムの概略図。
【図２】検証サーバの概略図。
【図３】暗号モジュールリストテーブルの概略図。
【図４】対応暗号アルゴリズムテーブルの概略図。
【図５】負荷状態テーブルの概略図。
【図６】コンピュータの概略図。
【図７】暗号モジュールの負荷状態を監視する処理を示すフローチャート。
【図８】検証サーバでの証明書の検証処理を示すフローチャート。
【図９】証明書、ＣＲＬ又はＯＣＳＰレスポンスの署名検証処理を示すフローチャート。
【図１０】検証サーバの秘密鍵による電子署名の生成処理を示すフローチャート。
【発明を実施するための形態】
【００１３】
図１は、本発明の一実施形態である検証システム１００の概略図である。
【００１４】
図示するように、検証システム１００は、端末装置１１０と、ＣＡ装置１２０と、検証サーバ１３０と、ＨＳＭ１５０と、を備え、これらはネットワーク１６０を介して相互に情報の送受信を行うことができるようにされている。
【００１５】
端末装置１１０は、ネットワーク１６０を介して、他の装置と通信を行い、特に、署名付きの電子文書を送受信する。
【００１６】
そして、端末装置１１０は、他の装置から署名付き電子文書及び証明書を受信すると、当該署名付き電子文書の署名を、同時に受け取った証明書を用いて検証する。
【００１７】
さらに、端末装置１１０は、署名付き電子文書の署名検証に使用した当該証明書を検証するために、検証サーバ１３０に対して検証要求を送信する。当該検証要求には、端末装置１１０のオペレータであるユーザが信頼するＣＡのＣＡ証明書と、検証対象の証明書と、が添付される。
【００１８】
そして、端末装置１１０は、検証サーバ１３０から検証対象である証明書が有効である旨の検証結果を受信した場合に、当該検証対象の証明書が有効であり、署名付き電子文書が正当なものと扱い、必要に応じて出力部から署名付き電子文書の署名及び証明書の検証結果を出力する。
【００１９】
ＣＡ装置１２０は、ネットワーク１６０を介して、証明書の発行依頼を受け付けると、これに対する証明書を作成し、郵送または通信により返信する。この際、ＣＡ装置１２０の秘密鍵で証明書に署名をする。
【００２０】
そして、ＣＡ装置１２０は、作成した証明書を証明書データベースに登録し、その発行先（つまり発行依頼元）の情報を発行先管理リストに登録して管理する。
【００２１】
また、ＣＡ装置１２０は、ネットワーク１６０を介して、証明書の失効依頼を受け付けると、失効対象の証明書を証明書データベースから削除すると共に、当該証明書の発行先の情報を、発行先管理リストから削除する。
【００２２】
そして、ＣＡ装置１２０は、失効依頼により証明書データベースから削除した証明書のシリアルナンバーを記述した失効証明書リスト（ＣＲＬ）を、定期的に作成して記憶しておく。なお、作成したＣＲＬには、当該ＣＡ装置１２０が発行した証明書のうち、有効期限内にもかかわらず失効した証明書のシリアルナンバーと、当該証明書が失効した日時と、当該証明書が失効した理由と、がリストとして記述される。さらに、次回のＣＲＬ作成予定時刻が記述され、ＣＡ装置１２０の秘密鍵を用いて署名が付与される。
【００２３】
また、ＣＡ装置１２０は、ネットワーク１６０を介して、他の装置よりＣＲＬ取得要求を受け取ると、記憶しているＣＲＬを、ネットワーク１６０を介して、問い合わせをした他の装置に送信する。
【００２４】
なお、ＣＡ装置１２０が証明書の失効情報を提供する方法としては、ＣＲＬを発行する例に限られず、例えば、ＯＣＳＰレスポンダを用意して、証明書の失効情報を提供する場合もある。
【００２５】
また、以上に記載した端末装置１１０と、ＣＡ装置１２０と、の数については、特に限定はない。
【００２６】
図２は、検証サーバ１３０の概略図である。
【００２７】
図示するように、検証サーバ１３０は、記憶部１３１と、制御部１３６と、入力部１４５と、出力部１４６と、通信部１４７と、Ｉ／Ｆ部１４８と、を備える。
【００２８】
記憶部１３１は、設定情報記憶領域１３２と、証明書記憶領域１３３と、鍵管理情報記憶領域１３４と、を備える。
【００２９】
設定情報記憶領域１３２には、検証サーバ１３０が利用可能な暗号モジュールを特定する情報と、検証サーバ１３０において利用可能な暗号モジュールが対応する暗号アルゴリズムを特定する情報と、検証サーバ１３０において利用可能な暗号モジュールの負荷状態を特定する情報と、検証サーバ１３０が検証サービスを提供するのに必要な設定情報と、が記憶される。
【００３０】
具体的には、設定情報記憶領域１３２には、図３（暗号モジュールリストテーブル１７０の概略図）に示すような暗号モジュールリストテーブル１７０と、図４（対応暗号アルゴリズムテーブル１７１の概略図）に示す対応暗号アルゴリズムテーブル１７１と、図５（負荷状態テーブル１７２の概略図）に示す負荷状態テーブル１７２と、が記憶される。
【００３１】
図３に示す暗号モジュールリストテーブル１７０は、暗号モジュール識別子欄１７０ａと、設定情報欄１７０ｂと、鍵管理フラグ欄１７０ｃと、を有する。
【００３２】
暗号モジュール識別子欄１７０ａには、暗号モジュールを識別するための識別情報である暗号モジュール識別子が格納される。
【００３３】
本実施形態においては、暗号演算処理を行うことのできるハードウェア及びソフトウェアを「暗号モジュール」としている。ここでは、検証サーバ１３６の制御部１３６に備えられている第一のソフトウェア暗号モジュール１４２、第二のソフトウェア暗号モジュール１４３及びＨＳＭ１５０が「暗号モジュール」に該当し、各々の識別子を「第一のソフトウェア暗号モジュール」、「第二のソフトウェア暗号モジュール」及び「ＨＳＭ」として本欄に格納している。
【００３４】
設定情報欄１７０ｂには、検証サーバ１３０が、暗号モジュール識別子欄１７０ａで特定される暗号モジュールで暗号処理を行うために必要な設定情報が格納される。
【００３５】
鍵管理フラグ欄１７０ｃには、暗号モジュール識別子欄１７０ａで特定される暗号モジュールが、検証サーバ１３０の秘密鍵を有するか否かを特定する情報が格納される。ここで、本実施形態では、本欄に「有」の文字列が格納されている場合に、検証サーバ１３０の秘密鍵を有するものとしているが、このような態様に限定されるわけではない。
【００３６】
なお、暗号モジュールリストテーブル１７０については、検証サーバ１３０のオペレータが、入力部１４５を介して、予め作成し、設定情報記憶領域１３２に記憶しておく。
【００３７】
図４に示す対応暗号アルゴリズムテーブル１７１は、暗号アルゴリズム領域１７１ａと、対応特定領域１７１ｄと、を有する。
【００３８】
暗号アルゴリズム領域１７１ａは、ハッシュアルゴリズム領域１７１ｂと、公開鍵アルゴリズム領域１７１ｃと、を備え、ハッシュアルゴリム領域１７１ｂの各行には、ハッシュアルゴリズムを特定する情報が、公開鍵アルゴリズム領域１７１ｃの各行には、公開鍵アルゴリズムを特定する情報が、格納される。
【００３９】
対応特定領域１７１ｄの各列には、暗号モジュールを特定する情報が格納される。
【００４０】
そして、暗号アルゴリズム領域１７１ａの各行で特定されるアルゴリズムと、対応特定領域１７１ｄの各列で特定される暗号モジュールと、の交差する欄には、当該暗号モジュールが、当該アルゴリズムに対応するか否かを特定する情報が格納される。本実施形態においては、これらの交差する欄に「○」の記号が格納されている場合には、当該暗号モジュールが当該アルゴリズムに対応していることを示し、「×」の記号が格納されている場合には、当該暗号モジュールが当該アルゴリズムに対応していないことを示すようにしているが、このような態様に限定されるわけではない。
【００４１】
図５に示す負荷状態テーブル１７２は、暗号モジュール識別子欄１７２ａと、負荷状態欄１７２ｂと、を有する。
【００４２】
暗号モジュール識別子欄１７２ａには、暗号モジュールを識別するための識別情報である暗号モジュール識別子が格納される。
【００４３】
負荷状態欄１７２ｂには、暗号モジュール識別子欄１７２ａで特定される暗号モジュールの負荷状態を特定する情報が格納される。
【００４４】
図２に戻り、証明書記憶領域１３３には、検証サーバ１３０の証明書が格納される。
【００４５】
鍵管理情報記憶領域１３４には、検証サーバ１３０の秘密鍵を管理する管理情報（例えば、ＨＳＭ１５０に格納されている秘密鍵のラベル等を特定する情報）が記憶される。
【００４６】
制御部１３６は、全体制御部１３７と、証明書検証部１３８と、検証結果作成部１３９と、暗号モジュール選択部１４０と、暗号モジュール監視部１４１と、第一のソフトウェア暗号モジュール１４２と、第二のソフトウェア暗号モジュール１４３と、を備える。
【００４７】
全体制御部１３７は、検証サーバ１３０における全体の処理を制御する。
【００４８】
証明書検証部１３８は、端末装置１１０からの検証要求に応じて、当該検証要求に添付されているＣＡ証明書を信頼点として、検証対象証明書までの認証パスを構築する処理を行う。
【００４９】
また、証明書検証部１３８は、構築した認証パスを検証する処理を行う。
【００５０】
検証結果作成部１３９は、証明書検証部１３８で実行した検証対象証明書の検証結果に応じて、検証結果電文を作成する処理を行う。
【００５１】
暗号モジュール選択部１４０は、証明書検証部１３８が、認証パスを検証する処理において実施する証明書やＣＲＬの署名検証処理、または、検証結果作成部１３９が検証結果電文を作成する際に実施する署名処理、を実行する暗号モジュールを選択する処理を行う。
【００５２】
暗号モジュール監視部１４１は、予め定められたタイミング（例えば、検証サーバ１３０のサービスを開始するタイミング等）において、検証サーバ１３０が利用可能な暗号モジュールを暗号モジュールリストテーブル１７０から特定し、特定した暗号モジュール全てにアクセスし、それぞれの暗号モジュールが対応可能な暗号アルゴリズムを調査し、対応暗号アルゴリズムテーブル１７１を作成し、設定情報記憶領域１３２に記憶する処理を行う。なお、この処理は、ＰＫＣＳ（Public Key Cryptography Standards）＃１１に基づいて行えばよい。
【００５３】
また、暗号モジュール監視部１４１は、検証サーバ１３０が利用可能な暗号モジュールを暗号モジュールリストテーブル１７０で特定し、特定した暗号モジュールの負荷状態を監視して、負荷状態テーブル１７２に格納する処理を行う。
【００５４】
第一のソフトウェア暗号モジュール１４２及び第二のソフトウェア暗号モジュール１４３は、各々、認証パス検証処理における証明書や証明書失効リストの署名検証処理や、検証結果に対する検証サーバの署名生成処理等の、暗号演算を行う。
【００５５】
入力部１４５は、情報の入力を受け付ける。
【００５６】
出力部１４６は、情報を出力する。
【００５７】
通信部１４７は、ネットワーク１６０を介した情報の送受信を行う。
【００５８】
Ｉ／Ｆ部１４８は、ＨＳＭ１５０との間で情報の送受信を行う。
【００５９】
以上に記載した検証サーバ１３０は、例えば、図６（コンピュータ１８０の概略図）に示すような、ＣＰＵ（Central Processing Unit）１８１と、メモリ１８２と、ＨＤＤ（Hard Disk Drive）等の外部記憶装置１８３と、ＣＤ−ＲＯＭ（Compact Disk Read Only Memory）やＤＶＤ−ＲＯＭ（Digital Versatile Disk Read Only Memory）等の可搬性を有する記憶媒体１８４に対して情報を読み書きする読書装置１８５と、キーボードやマウスなどの入力装置１８６と、ディスプレイなどの出力装置１８７と、通信ネットワークに接続するためのＮＩＣ（Network Interface Card）等の通信装置１８８と、ＵＳＢ（Universal Serial Bus）等のＩ／Ｆ（インターフェース）１８９と、を備えた一般的なコンピュータ１８０で実現できる。
【００６０】
例えば、記憶部１３１は、ＣＰＵ１８１がメモリ１８２又は外部記憶装置１８３を利用することにより実現可能であり、制御部１３６は、外部記憶装置１８３に記憶されている所定のプログラムをメモリ１８２にロードしてＣＰＵ１８１で実行することで実現可能であり、入力部１４５は、ＣＰＵ１８１が入力装置１８６を利用することで実現可能であり、出力部１４６は、ＣＰＵ１８１が出力装置１８７を利用することで実現可能であり、通信部１４７は、ＣＰＵ１８１が通信装置１８８を利用することで実現可能であり、Ｉ／Ｆ部１４８は、ＣＰＵ１８１がＩ／Ｆ１８９を利用することで実現可能である。
【００６１】
この所定のプログラムは、読書装置１８５を介して記憶媒体１８４から、あるいは、通信装置１８８を介してネットワークから、外部記憶装置１８３にダウンロードされ、それから、メモリ１８２上にロードされてＣＰＵ１８１により実行されるようにしてもよい。また、読書装置１８５を介して記憶媒体１８４から、あるいは、通信装置１８８を介してネットワークから、メモリ１８２上に直接ロードされ、ＣＰＵ１８１により実行されるようにしてもよい。
【００６２】
ＨＳＭ１５０は、少なくとも、ＰＫＣＳ＃１１に対応したものを使用すればよく、汎用のもので良いため、詳細な説明は省略する。
【００６３】
なお、ＨＳＭ１５０は、直接又はネットワークを介して検証サーバ１３０に接続されるが、本実施形態においては、図１に示すように、検証サーバ１３０に直接接続されているが、このような態様に限定されない。
【００６４】
また、図１では、ＨＳＭ１５０と検証サーバ１３０とは、１対１で接続されているが、１対多、多対多、多対１となるように接続してもよい。
【００６５】
図７は、検証サーバ１３０において、暗号モジュールの負荷状態を監視する処理を示すフローチャートである。
【００６６】
まず、暗号モジュール監視部１４１は、予め設定された監視間隔、例えば、数十秒の所定時間を経過したら（Ｓ１０でＹｅｓ）、暗号モジュールリストテーブル１７０の暗号モジュール識別子欄１７０ａで特定される暗号モジュールのなかから、未調査の暗号モジュールを一つ選択し（Ｓ１１）、選択した当該暗号モジュールを利用するための設定情報を設定情報欄１７０ｂより取得する（Ｓ１２）。
【００６７】
そして、暗号モジュール監視部１４１は、ステップＳ１１で選択した当該暗号モジュールにおいて、ダミーの暗号演算を実施する（Ｓ１３）。ここで、ダミーの暗号演算は、例えば、暗号モジュールリストテーブル１７０ａに格納されている全ての暗号モジュールが対応する暗号アルゴリズムにおいて、同じデータを用いて処理を実施する（例えば、テスト用のデータに対するハッシュ計算等）。
【００６８】
次に、暗号モジュール監視部１４１は、ステップＳ１３で実施した暗号演算にかかった時間（例えば、暗号モジュールに演算の指示を出力してから、演算結果の応答を受け取るまでの時間）を、負荷状態テーブル１７２に、ステップＳ１３で暗号演算を実施した当該暗号モジュールに対応付けて格納する（Ｓ１４）。
【００６９】
そして、暗号モジュール監視部１４１は、暗号モジュールリストテーブル１７０に格納された全ての暗号モジュールについてステップＳ１２〜Ｓ１４の処理を行ったか否かを判断し（Ｓ１５）、未調査の暗号モジュールがある場合には（ステップＳ１５でＹｅｓ）、ステップＳ１１に戻り処理を繰り返し、全ての暗号モジュールで調査を行った場合には（ステップＳ１５でＮｏ）、ステップＳ１０に戻り処理を繰り返す。
【００７０】
図８は、検証サーバ１３０での証明書の検証処理を示すフローチャートである。
【００７１】
検証サーバ１３０の全体制御部１３７は、通信部１４７を介して、端末装置１１０から証明書の検証要求を受け付けると（Ｓ２０でＹｅｓ）、当該検証要求を証明書検証部１３８にわたす。
【００７２】
そして、証明書検証部１３８は、わたされた検証要求から、端末装置１１０のユーザが信頼するＣＡ装置１２０のＣＡ証明書と、検証対象である検証対象証明書と、を取得し（Ｓ２１）、取得したＣＡ証明書から取得した検証対象証明書までの認証パスを構築する（Ｓ２２）。
【００７３】
次に、証明書検証部１３８は、認証パスの構築ができたら、構築した認証パスの検証を実施する（Ｓ２３）。
【００７４】
具体的には、証明書検証部１３８は、ステップＳ２２で構築した認証パスを構成する複数の証明書のうち、パスの起点となる信頼するＣＡのＣＡ証明書を除く、全ての証明書について、証明書に付与されている署名を、各々の証明書を発行したＣＡ装置１２０のＣＡ証明書に記載された公開鍵を用いて検証する。
【００７５】
また、証明書検証部１３８は、当該全ての証明書について、証明書が失効されていないことを確認するために、証明書を発行したＣＡ装置１２０が発行するＣＲＬによる確認や、ＯＣＳＰレスポンダへ問い合わせることにより確認する。
【００７６】
そして、証明書検証部１３８は、ＣＲＬ又はＯＣＳＰレスポンスに付与された、発行ＣＡ装置１２０の署名を、発行ＣＡ装置１２０の証明書に記載された公開鍵を用いて検証する。また、これらの事項の確認以外にも、ＲＦＣ５２８０の第６章「認証パス検証」に規定される事項について、確認を行う。
【００７７】
次に、検証結果作成部１３９は、ステップＳ２３での認証パスの検証の結果を記した電文を作成し、その電文に対して検証サーバ１３０の秘密鍵を用いて、署名値を生成し、当該署名値と、検証サーバ１３０の証明書と、を作成した電文に添付することにより、検証結果電文を作成する（Ｓ２４）。
【００７８】
そして、検証サーバ１３０の全体制御部１３７は、ステップＳ２４で作成した検証結果電文を、ステップＳ２０において、検証要求を送信してきた端末装置１１０に対して送信し（Ｓ２５）、ステップＳ２０に戻り処理を繰り返す。
【００７９】
図９は、図８のステップＳ２３の認証パス検証処理における、証明書、ＣＲＬ又はＯＣＳＰレスポンスの署名検証処理を示すフローチャートである。
【００８０】
まず、証明書検証部１３８は、署名検証を行う証明書、ＣＲＬ又はＯＣＳＰレスポンスから、署名値に関するハッシュアルゴリズム及び公開鍵暗号アルゴリズムを取得する（Ｓ３０）。
【００８１】
次に、証明書検証部１３８は、暗号モジュール選択部１４０を用いて、ステップＳ３０で取得したハッシュアルゴリズムをキーにして、対応暗号アルゴリズムテーブル１７１を検索することで、キーとしたハッシュアルゴリズムに対応する暗号モジュールがあるかどうかを検索する（Ｓ３１）。
【００８２】
そして、証明書検証部１３８は、キーとしたハッシュアルゴリズムに対応する暗号モジュールがない場合には（ステップＳ３１でＮｏ）、ステップＳ４５に進み、対応する暗号モジュールがある場合には（ステップＳ３１でＹｅｓ）、ステップＳ３２に進む。
【００８３】
ステップＳ３２では、証明書検証部１３８は、キーとしたハッシュアルゴリズムに対応する暗号モジュールが複数あるか否かを判断する。そして、キーとしたハッシュアルゴリズムに対応する暗号モジュールが複数ない場合には（ステップＳ３２でＮｏ）、ステップＳ３３に進み、複数ある場合には（ステップＳ３２でＹｅｓ）、ステップＳ３４に進む。
【００８４】
ステップＳ３３では、暗号モジュール選択部１４０は、キーとしたハッシュアルゴリズムに対応する暗号モジュールが一つしかないので、当該暗号モジュールを選択してステップＳ３６に進む。
【００８５】
一方、ステップＳ３４では、暗号モジュール選択部１４０は、対応暗号アルゴリズムテーブル１７１から、キーとしたハッシュアルゴリズムに対応する暗号モジュールの識別子を全て取得する（Ｓ３４）。
【００８６】
次に、暗号モジュール選択部１４０は、ステップＳ３４で取得した全ての暗号モジュール識別子をキーにして、負荷状態テーブル１７２を検索し、キーとした暗号モジュール識別子に対応する暗号モジュールのうち一番負荷がかかっていない暗号モジュールを選択する（Ｓ３５）。ここで、本実施形態においては、対応する暗号モジュールのうち、負荷状態テーブル１７２の負荷状態欄１７２ｂに格納されている時間が最も短いものを選択する。なお、最も短い時間が複数ある場合には、ＨＳＭ１５０を優先する等の予め定められた法則に従って、一つの暗号モジュールを特定する。
【００８７】
そして、ステップＳ３６において、証明書検証部１３８は、暗号モジュール選択部１４０が選択した暗号モジュールを用いて、署名検証のためのハッシュ計算を実施する（Ｓ３６）。具体的には、検証対象の証明書、ＣＲＬ又はＯＣＳＰレスポンスの署名対象部分の電文を、選択された暗号モジュールを用いて、ステップＳ３０で取得されたハッシュアルゴリズムによるハッシュ計算を行い、結果として得られる値に、当該ハッシュアルゴリズムの識別子（ＯＩＤ）を合わせて、ハッシュ値を得る。
【００８８】
次に、証明書検証部１３８は、ステップＳ３７で取得した公開鍵暗号アルゴリズムをキーにして、対応暗号アルゴリズムテーブル１７１を検索し、キーとした公開鍵暗号アルゴリズムに対応する暗号モジュールがあるかどうかを検索する（Ｓ３７）。
【００８９】
そして、証明書検証部１３８は、キーとした公開鍵暗号アルゴリズムに対応する暗号モジュールがない場合には（ステップＳ３７でＮｏ）、ステップＳ４５に進み、対応する暗号モジュールがある場合には（ステップＳ３７でＹｅｓ）、ステップＳ３８に進む。
【００９０】
ステップＳ３８では、証明書検証部１３８は、キーとした公開鍵暗号アルゴリズムに対応する暗号モジュールが複数あるか否かを判断する。そして、キーとした公開鍵暗号アルゴリズムに対応する暗号モジュールが複数ない場合には（ステップＳ３８でＮｏ）、ステップＳ３９に進み、複数ある場合には（ステップＳ３８でＹｅｓ）、ステップＳ４０に進む。
【００９１】
ステップＳ３９では、暗号モジュール選択部１４０は、キーとした公開鍵暗号アルゴリズムに対応する暗号モジュールが一つしかないので、当該暗号モジュールを選択してステップＳ４２に進む。
【００９２】
ステップＳ４０では、暗号モジュール選択部１４０は、対応暗号アルゴリズムテーブル１７１から、キーとした公開鍵暗号アルゴリズムに対応する暗号モジュールの識別子を全て取得する。
【００９３】
次に、暗号モジュール選択部１４０は、ステップＳ４０で取得した全ての暗号モジュール識別子をキーにして、負荷状態テーブル１７２を検索し、キーとした暗号モジュール識別子に対応する暗号モジュールのうち一番負荷がかかっていない暗号モジュールを選択する（Ｓ４１）。ここで、本実施形態においては、対応する暗号モジュールのうち、負荷状態テーブル１７２の負荷状態欄１７２ｂに格納されている時間が最も短いものを選択する。なお、最も短い時間が複数ある場合には、ＨＳＭ１５０を優先する等の予め定められた法則に従って、一つの暗号モジュールを特定する。
【００９４】
そして、証明書検証部１３８は、選択された暗号モジュールを用いて、検証対象の署名値を復号し、復号された復号データ及びステップＳ３６で取得したハッシュ値が同じであることを確認することで、署名の検証処理を行う（Ｓ４２）。具体的には、選択された暗号モジュールにおいて、ステップＳ３０で取得された公開鍵暗号アルゴリズムと、検証対象証明書、ＣＲＬ又はＯＣＳＰレスポンスを発行したＣＡ装置１２０のＣＡ証明書に記載される公開鍵と、検証対象証明書、ＣＲＬ又はＯＣＳＰレスポンスの署名値と、ステップＳ３６で取得したハッシュ値を入力値として、署名の検証を行う。すなわち、選択された暗号モジュールは、入力された署名値を、入力された公開鍵を用いて、入力された公開鍵暗号アルゴリズムで復号し、結果として得られた復号データと、入力されたハッシュ値が同じである場合は、署名検証に成功した旨を応答し、異なる場合は署名検証に失敗した旨を証明書検証部１３８に応答する。
【００９５】
次に、証明書検証部１３８は、選択された暗号モジュールから、署名検証の結果を受け取り、受け取った検証結果が成功だった場合には（Ｓ４３でＹｅｓ）、検証対象証明書の署名が有効だと判断し（Ｓ４４）、認証パス検証処理を引き続き実施する。
【００９６】
一方、証明書検証部１３８は、受け取った検証結果が失敗だった場合には（ステップＳ４３でＮｏ）、ステップＳ４５に進む。
【００９７】
ステップＳ４５では、証明書検証部１３８は、検証対象証明書の署名は有効でないと判断し、認証パスの検証処理に失敗したものと判断する。
【００９８】
図１０は、検証サーバ１３０の秘密鍵による電子署名の生成処理を示すフローチャートである。
【００９９】
検証結果作成部１３９は、検証サーバ１３０のオペレータにより設定された、検証サーバ１３０の秘密鍵情報から、検証サーバ１３０が検証結果電文への署名生成の際に使用するハッシュアルゴリズム及び公開鍵暗号アルゴリズムを取得する（Ｓ５０）。なお、これらの情報については、鍵管理情報記憶領域１３４に記憶されているものとする。
【０１００】
次に、検証結果作成部１３９は、暗号モジュール選択部１４０を用いて、ステップＳ５０で取得したハッシュアルゴリズムをキーにして、対応暗号アルゴリズムテーブル１７１から、キーとしたハッシュアルゴリズムに対応する暗号モジュールが複数あるか否かを確認する（Ｓ５１）。
【０１０１】
そして、キーとしたハッシュアルゴリズムに対応する暗号モジュールが複数ない場合には（ステップＳ５１でＮｏ）、ステップＳ５２に進み、複数ある場合には（ステップＳ５１でＹｅｓ）、ステップＳ５３に進む。
【０１０２】
ステップＳ５２では、暗号モジュール選択部１４０は、キーとしたハッシュアルゴリズムに対応する暗号モジュールが一つしかないので、当該暗号モジュールを選択してステップＳ５５に進む。
【０１０３】
一方、ステップＳ５３では、暗号モジュール選択部１４０は、対応暗号アルゴリズムテーブル１７１から、キーとしたハッシュアルゴリズムに対応する暗号モジュールの識別子を全て取得する。
【０１０４】
次に、暗号モジュール選択部１４０は、ステップＳ５３で取得した全ての暗号モジュール識別子をキーにして、負荷状態テーブル１７２を検索し、キーとした暗号モジュール識別子に対応する暗号モジュールのうち一番負荷がかかっていない暗号モジュールを選択する（Ｓ５４）。ここで、本実施形態においては、対応する暗号モジュールのうち、負荷状態テーブル１７２の負荷状態欄１７２ｂに格納されている時間が最も短いものを選択する。なお、最も短い時間が複数ある場合には、ＨＳＭ１５０を優先する等の予め定められた法則に従って、一つの暗号モジュールを特定する。
【０１０５】
ステップＳ５５では、検証結果作成部１３９は、選択された当該暗号モジュールを用いて、署名生成のためのハッシュ計算を実施する。具体的には、署名対象の検証結果電文を、選択された暗号モジュールに入力して、ステップＳ５０で取得されたハッシュアルゴリズムによるハッシュ計算を行い、結果として得られる値に、当該ハッシュアルゴリズムを特定する識別子（ＯＩＤ）を合わせて、ハッシュ値を得る。
【０１０６】
次に、検証結果作成部１３９は、暗号モジュールリストテーブル１７０を検索し、鍵管理フラグ欄１７０ｃに「有」の文字列が格納されている暗号モジュールを検索し、検索した暗号モジュールの識別子を取得する（Ｓ５６）。
【０１０７】
そして、検証結果作成部１３９は、ステップＳ５６で取得した暗号モジュール識別子に対応する暗号モジュールにおいて、検証サーバ１３０の秘密鍵を用いて、ステップＳ５５で算出したハッシュ値の暗号化を行う（Ｓ５７）。具体的には、ステップＳ５０で取得した公開鍵暗号アルゴリズムと、検証サーバ１３０の秘密鍵を特定するための情報と、ステップＳ５５で得たハッシュ値と、を入力値とし、ステップＳ５６で取得した暗号モジュールに入力して、当該暗号モジュールにおいて入力されたハッシュ値を、入力された秘密鍵を特定するための情報に対応する秘密鍵を用いて暗号化する。
【０１０８】
そして、暗号モジュールは、ステップＳ５７で得られた署名値を検証結果作成部１３９に出力する（Ｓ５８）。これを受け取った検証結果作成部１３９は、検証結果を示す電文に、署名値と、鍵管理情報記憶領域１３４に記憶された秘密鍵に対応する検証サーバ１３０の証明書と、を添付し検証結果電文を得る。
【０１０９】
なお、ステップＳ５６において、鍵管理フラグ欄１７０ｃに「有」の文字列が格納されている暗号モジュールが複数ある場合には、即ち、検証サーバ１３０の秘密鍵を管理する暗号モジュールが複数ある場合には、そのような秘密鍵を有する暗号モジュールのうち、最も負荷のかかっていない暗号モジュールを選択して、ステップＳ５７の暗号化処理を行ってもよい。
【０１１０】
以上に記載したように、本実施形態によれば、検証サーバ１３０において、多数の端末装置１１０から膨大な数の検証要求を受けた場合においても、ＨＳＭ１５０および検証サーバ１３０の両方で暗号演算を効率的に処理することができ、検証サーバ１３０全体の処理性能を向上させ、検証要求を受け付けてから検証結果を送信するまでの時間を短くすることができる。
【０１１１】
また、ＨＳＭ１５０及びソフトウェア暗号モジュール１４２、１４３で対応可能なアルゴリズムを対応暗号アルゴリズムテーブル１７１として管理することにより、いずれかの暗号モジュールが対応していない暗号アルゴリズムを用いた暗号演算を行う場合でも、自動的に適切な暗号モジュールを選択することができ、検証サーバ１３０の管理者がいずれの暗号モジュールを使用するかを意識しなくても良く、運用上の負荷を軽減することができる。
【０１１２】
なお、本発明は、以上に記載した実施形態に限定されるものではなく、その要旨の範囲内で様々な変形が可能である。
【０１１３】
例えば、以上に記載した実施形態では、検証サーバ１３０の暗号モジュール監視部１４１が暗号モジュールの負荷状態を監視する方法として、特定の間隔で各暗号モジュールにおいて暗号演算を行い、その暗号演算にかかった時間を計測している。これに対して、例えば、暗号モジュール監視部１４１が、検証サーバ１３０と、ＨＳＭ１５０のＣＰＵ利用率を特定の間隔で検出し、検出したＣＰＵ利用率を負荷状態テーブル１７２の負荷状態欄１７２ｂに格納するようにしてもよい。このような場合には、ＣＰＵ利用率が最も小さいものを最も負荷のかかっていないものとして、実際の暗号演算に使用すればよい。
【０１１４】
また、暗号モジュール監視部１４１は、特定の間隔で各暗号モジュールの監視を行うのではなく、各々の暗号モジュールが署名検証処理においてハッシュ値を生成する処理を行う度に、その処理時間を負荷状態テーブル１７２の負荷状態欄１７２ｂに格納することにより、負荷状態を管理してもよい。この場合、基本的には、全ての暗号モジュールを順番に使うように設定しておくことにより、全ての暗号モジュールにおける処理時間を調査し、当該処理時間がある一定時間以上かかる場合には、時間のかかっている暗号モジュールを使用せず、他の暗号モジュールで処理するようにすればよい。
【０１１５】
さらに、ＨＳＭ１５０の処理性能よりも、検証サーバ１３０の処理性能が、明らかに良い場合は、検証要求をうける毎に暗号モジュール選択部１４０を用いて暗号モジュールの選択を行うのではなく、常に、認証パス検証処理における署名検証処理、および、検証結果電文への署名値生成処理、におけるハッシュ演算を、検証サーバ１３０におけるソフトウェア暗号モジュール１４２、１４３を用いて実施し、ＨＳＭ１５０では検証結果電文への署名生成における公開鍵暗号処理のみを実施するようにしても良い。
【符号の説明】
【０１１６】
１００  検証システム
１１０  端末装置
１２０  ＣＡ装置
１３０  検証サーバ
１３１  記憶部
１３２  設定情報記憶領域
１３３  証明書記憶領域
１３４  鍵管理情報記憶領域
１３６  制御部
１３７  全体制御部
１３８  証明書検証部
１３９  検証結果作成部
１４０  暗号モジュール選択部
１４１  暗号モジュール監視部
１４２  第一のソフトウェア暗号モジュール
１４３  第二のソフトウェア暗号モジュール
１５０  ＨＳＭ
【図１】
0005346111.tif 000002
【図２】
0005346111.tif 000003
【図３】
0005346111.tif 000004
【図４】
0005346111.tif 000005
【図５】
0005346111.tif 000006
【図６】
0005346111.tif 000007
【図７】
0005346111.tif 000008
【図８】
0005346111.tif 000009
【図９】
0005346111.tif 000010
【図１０】
0005346111.tif 000011