(57)【特許請求の範囲】
【請求項１】
コンピュータに、
ＩＣカードに記憶された情報に基づいて実行されるシーケンス処理に際して関数の呼出しが行われた場合に、前記シーケンス処理として実行され得る複数の個別シーケンスごとに各個別シーケンス内で順に実行される関数と前記ＩＣカードまたは前記ＩＣカードを読み取るデバイスへの接続または解除処理の要否とを対応付けて記憶した記憶部を参照し、呼出しが行われた関数までのシーケンスと部分一致または完全一致するシーケンスに基づいて前記接続または解除処理の要否を判定し、
前記接続または解除処理の不要が判定された場合には、前記接続または解除処理を行わずに前記関数を実行し、前記接続または解除処理の要が判定された場合には、前記接続または解除処理を行って前記関数を実行する
各処理を実行させることを特徴とするシーケンス処理プログラム。
【請求項２】
前記コンピュータに、さらに、
前記記憶部に、前記呼出しが行われた関数までのシーケンスと部分一致または完全一致するシーケンスがなかった場合には、前記関数以降に呼出しが行われた関数については、前記接続または解除処理を伴って前記関数を実行し、
予め関数ごとに前記接続または解除処理の要否を規定した対応表に基づいて、実行した各関数について前記接続または解除処理の要否を判定し、前記実行した各関数を含むシーケンスを、各関数と前記接続または解除処理の要否とを対応付けて前記記憶部に格納する
各処理をさらに実行させることを特徴とする請求項１に記載のシーケンス処理プログラム。
【請求項３】
前記コンピュータに、さらに、
前記接続または解除処理を伴って前記関数を実行した場合には、前記接続または解除処理後の前記ＩＣカードまたは前記デバイスに対応する接続状態を保持し、前記接続または解除処理を行わずに前記関数を実行した場合には、前記接続または解除処理を行ったものとして前記ＩＣカードまたは前記デバイスに対応する接続状態を保持し、
前記記憶部に、前記呼出しが行われた関数までのシーケンスと部分一致または完全一致するシーケンスがなかった場合には、保持している接続状態となるように前記ＩＣカードまたは前記デバイスに対応する接続または解除処理を実行した後に、前記呼出しが行われた関数を実行する
各処理をさらに実行させることを特徴とする請求項２に記載のシーケンス処理プログラム。
【請求項４】
ＩＣカードに記憶された情報に基づいて実行されるシーケンス処理の個別シーケンスごとに各個別シーケンス内で順に実行される関数と前記ＩＣカードまたは前記ＩＣカードを読み取るデバイスへの接続または解除処理の要否とを対応付けて記憶する記憶部と、
前記シーケンス処理に際して関数の呼出しが行われた場合に、前記記憶部を参照し、呼出しが行われた関数までのシーケンスと部分一致または完全一致するシーケンスに基づいて前記接続または解除処理の要否を判定する判定部と、
前記判定部により前記接続または解除処理の不要が判定された場合には、前記接続または解除処理を行わずに前記関数を実行し、前記接続または解除処理の要が判定された場合には、前記接続または解除処理を行って前記関数を実行する実行部と
を有することを特徴とするシーケンス処理装置。
【請求項５】
コンピュータが、
ＩＣカードに記憶された情報に基づいて実行されるシーケンス処理に際して関数の呼出しが行われた場合に、前記シーケンス処理として実行され得る複数の個別シーケンスごとに各個別シーケンス内で順に実行される関数と前記ＩＣカードまたは前記ＩＣカードを読み取るデバイスへの接続または解除処理の要否とを対応付けて記憶した記憶部を参照し、呼出しが行われた関数までのシーケンスと部分一致または完全一致するシーケンスに基づいて前記接続または解除処理の要否を判定し、
前記接続または解除処理の不要が判定された場合には、前記接続または解除処理を行わずに前記関数を実行し、前記接続または解除処理の要が判定された場合には、前記接続または解除処理を行って前記関数を実行する
各処理を実行することを特徴とするシーケンス処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願の開示する技術は、シーケンス処理プログラム、シーケンス処理装置およびシーケンス処理方法に関する。
【背景技術】
【０００２】
コンピュータなどに実装されたアプリケーションプログラムでは、ＩＣ（Integrated  Circuit）カードに記憶されている情報を利用して、ＰＫＩ（Public  Key  Infrastructure）に基づくシーケンス処理などを行う場合がある。シーケンス処理としては、署名処理，認証処理，暗号処理等があるが、以下署名処理を例に上げて説明する。例えば、Ｗｉｎｄｏｗｓ（登録商標）では、ＣｒｙｐｔｏＡＰＩ（Cryptographic  API）というＷｉｎｄｏｗｓ標準のインターフェースの下で、ＣＳＰ（Crypto  Service  Provider）というカード固有のライブラリを動作させることにより署名処理を行う。
【０００３】
ＣｒｙｐｔｏＡＰＩは、例えば、ＰＫＩに基づいて署名処理に利用される複数の関数を有し、関数に求められる処理が関数ごとに個別に実装されている。そして、署名処理において、アプリケーションプログラムにより呼び出された各関数は、リーダライタのオープンやクローズの処理の他、ＩＣカードとの接続や接続解除の処理などを個別に実行する。
【０００４】
なお、関数の呼出しに関連する技術として、呼び出すべき関数の関数ポインタが格納された状態遷移テーブルを検索して関数ポインタを取得することで、直接関数の呼出しを行う技術がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平６−１１９２６３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述したように、シーケンス処理において、アプリケーションプログラムにより呼び出された各関数は、リーダライタのオープンやクローズの処理の他、ＩＣカードとの接続や接続解除の処理などを個別に実行する。このため、シーケンス処理では、各関数間で、リーダライタのオープン処理やクローズ処理、ＩＣカードとの接続処理や接続解除処理が重複して実行される場合があり、処理が冗長となる結果、処理性能が低下するという問題があった。なお、上述した関数の呼出しに関連する技術を用いても、呼び出された関数のそれぞれに求められる処理は変わらないので、処理が冗長となることは避けられない。
【０００７】
開示の技術は、上記に鑑みてなされたものであって、処理性能を改善することが可能なシーケンス処理プログラム、シーケンス処理装置およびシーケンス処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本願の開示するシーケンス処理プログラムは、一つの態様において、コンピュータに、ＩＣカードに記憶された情報に基づいて実行されるシーケンス処理に際して関数の呼出しが行われた場合に、次の各処理を実行させる。前記シーケンス処理として実行され得る複数の個別シーケンスごとに各個別シーケンス内で順に実行される関数と前記ＩＣカードまたは前記ＩＣカードを読み取るデバイスへの接続または解除処理の要否とを対応付けて記憶した記憶部を参照させる。続いて、呼出しが行われた関数までのシーケンスが一致するシーケンスに基づいて前記接続または解除処理の要否を判定させる。続いて、前記接続または解除処理の不要が判定された場合には、当該処理を行わずに前記関数を実行し、前記接続または解除処理の要が判定された場合には、当該処理を行って前記関数を実行させる。
【発明の効果】
【０００９】
本願の開示する技術の一つの態様によれば、処理性能を改善できる。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施例１に係る署名装置の構成を示す機能ブロック図である。
【図２】図２は、記録データの一例を示す図である。
【図３】図３は、シーケンスパターンデータの一例を示す図である。
【図４】図４は、関数フラグ対応表データの一例を示す図である。
【図５】図５は、状態乖離記録データの一例を示す図である。
【図６】図６は、予め定義される開始関数、終了関数および回数任意関数の一例を示す図である。
【図７】図７は、シーケンスパターンにより省略される処理の一例を示す図である。
【図８】図８は、実施例１に係る署名装置による処理の流れを示す図である。
【図９】図９は、署名処理プログラムを実行するコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１１】
以下に、図面を参照しつつ、本願の開示するシーケンス処理プログラム、シーケンス処理装置およびシーケンス処理方法の一実施形態について説明する。以下の実施例では、シーケンス処理の一例として署名処理を例に説明する。なお、関数に基づきリーダライタのオープンやクローズの処理の他、ＩＣカードとの接続や接続解除の処理などの一連の所定単位のシーケンス処理を行うシステム又はプログラムも同様である。後述する実施例は一実施形態にすぎず、本願の開示するシーケンス処理プログラム、シーケンス処理装置およびシーケンス処理方法を限定するものではない。また、後述する各実施例は処理内容に矛盾を生じさせない範囲で適宜組み合わせることもできる。
【実施例１】
【００１２】
［署名装置の構成（実施例１）］
図１は、実施例１に係る署名装置の構成を示す機能ブロック図である。なお、図１に示す署名装置２００は、関数に基づきリーダライタのオープンやクローズの処理の他、ＩＣカードとの接続や接続解除の処理などの一連の所定単位のシーケンス処理の一例として、署名処理を実行する装置であり、シーケンス処理装置の一例である。図１に示すように、実施例１に係る署名装置２００は、リーダライタ１００と接続する。なお、署名装置２００は、例えば、パーソナルコンピュータ、携帯電話装置、ＰＨＳ（Personal  Handy-phone  System）端末、スマートフォン、ＰＤＡ（Personal  Digital  Assistant）などのコンピュータである。また、リーダライタ１００は、署名装置２００と有線通信もしくは無線通信によって接続されるか、署名装置２００に内蔵されてもよい。
【００１３】
リーダライタ１００は、接触型または非接触型のＩＣ（Integrated  Circuit）カードに記憶されている情報を読み取ったり書き込んだりするデバイスである。例えば、リーダライタ１００は、近距離無線通信によって、非接触型のＩＣカードに対して情報の読み書きを行う。署名装置２００は、リーダライタ１００を介して、ＩＣカードに記憶されている情報を取得し、取得した情報を用いて、ＰＫＩ（Public  Key  Infrastructure）に基づく署名処理などを行う。例えば、署名装置２００が、ウェブブラウザを介して外部のサーバに接続する際に、ＩＣカードの情報を用いて接続認証に関する署名処理を行う場合がある。そのほか、署名装置２００が、ＩＣカードの情報を用いてアプリケーション利用時のユーザ認証に関する署名処理を行う場合がある。
【００１４】
例えば、Ｗｉｎｄｏｗｓ（登録商標）のＯＳ（Operating  System）が搭載された署名装置２００は、ＣｒｙｐｔｏＡＰＩ（Cryptographic  API）というＷｉｎｄｏｗｓ標準のインターフェースを有する。そして、署名装置２００は、上位のアプリケーションの要求に応じて、ＣｒｙｐｔｏＡＰＩの下で、ＣＳＰ（Crypto  Service  Provider）というカード固有のライブラリを動作させることによって署名処理を行う。ＣＳＰは、ＣｒｙｐｔｏＡＰＩの実処理を担い、例えば、暗号化やハッシュ値の計算を行う。また、ＣＳＰは、例えば、ＩＣカードを提供するベンダによって作成され、ＩＣカードに依存した処理を実行する。また、署名装置２００には、複数のＣＳＰがインストールされ得る。
【００１５】
また、図１に示すように、署名装置２００は、入力部２１０と、出力部２２０と、記憶部２３０と、制御部２４０とを有する。入力部２１０は、キーボードやマウス、タッチパッドなどの入力デバイスを有し、各種情報の入力を受け付ける。出力部２２０は、モニタやディスプレイなどの出力デバイスを有し、各種情報の出力を受け付ける。なお、出力部２２０は、入力部２１０が有するキーボードやマウスなどの入力デバイスと協働したポインティングデバイス機能を実現することができる。
【００１６】
また、図１に示すように、記憶部２３０は、記録データ２３１、シーケンスパターンデータ２３２、関数フラグ対応表データ２３３および状態乖離記録データ２３４を記憶する。なお、記憶部２３０は、例えば、ＲＡＭ（Random  Access  Memory）やフラッシュメモリ（flash  memory）などの半導体メモリ素子により実装できる。
【００１７】
記憶部２３０には、記録データ２３１として、後述する制御部２４０により署名処理として実行され得るシーケンスごとにシーケンス内で順に実行される各関数の情報が、呼出し元のモジュール名に対応付けて記憶される。なお、署名処理として実行され得るシーケンスとは、該当する署名処理について呼出しが行われた開始関数から終了関数までの一連の処理を意味する。なお、終了関数についての処理が完了しても、次の関数の呼出しが所定の時間内、例えば、１分以内に行われれば、同一のシーケンスとして取り扱うものとする。以下、図２を用いて、記憶部２３０に記憶される記録データの一例について説明する。
【００１８】
図２は、記録データの一例を示す図である。なお、図２に示す記録データは、制御部２４０により署名処理において呼び出しが行われた各関数のある時点の呼出しの経過を示すものとする。図２に示すように、記録データ２３１は、「呼出しモジュール名」、「プロセスＩＤ」、「モード」、「使用回数」、「最終使用日」、「終了時刻」、「関数名」および「回数カウント」の複数のデータ項目を有する。呼出しモジュール名は、署名処理において関数の呼出しを行うアプリケーションを特定する情報である。図２に示すように、「呼出し元モジュール名」のデータ項目には、例えば、「＊＊＊＊．ｅｘｅ」が記憶されている。プロセスＩＤは、実行中である署名処理を特定するための情報である。図２に示すように、「プロセスＩＤ」のデータ項目には、例えば、「２９３４６」が記憶されている。モードは、署名処理において動作するモードを特定する情報であり、システム上、比較モード、記録モード、終了の３つのモードがある。図２に示すように、「モード」のデータ項目には、比較モードを示す「比較」が記憶されている。なお、比較モード、記録モード、終了の各モードについては制御部２４０の説明で後述する。使用回数は、シーケンスパターンとして使用された回数を特定する情報である。なお、使用回数は、記録データの記憶時に使用されず、後述するシーケンスパターンとなった際に利用されるデータ項目であるので、図２に示すように、何も記憶されていない。最終使用日は、シーケンスパターンとして使用された最終の日付を特定する情報である。なお、最終使用日は、使用回数と同様に、記録データの記憶時に使用されず、後述するシーケンスパターンとなった際に利用されるデータ項目であるので、図２に示すように、何も記憶されていない。終了時刻は、同一のプロセスＩＤが付与された署名処理において終了関数の呼出しが行われた時刻を特定する情報である。なお、終了時刻は、図２は、署名処理において終了関数の呼出しが行われる前の途中経過を表しているので、図２に示すように、現時点では何も記憶されていない。関数名は、ＣＳＰの処理において呼出しが行われた関数名を特定する情報である。図２に示すように、「関数名」のデータ項目には、現時点で、開始関数である「1:CPAcquireContext」から順に、「2:CPCreateHash」、「3:CPHashData」、「4:CPSignHash」の４つの関数名が記憶されている。回数カウントは、署名処理において呼出しが行われた関数のうち、繰り返し呼出しが行われた関数の呼出し回数を示す情報である。図２に示すように、関数名「4:CPSignHash」に対応する「回数カウント」のデータ項目には、現時点で、「２」が記憶されている。なお、図２には、関数名のみを順に記憶する場合の一例を示しているが、関数名と関数を呼び出すためのパラメータとの組合せを順に記憶するようにしてもよい。
【００１９】
また、記憶部２３０には、シーケンスパターンデータ２３２として、署名処理として実行され得る複数の個別シーケンスごとに各シーケンス内で順に実行される関数と、ＩＣカードまたはリーダライタ１００への接続または解除処理の要否とが対応付けて記憶される。このシーケンスパターンデータ２３２は、後述する制御部２４０による一致判定に用いられる。一致判定の処理については後述する。なお、署名処理において終了関数の呼出しから一定時間が経過することにより、署名処理に伴って逐次記憶された上述の記録データが一連の処理シーケンスを表すシーケンスパターンデータ２３２となる。以下、図３を用いて、記憶部２３０に記憶されるシーケンスパターンデータの一例について説明する。
【００２０】
図３は、シーケンスパターンデータの一例を示す図である。なお、図３には、図２に示すような記録データ２３１に基づいて作成されるシーケンスパターンを示す。例えば、図２に示すような記録データ２３１がシーケンスとしての条件を満足すれば、記録データ２３１から別スレッドとして立ち上げられてシーケンスパターンデータ２３２として記憶される。なお、シーケンスパターンデータ２３２の元となった記録データ２３１は記憶部２３１から削除してもよい。図３に示すように、シーケンスパターンデータ２３２は、「パターンＩＤ」、「呼出しモジュール名」、「プロセスＩＤ」、「モード」、「使用回数」、「最終使用日」、「終了時刻」および「関数名」の複数のデータ項目を有する。パターンＩＤは、シーケンスパターンを特定する情報である。図３に示すように、「パターンＩＤ」のデータ項目には、例えば、「０００００１」が記憶されている。なお、「呼出しモジュール名」、「プロセスＩＤ」、「モード」、「使用回数」、「最終使用日」、「終了時刻」および「関数名」は、上述した記録データと同様の情報である。図３に示すように、「呼出しモジュール名」のデータ項目には、例えば、「＊＊＊＊．ｅｘｅ」が記憶されている。また、図３に示すように、「プロセスＩＤ」のデータ項目には、例えば、「２９３４６」が記憶されている。また、図３に示すように、「モード」のデータ項目には、「終了」が記憶されている。また、図３に示すように、「使用回数」のデータ項目には、例えば、「１回」が記憶されている。なお、図３には、「使用回数」として「１」が記憶されているので、図３に示すシーケンスパターンデータ２３２が、署名処理において、後述する一致判定に１度使用されたことになる。また、図３に示すように、「最終使用日」のデータ項目には、例えば、「２０１１／１／１」が記憶されている。なお、図３には、「最終使用日」として「２０１１／１／１」が記憶されているので、図３に示すシーケンスパターンデータ２３２が、署名処理において、後述する一致判定に２０１１年１月１日に最後に使用されたことになる。また、図３に示すように、「終了時刻」のデータ項目には、例えば、「２０１０／１／１  １２：００：００」が記憶されている。また、「関数名」のデータ項目には、開始関数から終了関数まで９つの関数名が順に記憶されている。図３に示すように、「1:CPAcquireContext」、「2:CPCreateHash」、「3:CPHashData」、「4:CPGetHashParam」、「5:CPDestroyHash」、「6:CPCreateHash」、「7:CPSignHash」、「8:CPDestroyHash」、「9:CPReleaseContext」の各関数名が順に記憶されている。
【００２１】
そして、図３に示すように、シーケンスパターンデータ２３２には、各関数名ごとに、ＩＣカードまたはリーダライタ１００への接続処理または接続解除処理の要否を示すフラグが対応付けて記憶されている。さらに、図３に示すように、シーケンスパターンデータ２３２には、関数名に対応付けて回数任意の関数であるか否かを示すフラグが対応付けて記憶されている。なお、ＲＷオープンはリーダライタ１００のオープン処理、言い換えればリーダライタ１００への接続処理を示す。ＲＷクローズはリーダライタ１００のクローズ処理、言い換えればリーダライタ１００との接続解除処理を示す。なお、以下では、リーダライタ１００への接続処理をオープン処理と表記し、リーダライタ１００との接続解除処理をクローズ処理と表記するものとする。また、カードオープンはＩＣカードへのアクセスについてのオープン処理、言い換えればＩＣカードへの接続処理を示す。カードクローズはＩＣカードへのアクセスについてのクローズ処理、言い換えればＩＣカードとの接続解除処理を示す。なお、以下では、ＩＣカードに対する処理を、接続処理および接続解除処理と表記するものとする。また、回数任意は、繰り返し実行される回数に関わらず、１つの関数として取り扱う関数を示す。そして、フラグが「１」である場合には該当の処理を実行することを意味し、フラグが「０」である場合には該当の処理を実行しないことを意味する。例えば、図３に示すシーケンスパターンデータでは、関数名「1:CPAcquireContext」に対応付けて、ＲＷオープンに関するフラグ「１」が記憶されている。一方、図３に示すシーケンスパターンデータでは、関数名「1:CPAcquireContext」に対応付けて、ＲＷクローズ、カードオープン、カードクローズ、回数任意に関するフラグ「０」が記憶されている。このため、関数名「1:CPAcquireContext」の処理では、リーダライタ１００のオープン処理を実行することとなる。一方で、関数名「1:CPAcquireContext」の処理では、リーダライタ１００のクローズ処理、ＩＣカードの接続処理および接続解除処理を実行しない。
【００２２】
なお、図２や図３に示す各種データは一例であり、そのデータ形式は任意のものを採用することができる。
【００２３】
また、記憶部２３０には、関数フラグ対応表データ２３３として、予め関数ごとに、ＩＣカードまたはリーダライタ１００への接続または解除処理の要否を規定したデータが記憶される。この関数フラグ対応表データ２３３は、後述する制御部２４０によるシーケンスパターンデータの生成に用いられる。シーケンスパターンデータの生成については後述する。以下、図４を用いて、関数フラグ対応表データ２３３の一例について説明する。
【００２４】
図４は、関数フラグ対応表データの一例を示す図である。図４に示すように、関数フラグ対応表データ２３３は、「関数名」のデータ項目に記憶された各関数名ごとに、ＲＷオープン、ＲＷクローズ、カードオープン、カードクローズおよび回数任意の各データ項目のデータが対応付けて記憶されている。例えば、関数フラグ対応表データ２３３には、「関数名」ごとに、ＲＷオープン、ＲＷクローズ、カードオープン、カードクローズおよび回数任意について、「１」または「０」のフラグが記憶されている。
【００２５】
図４に示すように、関数フラグ対応表データ２３３には、関数名「CPAcquireContext」について、例えば、ＲＷオープンに対するフラグとして「１」が記憶され、ＲＷクローズ、カードオープンおよびカードクローズに対するフラグとして「０」が記憶されている。つまり、関数フラグ対応表データ２３３は、関数名「CPAcquireContext」の処理にて、ＲＷオープンの処理を行い、ＲＷクローズ、カードオープンおよびカードクローズの処理を行わないことを予め規定している。また、図４に示すように、関数フラグ対応表データ２３３には、関数名「CPAcquireContext」について、例えば、回数任意に対するフラグとして「０」が記憶されている。つまり、関数フラグ対応表データ２３３は、関数名「CPAcquireContext」が回数任意ではないことを予め規定している。なお、関数フラグ対応表データは、例えば、ＣＳＰとともに、ＩＣカードを提供するベンダによって作成され、ＣＳＰとともに、署名装置２００にインストールされる。
【００２６】
また、記憶部２３０には、状態乖離記録データ２３４が記憶されている。この状態乖離記録データ２３４には、ＩＣカードまたはリーダライタ１００への接続または解除処理を伴って関数を実行した場合には、当該処理後のＩＣカードまたはリーダライタ１００との接続状態を保持するためのデータを含んでいる。さらに、この状態乖離記録データ２３４には、ＩＣカードまたはリーダライタ１００への接続または解除処理を行わずに関数を実行した場合に、当該処理を行ったものとしてＩＣカードまたはリーダライタ１００との接続状態を保持するためのデータを含んでいる。この状態乖離記録データ２３４は、後述する制御部２４０によるリカバリ処理に用いられる。リカバリ処理については後述する。以下、図５を用いて、状態乖離記録データ２３４の一例について説明する。
【００２７】
図５は、状態乖離記録データの一例を示す図である。図５に示すように、状態乖離記録データ２３４には、シーケンスパターンデータ２３２に従って関数の処理を実行した後の、リーダライタ１００との接続状況が現状のステータスとして記憶されている。また、図５に示すように、状態乖離記録データ２３４には、シーケンスパターンデータ２３２に従わずに関数の処理を実行したと仮定した場合の、リーダライタ１００との仮想的な接続状況が本来のステータスとして記憶されている。また、図５に示すように、状態乖離記録データ２３４には、ＩＣカードについても、リーダライタ１００の場合と同様に、現状のステータスと本来のステータスとが記憶されている。
【００２８】
ここで、図５に示す状態乖離記録データ２３４において、ＩＣカードについての現状のステータスは「オープン（接続）」となっている。これに対し、図５に示す状態乖離記録データ２３４において、ＩＣカードについての本来のステータスは「クローズ（接続解除）」となっている。つまり、上述したシーケンスパターンデータ２３２に従って関数の処理を行った場合には、関数の処理に含まれるＲＷオープン、ＲＷクローズ、カードオープン、カードクローズのうち実行されないものが出てくる可能性がある。このとき、状態乖離記録データ２３４を参照すれば、リーダライタ１００やＩＣカードとの現在の接続状況と本来の接続状況との乖離を把握することができる。
【００２９】
制御部２４０は、図１に示すように、判定部２４１および実行部２４２を有する。また、制御部２４０は、例えば、上述したＣｒｙｐｔｏＡＰＩやＣＳＰなどを有する。判定部２４１および実行部２４２は、例えば、ベンダから提供されるＣＳＰごとに、ＣＳＰの機能として実現される。なお、制御部２４０は、例えば、電子回路や集積回路により実装することができる。電子回路としては、例えば、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）がある。また、集積回路としては、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array)などがある。
【００３０】
制御部２４０は、記憶部２３０に記憶されている定義情報を参照して、署名処理に際して呼出しが行われる関数について、開始関数、終了関数および回数任意関数を定義するものとする。なお、定義情報は、ＩＣカードを提供するベンダによって作成され、ＣＳＰとともに署名装置２００にインストールされる。そして、この定義情報は、記憶部２３０に予め記憶される。
【００３１】
図６は、予め定義される開始関数、終了関数および回数任意関数の一例を示す図である。図６に示すように、定義情報には、開始関数、終了関数および回数任意関数と、各関数に対応する関数名とが対応付けて記憶されている。例えば、図６に示す定義情報には、「CPAcquireContext」が開始関数として予め定義され、「CPReleaseContext」が終了関数として予め定義され、「CPSignHash」が回数任意関数として予め定義される。「CPAcquireContext」は、リーダライタ１００のオープン処理を実行する関数である。「CPReleaseContext」は、リーダライタ１００のクローズ処理を実行する関数である。「CPSignHash」は、例えば、ハッシュ値を計算する関数である。
【００３２】
判定部２４１は、ＩＣカードに記憶された情報に基づいて実行される署名処理に際して関数の呼出しが行われた場合に、記憶部２３０のシーケンスパターンデータ２３２を参照して、ＩＣカードまたはリーダライタ１００への接続または解除処理の要否を判定する。
【００３３】
まず、判定部２４１は、システムのモードが比較モードであるか否かを判定する。判定部２４１は、比較モードである場合には、呼出しが行われた関数までのシーケンスが一致するシーケンスパターンデータ２３２を記憶部２３０から取得する。続いて、判定部２４１は、取得したシーケンスパターンデータ２３２を参照し、呼出しが行われた関数の処理においてＩＣカードまたはリーダライタ１００への接続処理または解除処理の要否を判定する。
【００３４】
例えば、呼び出された関数が「CPAcquireContext」であり、一致するシーケンスパターンデータ２３２として図３に示すデータを取得したとする。この場合、判定部２４１は、図３に示すシーケンスパターンデータ２３２にて、関数名「CPAcquireContext」に対応付けられているＲＷオープン、ＲＷクローズ、カードオープン、カードクローズおよび回数任意のフラグを参照する。判定部２４１は、ＲＷオープンのフラグが「１」であるので、関数「CPAcquireContext」の処理においてリーダライタ１００のオープン処理を実行する。このとき、判定部２４１は、関数「CPAcquireContext」の処理において、リーダライタ１００のオープン処理を実行することを示すフラグ「ｏｐｅｎ＝ｔｒｕｅ」をセットする。
【００３５】
また、判定部２４１は、ＲＷクローズ、カードオープンおよびカードクローズのフラグが「０」であるので、関数「CPAcquireContext」の処理においてＲＷクローズ、カードオープンおよびカードクローズの処理を実行しない。このとき、判定部２４１は、関数「CPAcquireContext」の処理において、リーダライタ１００のクローズ処理を実行しないことを示すフラグ「ｃｌｏｓｅ＝ｆａｌｓｅ」をセットする。同様に、判定部２４１は、関数「CPAcquireContext」の処理において、ＩＣカードの接続処理を実行しないことを示すフラグ「ｏｐｅｎ＝ｆａｌｓｅ」をセットする。同様に、判定部２４１は、関数「CPAcquireContext」の処理において、ＩＣカードの接続解除処理を実行しないことを示すフラグ「ｃｌｏｓｅ＝ｆａｌｓｅ」をセットする。また、判定部２４１は、回数任意のフラグが「０」であるので、関数「CPAcquireContext」を回数任意関数として取り扱わない。
【００３６】
そして、判定部２４１は、セットしたフラグを踏まえて関数の処理を実行するように、実行部２４２に指示する。また、判定部２４１は、呼出しが行われた関数までのシーケンスが一致するシーケンスパターンデータ２３２が記憶部２３０にない場合には、リカバリ処理を実行するように、実行部２４２に指示する。また、判定部２４１は、システムのモードが比較モードではない場合には、記録モードであるものとして、関数の処理を実行するように実行部２４２に指示する。
【００３７】
実行部２４２は、判定部２４１からの指示に従って関数の処理を実行する。また、実行部２４２は、判定部２４１からの指示に応じてリカバリ処理を実行する。
【００３８】
例えば、実行部２４２が、判定部２４１からフラグを踏まえて関数の処理を実行するように指示を受けた場合について説明する。実行部２４２は、呼出しが行われた関数が終了関数である場合には、終了処理１を実行する。以下、実行部２４２が実行する終了処理１について説明する。
【００３９】
例えば、シーケンスパターンデータ２３２と完全一致で終わった場合には、実行部２４２は、まず、既存のシーケンスパターンの使用回数のデータ項目を更新（１だけインクリメント）し、最終使用日のデータ項目を更新し、終了時刻のデータ項目を更新する。続いて、実行部２４２は、シーケンスパターンデータ２３２を並び変えて、モードを終了に変更し、終了処理１を完了する。
【００４０】
また、呼出しが行われた関数が終了関数ではあるが、シーケンスパターンデータ２３２側に続きがある場合には、実行部２４２は、まず、現在の記録データ２３１をシーケンスの１パターンとして保存する。続いて、実行部２４２は、モードを比較モードから終了に変更し、図４に示す関数フラグ対応表を元に、シーケンスの１パターンとして保存した記録データ２３１とフラグとを対応付けたシーケンスパターンデータ２３２を作成する。なお、記録データ２３１からシーケンスパターンデータ２３２を作成する際、終了関数の次に開始関数がある場合、実行部２４２は、リーダライタ１００のクローズ処理とオープン処理のフラグを０にする。
【００４１】
なお、実行部２４２は、最終使用日が新しいものほど上位にくるように、シーケンスパターンデータ２３２を並び替えて記憶部２３０に格納するが、最終使用日が同一のものがある場合には使用回数が多いものを上位となるようにする。そして、実行部２４２は、判定部２４１によりセットされたフラグを踏まえて関数の処理を実行する。
【００４２】
また、実行部２４２が、判定部２４１からリカバリ処理を実行するように指示を受けた場合について説明する。実行部２４２は、システムのモードを比較モードから記録モードに変更する。続いて、実行部２４２は、記憶部２３０の状態乖離記録データ２３４を取得し、取得した状態乖離記録データ２３４に基づいてリカバリ処理を実行する。なお、リカバリ処理については、図７を用いて後述する。
【００４３】
また、実行部２４２が、判定部２４１から関数の処理を実行するように指示を受けた場合について説明する。実行部２４２は、呼出しが行われた関数が終了関数である場合には、終了処理２を実行する。以下、実行部２４２が実行する終了処理２について説明する。
【００４４】
実行部２４２は、上述した終了処理１と同様に、例えば、現在の記録データ２３１をシーケンスパターンとして保存する。このとき、実行部２４２は、使用回数のデータ項目を更新（１を記録）し、最終使用日のデータ項目を記録し、終了時刻のデータ項目を記録し、モードを比較モードから終了に変更する。続いて、実行部２４２は、図４に示す関数フラグ対応表を元に、保存した記録データ２３１とフラグとを対応付けたシーケンスパターンデータ２３２を作成して、作成したシーケンスパターンデータ２３２を記憶部２３０に格納する。続いて、実行部２４２は関数の処理を実行する。
【００４５】
ここで、図７を用いて、上述した判定部２４１および実行部２４２による処理の一例を説明する。図７は、シーケンスパターンにより省略される処理の一例を示す図である。図７の左側には、ある署名処理におけるシーケンスを示す。図７の右側には、図７の左側に示すシーケンスに含まれる関数の処理が、シーケンスパターンデータ２３２により一部省略されたシーケンスを示す。なお、図７に示すシーケンスには、アプリシーケンス単位１、リーダアクセス単位２およびカードアクセス単位３のアクセス単位を明記する。
【００４６】
例えば、関数Ａの呼出しが行われると、判定部２４１は、関数Ａを開始関数として有するシーケンスパターンデータ２３２を取得する。そして、判定部２４１は、取得したシーケンスパターンデータ２３２に従い、関数Ａの処理において「リーダライタＯＰＥＮ」を実行するようにフラグをセットする。実行部２４２は、判定部２４１によりセットされたフラグを踏まえて、図７の右側に示すように、関数Ａの処理「リーダライタＯＰＥＮ」を実行する。関数Ａに続いて、関数Ｂの呼出しが行われると、判定部２４１は、関数Ｂまでのシーケンス「関数Ａ→関数Ｂ」が一致するシーケンスパターンデータ２３２を取得する。そして、判定部２４１は、取得したシーケンスパターンデータ２３２に従い、関数Ｂの処理において「カード接続」を実行し、「カード接続解除」を実行しないようにフラグをセットする。実行部２４２は、判定部２４１によりセットされたフラグを踏まえて、図７の右側に示すように、関数Ｂの処理において「カード接続」を実行し、「カード接続解除」を実行しない。このようにすることで、図７の左側に示すシーケンスに含まれる関数の処理のうち、図７の右側に示す各関数におけるカード接続、カード接続解除、リーダライタＯＰＥＮ，リーダライタＣＬＯＳＥなどの複数の処理４が省略される。
【００４７】
続いて、図７を用いて、リカバリ処理について説明する。例えば、判定部２４１は、関数Ｂに続いて、関数Ｆの呼出しが行われると、関数Ｆまでのシーケンス「関数Ａ→関数Ｂ→関数Ｆ」が一致するシーケンスパターンデータ２３２を取得する。このとき、判定部２４１は、一致するシーケンスパターンデータ２３２がない場合には、リカバリ処理を実行するように実行部２４２に指示する。実行部２４２は、比較モードを記録モードに変更した後、関数Ｆの直前に呼び出された関数Ｂの処理のうち、実行したものとして省略した関数Ｆの呼出し直前の処理をリカバリ処理として実行する。例えば、図７に示すように、関数Ｂの処理のうち、関数Ｆの呼出し直前の処理「カード接続解除」を実行する。続いて、実行部２４２は、関数Ｆの処理を実行する。このようにリカバリ処理を実行することで、以後の署名処理において、リーダライタ１００やＩＣカードとの接続状態を保持する。
【００４８】
［実施例１による処理］
次に、図８を用いて、実施例１に係る署名装置２００による処理の流れを説明する。図８は、実施例１に係る署名装置による処理の流れを示す図である。
【００４９】
以下に説明する図８に示す処理では、未だシーケンスパターンデータ２３２が登録されていない場合や、開始関数に該当するシーケンスパターンデータ２３２が登録されていない場合、システム内部を記録モードに移行させる。そして、図８に示す処理では、開始関数の呼出し後、終了関数まで呼出しが行われるまで、一連の処理とみなせる各関数を実行順に記録し、記録された関数に基づいてシーケンスパターンデータ２３２を作成する。また、図８に示す処理では、開始関数に該当するシーケンスパターンデータ２３２が既に登録されている場合、システム内部を比較モードに移行させる。そして、図８に示す処理では、開始関数から順に各関数をシーケンスパターンデータ２３２と比較し、呼出しが行われた関数までのシーケンスと一致するシーケンスパターンデータ２３２に基づいて、ＩＣカードやリーダライタ１００への接続の要否を判定する。なお、以下では、説明の便宜から、上述の記録データ２３１をシーケンス記録と表記し、上述のシーケンスパターンデータ２３２をシーケンスパターンと表記する。
【００５０】
図８に示すように、判定部２４１は、関数の呼出しがあったか否かの判定を行う（Ｓ１０１）。関数の呼出しがない場合には（Ｓ１０１「Ｎｏ」）、同判定を繰り返し行う。判定部２４１は、関数の呼出しがあった場合には（Ｓ１０１「Ｙｅｓ」）、呼出し元モジュール名ごとに関数名を追記する（Ｓ１０２）。
【００５１】
すなわち、判定部２４１は、呼出元モジュール名とプロセスＩＤをキーにシーケンス記録を作成する。例えば、関数名が「CPHashData」である関数の呼出しがあったとする。この場合、判定部２４１は、記憶部２３０のシーケンス記録を参照し、関数の呼出しを行った呼出元モジュール名「＊＊＊＊．ｅｘｅ」、および該当処理のプロセスＩＤ「２９３４６」が一致するシーケンス記録を検索する。例えば、現時点のシーケンス記録が上述した図２の状態である場合には、一致するシーケンス記録が検索できるので、判定部２４１は、既にある図２のシーケンス記録に関数名「CPHashData」を追記する。なお、判定部２４１は、関数名が「CPSignHash」の関数の呼出しが行われた場合には、この関数が図６に定義される回数任意関数であるので、図２に示すシーケンス記録の回数カウントを、例えば、「１→２」に更新し、関数名「CPSignHash」の追記は行わない。一方、一致するシーケンス記録が検索できなかった場合には、判定部２４１は、関数の呼出しを行った呼出元モジュール名および該当処理のプロセスＩＤに対応付けてシーケンス記録を新規に作成し、記憶部２３０に格納する。
【００５２】
続いて、判定部２４１は、呼ばれた関数が開始関数か否かの判定を行う（Ｓ１０３）。例えば、判定部２４１は、図６に示し定義情報に基づいて、呼び出された関数の関数名が「CPAcquireContext」と一致するか否かを判定する。判定部２４１は、呼ばれた関数が開始関数である場合には（Ｓ１０３「Ｙｅｓ」）、同一呼出しモジュール名かつ同じプロセスＩＤのシーケンス記録が残っているか否かの判定を行う（Ｓ１０４）。例えば、判定部２４１は、呼出元モジュール名が「＊＊＊＊．ｅｘｅ」で、プロセスＩＤ「２９３４６」であるシーケンス記録が記憶部２３０に残っているか否かを判定する。
【００５３】
判定部２４１は、同一呼出しモジュール名かつ同じプロセスＩＤのシーケンス記録が残っている場合には（Ｓ１０４「Ｙｅｓ」）、直前に呼ばれた関数処理の終了時刻から１分以内か否かの判定を行う（Ｓ１０５）。例えば、判定部２４１は、記憶部２３０に残っているシーケンス記録の終了時刻を参照し、内部タイマなどが示す現時刻と終了時刻とを比較して、現時刻が、シーケンス記録の終了時刻から１分以内であるか否かを判定する。すなわち、判定部２４１は、Ｓ１０５の判定により、今回のリーダアクセスを前回のリーダアクセスとひとまとまりの処理とみなすかどうかを判定している。ここで、リーダアクセスとは、開始関数の処理から終了関数の処理が完了するまでのリーダライタへのアクセスに該当する。また、ひとまとまりの処理とは、同一のアプリケーションプログラムにより行われる一連の処理とみなせる処理に該当する。
【００５４】
判定部２４１は、終了時刻から１分以内である場合には（Ｓ１０５「Ｙｅｓ」）、直前のシーケンスパターンを複製し、モードを「終了」から「比較モード」に戻してシーケンス記録を作成する（Ｓ１０６）。例えば、仮に、図６に示す終了関数「CPReleaseContext」の呼出しが行われた時刻から１分以内に、同一呼出しモジュール名かつ同じプロセスＩＤの関数の呼出しが行われたものとする。この場合には、判定部２４１は、直前に作成されたシーケンスパターンを複製し、「モード」のデータ項目を比較モードに戻して、この複製データをシーケンス記録として復活させて、関数名の追記を行い、記憶部２３０に記憶する。続いて、判定部２４１は、現在のモードが「比較モード」であるか否かの判定を行う（Ｓ１０７）。
【００５５】
判定部２４１は、「比較モード」である場合には（Ｓ１０７「Ｙｅｓ」）、呼出し元モジュール名に対応するシーケンスパターンを取得する（Ｓ１０８）。例えば、呼出し元モジュール名が「＊＊＊＊．ｅｘｅ」であれば、呼出し元モジュール名が「＊＊＊＊．ｅｘｅ」であるシーケンスパターンを全て取得する。続いて、判定部２４１は、取得したシーケンスパターンと、シーケンス記録とが一致するか否かの判定を行う（Ｓ１０９）。例えば、現時点でのシーケンス記録が上述の図２の状態であり、取得したシーケンスパターンが上述の図３の状態であるとする。この場合、シーケンス記録の関数名「1:CPAcquireContext」、「2:CPCreateHash」、「3:CPHashData」、「4:CPSignHash」と、シーケンスパターンの関数名「1:CPAcquireContext」、「2:CPCreateHash」、「3:CPHashData」、「4:CPGetHashParam」とが一致しない。よって、判定部２４１は、取得したシーケンスパターンとシーケンス記録とを順に比較した結果、一致しない旨の判定を行うこととなる。ここで、判定部２４１は、取得したシーケンスパターンとシーケンス記録とを順に比較し、一致するシーケンスパターンを検出した時点で、Ｓ１０９の判定結果を「Ｙｅｓ」とし、次の処理に進むようにしてもよい。また、判定部２４１は、シーケンス記録とシーケンスパターンの比較を行うたびに、一致するシーケンスパターンのみを残していき、次の比較では残ったシーケンスパターンとの比較を行うようにしてもよい。
【００５６】
判定部２４１は、シーケンス記録と一致するシーケンスパターンがある場合には（Ｓ１０９「Ｙｅｓ」）、シーケンスパターンに従ってフラグをセットする（Ｓ１１０）。すなわち、判定部２４１は、シーケンスパターンに沿って、リーダライタ１００やリーダライタ１００に挿入されるＩＣカードのオープン処理やクローズ処理を省略できるようにフラグをセットする。例えば、判定部２４１は、呼び出された関数が関数名「CPAcquireContext」の関数である場合には、シーケンスパターンにおいて関数名「CPAcquireContext」に対応付けられているフラグを参照する。そして、判定部２４１は、関数名「CPAcquireContext」の関数の処理のうち、実行する処理についてはフラグ「Ｔｒｕｅ」をセットし、実行せずにスキップする処理についてはフラグ「ｆａｌｓｅ」をセットする。例えば、図３に示すシーケンスパターンでは、ＲＷオープンに関するフラグのみが「１」となっている。そこで、判定部２４１は、リーダライタ１００のオープン処理についてはフラグ「ｔｒｕｅ」をセットし、リーダライタ１００のクローズ処理、ＩＣカードの接続処理および接続解除処理についてはフラグ「ｆａｌｓｅ」をセットする。また、関数名「CPAcquireContext」に対応する回数任意に関するフラグは「０」となっている。よって、判定部２４１は、関数名「CPAcquireContext」の関数の処理は回数任意ではないものとして取り扱う。
【００５７】
続いて、実行部２４２は、呼ばれた関数が終了関数だった場合には、終了処理１を実行し（Ｓ１１１）、終了関数ではなかった場合には後述するＳ１１２の処理にそのまま移行する。終了処理１は、シーケンス記録の終了処理に該当する。例えば、シーケンスパターンと完全一致で終わった場合には、実行部２４２は、まず、既存のシーケンスパターンの使用回数のデータ項目を更新し、最終使用日のデータ項目を更新し、終了時刻のデータ項目を更新する。例えば、図２に示すようなシーケンス記録の各関数名と、図３に示すようなシーケンスパターンの各関数名とが完全に一致した場合には、シーケンスパターンの使用回数を１インクリメントし、最終使用日を現在の日付に更新し、終了時刻を現時刻に更新する。続いて、実行部２４２は、最終使用日が新しいものほど上位にくるように、シーケンスパターンを並び変えてモードを終了に変更し、終了処理１を完了する。なお、実行部２４２は、最終使用日が同一のものがある場合には使用回数が多いものを上位となるようにシーケンスパターンを並び変える。また、シーケンスパターン側に続きがある場合には、実行部２４２は、まず、現在のシーケンス記録をパターンとして保存してモードを終了に変更する。つまり、実行部２４２は、シーケンス記録を、比較してきたシーケンスパターンとは異なる新たなパターンとして立ち上げる。そして、実行部２４２は、新たに立ち上げたパターンに含まれる各関数に対して、関数フラグ対応表を元にフラグを対応付けたシーケンスパターンを作成する。なお、実行部２４２は、シーケンス記録からシーケンスパターンを作成する際、終了関数の次に開始関数がある場合、リーダライタ１００のクローズ処理とオープン処理のフラグを０にする。また、実行部２４２は、作成したシーケンスパターンを、最終使用日が新しいものほど上位にくるように並び替えて記憶部２３０に格納するが、最終使用日が同一のものがある場合には使用回数が多いものを上位となるように並び替えて格納する。
【００５８】
続いて、実行部２４２は、フラグを踏まえて関数の処理を実行する（Ｓ１１２）。例えば、実行部２４２は、本来の処理ではＩＣカードの接続解除処理を行うべきところで、カードオープンについてセットされたフラグが「ｃｌｏｓｅ＝ｆａｌｓｅ」となっている場合には、ＩＣカードの接続解除処理を行わずにスキップするようにする。そして、実行部２４２は、状態乖離記録データ２３４を更新して（Ｓ１１３）、処理を終了する。
【００５９】
なお、上述したＳ１０９において、判定部２４１は、シーケンス記録と一致するシーケンスパターンがない場合には（Ｓ１０９「Ｎｏ」）、モードを「比較モード」から「記録モード」に変更する（Ｓ１１４）。続いて、実行部２４２は、状態乖離記録データ２３４に基づいて、リカバリ処理を決定し（Ｓ１１５）、決定したリカバリ処理を実行する（Ｓ１１６）。例えば、実行部２４２は、関数名「CPHashData」の関数の呼出しがあった時点で、シーケンス記録とシーケンスパターンが不一致となった場合には、シーケンス記録を参照し、関数名「CPHashData」の関数の直前に呼び出された関数「CPCreateHash」を特定する。そして、実行部２４２は、関数名「CPCreateHash」の関数の処理の中から、関数名「CPHashData」の関数の呼出し直前に実行すべきであった処理をリカバリ処理として実行する。なお、Ｓ１１５の処理は、一つ前に呼ばれた関数までは、蓄積されたシーケンスパターンとシーケンス記録とが一致していたが、今呼ばれた関数から、シーケンスパターンとシーケンス記録とが一致しなくなった場合の処理に該当する。つまり、シーケンスパターンと一致することを前提にリーダライタ１００やリーダライタ１００に挿入されるＩＣカードのオープン処理やクローズ処理を省略してきているので、一致しなくなった時点で処理を本来の状態（元の状態）に戻す趣旨である。
【００６０】
続いて、実行部２４２は、呼ばれた関数が終了関数だった場合には、終了処理２を実行する（Ｓ１１７）。終了処理２は、基本的には、上述した終了処理１と同様であり、シーケンス記録の終了処理に該当する。例えば、実行部２４２は、現在のシーケンス記録をパターンとして保存する。このとき、実行部２４２は、使用回数のデータ項目に０を記録し、最終使用日のデータ項目を記録し、終了時刻のデータ項目を記録し、モードを「終了」に変更する。続いて、実行部２４２は、関数フラグ対応表を元に、パターンとフラグとを対応付けたシーケンスパターンを作成して、作成したシーケンスパターンを記憶部２３０に格納する。
【００６１】
そして、実行部２４２は、関数の処理を実行して（Ｓ１１８）、処理を終了する。なお、Ｓ１１８において実行される関数の処理は、実行すべき全ての処理をそのまま実行する。
【００６２】
なお、上述したＳ１０７において、判定部２４１は、「比較モード」でない場合には（Ｓ１０７「Ｎｏ」）、記録モードであるものとして、上述したＳ１１７の処理に移行する。なお、上述したＳ１０３において、判定部２４１は、呼ばれた関数が開始関数ではない場合には（Ｓ１０３「Ｎｏ」）、上述したＳ１０７の処理に移行する。なお、上述したＳ１０４において、判定部２４１は、同一呼出しモジュール名かつ同じプロセスＩＤのシーケンス記録が残っていない場合には（Ｓ１０４「Ｎｏ」）、上述したＳ１０７の処理に移行する。なお、上述したＳ１０５において、判定部２４１は、終了時刻から１分以内ではない場合には（Ｓ１０５「Ｎｏ」）、上述したＳ１０７の処理に移行する。
【００６３】
［実施例１による効果］
上述してきたように、署名装置２００は、呼出しが行われた関数までのシーケンスと一致するシーケンスパターンに基づいて、ＩＣカードやリーダライタ１００への接続の要否を判定する。そして、署名装置２００は、ＩＣカードやリーダライタ１００への接続の不要が判定された場合には、当該処理を行わずに、呼出しが行われた関数を実行する。一方、署名装置２００は、ＩＣカードやリーダライタ１００への接続の要が判定された場合には、当該処理を行って、呼出しが行われた関数を実行する。このようなことから、実施例１によれば、署名処理における各関数間で重複して実行されるリーダライタ１００のオープン処理やクローズ処理、ＩＣカードとの接続処理や接続解除処理を省略できるので、結果として、処理性能を改善できる。
【００６４】
また、署名装置２００は、現時点までに呼出しが行われた関数のシーケンスと、１つ前の関数までは一致していたシーケンスパターンとが一致しなくなった場合には、関数フラグ対応表を元に、現時点までのシーケンスから新たなシーケンスパターンを生成する。このようなことから、実施例１によれば、署名処理において、上位のアプリケーションやアプリケーションバージョンに応じて発生し得る複数の異なるシーケンスから、新たなシーケンスパターンとして動的に生成できる。
【００６５】
また、署名装置２００は、呼出しが行われた関数までのシーケンスと、１つ前の関数まで一致していたシーケンスパターンとが一致しなくなった場合には、状態乖離記録データ２３４に基づいてリカバリ処理を実行する。このようなことから、以後の署名処理において、リーダライタ１００やＩＣカードとの接続状態を保持することでき、結果として、以後の署名処理を確実に実施できる。
【実施例２】
【００６６】
以下、本願の開示するシーケンス処理プログラム、シーケンス処理装置およびシーケンス処理方法の他の実施形態を説明する。
【００６７】
（１）装置構成等
例えば、図１に示した署名装置２００の機能ブロックの構成は概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。例えば、図１に示した制御部２４０の判定部２４１および実行部２４２を機能的または物理的に統合してもよい。このように、例えば、図１に示した署名装置２００の機能ブロックの全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散または統合して構成することができる。
【００６８】
（２）署名処理プログラム
また、上述の実施例にて説明した署名装置２００により実行される各種の処理は、例えば、電子回路や集積回路などを有するコンピュータで所定のプログラムを実行することによって実現できる。そこで、以下では、図９を用いて、上述の実施例にて説明した署名装置２００により実行される処理と同様の機能を実現する署名処理プログラムを実行するコンピュータの一例を説明する。図９は、署名処理プログラムを実行するコンピュータの一例を示す図である。
【００６９】
図９に示すように、コンピュータ３００は、例えば、メモリ３０１と、ＣＰＵ（Central  Processing  Unit）３０２を有する。また、コンピュータ３００は、図９に示すように、ハードディスクドライブインタフェース３０３と、光ディスクドライブインタフェース３０４を有する。また、コンピュータ３００は、図９に示すように、シリアルポートインタフェース３０５と、ビデオアダプタ３０６と、リーダライタインタフェース３０７を有する。そして、コンピュータ３００は、これらの各部３０１〜３０７をバス３０８によって接続する。
【００７０】
メモリ３０１は、図９に示すように、ＲＯＭ（Read  Only  Memory）及びＲＡＭ（Random  Access  Memory）を含む。ＲＯＭは、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース３０３は、図９に示すように、ハードディスクドライブ３０９に接続される。光ディスクドライブインタフェース３０４は、図９に示すように、光ディスクドライブ３１０に接続される。例えば、光ディスクドライブ３１０には、光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース３０５は、図９に示すように、例えば、マウス４００およびキーボード５００に接続される。ビデオアダプタ３０６は、図９に示すように、例えば、ディスプレイ６００に接続される。リーダライタインタフェース３０７は、図９に示すように、例えば、リーダライタ１００に接続される。
【００７１】
ここで、図９に示すように、ハードディスクドライブ３０９は、例えば、ＯＳ（Operating  System）、アプリケーションプログラム、プログラムモジュール、プログラムデータを記憶する。
【００７２】
すなわち、開示の技術に係る署名処理プログラムは、コンピュータ３００によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ３０９に記憶される。つまり、上述の実施例で説明した制御部２４０と同様の処理を実行する手順が記述されたプログラムモジュールが、ハードディスクドライブ３０９に記憶される。例えば、このプログラムモジュールには、上述した図８に示す処理と同様の処理を実行する手順が記述されている。
【００７３】
また、署名処理プログラムによる処理に用いられるデータは、プログラムデータとして、例えばハードディスクドライブ３０９に記憶される。例えば、このプログラムデータは、上述の実施例で説明した記憶部２３０に記憶される各種情報に対応する。
【００７４】
そして、ＣＰＵ３０２が、ハードディスクドライブ３０９に記憶されたプログラムモジュールやプログラムデータを必要に応じてＲＡＭに読み出し、上述の実施例で説明したものと同様の処理（図８）を実行するための手順を実行する。
【００７５】
なお、署名処理プログラムに係るプログラムモジュールやプログラムデータは、ハードディスクドライブ３０９に記憶される場合に限られるものではなく、例えば、着脱可能な記憶媒体である光ディスクドライブ３１０等に記憶されていてもよい。この場合には、ＣＰＵ３０２が、光ディスクドライブ３１０を介して、署名処理プログラムに係るプログラムモジュールやプログラムデータを読み出す。あるいは、署名処理プログラムに係るプログラムモジュールやプログラムデータは、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶されていてもよい。この場合には、ＣＰＵ３０２が、所定のネットワークインタフェースなどを介して、署名処理プログラムに係るプログラムモジュールやプログラムデータを読み出す。
【００７６】
なお、ＣＰＵ３０２の代わりに、例えば、ＭＰＵ（Micro  Processing  Unit）などの電子回路、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路を用いることもできる。また、メモリ３０１の代わりに、フラッシュメモリ（flash  memory）などの半導体メモリ素子を用いることもできる。
【符号の説明】
【００７７】
１００  リーダライタ
２００  署名装置
２１０  入力部
２２０  出力部
２３０  記憶部
２３１  記録データ
２３２  シーケンスパターンデータ
２３３  関数フラグ対応表データ
２３４  状態乖離記録データ
２４０  制御部
２４１  判定部
２４２  実行部
３００  コンピュータ
３０１  メモリ
３０２  ＣＰＵ
３０３  ハードディスクドライブインタフェース
３０４  光ディスクドライブインタフェース
３０５  シリアルポートインタフェース
３０６  ビデオアダプタ
３０７  リーダライタインタフェース
３０８  バス
３０９  ハードディスクドライブ
４００  マウス
５００  キーボード
６００  ディスプレイ
【図１】
0005672100.tif 000002
【図２】
0005672100.tif 000003
【図３】
0005672100.tif 000004
【図４】
0005672100.tif 000005
【図５】
0005672100.tif 000006
【図６】
0005672100.tif 000007
【図７】
0005672100.tif 000008
【図８】
0005672100.tif 000009
【図９】
0005672100.tif 000010