以下、図面を参照して本発明の実施の形態を詳細に説明する。
図1は、第1の実施の形態に係る署名検証システム10の電気系の要部構成を例示するブロック図である。
図1に示すように、署名検証システム10は、ICカード11A、11B、11C・・・のいずれかに記憶された情報を読み取る機能を有する同一構成の複数のカードリーダ12A、12B、12C・・・と、カードリーダのいずれかと接続された同一の機能を有する同一構成の複数のコンピュータ14A、14B、14C・・・とで構成されている。
ICカード11A、11B、11C・・・の各々には、秘密かぎ及び認証局から発行されたICカード所持者の識別名(以下、DNという。)、認証局のDN、及びICカードのシリアル番号等を含む証明書情報が記憶されている。なお、証明書情報には例えば、ICカード所持者の証明書のロール、及び図2の表に例示するようにICカード所持者のメールアドレス等の必要な情報を新たな情報として追加することができる。新たな情報を追加する場合、証明書情報に追加する新たな情報を認証局に通知すると、認証局から新たな情報を追加した証明書情報が発行される。
複数のカードリーダ12A、12B、12C・・・の各々は、各種の制御処理を行うCPU(中央処理装置)16、CPU16で実行される各種制御プログラム及び各種のデータを記憶したROM18、各種の処理において作業用の記憶領域として一時的に用いられるRAM(Random Access Memory)20、記憶媒体に対してデータやコマンドの読み出し及び書き出しを行う記録装置(R/W)21、カードリーダにICカードが挿入された際に、ICカードに記憶されている秘密かぎ及び証明書情報を読み取るカード情報読取部22、並びに対応するコンピュータの外部インタフェース40と接続されると共に、対応するコンピュータと情報の入出力を行う外部インタフェース24で構成されており、これらはシステムバス26を介して電気的に接続されている。
複数のコンピュータ14A、14B、14C・・・の各々は、各種の制御処理を行うCPU28、CPU28で実行される各種制御プログラム及び各種のデータを記憶したROM30、各種の処理において作業用の記憶領域として一時的に用いられるRAM32、記憶媒体に対してデータやコマンドの読み出し及び書き出しを行う記録装置(R/W)33、後述する署名検証に用いる公開かぎ及び文書データを記憶する記憶装置34、キーボード及びマウスを含んで構成されると共に、各種情報を入力する入力装置36、各種情報を表示する表示装置38、対応するカードリーダの外部インタフェース24と接続されると共に、対応するカードリーダと情報の入出力を行う外部インタフェース40、並びにネットワーク41に接続されると共に、ネットワーク41を介して他のコンピュータとの通信を行う際に、他のコンピュータと各種情報の入出力を行うネットワークインタフェース42で構成されており、これらはシステムバス44を介して電気的に接続されている。
コンピュータ14A、14B、14C・・・の記憶媒体としてのROMの各々には、以下で説明する共通の処理ルーチンが各々記憶されると共に、カードリーダ12A、12B、12C・・・の記憶媒体としてのROMの各々には、以下で説明する共通の処理ルーチンが各々記憶されている。各コンピュータ及び各カードリーダは、電子署名の依頼者(署名依頼者)、電子署名者(署名者)、電子署名の検証者(検証者)が各々所持しているICカードをカードリーダに挿入してコンピュータを使用する際に、各々署名依頼者のコンピュータ及びカードリーダ、署名者のコンピュータ及びカードリーダ、検証者のコンピュータ及びカードリーダ等として機能する。
次に、図3及び図4を参照して、署名依頼者、署名者、及び検証者が、本実施の形態に係る署名検証システム10を用いて署名者を設定して署名者からの署名を検証する場合を例にして、本実施の形態の署名検証システム10の処理の概略の流れの一例を説明する。以下では、署名依頼者が所持しているICカードをICカード11A、署名依頼者が使用するコンピュータをコンピュータ14A、コンピュータ14Aと接続されているカードリーダをカードリーダ12A、署名者が所持しているICカードをICカード11B、署名者が使用するコンピュータをコンピュータ14B、コンピュータ14Bと接続されるカードリーダをカードリーダ12B、及び検証者が所持しているICカードをICカード11C、検証者が使用するコンピュータをコンピュータ14Cとして説明する。
まず、署名依頼者は、コンピュータ14Aに、署名依頼者の識別情報(パスワード及びDN等)及び文書データを入力すると共に、署名を依頼する署名者を特定する特定情報として署名者のメールアドレスを設定する。コンピュータ14Aは、署名者のメールアドレスが設定されると、署名依頼者のDN、文書データ、及び署名者のメールアドレスをカードリーダ12Aへ出力する。
カードリーダ12Aは、コンピュータ14Aから署名依頼者のDN、文書データ、及び署名者のメールアドレスを取得すると、後述する署名依頼者の署名データ生成処理を実行し、図4に例示する署名依頼者の署名データD1を生成する。生成した署名依頼者の署名データD1を署名依頼者のコンピュータ14Aへ送信する。
署名依頼者のコンピュータ14Aは、カードリーダ12Aから署名依頼者の署名データD1を受信すると、署名者のコンピュータ14Bへ受信した署名依頼者の署名データD1を送信する。
署名者のコンピュータ14Bは、署名者から署名者の識別情報(パスワード及びDN等)が入力され、かつ署名依頼者のコンピュータ14Aから送信された上記署名依頼者の署名データD1が受信されると、コンピュータ14Bに接続されたカードリーダ12Bへ署名者の識別情報であるDN及び署名依頼者の署名データD1を送信する。
カードリーダ12Bは、コンピュータ14Bから署名者のDN及び署名依頼者の署名データD1を取得すると、後述する署名者の署名データ生成処理を実行し、図4に示す署名者の署名データD2を生成する。生成した署名者の署名データD2をコンピュータ14Bへ送信する。
署名者のコンピュータ14Bは、カードリーダ12Bから署名者の署名データD2を受信すると、署名依頼者のコンピュータ14Aへ署名者の署名データD2を送信する。
署名依頼者のコンピュータ14Aは、署名者のコンピュータ14Bから署名者の署名データD2を受信すると、署名者の署名データD2を検証者のコンピュータ14Cへ送信する。
検証者のコンピュータ14Cは、署名依頼者のコンピュータ14Aから署名者の署名データD2を受信すると、署名者の署名データD2の署名検証を行い、検証結果を検証者のコンピュータ14Cの表示装置38に表示する。
次に、上記の署名検証システム10の処理の詳細について説明する。
図5に基いて、コンピュータ14A及び14Bに接続されているカードリーダ12A、12Bの各CPU16により実行されるカードリーダ処理プログラムの処理の流れの一例を説明する。なお、カードリーダ12A及び12Bを区別しない場合は、カードリーダ12として説明する。
ステップ100では、署名依頼者のコンピュータ14Aから文書データ及び後述する署名依頼者のコンピュータ14Aで設定された署名者のメールアドレス(署名者の特定情報)が入力されたか否かを判断する。入力されたと判断された場合は、カードリーダ12は、署名依頼者が起動したコンピュータ14Aに接続されているカードリーダ12Aであるため、ステップ102で後述する署名依頼者の署名データ生成処理を実行する。
一方、ステップ100で否定判断された場合は、ステップ104へ移行し、コンピュータ14Aから受信した署名依頼者の署名データD1が入力されたか否かを判断する。入力されたと判断された場合は、カードリーダ12は、署名者が起動したコンピュータ14Bに接続されているカードリーダ12Bであるため、ステップ106で後述する署名者の署名データ生成処理を実行する。
図6に基いて、上記ステップ102の署名依頼者の署名データ生成処理の一例について説明する。
ステップ200では、ICカードに記憶されている証明書情報を読み取る。次のステップ202では、読み取った証明書情報内のICカード所持者(署名依頼者)のDNとコンピュータ14Aから送信されたDNとが一致しているかを判断することにより署名依頼者のICカード11Aがカードリーダ12Aに挿入されているか否かを判断する。署名依頼者のICカード11Aが挿入されていない場合は、本サブルーチンを終了し、署名依頼者のICカード11Aが挿入されている場合には、ステップ204へ移行し、ICカード11Aから署名依頼者の秘密かぎを取得する。
次のステップ206では、予め定められたハッシュ関数を用いてコンピュータ14Aから送信された文書データのハッシュ値を計算する。
次のステップ208では、送信された署名者のメールアドレス、ステップ206で計算した文書データのハッシュ値、及びステップ200で取得した署名依頼者の証明書情報をステップ204で取得した署名依頼者の秘密かぎで暗号化する。
ステップ210では、送信された文書データとステップ208で暗号化した情報とを組み合わせることにより署名依頼者の署名データD1を生成する。
ステップ212では、ステップ210で生成した署名依頼者の署名データD1をコンピュータ14Aへ出力して本サブルーチンを終了する。
次に図7に基いて、上記ステップ106の署名者の署名データ生成処理の一例について説明する。
ステップ300では、ICカードに記録されている証明書情報を読み取る。次のステップ302では、読み取った証明書情報内のICカード所持者(署名者)のDNとコンピュータ14Bから入力されたDNとが一致しているかを判断することにより署名者のICカード11Bがカードリーダ12Bに挿入されているか否かを判定する。署名者のICカード11Bが挿入されていない場合は、本サブルーチンを終了し、署名者のICカード11Bが挿入されている場合には、ステップ304へ移行し、ICカード11Bから署名者の秘密かぎを取得する。
次のステップ306では、予め定められたハッシュ関数を用いてコンピュータ14Bから送信された署名依頼者の署名データD1に含まれている文書データを用いて、この文書データのハッシュ値を計算する。
次のステップ308では、ステップ306で計算した文書データのハッシュ値及びステップ300で取得した署名者の証明書情報をステップ304で取得した署名者の秘密かぎで暗号化する。
次のステップ310では、送信された署名依頼者の署名データD1とステップ308で暗号化した情報とを組み合わせることにより署名者の署名データD2を生成する。
次のステップ312では、ステップ310で生成した署名者の署名データD2をコンピュータ14Bへ出力して本サブルーチンを終了する。
次に図8に基いて、対象となる文書データが受信された際に実行されるコンピュータ14A、14B、及び14Cの各CPUが実行する処理の一例について説明する。なお、コンピュータ14A、14B、及び14Cを区別しない場合は、コンピュータ14として説明する。
ステップ400では、署名依頼者の署名データD1及び署名者の署名データD2に含まれていない文書データが、すなわち文書データのみが入力されたか、署名依頼者の署名データD1または署名者の署名データD2が受信されたかを判断する。文書データが入力された場合には、ステップ402で後述する署名者のメールアドレス設定処理を実行する(コンピュータ14Aによる処理)。
また、ステップ400で、署名依頼者の署名データD1または署名者の署名データD2が受信されたと判断された場合は、ステップ404でコンピュータ14に接続されているカードリーダ12から署名依頼者の署名データD1を受信したか否かを判断する。カードリーダ12から署名依頼者の署名データD1を受信した場合は、ステップ406でネットワーク41を介して他のコンピュータ(署名者のコンピュータ14B)へ署名依頼者の署名データD1を送信して処理を終了(コンピュータ14Aの処理)し、署名依頼者の署名データD1が入力されていない場合は、ステップ408へ移行する。
ステップ408では、コンピュータ14が、他のコンピュータ(署名依頼者のコンピュータ14A)から送信された署名依頼者の署名データD1が受信されたか否かを判断する。署名依頼者の署名データD1を受信した場合は、ステップ410でコンピュータ14に接続されているカードリーダ12へ署名依頼者の署名データD1を送信して処理を終了(コンピュータ14Bの処理)し、署名依頼者の署名データD1が他のコンピュータ14から受信されていない場合は、ステップ412へ移行する。
ステップ412では、コンピュータ14に接続されているカードリーダ12から署名者の署名データD2が受信されたか否かを判断する。署名者の署名データD2がカードリーダ12から受信された場合は、ステップ414でネットワーク41を介して他のコンピュータ14(署名依頼者のコンピュータ14Aまたは検証者のコンピュータ14C)へ署名者の署名データD2を送信して処理を終了(コンピュータ14Bの処理)し、署名者の署名データD2がカードリーダ12から受信されていない場合は、ステップ416へ移行する。
ステップ416では、他のコンピュータ14から署名者の署名データD2が受信されたか否かを判断する。署名者の署名データD2が受信されていない場合は、ステップ400へ戻り、署名者の署名データD2が受信された場合は、ステップ418へ移行する。
ステップ418では、署名者の署名データD2が、コンピュータ14Aから受信されたか、コンピュータ14Bから受信されたかを判断することにより、署名者の署名データD2を検証するか否かを判断する。検証しない場合(署名者の署名データD2が、署名者のコンピュータ14Bから受信された場合)は、ステップ420で他のコンピュータ(コンピュータ14C)へ署名者の署名データD2を送信して処理を終了(コンピュータ14Aの処理)し、検証する場合(署名者の署名データD2が、コンピュータ14Aから受信された場合)は、ステップ422で署名データ検証処理を実行する。
図9に基いて、上記ステップ402の署名者のメールアドレス設定処理のサブルーチンの一例を説明する。このサブルーチンは、コンピュータ14Aで実行される。
ステップ500では、コンピュータ14の表示装置38に署名者のメールアドレスを入力させる画面を表示する。次のステップ502では、コンピュータ14に署名者のメールアドレスが入力されたか否かを判断し、入力されていない場合は、コンピュータ14に署名者のメールアドレスが入力されるまで待機し、入力された場合は、ステップ504へ移行する。
ステップ504では、上述したように入力された文書データ及びコンピュータ14で受信された署名者のメールアドレスをカードリーダ12Aに送信して本サブルーチンを終了する。
図10に基いて、上記ステップ422の署名データ検証処理のサブルーチンの一例について説明する。このサブルーチンはコンピュータ14Cで実行される。
ステップ600では、コンピュータ14の記憶装置34から署名依頼者の公開かぎ及び署名者の公開かぎを取得し、次のステップ602では、署名者の署名データD2に含まれる署名依頼者の署名データD1を署名依頼者の公開かぎで復号化する。
次のステップ604では、署名依頼者の署名データD1を除く署名者の署名データD2を署名者の公開かぎで復号化する。
次のステップ606では、コンピュータ14でハッシュ関数、及び署名依頼者の署名データD1に含まれている文書データを用いて、この文書データのハッシュ値を計算する。
次のステップ608では、署名依頼者の公開かぎによって復号化された署名依頼者からの文書データのハッシュ値とステップ606で計算されたハッシュ値とが一致しているか否か判断する。一致していないと判断された場合は、ステップ610でコンピュータ14の表示装置38に署名依頼者の署名が不一致であることを表示して本サブルーチンを終了し、一致していると判断した場合、ステップ612へ移行する。
ステップ612では、図11の表に例示する署名者の公開かぎで復号化した署名者の証明書情報に含まれている署名者のメールアドレスと署名依頼者の公開かぎで復号化した署名依頼者の署名データD1に含まれる署名者のメールアドレスとが一致しているか否か判断する。一致していないと判断した場合は、ステップ614で表示装置38に署名依頼者が指定した署名者と異なる旨を表示して本サブルーチンを終了し、一致していると判断した場合は、ステップ616へ移行する。
ステップ616では、署名者の公開かぎで復号化した署名者からの文書データのハッシュ値とステップ606で計算したハッシュ値とが一致しているか否か判断する。一致していないと判断した場合は、ステップ618で表示装置38に署名者の署名が不一致であることを表示して本サブルーチンを終了し、一致していると判断した場合は、ステップ620で検証者のコンピュータ14Cの表示装置38に署名者が正しいことを表示して本サブルーチンを終了する。
以上のように処理する結果、署名依頼者が依頼した署名者が、正しく署名を行ったか否かを検証者(第3者)のコンピュータで検証することができる。
次に、第2の実施の形態について説明する。
本実施の形態に係る署名検証システム10の電気系の要部構成は、第1の実施の形態と同様であるため説明を省略する。
本実施の形態では、図12の表に表すように、例えば、第1ステップで官公庁が署名依頼者の役割、及び社長が署名者の役割を担い、第2ステップで社長が署名依頼者の役割、及び部長が署名者の役割を担い、第3ステップで部長が署名依頼者、及び担当者が署名者の役割を担い、第4ステップで担当者が署名者の役割、官公庁及び部長が署名依頼者の役割、及び部長が検証者の役割を担い、第5ステップで部長が署名者の役割、官公庁及び社長が署名依頼者の役割、及び社長が検証者の役割を担い、そして、第6ステップで社長が署名者の役割、官公庁が署名依頼者の役割、及び官公庁が検証者の役割を担うことになる。
まず、図13及び図14を参照して、本実施の形態の署名検証システム10の処理の概略の一例を説明する。
以下では、官公庁のICカードをICカード11a、官公庁が使用するコンピュータをコンピュータ14a、コンピュータ14aと接続されているカードリーダをカードリーダ12a、社長のICカードをICカード11b、社長が使用するコンピュータをコンピュータ14b、コンピュータ14bと接続されているカードリーダをカードリーダ12b、部長のICカードをICカード11c、部長が使用するコンピュータをコンピュータ14c、コンピュータ14cと接続されているカードリーダをカードリーダ12c、担当者のICカードをICカード11d、担当者が使用するコンピュータをコンピュータ14d、及びコンピュータ14dと接続されるカードリーダをカードリーダ12dとして説明する。
まず、第1ステップでは、官公庁(第1ステップの署名依頼者)は、コンピュータ14aに、官公庁の識別情報(パスワード及びDN等)及び文書データを入力すると共に、社長(第1ステップの署名者)を特定する情報として社長のメールアドレスを設定する。コンピュータ14aは、社長のメールアドレスが設定されると、官公庁のDN、文書データ、及び社長のメールアドレスをカードリーダ12aヘ出力する。
カードリーダ12aは、コンピュータ14aから官公庁のDN、文書データ、及び社長のメールアドレスを取得すると、後述する署名依頼者の署名データ生成処理を実行して図15に例示する官公庁の署名データd1を生成し、生成した官公庁の署名データd1を官公庁のコンピュータ14aへ送信する。
官公庁のコンピュータ14aは、カードリーダ12aから官公庁の署名データd1を受信すると、社長のコンピュータ14bへ受信した官公庁の署名データd1を送信する。
次に第2ステップでは、社長(第2ステップの署名依頼者)は、コンピュータ14bに、社長の識別情報(パスワード及びDN等)を入力すると共に、コンピュータ14aから官公庁の署名データd1が受信されると、部長(第2ステップの署名者)を特定する情報として部長のメールアドレスを設定する。コンピュータ14bは、部長のメールアドレスが設定されると、社長のDN、官公庁の署名データd1、及び部長のメールアドレスをカードリーダ12bヘ送信する。
カードリーダ12bは、コンピュータ14bから社長のDN、官公庁の署名データd1、及び部長のメールアドレスを取得すると、後述する署名依頼者の署名データ生成処理を実行して図15に示す第1の社長の署名データd2を生成し、生成した第1の社長の署名データd2を社長のコンピュータ14bへ送信する。
社長のコンピュータ14bは、カードリーダ12bから第1の社長の署名データd2を受信すると、部長のコンピュータ14cへ受信した第1の社長の署名データd2を出力する。
次に第3ステップでは、部長(第3ステップの署名依頼者)は、コンピュータ14cに、部長の識別情報(パスワード及びDN等)が入力されると共に、コンピュータ14bから第1の社長の署名データd2が受信されると、担当者(第3ステップの署名者)を特定する情報として担当者のメールアドレスを設定する。コンピュータ14cは、担当者のメールアドレスが設定されると、部長のDN、第1の社長の署名データd2、及び担当者のメールアドレスをカードリーダ12cヘ送信する。
カードリーダ12cは、コンピュータ14cから部長のDN、第1の社長の署名データd2、及び担当者のメールアドレスを取得すると、後述する署名依頼者の署名データ生成処理を実行して図15に示す第1の部長の署名データd3を生成し、生成した第1の部長の署名データd3を部長のコンピュータ14cへ送信する。
部長のコンピュータ14cは、カードリーダ12cから第1の部長の署名データd3を受信すると、担当者のコンピュータ14dへ受信した第1の部長の署名データd3を出力する。
次に第4ステップでは、担当者(第4ステップの署名者)のコンピュータ14dは、担当者から担当者の識別情報(パスワード及びDN等)が入力され、かつ部長のコンピュータ14cから第1の部長の署名データd3が受信されると、コンピュータ14dに接続されたカードリーダ12dへ担当者のDN及び第1の部長の署名データd3を送信する。
カードリーダ12dは、コンピュータ14dから担当者のDN及び第1の部長の署名データd3を取得すると、後述する署名者の署名データ生成処理を実行して図15に示す担当者の署名データd4を生成し、生成した担当者の署名データd4をコンピュータ14dへ送信する。
コンピュータ14dは、カードリーダ12dから担当者の署名データd4が受信されると、コンピュータ14cへ担当者の署名データd4を送信する。
部長(第4ステップの検証者)のコンピュータ14cは、コンピュータ14dからの担当者の署名データd4が受信されると、後述する署名データ検証処理を実行して担当者の署名データd4の検証を行う。検証結果が正しい場合は、カードリーダ12cに担当者のコンピュータ14dから受信された担当者の署名データd4を送信する。これによって、署名依頼者が官公庁及び部長で、かつ署名者が担当者の場合の官公庁の署名データd1、第1の部長の署名データd3、及び担当者の署名データd4の検証が行われる。
次に第5ステップでは、カードリーダ12cは、コンピュータ14cから部長(第5ステップの署名者)のDN及び担当者の署名データd4を取得すると、後述する署名者の署名データ生成処理を実行して図15に示す第2の部長の署名データd5を生成し、生成した第2の部長の署名データd5を部長のコンピュータ14cへ送信する。
部長のコンピュータ14cは、カードリーダ12cから第2の部長の署名データd5が入力されると、社長のコンピュータ14bへ第2の部長の署名データd5を送信する。
社長(第5ステップの検証者)のコンピュータ14bは、部長のコンピュータ14cから第2の部長の署名データd5が受信されると、後述する署名データ検証処理を実行して第2の部長の署名データd5の検証を行う。検証結果が正しい場合は、カードリーダ12bにコンピュータ14cから受信された第2の部長の署名データd5を出力する。これによって、署名依頼者が官公庁及び社長で、かつ署名者が部長の場合の官公庁の署名データd1、第1の社長の署名データd2、及び第2の部長の署名データd5の検証が行われる。
次に第6ステップでは、カードリーダ12bは、コンピュータ14bから社長(第6ステップの署名者)のDN及び第2の部長の署名データd5を取得すると、後述する署名者の署名データ生成処理を実行して図15に示す第2の社長の署名データd6を生成し、生成した第2の社長の署名データd6を社長のコンピュータ14bへ送信する。
コンピュータ14bは、カードリーダ12bから第2の社長の署名データd6が入力されると、コンピュータ14aへ第2の社長の署名データd6を出力する。
官公庁(第6ステップの検証者)のコンピュータ14aは、コンピュータ14bから第2の社長の署名データd6が入力されると、後述する署名データ検証処理を実行して第2の社長の署名データd6の検証を行う。これによって、署名依頼者が官公庁で、かつ署名者が社長の場合の官公庁の署名データd1及び第2の社長の署名データd6の検証が行われる。
次に、図16〜図19を参照して署名検証システム10の処理の一例の詳細について説明する。なお、第1の実施の形態と対応する部分については、同一符号を付して説明を省略する。
図16に基いて、コンピュータ14a、14b、14c、及び14dに接続されているカードリーダ12a、12b、12c、及び12dの各CPU16により実行されるカードリーダ処理プログラムの処理の流れの一例を説明する。なお、カードリーダ12a、12b、12c、及び12dを区別しない場合は、カードリーダ12として説明する。また、コンピュータ14a、14b、14c、及び14dを区別しない場合は、コンピュータ14として説明し、官公庁の署名データ、第1の社長の署名データ、及び第1の部長の署名データを区別しない場合は、署名依頼者の署名データD1とし、第2の社長の署名データ、第2の部長の署名データ、及び担当者の署名データを区別しない場合は、署名者の署名データD2として説明する。
ステップ700では、官公庁のコンピュータ14aから文書データ及び後述する官公庁のコンピュータ14aで設定された社長のメールアドレス(署名者の特定情報)が入力されたか否かを判断する。入力されたと判断された場合は、カードリーダ12は、官公庁が起動したコンピュータ14aに接続されているカードリーダ12aであるため、ステップ702で後述する署名依頼者の署名データ生成処理を実行する。
一方、ステップ700で否定判断された場合は、ステップ704へ移行し、コンピュータ14から署名依頼者の署名データD1及び署名者のメールアドレスが入力されたか否かを判断する。入力されたと判断された場合は、ステップ706へ移行し、入力されていないと判断された場合は、ステップ708へ移行する。
ステップ706では、官公庁の署名データd1及び社長のメールアドレス並びに第1の社長の署名データd2及び担当者のメールアドレスが、コンピュータ14から受信されたか否かを判断することにより、署名依頼者の署名データD1を生成するか否かを判断する。署名依頼者の署名データD1を生成する場合(官公庁の署名データd1及び社長のメールアドレスが、コンピュータ12bから受信された場合、並びに第1の社長の署名データd2及び部長のメールアドレスが、コンピュータ14cから受信された場合)は、ステップ702で署名依頼者の署名データ生成処理を実行する。
一方、ステップ706で署名依頼者の署名データD1を生成しない場合(第1の部長の署名データd3及び担当者のメールアドレスが、コンピュータ14dから受信された場合)は、ステップ106で第1の実施の形態で説明した署名者の署名データ生成処理を実行する。
ステップ708では、コンピュータ14から署名者の署名データD2を受信したか否かを判断する。受信したと判断した場合(担当者の署名データd4が、コンピュータ14cから受信された場合及び第2の部長の署名データd5が、コンピュータ14bから受信された場合)は、ステップ106へ移行し、署名者の署名データ生成処理を実行する。
一方、ステップ708で受信されていないと判断された場合は、ステップ700へ戻る。
次に、図17に基いて、上記ステップ702の署名依頼者の署名データ生成処理の一例について説明する。
ステップ800では、ICカード11に記憶されている証明書情報を読み取る。次のステップ802では、読み取った証明書情報内のICカード所持者(官公庁、社長または部長)のDNとコンピュータ14から送信されたDNが一致しているかを判断することにより署名依頼者(官公庁、社長または部長)のICカード11がカードリーダ12に挿入されているか否かを判断する。署名依頼者(官公庁、社長または部長)のICカード11が挿入されていない場合は、本サブルーチンを終了し、署名依頼者(官公庁、社長または部長)のICカード11が挿入されている場合には、ステップ804へ移行し、ICカード11から署名依頼者(官公庁、社長または部長)の秘密かぎを取得する。
次のステップ806では、官公庁の署名データd1及び部長のメールアドレス並びに、第1の社長の署名データd2及び担当者のメールアドレスが、コンピュータ14から受信されたか否かを判断することにより、署名依頼者のコンピュータ14から署名依頼者の署名データ及び署名者のメールアドレスが受信されたか否かを判断する。署名依頼者の署名データ及び署名者のメールアドレスが受信された場合には、ステップ808へ移行する(カードリーダ12b及び12cによる処理)。
ステップ808では、コンピュータ14から受信した署名者のメールアドレス及びステップ800で取得した署名依頼者の証明書情報をステップ804で取得した署名依頼者の秘密かぎで暗号化する。
次のステップ810では、コンピュータ14から受信した署名依頼者の署名データとステップ808で暗号化した情報とを組み合わせることにより署名依頼者(社長または部長)の署名データを生成し、ステップ818へ移行する。
一方、ステップ806で署名依頼者の署名データD1及び署名者のメールアドレスが受信されていない場合は、ステップ812へ移行し(カードリーダ12aによる処理)、予め定められたハッシュ関数を用いてコンピュータ14aから受信した文書データのハッシュ値を計算する。
次のステップ814では、コンピュータ14aから受信した署名者(社長)のメールアドレス、ステップ812で計算した文書データのハッシュ値、及びステップ800で取得した官公庁の証明書情報をステップ804で取得した官公庁の秘密かぎで暗号化する。
ステップ816では、コンピュータ14aから受信した文書データとステップ814で暗号化した情報とを組み合わせることにより官公庁の署名データd1を生成し、ステップ818へ移行する。
ステップ818では、ステップ810及びステップ816で生成した署名依頼者の署名データD1をコンピュータ14へ送信して本サブルーチンを終了する。
次に図18に基いて、対象となる文書データが入力された際に実行されるコンピュータ処理の一例について説明する。
ステップ900では、署名依頼者の署名データD1及び署名者の署名データD2に含まれていない文書データが、すなわち文書データのみが入力されたか、署名依頼者の署名データD1及び署名者の署名データD2が受信されたか判断する。文書データが入力された場合には、ステップ902で署名者(社長)のメールアドレス設定処理を実行する(コンピュータ14aによる処理)
また、ステップ900で署名依頼者の署名データD1及び署名者の署名データD2を受信した場合は、ステップ904でコンピュータ14が、他のコンピュータ14(官公庁のコンピュータ14a、社長のコンピュータ14b、及び部長のコンピュータ14c)から送信された署名依頼者の署名データD1を受信したか否かを判断する。署名依頼者の署名データD1を受信した場合は、ステップ906へ移行し、受信していない場合は、ステップ908へ移行する。
ステップ906では、署名者のメールアドレスを設定するか否かを判断する。署名者のメールアドレスを設定する場合には、ステップ902で署名者のメールアドレス設定処理を実行し(コンピュータ14b及び14cの処理)、署名者のメールアドレスを設定しない場合には、ステップ910でコンピュータ14に接続されているカードリーダへ署名依頼者の署名データD1を送信して処理を終了する(コンピュータ14dの処理)。
ステップ908では、コンピュータ14に接続されているカードリーダ12から署名依頼者の署名データD1が受信されたか否かを判断する。カードリーダ12から署名依頼者の署名データD1が送信された場合は、ステップ912でネットワーク41を介して他のコンピュータ(コンピュータ14b、14c及び14d)へ署名依頼者の署名データD1を送信して処理を終了し、署名依頼者の署名データD1を受信していない場合は、ステップ914へ移行する。
ステップ914では、コンピュータ14に接続されているカードリーダ12から署名者の署名データD2が受信されたか否かを判断する。署名者の署名データD2がカードリーダ12から受信された場合は、ステップ916でネットワーク41を介して他のコンピュータへ署名者の署名データを送信して処理を終了し、カードリーダ12から署名者の署名データD2が受信されていない場合は、ステップ918へ移行する。
ステップ918では、他のコンピュータ14(社長のコンピュータ14b、部長のコンピュータ14cまたは担当者のコンピュータ14d)から署名者の署名データD2が受信されたか否かを判断する。署名者の署名データD2が受信されていない場合は、ステップ900へ戻り、署名者の署名データD2が受信された場合は、ステップ422で第1の実施の形態で説明した署名データ検証処理を実行する。
ステップ920では、ステップ422の署名データD2の検証結果が正しいか否かを判断する。正しくないと判断した場合は、処理を終了し、正しいと判断した場合は、ステップ922へ移行する。
ステップ922では、署名者の署名データD2を生成するか否かを判断する。署名者の署名データD2を生成しないと判断した場合は、処理を終了し(コンピュータ14aの処理)、署名者の署名データD2を生成する場合は、ステップ924でカードリーダ12へ署名者の署名データD2を送信し、処理を終了する(コンピュータ14b及び14c)。
図19に基いて、ステップ902の署名者(社長、部長、及び担当者)のメールアドレス設定処理のサブルーチンの一例を説明する。
ステップ1000では、コンピュータ14の表示装置38に署名者(社長、部長、及び担当者)のメールアドレスを入力させる画面を表示する。次のステップ1002では、コンピュータ14に署名者(社長、部長、または担当者)のメールアドレスが入力されたか否かを判断し、入力されていない場合は、コンピュータ14に署名者(社長、部長、または担当者)のメールアドレスが入力されるまで待機し、入力された場合は、ステップ1004へ移行する。
ステップ1004では、他のコンピュータから署名依頼者の署名データD1を受信したか否かを判断する。他のコンピュータから署名依頼者の署名データを受信していない場合は、ステップ1006で上述したように入力されたDN、入力された文書データ、及びコンピュータ14で署名者のメールアドレスをカードリーダ12に送信して本サブルーチンを終了する(コンピュータ14aの処理)。
一方、ステップ1004で他のコンピュータから署名依頼者の署名データが受信された場合は、ステップ1008で上述したように入力されたDN、他のコンピュータ14から受信した署名依頼者の署名データD1、及び署名者のメールアドレスをカードリーダ12に送信して本サブルーチンを終了する(コンピュータ14b及び14cの処理)。
以上のように処理する結果、最初の依頼者が署名を依頼し、署名の依頼を受けた署名者が次々に後段の人物に署名依頼を行い、かつ最後の署名者が署名を行った場合に、途中の署名依頼者(途中の署名者でもある)が後段の署名依頼者の署名を検証して検証結果に基いて署名を行い、最終的に最初の署名依頼者が全ての署名の検証を行うことができる。
なお、第1の実施の形態及び第2の実施の形態では、カードリーダ処理を行うプログラム、署名依頼者の署名データ生成処理を行うプログラム、及び署名者の署名データ生成処理を行うプログラムが、ROM18に、コンピュータ処理を行うプログラム、署名者のメールアドレス設定処理を行うプログラム、及び署名データ検証処理を行うプログラムが、ROM30に予め記憶されている場合について説明したが、本発明はこれに限定されるものではなく、これらのプログラムをCD−ROM、MD、MO、DVD−ROM、フレキシブルディスク、DAT等のコンピュータ読み取り可能な記録媒体に格納した状態で提供する形態を適用してもよい。