(57)【特許請求の範囲】
【請求項１】
クライアントからの証明書検証要求を受付け、証明書検証と署名付与を行う証明書検証サーバであって、
当該証明書検証サーバの秘密鍵を保管するハードウェア暗号モジュールと通信する通信装置と、
秘密鍵のＩＤと、前記ハードウェア暗号モジュールに保管された前記秘密鍵ごとに一意に対応付けされたハンドル値と、を対応付ける秘密鍵情報テーブルを格納する記憶装置と、
前記証明書検証要求の対象である証明書についての検証を行ってレスポンスデータを生成する検証処理と、
前記証明書検証要求の対象である証明書から秘密鍵のＩＤを取得し、この秘密鍵のＩＤを前記秘密鍵情報テーブルに照合して前記秘密鍵を一意に特定するハンドル値を特定するハンドル特定処理と、
前記秘密鍵を一意に特定するハンドル値をキーにした署名依頼をハードウェア暗号モジュールに通知し、当該ハードウェア暗号モジュールから当該署名依頼にかかる署名値を取得して、この署名値を用いて前記生成したレスポンスデータへの署名付与を行う署名処理と、を実行する演算装置と、
を備えることを特徴とする証明書検証サーバ。
【請求項２】
前記証明書検証要求の受付前に、ハードウェア暗号モジュールに対して秘密鍵情報の検索要求を行い、ハードウェア暗号モジュールの保持する秘密鍵情報を取得し、当該秘密鍵情報の含むハンドル値と証明書検証サーバの秘密鍵のＩＤとを対応付けて前記秘密鍵情報テーブルに格納する鍵情報取得処理を実行し、
前記検証処理、ハンドル特定処理及び署名処理を前記証明書検証要求の受付後に実行することを特徴とする請求項１に記載の証明書検証サーバ。
【請求項３】
前記鍵情報取得処理は、前記証明書検証サーバの起動時、または当該証明書検証サーバ経由の指示でハードウェア暗号モジュールへ秘密鍵が追加・削除されたことを検知したときに、実行されることを特徴とする請求項２に記載の証明書検証サーバ。
【請求項４】
クライアントからの証明書検証要求を受付け、証明書検証と署名付与を行うコンピュータが、
当該コンピュータの秘密鍵を保管するハードウェア暗号モジュールと通信する通信装置と、秘密鍵のＩＤと、前記ハードウェア暗号モジュールに保管された前記秘密鍵ごとに一意に対応付けされたハンドル値と、を対応付ける秘密鍵情報テーブルを格納する記憶装置と、演算装置とを備えて、
前記証明書検証要求の対象である証明書についての検証を行ってレスポンスデータを生成する処理と、
前記証明書検証要求の対象である証明書から秘密鍵のＩＤを取得し、この秘密鍵のＩＤを前記秘密鍵情報テーブルに照合して前記秘密鍵を一意に特定するハンドル値を特定する処理と、
前記秘密鍵を一意に特定するハンドル値をキーにした署名依頼をハードウェア暗号モジュールに通知し、当該ハードウェア暗号モジュールから当該署名依頼にかかる署名値を取得して、この署名値を用いて前記生成したレスポンスデータへの署名付与を行う処理と、
を行うことを特徴とする証明書検証方法。
【請求項５】
クライアントからの証明書検証要求を受付け、証明書検証と署名付与を行うべく、当該コンピュータの秘密鍵を保管するハードウェア暗号モジュールと通信する通信装置と、秘密鍵のＩＤと、前記ハードウェア暗号モジュールに保管された前記秘密鍵ごとに一意に対応付けされたハンドル値と、を対応付ける秘密鍵情報テーブルを格納する記憶装置と、演算装置とを備えたコンピュータに、
前記証明書検証要求の対象である証明書についての検証を行ってレスポンスデータを生成する処理と、
前記証明書検証要求の対象である証明書から秘密鍵のＩＤを取得し、この秘密鍵のＩＤを前記秘密鍵情報テーブルに照合して前記秘密鍵を一意に特定するハンドル値を特定する処理と、
前記秘密鍵を一意に特定するハンドル値をキーにした署名依頼をハードウェア暗号モジュールに通知し、当該ハードウェア暗号モジュールから当該署名依頼にかかる署名値を取得して、この署名値を用いて前記生成したレスポンスデータへの署名付与を行う処理と、
を実行させる証明書検証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、証明書検証サーバ、証明書検証方法、および証明書検証プログラムに関し、具体的には、公開鍵暗号通信において証明書の有効性を検証する証明書検証サーバの処理を高速化する技術に関する。
【背景技術】
【０００２】
今日、情報セキュリティに対する関心が高まっており、公共・民間分野共に情報セキュリティに配慮したインフラ整備が進められている。こうした情報セキュリティ技術の一つとして公開鍵認証基盤(以下PKI ; Public Key Infrastructure)がある。本発明で扱う証明書検証サーバとは、PKIにおいてクライアントの代わりに証明書の信頼性または有効性を検証し、その検証結果を応答するサーバである。また証明書検証サーバは、前記検証結果を応答する際に、認証局(CA)から発行された証明書に対応する秘密鍵を用いて、結果情報に署名付与を行い返信する。
【０００３】
現在、企業間における証明書の検証処理に関するトランザクションは増加の傾向にある。これを受けて証明書検証サーバは、複数の秘密鍵に対応する検証処理を実施することに加え、高い応答性能が要求されている。PKIにおいては、公開鍵を公開し、ペアになる秘密鍵は他人に知られないように管理することで暗号の秘密性を保っており、すなわち証明書検証サーバで保管する上記秘密鍵は非常に重要なものであるため、第三者に流出しないよう厳重に管理する必要がある。
【０００４】
このため、証明書検証サーバでは、秘密鍵をハードウェア暗号モジュールで保管・管理するのが一般的である。このハードウェア暗号モジュールを利用した場合、秘密鍵の生成はハードウェア暗号モジュール内部で実行され、また、秘密鍵による署名付与といった秘密鍵を利用する演算処理もハードウェア暗号モジュール内部で処理される。したがって前記秘密鍵がハードウェア暗号モジュール外に出ることがないため、秘密鍵の漏洩等のセキュリティ上の脅威を防ぐことができる。
【０００５】
前記証明書検証サーバは、クライアントから証明書検証要求を受けると、図３に示すように以下の手順で検証処理を行う。  
(a)クライアントから受け取った証明書が信頼できるかどうかを検証する。  
(b)上記検証結果に従ってレスポンスデータを生成する。  
(c)ハードウェア暗号モジュールと通信を行い、ハードウェア暗号モジュールに保持されている証明書検証サーバの秘密鍵を用いて署名値を生成する。  
(d)証明書検証サーバの署名、証明書を添付したものを、前記クライアントへ応答する。
【０００６】
上記（ｃ）の処理における証明書検証サーバとハードウェア暗号モジュールとの間の通信には、非特許文献１にて示されるように、標準のインタフェースであるＰＫＣＳ＃１１ライブラリが用いられる。証明書検証サーバが既に起動している場合において、この標準インタフェースを用いた場合の証明書検証サーバとハードウェア暗号モジュールとの間の処理を図４に示す。
【０００７】
この処理において、証明書検証サーバの起動状態では、既にハードウェア暗号モジュールとのセッションが確立されているため、（１）C_Logout(ハードウェア暗号モジュールからログアウトする：ステップｓ４１)し、（２）C_CloseSession(証明書検証サーバのサービスを切断する：ステップｓ４２)し、（３）C_Finalize(PKCS#11ライブラリを終了する：ステップｓ４３)までの処理が必要となる。図４に示す手順に従い、まず証明書検証サーバは、（１）C_Logout(ハードウェア暗号モジュールからログアウトする：ステップｓ４１)し、（２）C_CloseSession(証明書検証サーバのサービスを切断する：ｓ４２)し、（３）C_Finalize(PKCS#11ライブラリを終了する：ｓ４３)する。次に、（４）C_Initialize(PKCS#11ライブラリを初期化する：ステップｓ４４)し、（５）C_OpenSession(証明書検証サーバのサービスを起動する：ステップｓ４５)し、（６）C_Login(ハードウェア暗号モジュールにログインする：ステップｓ４６)する。さらに、（７）C_FindObjectInit(署名を施すための秘密鍵情報の検索を開始する：ステップｓ４７)し、（８）C_FindObject(秘密鍵情報の検索を行う：ステップｓ４８)し、（９）C_FindObjectFinal(秘密鍵情報を取得した後、秘密鍵情報の検索を終了する：ステップｓ４９)する。最後に、（１０）C_SignInit(署名処理を初期化する：ステップｓ５０)し、（１１）C_Sign(データに署名をする：ステップｓ５１)する。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
例えばコンテンツ保証システムとして証明書検証サーバを設置し、この証明書検証サーバがコンテンツの署名検証のための証明書を検証する場合、当該証明書検証サーバの性能として約１９件/秒、５００ミリ秒/件の顧客要求が想定される。上記従来の証明書検証方法において、前記顧客要求を満たす性能を達成することが難しくなる場合がある。
【０００９】
これは、ハードウェア暗号モジュールへの秘密鍵の追加・削除を検知すると、証明書検証サーバが検証結果情報に署名をする度にハードウェア暗号モジュールに保管・管理されている秘密鍵を前記ハードウェア暗号モジュールからロードしなければならないこと、かつ署名の度にロードした秘密鍵から該当する秘密鍵の検索を行わなければならないことによる。
【００１０】
ここで、ハードウェア暗号モジュールへの秘密鍵の追加・削除は、上述のPKIにおいて、証明書検証サーバ運用者によって行われる。証明書検証サーバ運用者の操作する端末は、ネットワークを介して証明書検証サーバと通信を行う。証明書検証サーバの秘密鍵の作成は、前記証明書検証サーバ運用者が、証明書検証サーバからハードウェア暗号モジュールに秘密鍵の作成要求を出すことで、前記ハードウェア暗号モジュール内で実行される。一方、証明書検証サーバの秘密鍵の削除は、上記証明書検証サーバ運用者が、証明書検証サーバからハードウェア暗号モジュールに秘密鍵の削除要求を出すことで、前記ハードウェア暗号モジュールで実行される。
【００１１】
こうした証明書検証サーバは、検証結果に前述の証明書検証サーバの署名を付与する際、上述のステップｓ４１〜ｓ４６までの処理を、署名をする度に毎回行う必要があり、かつハードウェア暗号モジュールで保管・管理されている秘密鍵の数が多いほど、前記ステップｓ４７〜ｓ４９までの処理に時間がかかることになる。
【００１２】
そこで、本発明は上記課題を鑑みてなされたものであり、多数の証明書検証サーバの秘密鍵をハードウェア暗号モジュールに保管する場合にも、証明書検証処理の性能低下を防止し、所定のレスポンス性能を保証することができる技術の提供を目的とする。
【課題を解決するための手段】
【００１３】
上記課題を解決する本発明の証明書検証サーバは、クライアントからの証明書検証要求を受付け、証明書検証と署名付与を行う証明書検証サーバであって、当該証明書検証サーバの秘密鍵を保管するハードウェア暗号モジュールと通信する通信装置と、秘密鍵のＩＤと、前記ハードウェア暗号モジュールに保管された前記秘密鍵ごとに一意に対応付けされたハンドル値と、を対応付ける秘密鍵情報テーブルを格納する記憶装置と、前記証明書検証要求の対象である証明書についての検証を行ってレスポンスデータを生成する検証処理と、前記証明書検証要求の対象である証明書から秘密鍵のＩＤを取得し、この秘密鍵のＩＤを前記秘密鍵情報テーブルに照合して前記秘密鍵を一意に特定するハンドル値を特定するハンドル特定処理と、前記秘密鍵を一意に特定するハンドル値をキーにした署名依頼をハードウェア暗号モジュールに通知し、当該ハードウェア暗号モジュールから当該署名依頼にかかる署名値を取得して、この署名値を用いて前記生成したレスポンスデータへの署名付与を行う署名処理と、を実行する演算装置と、を備えることを特徴とする。
【００１４】
また、前記証明書検証サーバにおいて、前記証明書検証要求の受付前に、ハードウェア暗号モジュールに対して秘密鍵情報の検索要求を行い、ハードウェア暗号モジュールの保持する秘密鍵情報を取得し、当該秘密鍵情報の含むハンドル値と証明書検証サーバの秘密鍵のＩＤとを対応付けて前記秘密鍵情報テーブルに格納する鍵情報取得処理を実行し、前記検証処理、ハンドル特定処理及び署名処理を前記証明書検証要求の受付後に実行する、としてもよい。
【００１５】
また、前記証明書検証サーバにおいて、前記鍵情報取得処理は、前記証明書検証サーバの起動時、または当該証明書検証サーバ経由の指示でハードウェア暗号モジュールへ秘密鍵が追加・削除されたことを検知したときに、実行されるとしてもよい。
【００１６】
また、本発明の証明書検証方法は、クライアントからの証明書検証要求を受付け、証明書検証と署名付与を行うコンピュータが、当該コンピュータの秘密鍵を保管するハードウェア暗号モジュールと通信する通信装置と、秘密鍵のＩＤと、前記ハードウェア暗号モジュールに保管された前記秘密鍵ごとに一意に対応付けされたハンドル値と、を対応付ける秘密鍵情報テーブルを格納する記憶装置と、演算装置とを備えて、前記証明書検証要求の対象である証明書についての検証を行ってレスポンスデータを生成する処理と、前記証明書検証要求の対象である証明書から秘密鍵のＩＤを取得し、この秘密鍵のＩＤを前記秘密鍵情報テーブルに照合して前記秘密鍵を一意に特定するハンドル値を特定する処理と、前記秘密鍵を一意に特定するハンドル値をキーにした署名依頼をハードウェア暗号モジュールに通知し、当該ハードウェア暗号モジュールから当該署名依頼にかかる署名値を取得して、この署名値を用いて前記生成したレスポンスデータへの署名付与を行う処理と、を行うことを特徴とする。
【００１７】
また、本発明の証明書検証プログラムは、クライアントからの証明書検証要求を受付け、証明書検証と署名付与を行うべく、当該コンピュータの秘密鍵を保管するハードウェア暗号モジュールと通信する通信装置と、秘密鍵のＩＤと、前記ハードウェア暗号モジュールに保管された前記秘密鍵ごとに一意に対応付けされたハンドル値と、を対応付ける秘密鍵情報テーブルを格納する記憶装置と、演算装置とを備えたコンピュータに、前記証明書検証要求の対象である証明書についての検証を行ってレスポンスデータを生成する処理と、前記証明書検証要求の対象である証明書から秘密鍵のＩＤを取得し、この秘密鍵のＩＤを前記秘密鍵情報テーブルに照合して前記秘密鍵を一意に特定するハンドル値を特定する処理と、前記秘密鍵を一意に特定するハンドル値をキーにした署名依頼をハードウェア暗号モジュールに通知し、当該ハードウェア暗号モジュールから当該署名依頼にかかる署名値を取得して、この署名値を用いて前記生成したレスポンスデータへの署名付与を行う処理とを実行させることを特徴とする。
【００１８】
その他、本願が開示する課題、及びその解決方法は、発明の実施の形態の欄、及び図面により明らかにされる。
【発明の効果】
【００１９】
本発明によれば、多数の証明書検証サーバの秘密鍵をハードウェア暗号モジュールに保管する場合にも、証明書検証処理の性能低下を防止し、所定のレスポンス性能を保証することができる。
【発明を実施するための最良の形態】
【００２０】
−−−システム構成−−−
以下に本発明の実施形態について図面を用いて詳細に説明する。図１は本実施形態における証明書検証サーバ１００を含むネットワーク構成図である。本実施形態における証明書検証サーバ１００は、クライアントからの証明書検証要求に応じて証明書検証と署名付与を行うものである。図１におけるネットワーク構成では、前記証明書検証サーバ１００に証明書検証要求を行うクライアント１と、クライアント１から送付された証明書の有効性および信頼性確認を行う前記証明書検証サーバ１００と、それら接続するインターネット等のネットワーク１４０、証明書検証サーバ１００の秘密鍵を保管・管理するハードウェア暗号モジュール２００とからなる。
【００２１】
こうした前記証明書検証サーバ１００（以下、サーバ１００）は、本発明の証明書検証方法を実行する機能を実現すべくハードディスクドライブなどの記憶装置１０１に格納されているプログラム１０２を、揮発性メモリなどの一次保存領域（以下、メモリ）１０３に読み出して演算装置たるＣＰＵ１０４により実行する。また、前記サーバ１００は、前記クライアント１やハードウェア暗号モジュール２００との間のデータ授受を担う通信手段１０７などを有している。
【００２２】
続いて、前記サーバ１００が例えばプログラム１０２に基づき構成・保持する機能部につき説明を行う。なお、前記サーバ１００は、記憶装置１０１において、前記秘密鍵情報テーブル１２５を利用可能である。また、前記ハードウェア暗号モジュール２００は前記秘密鍵テーブル２２５を備えている。
【００２３】
こうした前記サーバ１００は、前記証明書検証要求の対象である証明書についての検証を行ってレスポンスデータを生成する検証部１１０を備える。
【００２４】
また、前記サーバ１００は、前記証明書検証要求の対象である証明書から秘密鍵のＩＤを取得し、この秘密鍵のＩＤを前記秘密鍵情報テーブル１２５に照合して該当ハンドル値を特定するハンドル特定部１１１を備える。
【００２５】
また、前記サーバ１００は、前記特定したハンドル値をキーにした署名依頼をハードウェア暗号モジュール２００に通知し、当該ハードウェア暗号モジュール２００から署名値を取得して、この署名値を用いて前記レスポンスデータへの署名付与を行う署名部１１２を備える。
【００２６】
また、前記サーバ１００は、ハードウェア暗号モジュール２００に対して秘密鍵情報の検索要求を行い、ハードウェア暗号モジュール２００の保持する秘密鍵情報を取得し、当該秘密鍵情報の含むハンドル値と証明書検証サーバ１００の秘密鍵のＩＤとを対応付けて前記秘密鍵情報テーブル１２５に格納する鍵情報取得部１１３を備えると出来る。
【００２７】
なお、前記鍵情報取得部１１３は、前記証明書検証サーバ１００の起動時、または当該証明書検証サーバ経由の指示でハードウェア暗号モジュール２００へ秘密鍵が追加・削除されたことを検知し、前記秘密鍵情報の検索要求、秘密鍵情報の取得、ハンドル値と秘密鍵のＩＤとを対応付けて秘密鍵情報テーブル１２５へ格納、の各処理を実行するとしてもよい。
【００２８】
また、前記サーバ１００は、秘密鍵生成・削除命令部１１４を備えるとできる。この秘密鍵生成・削除命令部１１４は、ハードウェア暗号モジュール２００が保持する証明書検証サーバ１００の秘密鍵の更新処理を担う機能ブロックである。例えば、証明書検証サーバの管理者が適宜な端末を介して前記サーバ１００にアクセスし、秘密鍵生成・削除命令を指示してきたとする。この時、前記秘密鍵生成・削除命令部１１４は、ハードウェア暗号モジュール２００に対して、秘密鍵生成または削除の司令を転送する。ハードウェア暗号モジュール２００の秘密鍵生成部２１０または秘密鍵削除部２１１は、前記司令を受け取って秘密鍵を生成または削除することとなる。こうしたサーバ１００を経由した秘密鍵の生成・削除の司令がハードウェア暗号モジュール２００に通知されることにより、ハードウェア暗号モジュール２００の秘密鍵テーブル２２５1において、秘密鍵が追加または削除されたという秘密鍵の更新事象を前記サーバ１００は自ずと検知することができる（自分自身を経由して前記司令が流れるからサーバ１００自身で当然認識可能）。
【００２９】
なお、これまで示した  サーバ１００における各機能部１１０〜１１４は、ハードウェアとして実現してもよいし、各種の不揮発性メモリなど適宜な記憶装置に格納したプログラムとして実現するとしてもよい。この場合、サーバ１００のＣＰＵがプログラム実行に合わせて記憶装置より該当プログラムをメモリに読み出して、これを実行することとなる。
【００３０】
また、前記ネットワーク１４０に関しては、インターネットやＬＡＮの他、携帯電話網、ＡＴＭ回線や専用回線、ＷＡＮ（Wide Area Network）、電灯線ネットワーク、公衆回線網など様々なネットワークを採用することも出来る。また、インターネットを採用した場合、ＶＰＮ（Virtual Private Network）など仮想専用ネットワーク技術を用いれば、セキュリティ性を高めた通信が確立され好適である。
【００３１】
−−−テーブル構造例−−−
次に、本実施形態におけるサーバ１００が利用するテーブル類の構造について説明する。図２は本実施形態における、（ａ）秘密鍵情報テーブル１２５、（ｂ）秘密鍵テーブル２２５の各データ構造例を示す図である。  
前記秘密鍵情報テーブル１２５は、秘密鍵のラベル名(秘密鍵のＩＤ)とハードウェア暗号モジュール内での秘密鍵のハンドル値とを対にして格納したテーブルである。  
また、前記秘密鍵テーブル２２５は、ハンドル値に秘密鍵を対応づけて格納しておくテーブルである。
【００３２】
−−−処理フロー例１−−−
以下、本実施形態における証明書検証方法の実際手順について、図に基づき説明する。なお、以下で説明する証明書検証方法に対応する各種動作のうち前記サーバ１００に関するものは、前記サーバ１００が記憶装置１０１からメモリ１０３に読み出して実行するプログラム１０２によって実現される。そして、これらのプログラム１０２らは、以下に説明される各種の動作を行うためのコードから構成されている。
【００３３】
図４は、本実施形態の証明書検証方法の処理手順例１を示す図である。この処理手順例は前記サーバ１００とハードウェア暗号モジュール２００との通信において、従来の方法による処理の流れを示す。ここで前記サーバ１００は、証明書の検証結果（レスポンスデータ）にサーバ１００の署名を付与する際、（１）C_Logout(ハードウェア暗号モジュールからログアウトする：ｓ４１)し、（２）C_CloseSession(証明書検証サーバのサービスを切断：ｓ４２)し、（３）C_Finalize(PKCS#11ライブラリを終了する：ｓ４３)し、（４）C_Initialize(PKCS#11ライブラリを初期化する：ｓ４４)し、（５）C_OpenSession(サービスを起動：ｓ４５)し、（６）C_Login(ハードウェア暗号モジュールにログインする：ｓ４６)し、（７）C_FindObjectsInit(秘密鍵情報の検索を開始する：ｓ４７)し、（８）C_FindObject（鍵情報の検索を行う：ｓ４８)し、（９）C_FindObjectFinal(秘密鍵情報の検索を終了する：ｓ４９)し、（１０）C_SingnInit(署名処理を初期化する：ｓ５０)し、（１１）C_Sign(データに署名をする：ｓ５１)する。
【００３４】
−−−処理フロー例２−−−
図５は、本実施形態の証明書検証方法の処理手順例２を示す図である。この処理手順例は、前記サーバ１００において、署名の度に秘密鍵をハードウェア暗号モジュール２００からロードする処理を省略した場合の処理の流れを示す。ここで、ハードウェア暗号モジュール２００の備えるオプション機能によれば、（１）C_Logout(ハードウェア暗号モジュールからログアウトする：ｓ４１)から（６）C_Login(ハードウェア暗号モジュールにログインする：ｓ４６)までの処理は省略できる。これにより、前記サーバ１００は、証明書の検証結果にサーバ１００の署名を付与する際、（７）C_FindObjectsInit(秘密鍵情報の検索を開始する：ｓ４７)し、（８）C_FindObject（鍵情報の検索を行う：ｓ４８)し、（９）C_FindObjectFinal(秘密鍵情報の検索を終了する：ｓ４９)し、（１０）C_SingnInit(署名処理を初期化する：ｓ５０)し、（１１）C_Sign(データに署名をする：ｓ５１)を行えばよい。
【００３５】
−−−処理フロー例３−−−
図６は、本実施形態の証明書検証方法の処理手順例３を示す図である。この処理手順例は、秘密鍵情報を検索する処理の流れを示す。ここで前記サーバ１００は、サーバ自身の起動時と、ハードウェア暗号モジュール２００へ秘密鍵が追加・削除された際にこれを検知し、ハードウェア暗号モジュール２００の保持する秘密鍵の情報を全て取得して更新する。すなわち、（７）C_FindObjectsInit(秘密鍵情報の検索を開始する：ｓ４７)し、（８）C_FindObject（鍵情報の検索を行う：ｓ４８)し、（９）C_FindObjectFinal(秘密鍵情報の検索を終了する：ｓ４９)の処理を、ハードウェア暗号モジュール２００の保持する秘密鍵数だけ繰り返す。これにより、サーバ１００内に最新の秘密鍵情報を秘密鍵情報テーブル１２５として保持することができる。前記サーバ１００は、ハードウェア暗号モジュール２００内に保持する鍵情報を全て読み込むまで、（７）C_FindObjectsInit(秘密鍵情報の検索を開始する：ｓ４７)し、（８）C_FindObject（鍵情報の検索を行う：ｓ４８)し、（９）C_FindObjectFinal(秘密鍵情報の検索を終了する：ｓ４９)する。これらの処理は、新しい鍵情報がハードウェア暗号モジュール２００にないと判断された時、終了する。
【００３６】
−−−処理フロー例４−−−
図７は、本実施形態の証明書検証方法の処理手順例４を示す図である。この処理手順例は、前記サーバ１００の署名処理の流れを示した図である。図４にて示した全体処理から、上記図５および図６における処理により、（１）C_Logout(ハードウェア暗号モジュールからログアウトする：ｓ４１)から（９）C_FindObjectFinal(秘密鍵情報の検索を終了する：ｓ４９)までの処理は、署名処理に際しては省略することができる。つまり、サーバ１００は、（１０）C_SignInit(署名処理を初期化する：ｓ５０)し、（１１）C_Sign(データに署名をする：ｓ５１)することによって、検証結果（レスポンスデータ）に署名を行うのである。
【００３７】
−−−処理フロー例５−−−
図８は、本実施形態の証明書検証方法の処理手順例５を示す図である。次に、前記サーバ１００が前記秘密鍵情報テーブル１２５を保持している場合、前記サーバ１００がクライアント１から証明書検証要求を受けた際に行う処理について説明する。この場合、前記サーバ１００は、クライアント１から証明書検証要求を受けて(ｓ６１)、ここで受信した証明書検証要求に含まれる証明書が信頼できるかどうかを検証する(ｓ６２)。そして、この検証結果に従ってレスポンスデータを生成する(ｓ６３)。  
また、前記受信した証明書から秘密鍵のＩＤたるラベル名を取得し(ｓ６４)、前記秘密鍵情報テーブル１２５より、図２（ａ）に示した証明書のラベル名に対応したハンドル値を特定する(ｓ６５)。そして、前記特定したハンドル値をキーにして秘密鍵の特定要求をハードウェア暗号モジュール２００に行って、前記秘密鍵テーブル２２５において特定された秘密鍵の情報をハードウェア暗号モジュール２００より得る（ｓ６６）。  
続いて、前記サーバ１００は、前記特定された秘密鍵による署名依頼をハードウェア暗号モジュール２００に通知し、当該ハードウェア暗号モジュール２００から署名値を取得して、この署名値を用いてレスポンスデータへの署名付与を行う(ｓ６７)。そして、このレスポンスデータにサーバ１００の証明書を付与し(ｓ６８)し、検証結果として前記クライアント１へ応答する(ｓ６９）。
【００３８】
以上、本実施形態によれば、従来システムで証明書検証サーバの署名処理に関して、ハードウェア暗号モジュールとの通信で繰り返し処理を実施していた処理部分を省略し署名処理ができるため、処理時間の大幅短縮が図れる。従来技術での処理形態と比較すると、本実施形態における署名処理時間は従来の約１０分の１になる。秘密鍵の情報テーブル作成後の初めの検証時を例にとると、ハードウェア暗号モジュールのオプション機能と本実施形態の技術を適用することで１トランザクション当たりの性能は、従来システムの性能では７６０ｍｓであったのに対し、１８ｍｓが実現できる。
【００３９】
したがって、多数の証明書検証サーバの秘密鍵をハードウェア暗号モジュールに保管する場合にも、証明書検証処理の性能低下を防止し、所定のレスポンス性能を保証することができる。
【００４０】
以上、本発明の実施の形態について、その実施の形態に基づき具体的に説明したが、これに限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。
【図面の簡単な説明】
【００４１】
【図１】本実施形態における証明書検証サーバを含むネットワーク構成図である。
【図２】本実施形態における、（ａ）秘密鍵情報テーブル、（ｂ）秘密鍵テーブルの各データ構造例を示す図である。
【図３】クライアントから証明書検証要求があった際の証明書検証サーバとハードウェア暗号モジュール間の処理手順例を示す図である。
【図４】本実施形態の証明書検証方法の処理手順例１を示す図である。
【図５】本実施形態の証明書検証方法の処理手順例２を示す図である。
【図６】本実施形態の証明書検証方法の処理手順例３を示す図である。
【図７】本実施形態の証明書検証方法の処理手順例４を示す図である。
【図８】本実施形態の証明書検証方法の処理手順例５を示す図である。
【符号の説明】
【００４２】
１  クライアント
１００  証明書検証サーバ
１０１、２０１  記憶装置
１０２、２０２  プログラム
１０３、２０３  メモリ
１０４、２０４  ＣＰＵ
１０５、２０５  入力インターフェイス
１０６、２０６  出力インターフェイス
１０７、２０７  通信手段
１１０  検証部
１１１  特定部
１１２  署名部
１１３  鍵情報取得部
１１４  秘密鍵生成・削除命令部
１２５  秘密鍵情報テーブル
１４０  ネットワーク
２００  ハードウェア暗号モジュール
２１０  秘密鍵生成部
２１１  秘密鍵削除部
２２５  秘密鍵テーブル
【図１】
0005053756.tif 000002
【図２】
0005053756.tif 000003
【図３】
0005053756.tif 000004
【図４】
0005053756.tif 000005
【図５】
0005053756.tif 000006
【図６】
0005053756.tif 000007
【図７】
0005053756.tif 000008
【図８】
0005053756.tif 000009