(57)【特許請求の範囲】
【請求項１】
デジタル署名を利用するメッセージ送信者が使用する署名生成側コンピュータを、
デジタル署名を利用するメッセージ受信者が使用する署名検証側コンピュータから送られてきた複数のメッセージであってそれぞれに乱数が付加された複数のメッセージを受信する署名生成側受信手段、
前記署名生成側受信手段により受信された複数のメッセージそれぞれのダイジェストを生成する署名生成側ダイジェスト生成手段、
前記署名生成側ダイジェスト生成手段により生成された複数のメッセージそれぞれのダイジェストに対して一括して行う単一の署名を一括署名として生成する一括署名生成手段、
一括署名が生成された複数のメッセージそれぞれに付加する付加情報を生成する付加情報生成手段、
一括署名が生成された複数のメッセージを、それぞれに当該付加情報を付加してから前記署名検証側コンピュータへ送信する送信手段、
として機能させ、
前記付加情報生成手段は、一括署名が生成された複数のメッセージのうち１つの被付加メッセージに対して、当該被付加メッセージ以外の全てのメッセージをそれぞれ識別するメッセージ識別情報に前記署名検証側コンピュータから当該被付加メッセージに付加されて送られてきた乱数を結合させ、その乱数が結合された前記全てのメッセージのメッセージ識別情報を、前記署名検証側コンピュータの公開鍵で暗号化し、その暗号化した前記全てのメッセージのメッセージ識別情報と、当該一括署名と、を含めることによって付加情報を生成し、
前記署名検証側コンピュータを、
乱数を生成する乱数生成手段、
前記乱数生成手段が生成した乱数をそれぞれ付加してから複数のメッセージを前記署名生成側コンピュータへ送信するメッセージ送信手段、
前記署名生成側コンピュータへ送信する各メッセージのメッセージ識別情報に、当該付加された乱数を対応付けして乱数情報記憶手段に登録する登録手段、
前記署名生成側コンピュータから送られてきた、一括署名が生成された複数のメッセージであって、それぞれに付加情報が付加されている複数のメッセージを受信する署名検証側受信手段、
前記署名検証側受信手段が受信した複数のメッセージのうち検証対象のメッセージに付加された付加情報に含まれる一括署名を復号することによってダイジェストを生成する署名復号手段、
前記検証対象のメッセージに付加された付加情報に含まれる暗号化されたメッセージ識別情報及び乱数を、前記署名検証側コンピュータの公開鍵に対応した秘密鍵で復号し、前記検証対象のメッセージのメッセージ識別情報に対応付けされた乱数を前記乱数記憶手段から取り出し、その取り出した乱数に基づいて、復号したメッセージ識別情報から乱数を分離することで、前記署名検証側受信手段が受信した複数のメッセージのうち前記検証対象のメッセージ以外の全てのメッセージそれぞれのメッセージ識別情報を抽出する抽出手段、
前記抽出手段により抽出されたメッセージ識別情報それぞれに対応するメッセージを取得する取得手段、
前記取得手段が取得したメッセージそれぞれから生成したダイジェストと、前記検証対象のメッセージから生成したダイジェストと、を結合する署名検証側ダイジェスト生成手段、
前記署名検証側ダイジェスト生成手段が結合により生成したダイジェストと、前記署名復号手段が生成したダイジェストと、を比較することによって一括署名の検証を行う署名検証手段、
として機能させるデジタル署名プログラム。
【請求項２】
デジタル署名を利用するメッセージ送信者が使用する署名生成側コンピュータと、
デジタル署名を利用するメッセージ受信者が使用する署名検証側コンピュータと、
を有し、
前記署名生成側コンピュータは、
前記署名検証側コンピュータから送られてきた複数のメッセージであってそれぞれに乱数が付加された複数のメッセージを受信する署名生成側受信手段と、
前記署名生成側受信手段により受信された複数のメッセージそれぞれのダイジェストを生成する署名生成側ダイジェスト生成手段と、
前記署名生成側ダイジェスト生成手段により生成された複数のメッセージそれぞれのダイジェストに対して一括して行う単一の署名を一括署名として生成する一括署名生成手段と、
一括署名が生成された複数のメッセージそれぞれに付加する付加情報を生成する付加情報生成手段と、
一括署名が生成された複数のメッセージを、それぞれに当該付加情報を付加してから前記署名検証側コンピュータへ送信する送信手段と、
を有し、
前記付加情報生成手段は、一括署名が生成された複数のメッセージのうち１つの被付加メッセージに対して、当該被付加メッセージ以外の全てのメッセージをそれぞれ識別するメッセージ識別情報に前記署名検証側コンピュータから当該被付加メッセージに付加されて送られてきた乱数を結合させ、その乱数が結合された前記全てのメッセージのメッセージ識別情報を、前記署名検証側コンピュータの公開鍵で暗号化し、その暗号化した前記全てのメッセージのメッセージ識別情報と、当該一括署名と、を含めることによって付加情報を生成し、
前記署名検証側コンピュータは、
乱数を生成する乱数生成手段と、
前記乱数生成手段が生成した乱数をそれぞれ付加してから複数のメッセージを前記署名生成側コンピュータへ送信するメッセージ送信手段と、
前記署名生成側コンピュータへ送信する各メッセージのメッセージ識別情報に、当該付加された乱数を対応付けして乱数情報記憶手段に登録する登録手段と、
前記署名生成側コンピュータから送られてきた、一括署名が生成された複数のメッセージであって、それぞれに付加情報が付加されている複数のメッセージを受信する署名検証側受信手段と、
前記署名検証側受信手段が受信した複数のメッセージのうち検証対象のメッセージに付加された付加情報に含まれる一括署名を復号することによってダイジェストを生成する署名復号手段と、
前記検証対象のメッセージに付加された付加情報に含まれる暗号化されたメッセージ識別情報及び乱数を、前記署名検証側コンピュータの公開鍵に対応した秘密鍵で復号し、前記検証対象のメッセージのメッセージ識別情報に対応付けされた乱数を前記乱数記憶手段から取り出し、その取り出した乱数に基づいて、復号したメッセージ識別情報から乱数を分離することで、前記署名検証側受信手段が受信した複数のメッセージのうち前記検証対象のメッセージ以外の全てのメッセージそれぞれのメッセージ識別情報を抽出する抽出手段と、
前記抽出手段により抽出されたメッセージ識別情報それぞれに対応するメッセージを取得する取得手段と、
前記取得手段が取得したメッセージそれぞれから生成したダイジェストと、前記検証対象のメッセージから生成したダイジェストと、を結合する署名検証側ダイジェスト生成手段と、
前記署名検証側ダイジェスト生成手段が結合により生成したダイジェストと、前記署名復号手段が生成したダイジェストと、を比較することによって一括署名の検証を行う署名検証手段と、
有することを特徴とするデジタル署名システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デジタル署名、特に複数のメッセージに対して一括して署名を行ったときのその署名の取扱いに関する。
【背景技術】
【０００２】
交換されるメッセージが改竄されていないことを確認するための一手法として、デジタル署名が一般に利用されているが、デジタル署名は、通常、次のような手順で行われる。すなわち、メッセージを送信したいユーザは、署名したいメッセージからハッシュ関数を用いてダイジェスト（ハッシュ値）を生成し、そのダイジェストを自分の秘密鍵で暗号化して、これをメッセージに付加して送信する。なお、この送信メッセージに付加する情報を「署名」と呼ぶ。
【０００３】
署名が付加されたメッセージの受信者は、送信者と同じハッシュ関数を用いて受信メッセージからダイジェストを生成し、一方、送信者の秘密鍵に対応した公開鍵で、受信した署名を復号してダイジェストを生成し、それぞれの方法にて生成した各ダイジェストを比較する。この比較した結果、ダイジェストが完全に一致すれば、メッセージが改竄されていないということを検証することができる。
【０００４】
デジタル署名では、以上のように署名を利用してメッセージの完全性（メッセージが改竄されていないことの確認）とメッセージ作成者の認証とを行うことができる。なお、以降の説明では、デジタル署名においてメッセージを受信して署名の検証を行う側でメッセージの完全性とメッセージ作成者の認証を行うことを、「署名の検証」あるいは「メッセージの検証」と称することにする。
【０００５】
デジタル署名を利用すると、交換するメッセージの内容を保証することができるが、デジタル署名では、前述したように署名をメッセージから生成するので、複数のメッセージを交換したいような場合には、メッセージそれぞれに対して署名を生成することになる。従って、送信者は、メッセージの数だけ署名を生成しなければならず面倒であった。
【０００６】
そこで、従来では、複数のメッセージに対して一括して署名を行うことで、個々のメッセージに署名を行う煩わしさを解消するための技術が提案されている（例えば、特許文献１）。この従来技術を利用して、例えば３つのメッセージＡ，Ｂ，Ｃを同時に送信したい場合、送信者は、３つのメッセージＡ，Ｂ，Ｃを一括してダイジェストを生成し、そのダイジェストを暗号化して署名を生成する。そして、送信者は、メッセージＡ，Ｂ，Ｃから生成した署名を、メッセージＡ，Ｂ，Ｃに付加して送信する。
【０００７】
メッセージの受信者は、受信した３つのメッセージＡ，Ｂ，Ｃを一括してダイジェストを生成すると共に、受信した署名を復号してダイジェストを生成し、それぞれの方法にて生成した各ダイジェストを比較する。
【０００８】
従来技術においては、複数のメッセージを送信する場合に複数のメッセージに対して署名を１回ですませることができるので、メッセージの送信者にとってみれば便利である。
【０００９】
【特許文献１】特開２００３−３３８８１５号公報
【特許文献２】特開２００１−２０９３０８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
確かに、従来技術を利用すれば、署名を１回ですませることができるため、メッセージの送信者にとってみれば便利であるかもしれない。しかしながら、従来技術が必ずしも便利であると言えない場合がある。
【００１１】
例えば、メッセージＡのみを検証したい場合でも、メッセージ受信者は、不要なメッセージＢ，Ｃを受信し、かつメッセージＢ，Ｃのダイジェストを生成しなければメッセージＡを検証することができない。つまり、従来技術では、一括して署名された複数のメッセージを、常に一緒に取り扱わなければ各メッセージの検証を行うことができない。従って、受信者にとってみれば、複数のメッセージに対して単一の署名を生成することが、必ずしも便利であるとは言えなかった。
【００１２】
このような場合、送信者がメッセージの送信先毎にメッセージを分類し、その分類したメッセージを一括して署名を生成すれば、受信者における前述した不便を解消させることができるかもしれない。しかし、このようにすると、送信者は、各メッセージの送信先を常に意識しなければ署名を一括して生成することができないし、また、各メッセージの宛先管理が面倒になってくる。換言すると、送信先が異なる複数のメッセージに対しては、単一の共通した署名を生成することはできず、メッセージそれぞれに署名が必要になってくる。すなわち、異なる宛先へのメッセージ送信に対しては、結果として従来技術を利用することができないことになる。
【００１３】
以上のように、従来技術を利用して複数のメッセージに対して単一の署名を生成すると、受信者は、単一の署名が生成されたメッセージを個別に取り扱うことができなくなってしまう。つまり、メッセージの検証を個別に行うことができないという問題があった。
【００１４】
本発明は、以上のような課題を解決するためになされたものであり、その目的は、複数のメッセージを一括して署名を生成した場合でも、メッセージに付加された署名を個別に検証することのできるデジタル署名プログラム、システム及び方法を提供することにある。
【課題を解決するための手段】
【００１７】
本発明に係るデジタル署名プログラムは、デジタル署名を利用するメッセージ送信者が使用する署名生成側コンピュータを、デジタル署名を利用するメッセージ受信者が使用する署名検証側コンピュータから送られてきた複数のメッセージであってそれぞれに乱数が付加された複数のメッセージを受信する署名生成側受信手段、前記署名生成側受信手段により受信された複数のメッセージそれぞれのダイジェストを生成する署名生成側ダイジェスト生成手段、前記署名生成側ダイジェスト生成手段により生成された複数のメッセージそれぞれのダイジェストに対して一括して行う単一の署名を一括署名として生成する一括署名生成手段、一括署名が生成された複数のメッセージそれぞれに付加する付加情報を生成する付加情報生成手段、一括署名が生成された複数のメッセージを、それぞれに当該付加情報を付加してから前記署名検証側コンピュータへ送信する送信手段として機能させ、前記付加情報生成手段は、一括署名が生成された複数のメッセージのうち１つの被付加メッセージに対して、当該被付加メッセージ以外の全てのメッセージをそれぞれ識別するメッセージ識別情報に前記署名検証側コンピュータから当該被付加メッセージに付加されて送られてきた乱数を結合させ、その乱数が結合された前記全てのメッセージのメッセージ識別情報を、前記署名検証側コンピュータの公開鍵で暗号化し、その暗号化した前記全てのメッセージのメッセージ識別情報と、当該一括署名と、を含めることによって付加情報を生成し、前記署名検証側コンピュータを、乱数を生成する乱数生成手段、前記乱数生成手段が生成した乱数をそれぞれ付加してから複数のメッセージを前記署名生成側コンピュータへ送信するメッセージ送信手段、前記署名生成側コンピュータへ送信する各メッセージのメッセージ識別情報に、当該付加された乱数を対応付けして乱数情報記憶手段に登録する登録手段、前記署名生成側コンピュータから送られてきた、一括署名が生成された複数のメッセージであって、それぞれに付加情報が付加されている複数のメッセージを受信する署名検証側受信手段、前記署名検証側受信手段が受信した複数のメッセージのうち検証対象のメッセージに付加された付加情報に含まれる一括署名を復号することによってダイジェストを生成する署名復号手段、前記検証対象のメッセージに付加された付加情報に含まれる暗号化されたメッセージ識別情報及び乱数を、前記署名検証側コンピュータの公開鍵に対応した秘密鍵で復号し、前記検証対象のメッセージのメッセージ識別情報に対応付けされた乱数を前記乱数記憶手段から取り出し、その取り出した乱数に基づいて、復号したメッセージ識別情報から乱数を分離することで、前記署名検証側受信手段が受信した複数のメッセージのうち前記検証対象のメッセージ以外の全てのメッセージそれぞれのメッセージ識別情報を抽出する抽出手段、前記抽出手段により抽出されたメッセージ識別情報それぞれに対応するメッセージを取得する取得手段、前記取得手段が取得したメッセージそれぞれから生成したダイジェストと、前記検証対象のメッセージから生成したダイジェストと、を結合する署名検証側ダイジェスト生成手段、前記署名検証側ダイジェスト生成手段が結合により生成したダイジェストと、前記署名復号手段が生成したダイジェストと、を比較することによって一括署名の検証を行う署名検証手段として機能させるものである。
【００１８】
また、上記デジタル署名プログラムにおける前記付加情報生成手段は、前記他のメッセージのダイジェストを、前記他のメッセージに関する情報として付加情報に含め、前記署名検証側ダイジェスト生成手段は、前記受信手段が受信したメッセージに付加された付加情報に含まれるダイジェストと、前記受信手段が受信したメッセージから生成されたダイジェストとを結合するものである。
【００２４】
本発明に係るデジタル署名システムは、デジタル署名を利用するメッセージ送信者が使用する署名生成側コンピュータと、デジタル署名を利用するメッセージ受信者が使用する署名検証側コンピュータと、を有し、前記署名生成側コンピュータは、前記署名検証側コンピュータから送られてきた複数のメッセージであってそれぞれに乱数が付加された複数のメッセージを受信する署名生成側受信手段と、前記署名生成側受信手段により受信された複数のメッセージそれぞれのダイジェストを生成する署名生成側ダイジェスト生成手段と、前記署名生成側ダイジェスト生成手段により生成された複数のメッセージそれぞれのダイジェストに対して一括して行う単一の署名を一括署名として生成する一括署名生成手段と、一括署名が生成された複数のメッセージそれぞれに付加する付加情報を生成する付加情報生成手段と、一括署名が生成された複数のメッセージを、それぞれに当該付加情報を付加してから前記署名検証側コンピュータへ送信する送信手段と、を有し、前記付加情報生成手段は、一括署名が生成された複数のメッセージのうち１つの被付加メッセージに対して、当該被付加メッセージ以外の全てのメッセージをそれぞれ識別するメッセージ識別情報に前記署名検証側コンピュータから当該被付加メッセージに付加されて送られてきた乱数を結合させ、その乱数が結合された前記全てのメッセージのメッセージ識別情報を、前記署名検証側コンピュータの公開鍵で暗号化し、その暗号化した前記全てのメッセージのメッセージ識別情報と、当該一括署名と、を含めることによって付加情報を生成し、前記署名検証側コンピュータは、乱数を生成する乱数生成手段と、前記乱数生成手段が生成した乱数をそれぞれ付加してから複数のメッセージを前記署名生成側コンピュータへ送信するメッセージ送信手段と、前記署名生成側コンピュータへ送信する各メッセージのメッセージ識別情報に、当該付加された乱数を対応付けして乱数情報記憶手段に登録する登録手段と、前記署名生成側コンピュータから送られてきた、一括署名が生成された複数のメッセージであって、それぞれに付加情報が付加されている複数のメッセージを受信する署名検証側受信手段と、前記署名検証側受信手段が受信した複数のメッセージのうち検証対象のメッセージに付加された付加情報に含まれる一括署名を復号することによってダイジェストを生成する署名復号手段と、前記検証対象のメッセージに付加された付加情報に含まれる暗号化されたメッセージ識別情報及び乱数を、前記署名検証側コンピュータの公開鍵に対応した秘密鍵で復号し、前記検証対象のメッセージのメッセージ識別情報に対応付けされた乱数を前記乱数記憶手段から取り出し、その取り出した乱数に基づいて、復号したメッセージ識別情報から乱数を分離することで、前記署名検証側受信手段が受信した複数のメッセージのうち前記検証対象のメッセージ以外の全てのメッセージそれぞれのメッセージ識別情報を抽出する抽出手段と、前記抽出手段により抽出されたメッセージ識別情報それぞれに対応するメッセージを取得する取得手段と、前記取得手段が取得したメッセージそれぞれから生成したダイジェストと、前記検証対象のメッセージから生成したダイジェストと、を結合する署名検証側ダイジェスト生成手段と、前記署名検証側ダイジェスト生成手段が結合により生成したダイジェストと、前記署名復号手段が生成したダイジェストと、を比較することによって一括署名の検証を行う署名検証手段と、有することを特徴とする。
【発明の効果】
【００２７】
本発明によれば、署名生成側コンピュータにおいて複数のメッセージに対して一括して署名を生成する場合には、署名検証に必要な他のメッセージに関する情報を含む付加情報をメッセージに付加するようにしたので、署名検証側コンピュータでは、他のメッセージを用いることなく当該メッセージに付加された署名を個別に検証することができる。
【発明を実施するための最良の形態】
【００２８】
以下、図面に基づいて、本発明の好適な実施の形態について説明する。
【００２９】
実施の形態１．
図１は、本発明に係るデジタル署名システムの一実施の形態を示した全体構成図である。図１には、複数台のクライアント１とサーバ４とが公衆網６に接続された構成が示されている。本実施の形態では、簡易検証と通常検証という２種類の署名検証方法を提供するが、サーバ４は、コンテンツに付加された署名を検証する署名検証側コンピュータに相当する。一方、クライアント１は、コンテンツに付加する署名を生成する署名生成側コンピュータに相当するが、簡易検証の場合には、署名生成側コンピュータからの要求に応じてコンテンツに付加された一括署名を検証する署名検証側コンピュータにもなりうる。
【００３０】
図２は、本実施の形態におけるデジタル署名システムのブロック構成図である。図２には、署名生成側コンピュータとして動作するクライアント１と、署名検証側コンピュータとして動作するサーバ４とが、それぞれ示されている。
【００３１】
クライアント１は、コンテンツ取得部１２、ダイジェスト生成部１４、コンテンツ情報生成部１６、コンテンツ情報送信部１８、検証結果取得部２０及び表示部２２を有している。コンテンツ取得部１２は、交換対象のメッセージに相当するコンテンツをサーバ４から取得する。ダイジェスト生成部１４は、ハッシュ関数を用いてコンテンツからダイジェストを生成する。複数のコンテンツが取得された場合、ダイジェスト生成部１４は、コンテンツ毎にダイジェストを生成する。コンテンツ情報生成部１６は、サーバ４における署名検証に必要な付加情報を生成してコンテンツに付加することでサーバ４へ送信するコンテンツ情報を形成する。コンテンツ情報生成部１６に含まれる署名生成部２４は、ダイジェストを自分の秘密鍵で暗号化することで署名を生成するが、本実施の形態における署名生成部２４は、複数のダイジェストを一括して単一の署名を生成する。本実施の形態では、ダイジェスト個々に生成する通常の署名とは異なり、複数のダイジェストを結合し、この結合したダイジェストに対して前述した単一の署名を生成する。この複数のダイジェストに対して生成する単一の署名を、本実施の形態では「一括署名」と称することにする。また、コンテンツ情報生成部１６に含まれる他コンテンツ情報生成部２６は、一括署名を付加する各コンテンツに対して、当該コンテンツと共に一括署名が生成された他のコンテンツに関する情報を生成する。コンテンツ情報送信部１８は、付加情報が付加されたコンテンツをサーバ４へ送信する。検証結果取得部２０は、サーバ４における署名検証の結果をサーバ４から取得する。表示部２２は、検証結果取得部２０が取得した検証結果を表示する。クライアント１が有する各構成要素１２〜２２の処理機能は、当該処理機能を発揮するデジタル署名プログラムと、クライアント１を構成するハードウェアとの協調動作により実現される。
【００３２】
一方、サーバ４は、コンテンツ配信部４４、コンテンツ情報受信部４６、ダイジェスト生成部４８、署名復号部５０、署名検証部５２、検証結果通知部５４及びコンテンツ読出部５６を有している。コンテンツ配信部４４は、コンテンツデータベース４２に格納されているコンテンツを配信要求元のクライアント１へダウンロードする。コンテンツ情報受信部４６は、クライアント１から送られてくるコンテンツを受信する。このコンテンツには、付加情報が付加されている。ダイジェスト生成部４８は、ハッシュ関数を用いてコンテンツからダイジェストを生成する。ダイジェスト生成部４８が使用するハッシュ関数は、各クライアント１におけるダイジェスト生成部１４が使用するハッシュ関数と同一である。署名復号部５０は、受信したコンテンツの付加情報に含まれる一括署名を復号することによってダイジェストを生成する。署名検証部５２は、受信したコンテンツに付加された署名の検証を行う手段であるが、本実施の形態における署名検証部５２は、詳細は後述するように一括署名に関しては、複数のコンテンツのダイジェストを結合して形成した結合ダイジェストと、署名復号部５０が生成したダイジェストとを比較することによって署名検証を行う。検証結果通知部５４は、署名検証部５２における検証結果をコンテンツ送信元のクライアント１へ通知する。コンテンツ読出部５６は、指定されたコンテンツＩＤをキーにして当該コンテンツをコンテンツデータベース４２から読み出す。サーバ４が有する各構成要素４４〜５６の処理機能は、当該処理機能を発揮するデジタル署名プログラムと、サーバ４を構成するハードウェアとの協調動作により実現される。
【００３３】
次に、本実施の形態における動作について説明するが、その前に動作の説明に用いる各種記号、変数等について定義する。
【００３４】
まず、署名が付加されるメッセージデータとして用いるコンテンツをＣｘ（ｘ＝１，２，・・・Ｎ）と定義する。また、各コンテンツＣｘの署名対象領域をＳｘ、署名情報領域をＥｘとする。署名対象領域というのは、コンテンツを構成するデータのうちダイジェストの生成に用いるデータを含む領域である。署名情報領域というのは、ダイジェストに付加する署名に関する情報の格納領域であり、本実施の形態では、一括署名を含む付加情報を格納する領域に相当する。クライアント１は、コンテンツＣｘ毎に、ダイジェストの生成に用いるデータを含む署名対象領域Ｓｘと、署名検証のために必要な情報を含む署名情報領域Ｅｘとを組にしてサーバ４へ送信することになる。また、ハッシュ関数をｆ、各コンテンツを識別する情報として用いるコンテンツＩＤをＩＤｘ、署名関数をＥｎｃ（ｓｉｇｎｋｅｙ，ｄａｔａ）、検証関数をＤｅｃ（ｖｅｒｉｆｙｋｅｙ，ｄａｔａ）、サーバ公開鍵をＥｓ、サーバ秘密鍵をＤｓ、クライアント公開鍵をＥｃ、クライアント秘密鍵をＤｃと定義する。なお、署名関数及び検証関数に指定するｓｉｇｎｋｅｙ、ｖｅｒｉｆｙｋｅｙには暗号化／復号に用いる鍵が、ｄａｔａには暗号化／復号されるデータが、それぞれ設定される。
【００３５】
以上のように定義したデータや関数を用いて、本実施の形態におけるデジタル署名について図３乃至図５を用いて説明する。本実施の形態では、前述したように簡易検証と通常検証という２種類のデジタル署名方法を提供するが、最初に簡易検証について署名生成側処理を示した図３と、署名検証側処理を示した図４を用いて説明する。
【００３６】
クライアント１のコンテンツ取得部１２は、コンテンツのダウンロード要求をサーバ４へ発すると、サーバ４のコンテンツ配信部４４は、クライアント１からの要求に応じて署名対象のＮ個のコンテンツＣｘ（ｘ＝１〜Ｎ）を当該クライアント１へ送信する（ステップ２０１）。コンテンツ取得部１２は、このようにしてＮ個のコンテンツＣｘを取得する（ステップ１０１）。なお、取得した各コンテンツＣｘ（ｘ＝１〜Ｎ）のＩＤは、それぞれＩＤｘ（ｘ＝１〜Ｎ）とする。ダイジェスト生成部１４は、取得された各コンテンツＩＤｘの署名対象領域Ｓｘに含まれるデータからハッシュ関数ｆを用いてＮ個のダイジェストｆ（Ｓｘ）を生成する（ステップ１０２）。続いて、署名生成部２４は、自己の秘密鍵Ｄｃを用いて各ダイジェストに対して一括して署名を行う（ステップ１０３）。この一括署名をＳｉｇＶａｌｕｅとすると、以下のように表すことができる。
【数１】
0004788212.tif 000002
【００３７】
他コンテンツ情報生成部２６は、以上の処理にて得られた結果から、各コンテンツＣｘに付加する付加情報に含める以下の情報を生成する（ステップ１０４）。例えば、ＩＤ１のコンテンツＣ１に対しては、Ｃ１以外の他のコンテンツに関する情報として、Ｃ１と共に一括署名が生成された他のコンテンツの識別情報｛ＩＤ２，ＩＤ３，ＩＤ４，・・・，ＩＤＮ｝と、当該他のコンテンツのダイジェスト｛ｆ（Ｓ２），ｆ（Ｓ３），ｆ（Ｓ４），・・・，ｆ（ＳＮ）｝とを生成する。このように当該コンテンツＣ１以外のコンテンツのＩＤとダイジェストを集約する。同様に、ＩＤ２のコンテンツＣ２に対しては、Ｃ２と共に一括署名が生成された他のコンテンツの識別情報｛ＩＤ１，ＩＤ３，ＩＤ４，・・・，ＩＤＮ｝と、当該他のコンテンツのダイジェスト｛ｆ（Ｓ１），ｆ（Ｓ３），ｆ（Ｓ４），・・・，ｆ（ＳＮ）｝とを生成する。
【００３８】
ここで、付加情報が付加される対象のコンテンツを「被付加コンテンツ」と称することにすると、他コンテンツ情報生成部２６は、以上説明したように各被付加コンテンツに対して、当該被付加コンテンツ以外の他のコンテンツに関する情報を生成する。この他コンテンツ情報生成部２６が生成した他のコンテンツに関する情報は、署名検証側のコンピュータにおける署名検証の際に用いられることになる。
【００３９】
コンテンツ情報生成部１６は、署名生成部２４で生成した署名ＳｉｇＶａｌｕｅと、他コンテンツ情報生成部２６が生成した他のコンテンツに関する情報とを含む付加情報を生成し、各コンテンツＣｘの署名情報領域Ｅｘに書き込む。例えば、コンテンツＣ１の付加情報は、（｛ＩＤ２，ＩＤ３，ＩＤ４，・・・，ＩＤＮ｝，｛ｆ（Ｓ２），ｆ（Ｓ３），ｆ（Ｓ４），・・・，ｆ（ＳＮ）｝，ＳｉｇＶａｌｕｅ）、すなわち、他のコンテンツのコンテンツＩＤ、他のコンテンツのダイジェスト及び一括署名で構成される。なお、本実施の形態における署名ＳｉｇＶａｌｕｅは、全てのコンテンツＣｘで同値である。そして、コンテンツ情報生成部１６は、コンテンツの署名対象データを署名対象領域Ｓｘに書き込む。
【００４０】
コンテンツ情報送信部１８は、以上のように付加情報が付加されたコンテンツをサーバ４へ送信する（ステップ１０５）。つまり、クライアント１は、同一の一括署名を含むものの、それぞれに内容の異なる付加情報が付加されたＮ個のコンテンツＣｘ（ｘ＝１〜Ｎ）をサーバ４へ送信する。
【００４１】
署名検証側であるサーバ４において、コンテンツ情報受信部４６は、クライアント１が発信したＮ個のコンテンツＣｘ（ｘ＝１〜Ｎ）を受信すると（ステップ２０２）、各コンテンツにつき以下の処理を行う。なお、以下で説明する処理は、全てのコンテンツＣｘに対して同じなので、ここでは、ＩＤ１のコンテンツＣ１を代表させて説明する。
【００４２】
まず、署名復号部５０は、受信したコンテンツＣ１の付加情報に含まれている一括署名を、コンテンツ送信元のクライアント１の公開鍵を用いて復号することでダイジェストを生成する（ステップ２０３）。このダイジェストの生成は、検証関数を用いるので、Ｄｅｃ（Ｅｃ，ＳｉｇＶａｌｕｅ）と表すことができる。
【００４３】
一方、ダイジェスト生成部４８は、クライアント１から送られてきたコンテンツＣ１からダイジェストを生成する（ステップ２０４）。このダイジェストの生成についてより厳密に言うと、ダイジェスト生成部４８は、ハッシュ関数ｆを用いてコンテンツＣ１の署名対象領域Ｓ１に含まれているデータからダイジェストｆ（Ｓ１）を生成する。ここで、コンテンツＣ１以外のコンテンツＣｘ（ｘ＝２〜Ｎ）のダイジェストｆ（Ｓｘ）（ｘ＝２〜Ｎ）は、コンテンツＣ１の付加情報に含まれているので、ダイジェスト生成部４８は、ｆ（Ｓ１）とｆ（Ｓｘ）（ｘ＝２〜Ｎ）、すなわち一括署名ＳｉｇＶａｌｕｅを生成した全てのコンテンツＣｘ（ｘ＝１〜Ｎ）のダイジェストを結合して結合ダイジェストＦを生成する（ステップ２０５）。この結合ダイジェストＦは、以下のように表すことができる。
【数２】
0004788212.tif 000003
【００４４】
以上のようにして比較対象のダイジェストが生成されると、署名検証部５２は、２つのダイジェスト、すなわち、署名復号部５０による復号処理で得られたダイジェストＤｅｃ（Ｅｃ，ＳｉｇＶａｌｕｅ）と、ダイジェスト生成部４８が生成した結合ダイジェストＦとを比較することで、コンテンツＣ１に付加された一括署名の検証を行う（ステップ２０６）。
【００４５】
上記説明では、ＩＤ１のコンテンツＣ１を代表させたが、他のコンテンツＣｘ（ｘ＝２〜Ｎ）でも同様で、例えばＩＤ２のコンテンツＣ２であれば、署名復号部５０は、受信したコンテンツＣ２の付加情報に含まれている一括署名ＳｉｇＶａｌｕｅを、クライアント１の公開鍵Ｅｃを用いて復号してダイジェストＤｅｃ（Ｅｃ，ＳｉｇＶａｌｕｅ）を生成する。その一方で、ダイジェスト生成部４８は、送られてきたコンテンツＣ２からダイジェストｆ（Ｓ２）を生成し、このｆ（Ｓ２）をコンテンツＣ２の付加情報に含まれている他のコンテンツのダイジェストｆ（Ｓ１）及びｆ（Ｓｘ）（ｘ＝３〜Ｎ）と結合して結合ダイジェストＦを生成する。このようにして求めた各ダイジェストを比較することでコンテンツＣ２に付加された一括署名の検証を行う。
【００４６】
なお、フローチャートでは、署名復号部５０が一括署名を復号してダイジェストを生成する処理を、ダイジェスト生成部４８が結合ダイジェストを生成する処理より先に行うように説明したが、この処理の順番は逆でもよいし、同時並行して行うようにしてもよい。
【００４７】
検証結果通知部５４は、以上のようにして全てのコンテンツＣｘ（ｘ＝１〜Ｎ）に対して行われた検証結果を署名生成元のクライアント１へ通知する（ステップ２０７）。
【００４８】
クライアント１における検証結果取得部２０がサーバ４から通知されてきた検証結果を取得すると（ステップ１０６）、表示部２２は、クライアント１のディスプレイに表示することで（ステップ１０７）、ユーザに検証結果を知らせる。
【００４９】
本実施の形態における簡易検証は、以上のようにして行うが、本実施の形態においては、コンテンツ個々の署名検証の際に必要な他のコンテンツのダイジェストを、当該コンテンツの付加情報に含めるようにした。つまり、一括署名の生成の際に用いた他のコンテンツのダイジェスト、例えば、コンテンツＣ１の一括署名の検証の場合であれば、コンテンツＣｘ（ｘ＝２〜Ｎ）のダイジェストｆ（Ｓｘ）（ｘ＝２〜Ｎ）をコンテンツＣ１の付加情報に含めるようにしたので、署名検証を行うサーバ４は、他のコンテンツＣｘ（ｘ＝２〜Ｎ）からダイジェストを生成する必要がない。すなわち、サーバ４は、コンテンツＣ１に付加された一括署名の検証を、他のコンテンツＣｘ（ｘ＝２〜Ｎ）がなくても個別に行うことができる。
【００５０】
続いて、通常検証について説明するが、署名生成側における処理は、簡易検証と同じなので説明を省略する。ここでは、サーバ４における署名検証側処理について図５に示したフローチャートを用いて説明する。なお、簡易検証と同じ処理には同じステップ番号を付け、説明を適宜省略又は簡略する。
【００５１】
署名検証側であるサーバ４において、コンテンツ情報受信部４６は、クライアント１が発信したＮ個のコンテンツＣｘ（ｘ＝１〜Ｎ）を受信する（ステップ２０２）。通常検証でも簡易検証と同様に、サーバ４では、各コンテンツに対して同じ処理を行うので、ここでもＩＤ１のコンテンツＣ１を代表させて説明する。
【００５２】
まず、署名復号部５０は、受信したコンテンツＣ１の付加情報に含まれている一括署名を、コンテンツ送信元のクライアント１の公開鍵を用いて復号することでダイジェストＤｅｃ（Ｅｃ，ＳｉｇＶａｌｕｅ）を生成する（ステップ２０３）。
【００５３】
一方、ダイジェスト生成部４８は、クライアント１から送られてきたコンテンツＣ１からダイジェストｆ（Ｓ１）を生成する（ステップ２０４）。続いて、ダイジェスト生成部４８は、コンテンツＣ１の付加情報に含まれている他のコンテンツの識別情報｛ＩＤ２，ＩＤ３，ＩＤ４，・・・，ＩＤＮ｝を取り出す。そして、ダイジェスト生成部４８は、コンテンツ読出部５６に取り出したコンテンツＩＤを渡すと、コンテンツ読出部５６は、そのコンテンツＩＤをキーにして当該コンテンツをコンテンツデータベース４２から読み出す（ステップ２１１）。なお、サーバ４がコンテンツデータベース４２を保有していなければ、コンテンツ読出部５６は、ネットワーク経由で外部から取得してくることになる。これにより、ダイジェスト生成部４８は、ハッシュ関数ｆを用いてクライアント１から送られてきたコンテンツＣ１からダイジェストｆ（Ｓ１）を生成すると共に、コンテンツデータベース４２から読み出したその他のコンテンツＣｘ（ｘ＝２〜Ｎ）からダイジェストｆ（Ｓｘ）（ｘ＝２〜Ｎ）を生成する（ステップ２１２）。このようにして、一括署名を生成した全てのコンテンツのダイジェストを取得することができるので、これらのダイジェストを結合して結合ダイジェストＦを生成する（ステップ２１３）。この結合ダイジェストは、簡易検証と同じ内容になる。
【００５４】
以上のようにして比較対象のダイジェストが生成されると、署名検証部５２は、２つのダイジェスト、すなわち、署名復号部５０による復号処理で得られたダイジェストＤｅｃ（Ｅｃ，ＳｉｇＶａｌｕｅ）と、ダイジェスト生成部４８が生成した結合ダイジェストＦとを比較することで、コンテンツＣ１に付加された一括署名の検証を行う（ステップ２０６）。なお、検証結果の通知、表示の処理に関しては、簡易検証と同じなので省略する。
【００５５】
本実施の形態における通常検証は、以上のようにして行うが、通常検証も簡易検証と同様に複数のコンテンツから一括署名を生成した場合でもコンテンツに付加された一括署名の検証を、コンテンツ毎に行うことができる。
【００５６】
本実施の形態においては、付加情報に含まれる一括署名を復号して生成したダイジェストと比較するダイジェストを、複数のコンテンツのダイジェストを結合して生成するようにしたが、簡易検証と通常検証とでは、検証対象の一括署名が付加されたコンテンツ（前述した被付加コンテンツ）以外のコンテンツのダイジェストの取得方法が異なっている。すなわち、簡易検証では、被付加コンテンツ以外の他のコンテンツのダイジェストを、被付加コンテンツの付加情報から取得するのに対し、通常検証では、当該被付加コンテンツの付加情報から取得した他のコンテンツのＩＤをキーにしてコンテンツを取得し、そして他のコンテンツのダイジェストを自ら生成する。この他のコンテンツのダイジェストの取得方法の違いにより、各検証方法は、以下のような特徴を有していることになる。
【００５７】
まず、通常検証の場合、コンテンツそのものが必要になってくるので、コンテンツそのものを保持管理するサーバ４にとっては、外部からコンテンツを取得することなく通常検証を実施することができる。つまり、通常検証の場合は、付加情報にコンテンツＩＤを含めておけばよいので、ダイジェストそのものが改竄される可能性がない。これにより、デジタル署名の確度を向上させることができる。
【００５８】
これに対し、簡易検証は、コンテンツのダイジェストを直接受け取るため、コンテンツそのものを必要としない。従って、サーバ４のみならずコンテンツそのものを保持管理しないクライアント１においても、簡易検証であれば署名の検証を行うことができる。つまり、クライアント１が簡易検証を行う場合、そのクライアント１に、図２に示したサーバ４からコンテンツ配信部４４、コンテンツ読出部５６及びコンテンツデータベース４２を除いた構成を持たせることで、クライアント１にも署名検証側のコンピュータとして動作させることができる。
【００５９】
なお、コンテンツの付加情報には、他のコンテンツに関する情報として、他のコンテンツのＩＤと他のコンテンツのダイジェストとが含まれている。簡易検証と通常検証の各処理の説明から明らかなように、他のコンテンツに関する情報として、簡易検証では他のコンテンツのダイジェストを、通常検証では他のコンテンツのＩＤをそれぞれ使用し、他方の情報は使用していない。従って、クライアント１は、簡易検証を実施することが明らかであるならば、付加情報に他のコンテンツのＩＤを含める必要はない。一方、通常検証を実施することが明らかであるならば、付加情報に他のコンテンツのダイジェストを含める必要はない。ただ、本実施の形態では、署名検証側コンピュータが、自己の構成等によっていずれの検証方法を適宜使用できるように、他のコンテンツに関する情報として他のコンテンツのＩＤとダイジェストとの双方の情報を含めるようにした。
【００６０】
次に、前述した一括署名の検証処理について具体例を用いて説明する。なお、処理の内容は、上記と同じなので適宜簡略化して説明する。ここでは、一括署名を生成するコンテンツＩＤがそれぞれＩＤ１，ＩＤ２，ＩＤ３である３つのコンテンツＣ１，Ｃ２，Ｃ３を取り扱う場合を例にして説明する。また、各コンテンツＣ１〜Ｃ３の署名対象領域をＳ１，Ｓ２，Ｓ３、署名情報領域をＥ１，Ｅ２，Ｅ３とする。まず、簡易検証から説明するが、最初に説明する署名生成側のクライアント１における処理内容は、簡易検証と通常検証とで同じである。
【００６１】
クライアント１において、上記３つのコンテンツをサーバ４からダウンロードすることで取得すると（ステップ１０１）、ハッシュ関数ｆを用いてダイジェストｆ（Ｓ１），ｆ（Ｓ２），ｆ（Ｓ３）をそれぞれ生成し（ステップ１０２）、そしてこれらを一括して自分の秘密鍵で暗号化することで署名を行う（ステップ１０３）。この一括署名ＳｉｇＶａｌｕｅは、Ｅｎｃ（Ｄｃ，ｆ（Ｓ１）＋ｆ（Ｓ２）＋ｆ（Ｓ３））と表現できる。そして、各コンテンツに付加する付加情報を生成するが、各付加情報は、次のようになる。
Ｅ１＝（｛ＩＤ２，ＩＤ３｝），｛ｆ（Ｓ２），ｆ（Ｓ３）｝，ＳｉｇＶａｌｕｅ）
Ｅ２＝（｛ＩＤ３，ＩＤ１｝），｛ｆ（Ｓ３），ｆ（Ｓ１）｝，ＳｉｇＶａｌｕｅ）
Ｅ３＝（｛ＩＤ１，ＩＤ２｝），｛ｆ（Ｓ１），ｆ（Ｓ２）｝，ＳｉｇＶａｌｕｅ）
【００６２】
このようにして生成された付加情報は、対応する各コンテンツに付加されて（ステップ１０４）、署名検証側のサーバ４へ送信される（ステップ１０５）。サーバ４へ送られるコンテンツ情報の概念図を図６に示す。なお、簡易検証の場合の署名検証側コンピュータとして、ここではサーバ４を例にしているが、クライアント１でもよいことは前述したとおりである。
【００６３】
サーバ４は、クライアント１が発したコンテンツ情報を受信すると（ステップ２０２）、コンテンツ個々に一括署名の検証を行う。まず、ＩＤ１のコンテンツＣ１に着目して説明すると、サーバ４は、コンテンツＣ１の付加情報に含まれている一括署名ＳｉｇＶａｌｕｅを、クライアント１の公開鍵を用いて復号することでダイジェストＤｅｃ（Ｅｃ，ＳｉｇＶａｌｕｅ）を生成する（ステップ２０３）。一方、ダイジェスト生成部４８は、受信したコンテンツＣ１からハッシュ関数ｆを用いてダイジェストｆ（Ｓ１）を生成し（ステップ２０４）、また、付加情報から他のコンテンツのダイジェストｆ（Ｓ２），ｆ（Ｓ３）を取り出す。そして、これらのダイジェストを結合して結合ダイジェストＦ＝ｆ（Ｓ１）＋ｆ（Ｓ２）＋ｆ（Ｓ３）を生成する（ステップ２０５）。その後、署名検証部５２は、一括署名を復号して得られたダイジェストＤｅｃ（Ｅｃ，ＳｉｇＶａｌｕｅ）と、ダイジェスト生成部４８が結合したダイジェストＦとを比較することで、コンテンツＣ１に付加された一括署名の検証を行う（ステップ２０６）。コンテンツＣ２及びＣ３に対しても同様に処理することで各コンテンツＣ１〜Ｃ３に付加された一括署名の検証を個別に行うことができる。
【００６４】
このように、簡易検証の場合には、他のコンテンツのダイジェストを付加情報に含めるようにしたので、他のコンテンツを必要とすることなく署名の検証を行うことができる。
【００６５】
次に、通常検証の場合について説明するが、署名生成側における処理は、簡易検証と同じなので説明を省略し、署名検証側の処理について説明する。
【００６６】
サーバ４は、クライアント１が発したコンテンツ情報を受信すると（ステップ２０２）、コンテンツ個々に一括署名の検証を行う。まず、コンテンツＣ１に着目して説明すると、署名復号部５０は、コンテンツＣ１の付加情報に含まれている一括署名ＳｉｇＶａｌｕｅを、クライアント１の公開鍵を用いて復号することでダイジェストＤｅｃ（Ｅｃ，ＳｉｇＶａｌｕｅ）を生成する（ステップ２０３）。一方、ダイジェスト生成部４８は、コンテンツＣ１の付加情報から他のコンテンツのＩＤ、すなわちＩＤ２，ＩＤ３を取り出し、該当するコンテンツＣ２，Ｃ３をコンテンツデータベース４２から取り出す（ステップ２１１）。そして、ダイジェスト生成部４８は、ハッシュ関数ｆを用いてコンテンツＣ１のダイジェストｆ（Ｓ１）を生成し、更に各コンテンツＣ２，Ｃ３の既知である署名対象領域Ｓ２，Ｓ３からダイジェストｆ（Ｓ２），ｆ（Ｓ３）を生成し（ステップ２１２）、これらを結合して結合ダイジェストＦ＝ｆ（Ｓ１）＋ｆ（Ｓ２）＋ｆ（Ｓ３）を生成する（ステップ２１３）。そして、署名検証部５２は、一括署名を復号して得られたダイジェストＤｅｃ（Ｅｃ，ＳｉｇＶａｌｕｅ）と、ダイジェスト生成部４８が結合したダイジェストＦとを比較することで、コンテンツＣ１に付加された一括署名の検証を行う（ステップ２０６）。
【００６７】
このように、通常検証の場合、サーバ４は、内部保有するコンテンツデータベース４２から他のコンテンツのＩＤをキーにコンテンツを取得し、そして他のコンテンツのダイジェストを自ら生成してダイジェストの比較を行えるようにした。このように、付加情報に含まれているダイジェストを用いないので、デジタル署名の確度を向上させることができる。なお、本実施の形態では、コンテンツＣ２及びＣ３に対しても同様に処理することで各コンテンツＣ１〜Ｃ３に付加された一括署名の検証を個別に行うことができる。
【００６８】
本実施の形態によれば、以上説明したように、複数のコンテンツを一括して署名を行った場合でも署名検証側において各コンテンツに付加された一括署名の検証を個々に行うことができる。これにより、署名生成側では、コンテンツ個々に署名を行う必要がないので、コンテンツ毎に署名を行う煩わしさから解消される。一方、署名検証側では、一括署名検証の対象とするコンテンツ以外のコンテンツが送られてこなくても、一括署名の検証を行うことができる。つまり、簡易検証の場合は、付加情報に含まれる他のコンテンツのダイジェストから、通常検証の場合は、付加情報に含まれる他のコンテンツのＩＤから、それぞれ一括して署名された各コンテンツのダイジェストを取得することができるので、一括署名を復号して得られたダイジェストと比較を行うダイジェストを署名検証側で生成することができる。従って、以上の説明では、署名生成側のクライアント１は、一括署名を生成した組を形成するコンテンツＣｘ（ｘ＝１〜Ｎ）を全てサーバ４へ送信するようにしたが、全てを組にして送信する必要はない。
【００６９】
より具体的な例をあげるとすると、クライアントＣＬ０が３つのコンテンツＣ１〜Ｃ３から一括署名を生成した後、コンテンツＣ１をクライアントＣＬ１に、コンテンツＣ２をクライアントＣＬ２に、コンテンツＣＬ３をサーバＳ１に、それぞれ送信したとする。このとき、クライアントＣＬ１は、簡易検証によりコンテンツＣ１に付加された一括署名の検証を行うことができる。クライアントＣＬ２は、簡易検証によりコンテンツＣ２に付加された一括署名の検証を行うことができる。そして、サーバＳ１は、通常検証によりコンテンツＣ３に付加された一括署名の検証を行うことができる。このように、署名検証側のクライアントＣＬ１，ＣＬ２及びサーバＳ１は、一括署名の検証対象とするコンテンツのみを取得さえすれば、一括署名の検証を行うことができる。そして、署名生成側のクライアントＣＬ０は、コンテンツの送信先を意識することなく一括署名を行うことができる。
【００７０】
実施の形態２．
本実施の形態における署名生成側処理のフローチャートを図７に、通常検証の場合の署名検証側処理のフローチャートを図８に、それぞれ示す。図７及び図８は、実施の形態１における図３及び図５に対応する図であるが、この図３，図５に示したフローチャートと比較すれば明らかなように、本実施の形態におけるクライアント１は、付加情報に含める他のコンテンツＩＤを暗号化してからサーバ４へ送ることを特徴としている。
【００７１】
以下、本実施の形態におけるデジタル署名処理について説明する。ここでは、実施の形態１と同様に、一括署名を生成するコンテンツＩＤがそれぞれＩＤ１，ＩＤ２，ＩＤ３である３つのコンテンツＣ１，Ｃ２，Ｃ３を取り扱う場合を例にして説明する。また、各コンテンツＣ１〜Ｃ３の署名対象領域をＳ１，Ｓ２，Ｓ３、署名情報領域をE１，Ｅ２，Ｅ３とする。なお、図７，８において、図３，５と同じ処理ステップには同じ符号を付け説明を適宜省略する。また、他のコンテンツに関する情報としてコンテンツＩＤを使用しない簡易検証については、実施の形態１と同じ処理になるので説明を省略する。また、本実施の形態におけるシステム構成も実施の形態１と同じなので説明を省略する。
【００７２】
クライアント１において、上記３つのコンテンツをサーバ４からダウンロードすることで取得すると（ステップ１０１）、ダイジェスト生成部１４は、ハッシュ関数ｆを用いてダイジェストｆ（Ｓ１），ｆ（Ｓ２），ｆ（Ｓ３）をそれぞれ生成し（ステップ１０２）、そして署名生成部２４は、これらを一括して自分の秘密鍵で暗号化することで署名を行い、一括署名ＳｉｇＶａｌｕｅを生成する（ステップ１０３）。ここまでの処理は、実施の形態１と同じである。その後、本実施の形態における他コンテンツ情報生成部２６は、他のコンテンツのＩＤを、署名検証を行うサーバ４の公開鍵Ｅｓで暗号化した後に各コンテンツＣ１〜Ｃ３の付加情報にそれぞれ含める（ステップ１１１）。このようにして生成された各付加情報は、次のようになる。
Ｅ１＝（Ｅｎｃ（Ｅｓ，ＩＤ２＋ＩＤ３），｛ｆ（Ｓ２），ｆ（Ｓ３）｝，ＳｉｇＶａｌｕｅ）
Ｅ２＝（Ｅｎｃ（Ｅｓ，ＩＤ３＋ＩＤ１），｛ｆ（Ｓ３），ｆ（Ｓ１）｝，ＳｉｇＶａｌｕｅ）
Ｅ３＝（Ｅｎｃ（Ｅｓ，ＩＤ１＋ＩＤ２），｛ｆ（Ｓ１），ｆ（Ｓ２）｝，ＳｉｇＶａｌｕｅ）
【００７３】
このようにして生成された付加情報は、対応する各コンテンツに付加されて（ステップ１０４）、署名検証側のサーバ４へ送信される（ステップ１０５）。
【００７４】
サーバ４は、クライアント１が発したコンテンツ情報を受信すると（ステップ２０２）、コンテンツ個々に一括署名の検証を行う。まず、コンテンツＣ１に着目して説明すると、署名復号部５０は、コンテンツＣ１の付加情報に含まれている一括署名ＳｉｇＶａｌｕｅを、クライアント１の公開鍵を用いて復号することでダイジェストＤｅｃ（Ｅｃ，ＳｉｇＶａｌｕｅ）を生成する（ステップ２０３）。一方、ダイジェスト生成部４８は、コンテンツＣ１の付加情報から他のコンテンツのＩＤ、すなわちＩＤ２，ＩＤ３を取り出すが、本実施の形態においては、他のコンテンツＩＤは、自己の公開鍵で暗号化されているので、ダイジェスト生成部４８は、この公開鍵に対応した自己の秘密鍵で復号することでコンテンツＩＤを抽出する（ステップ２２１）。この抽出したコンテンツＩＤを次のように表すことができる。
ＩＤｘ＝Ｄｅｃ（Ｄｓ，Ｅｎｃ（Ｅｓ，ＩＤ２＋ＩＤ３））  （ｘ＝２，３）
【００７５】
このように、復号により他のコンテンツのＩＤを取得した後の処理は、実施の形態１と同じである。すなわち、ダイジェスト生成部４８は、コンテンツ読出部５６に指示をすることでコンテンツＣ２，Ｃ３を取り出し（ステップ２１１）、ハッシュ関数ｆを用いて各コンテンツＣ１のダイジェストｆ（Ｓ１），ｆ（Ｓ２），ｆ（Ｓ３）を生成し（ステップ２１２）、これらを結合して結合ダイジェストＦ＝ｆ（Ｓ１）＋ｆ（Ｓ２）＋ｆ（Ｓ３）を生成する（ステップ２１３）。そして、署名検証部５２は、一括署名を復号して得られたダイジェストＤｅｃ（Ｅｃ，ＳｉｇＶａｌｕｅ）と、ダイジェスト生成部４８が結合したダイジェストＦとを比較することで、コンテンツＣ１に付加された一括署名の検証を行う（ステップ２０６）。なお、コンテンツＣ２及びＣ３に対しても同様に処理することでコンテンツＣ２，Ｃ３に付加された一括署名の検証を個別に行うことができる。
【００７６】
本実施の形態によれば、コンテンツＩＤを暗号化してからクライアント１からサーバ４へ送るようにしたので、コンテンツＩＤの改竄防止を図ることによりデジタル署名の確度を向上させることができる。
【００７７】
実施の形態３．
図９は、本実施の形態におけるデジタル署名システムのブロック構成図である。図９において、図２と同じ構成には、同じ符号を付け、説明を省略する。本実施の形態においては、サーバ４に乱数生成部５８及び乱数保持部６０を追加した構成を有している。乱数生成部５８は、乱数を生成する手段である。乱数生成部５８が生成した乱数は、乱数の生成時間情報と共にコンテンツに付加されてクライアント１へダウンロードされるが、コンテンツがダウンロードされたとき、そのダウンロードされたコンテンツのＩＤ及び乱数生成時間情報と組にして乱数保持部６０に登録される。この乱数保持部６０に登録されるデータ構成例を図１０に示す。なお、乱数生成部５８が有する処理機能は、当該処理機能を発揮するデジタル署名プログラムと、サーバ４を構成するハードウェアとの協調動作により実現される。
【００７８】
本実施の形態における署名生成側処理のフローチャートを図１１に、通常検証の場合の署名検証側処理のフローチャートを図１２に、それぞれ示す。図１１及び図１２は、実施の形態２における図７及び図８に対応する図であるが、この図７，図８に示したフローチャートと比較すれば明らかなように、付加情報に含める他のコンテンツＩＤに乱数及び乱数生成時間情報を付加してから暗号化することを特徴としている。
【００７９】
以下、本実施の形態におけるデジタル署名処理について説明する。ここでは、実施の形態２と同様に、一括署名を生成するコンテンツＩＤがそれぞれＩＤ１，ＩＤ２，ＩＤ３である３つのコンテンツＣ１，Ｃ２，Ｃ３を取り扱う場合を例にして説明する。また、各コンテンツＣ１〜Ｃ３の署名対象領域をＳ１，Ｓ２，Ｓ３、署名情報領域をE１，Ｅ２，Ｅ３とする。なお、図１１及び図１２において、図７及び図８と同じ処理ステップには同じ符号を付け説明を適宜省略する。また、他のコンテンツに関する情報としてコンテンツＩＤを使用しない簡易検証については、実施の形態１，２と同じ処理になるので説明を省略する。
【００８０】
サーバ４において、クライアント１からコンテンツのダウンロード要求が送られてくると、乱数生成部５８は、要求されたコンテンツ毎に乱数を生成する（ステップ２３１）。そして、コンテンツ配信部４４は、要求された署名対象のコンテンツＣ１〜Ｃ３をコンテンツデータベース４２から取り出し、そのコンテンツＣ１〜Ｃ３に乱数ｒ１〜ｒ３及び各乱数生成時間情報Ｔ１を付加して当該クライアント１へ送信する（ステップ２３２）。なお、各乱数の生成時刻は各コンテンツとも同じＴ１とする。そして、コンテンツ配信部４４は、図１０に例示したように、送信したコンテンツＣ１〜Ｃ３の各ＩＤと乱数と乱数生成時間情報とを組にして乱数保持部６０に登録する（ステップ２３３）。
【００８１】
クライアント１において、コンテンツＣ１〜Ｃ３をサーバ４から取得すると（ステップ１０１）、ダイジェスト生成部１４は、ハッシュ関数ｆを用いてダイジェストｆ（Ｓ１），ｆ（Ｓ２），ｆ（Ｓ３）をそれぞれ生成し（ステップ１０２）、そして署名生成部２４は、これらを一括して自分の秘密鍵で暗号化することで署名を行い、一括署名ＳｉｇＶａｌｕｅを生成する（ステップ１０３）。ここまでの処理は、実施の形態１と同じである。その後、本実施の形態における他コンテンツ情報生成部２６は、他のコンテンツのＩＤに、コンテンツと共に取得した乱数を結合してからサーバ４の公開鍵Ｅｓで暗号化し、また、乱数時間情報Ｔ１をサーバ４の公開鍵Ｅｓで暗号化し、そして各コンテンツＣ１〜Ｃ３の付加情報にそれぞれ含める（ステップ１２１）。以上の処理にて生成された各付加情報は、次のようになる。
Ｅ１＝（Ｅｎｃ（Ｅｓ，ｒ１＋ＩＤ２＋ＩＤ３），Ｅｎｃ（Ｅｓ，Ｔ１），｛ｆ（Ｓ２），ｆ（Ｓ３）｝，ＳｉｇＶａｌｕｅ）
Ｅ２＝（Ｅｎｃ（Ｅｓ，ｒ２＋ＩＤ３＋ＩＤ１），Ｅｎｃ（Ｅｓ，Ｔ１），｛ｆ（Ｓ３），ｆ（Ｓ１）｝，ＳｉｇＶａｌｕｅ）
Ｅ３＝（Ｅｎｃ（Ｅｓ，ｒ３＋ＩＤ１＋ＩＤ２），Ｅｎｃ（Ｅｓ，Ｔ１），｛ｆ（Ｓ１），ｆ（Ｓ２）｝，ＳｉｇＶａｌｕｅ）
【００８２】
このようにして生成された付加情報は、対応する各コンテンツに付加されて（ステップ１０４）、署名検証側のサーバ４へ送信される（ステップ１０５）。
【００８３】
サーバ４は、クライアント１が発したコンテンツ情報を受信すると（ステップ２０２）、コンテンツ個々に一括署名の検証を行う。まず、コンテンツＣ１に着目して説明すると、署名復号部５０は、コンテンツＣ１の付加情報に含まれている一括署名ＳｉｇＶａｌｕｅを、クライアント１の公開鍵を用いて復号することでダイジェストＤｅｃ（Ｅｃ，ＳｉｇＶａｌｕｅ）を生成する（ステップ２０３）。一方、ダイジェスト生成部４８は、実施の形態２と同様にコンテンツＣ１の付加情報から他のコンテンツのＩＤ、すなわちＩＤ２，ＩＤ３を自己の秘密鍵で復号することで抽出する（ステップ２３４）。但し、本実施の形態では、コンテンツＩＤと共に乱数ｒ１及び乱数生成時間情報Ｔ１が復号対象となっている。この復号の内容は、次のように表すことができる。
ＩＤｘ，ｒ１＝Ｄｅｃ（Ｄｓ，Ｅｎｃ（Ｅｓ，ｒ１＋ＩＤ２＋ＩＤ３））
但し、ｘ＝２，３
Ｔ１＝Ｄｅｃ（Ｄｓ，Ｅｎｃ（Ｔ１））
【００８４】
本実施の形態では、復号されたコンテンツＩＤには、乱数ｒ１が結合されているので、ダイジェスト生成部４８は、検証対象のコンテンツＣ１のコンテンツＩＤ（＝ＩＤ１）及び復号された乱数発生時間情報Ｔ１の組をキーにして乱数保持部６０を検索し、乱数ｒ１を取り出す（ステップ２３５）。コンテンツＣ１は、１乃至複数のクライアント１によって複数回ダウンロードされている可能性もあるので、本実施の形態では、コンテンツＩＤと乱数発生時間情報との組で乱数を一意に特定できるようにした。そして、その取り出した乱数ｒ１を、復号した結果（ＩＤｘ，ｒ１）から差し引くことでＩＤｘ（ｘ＝２，３）を抽出する。その後の処理は、実施の形態１，２と同じである。すなわち、ダイジェスト生成部４８は、コンテンツ読出部５６に指示をすることでコンテンツＣ２，Ｃ３を取り出し（ステップ２１１）、ハッシュ関数ｆを用いて各コンテンツのダイジェストｆ（Ｓ１），ｆ（Ｓ２），ｆ（Ｓ３）を生成し（ステップ２１２）、これらを結合して結合ダイジェストＦ＝ｆ（Ｓ１）＋ｆ（Ｓ２）＋ｆ（Ｓ３）を生成する（ステップ２１３）。そして、署名検証部５２は、一括署名を復号して得られたダイジェストＤｅｃ（Ｅｃ，ＳｉｇＶａｌｕｅ）と、ダイジェスト生成部４８が結合したダイジェストＦとを比較することで、コンテンツＣ１に付加された一括署名の検証を行う（ステップ２０６）。なお、コンテンツＣ２及びＣ３に対しても同様に処理することでコンテンツＣ２，Ｃ３に付加された一括署名の検証を個別に行うことができる。
【００８５】
本実施の形態によれば、コンテンツＩＤを暗号化してからクライアント１からサーバ４へ送るようにしたので、実施の形態２と同様にコンテンツＩＤの改竄防止を図ることでデジタル署名の確度を向上させることができる。更に、暗号化する際にコンテンツＩＤに乱数を結合することで、次のような効果を奏することができる。ここでもコンテンツＣ１に付加された一括署名の検証を行う場合を例にして説明する。
【００８６】
例えば、不正アクセス者による不正行為によって署名情報領域Ｅ１に格納された付加情報のうちコンテンツＩＤ（＝ＩＤ２，ＩＤ３）を異なるコンテンツＩＤ、例えば、ＩＤ１，ＩＤ２に書き換えるという改竄がされたとする。このような改竄は、例えばコンテンツＣ３の付加情報でコンテンツＣ１の付加情報を上書きすれば可能になる。乱数をコンテンツＩＤに結合していない場合、サーバ４は、コンテンツＣ１の付加情報から改竄されたコンテンツＩＤ、すなわちＩＤ１，ＩＤ２を取得でき、そしてコンテンツデータベース４２からコンテンツＣ１，Ｃ２を正常に取得することができる。このように、コンテンツが正常に取得できた後にダイジェストの比較処理を行うが、一括署名の復号により生成されたダイジェストと比較するダイジェストは、本来コンテンツＣ１，Ｃ２，Ｃ３から生成される結合ダイジェストであるべきところを、改竄によりコンテンツＣ１，Ｃ２，Ｃ１から生成されているので、各ダイジェストは完全に一致しない。つまり、一括署名の検証は失敗する。この場合、サーバ４は、付加情報からコンテンツＩＤ（＝ＩＤ１，ＩＤ２）が正常に抽出でき、かつコンテンツＣ１，Ｃ２をコンテンツデータベース４２から正常に取り出すことができたので、検証の失敗の原因は、署名対象領域Ｓ１に格納されたコンテンツＣ１が改竄されたと誤って認識してしまう。
【００８７】
これに対し、乱数をコンテンツＩＤに結合させた場合、コンテンツ管理サーバ４は、前述したようにコンテンツＣ１を上書きしたコンテンツＣ３の乱数、すなわち乱数ｒ１ではなく乱数ｒ３を取り出すことになる。この結果、前述した式、
ＩＤｘ，ｒ１＝Ｄｅｃ（Ｄｓ，Ｅｎｃ（Ｅｓ，ｒ１＋ＩＤ２＋ＩＤ３））
但し、ｘ＝２，３
で取り出したＩＤｘ，ｒ１（ｘ＝２，３）から乱数ｒ３を差し引いても、ＩＤ２とＩＤ３を正しく抽出することができない。このため、サーバ４は、コンテンツデータベース４２からコンテンツを正常に取り出すことができないので、署名対象領域Ｓ１に格納されたコンテンツデータではなく署名情報領域Ｅ１に格納された付加情報が改竄されたと正しく認識することができる。
【００８８】
なお、本実施の形態において、コンテンツＩＤと共に乱数生成時間情報を対応付けして乱数保持部６０に登録したのは、コンテンツに付加した乱数を一意に特定できるようにするためである。従って、一意に特定できる情報であれば、乱数生成時間情報に限定する必要はない。例えば、コンテンツの送信時間情報でもよいし、ダウンロードというイベントの識別情報であってもよい。
【図面の簡単な説明】
【００８９】
【図１】本発明に係るデジタル署名システムの一実施の形態を示した全体構成図である。
【図２】実施の形態１におけるデジタル署名システムのブロック構成図である。
【図３】実施の形態１における署名生成側処理を示したフローチャートである。
【図４】実施の形態１の簡易検証における署名検証側処理を示したフローチャートである。
【図５】実施の形態１の通常検証における署名検証側処理を示したフローチャートである。
【図６】実施の形態１においてクライアントからサーバへ送られるコンテンツ及び付加情報を示した概念図である。
【図７】実施の形態２の簡易検証における署名検証側処理を示したフローチャートである。
【図８】実施の形態２の通常検証における署名検証側処理を示したフローチャートである。
【図９】実施の形態３におけるデジタル署名システムのブロック構成図である。
【図１０】実施の形態３における乱数保持部に登録されるデータ構成例を示した図である。
【図１１】実施の形態３における署名生成側処理を示したフローチャートである。
【図１２】実施の形態３の通常検証における署名検証側処理を示したフローチャートである。
【符号の説明】
【００９０】
１  クライアント、４  サーバ、６  公衆網、１２  コンテンツ取得部、１４  ダイジェスト生成部、１６  コンテンツ情報生成部、１８  コンテンツ情報送信部、２０  検証結果取得部、２２  表示部、２４  署名生成部、２６  他コンテンツ情報生成部、４２  コンテンツデータベース、４４  コンテンツ配信部、４６  コンテンツ情報受信部、４８  ダイジェスト生成部、５０  署名復号部、５２  署名検証部、５４  検証結果通知部、５６  コンテンツ読出部、５８  乱数生成部、６０  乱数保持部。
【図１】
0004788212.tif 000004
【図２】
0004788212.tif 000005
【図３】
0004788212.tif 000006
【図４】
0004788212.tif 000007
【図５】
0004788212.tif 000008
【図６】
0004788212.tif 000009
【図７】
0004788212.tif 000010
【図８】
0004788212.tif 000011
【図９】
0004788212.tif 000012
【図１０】
0004788212.tif 000013
【図１１】
0004788212.tif 000014
【図１２】
0004788212.tif 000015