(57)【要約】【課題】ＴＳＡサーバへのアクセス回数を削減しつつ、データの前後関係やデータが改竄されていないことを保証することのできるタイムスタンプ方式を提供する。【解決手段】ローカルサーバ１３０は、コンピュータ１２０からローカルタイムスタンプの発行要求を受信し、ローカルタイムタイムスタンプを生成し、コンピュータ１２０にローカルタイムスタンプを送信するとともに、ローカルタイムスタンプと既存の累積ハッシュ値を連結し、連結値を用いて新たな累積ハッシュ値を生成し、新たな累積ハッシュ値がＴＳＡサーバ１５０へのアクセス対象の値であれば、新たな累積ハッシュ値をＴＳＡサーバ１５０に送信し、新たな累積ハッシュ値に対するＴＳＡタイムスタンプを受信する。【選択図】図１
2008258820.tif 000002
【特許請求の範囲】
【請求項１】
タイムスタンプ生成装置に接続する情報処理装置であって、
第１タイムスタンプを生成するタイムスタンプ生成部と、
前記タイムスタンプ生成部により第１タイムスタンプが生成される度に、生成された第１タイムスタンプを用いて、擬似ランダム値を生成する擬似ランダム値生成部と、
前記擬似ランダム値生成部により生成された擬似ランダム値が前記タイムスタンプ生成装置による第２タイムスタンプの生成の対象となる第２タイムスタンプ対象値に合致するか否かを判断し、前記擬似ランダム値が前記第２タイムスタンプ対象値に合致する場合に、前記擬似ランダム値を前記タイムスタンプ生成装置に対して送信し、前記タイムスタンプ生成装置から前記擬似ランダム値に対するタイムスタンプを第２タイムスタンプとして受信するアクセス制御部とを有することを特徴とする情報処理装置。
【請求項２】
前記情報処理装置は、更に、
前記擬似ランダム値生成部により生成された擬似ランダム値を記憶する記憶部を有し、
前記アクセス制御部は、
前記擬似ランダム値生成部により生成された擬似ランダム値が前記第２タイムスタンプ対象値に合致しない場合に、前記擬似ランダム値を前記タイムスタンプ生成装置に対して送信することなく、前記記憶部に前記擬似ランダム値を記憶させることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記情報処理装置は、更に、
前記擬似ランダム値生成部により擬似ランダム値が生成される度に、生成された擬似ランダム値を記憶する記憶部を有し、
前記擬似ランダム値生成部は、
前記タイムスタンプ生成部により第１タイムスタンプが生成される度に、生成された第１タイムスタンプと、前記記憶部に記憶されている擬似ランダム値とを用いて、新たな擬似ランダム値を生成することを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記擬似ランダム値生成部は、
生成された第１タイムスタンプと、前記記憶部に記憶されている擬似ランダム値の中で最新の擬似ランダム値とを用いて、新たな擬似ランダム値を生成することを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記擬似ランダム値生成部は、
生成された第１タイムスタンプと、前記記憶部に記憶されている擬似ランダム値の中で最新の擬似ランダム値とを用いて一方向演算を行って、新たな擬似ランダム値を生成することを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記情報処理装置は、更に、
タイムスタンプの生成を要求するタイムスタンプ生成要求を送信するタイムスタンプ生成要求装置から、デジタル署名のハッシュ値が含まれたタイムスタンプ生成要求を受信する要求入力部を有し、
前記タイムスタンプ生成部は、
前記要求入力部により受信されたタイムスタンプ生成要求からデジタル署名のハッシュ値を抽出し、抽出したデジタル署名のハッシュ値を用いて第１タイムスタンプを生成することを特徴とする請求項１に記載の情報処理装置。
【請求項７】
前記情報処理装置は、更に、
前記擬似ランダム値生成部により生成された擬似ランダム値が前記第２タイムスタンプ対象値に合致していると前記アクセス制御部により判断される度に、前記タイムスタンプ生成部による第１タイムスタンプの生成の際のデジタル署名に用いられる署名鍵を生成する鍵生成部を有することを特徴とする請求項１に記載の情報処理装置。
【請求項８】
前記情報処理装置は、更に、
前記鍵生成部により生成された署名鍵を記憶する記憶部を有し、
前記鍵生成部は、
新たに署名鍵を生成する度に、新たな署名鍵の生成の際に前記記憶部に記憶されている既存の署名鍵に代えて新たな署名鍵を前記記憶部に記憶させ、
前記タイムスタンプ生成部は、
第１タイムスタンプの生成の際に前記記憶部に記憶されている署名鍵を用いてデジタル署名を行って、第１タイムスタンプを生成することを特徴とする請求項７に記載の情報処理装置。
【請求項９】
前記鍵生成部は、
新たに署名鍵を生成する度に、当該新たな署名鍵と対になる検証鍵を生成し、
更に、新たな署名鍵の生成の際に前記記憶部に記憶されている既存の署名鍵を用いて、新たに生成した検証鍵のデジタル署名を検証鍵証明書として生成し、
新たに生成した署名鍵、検証鍵及び検証鍵証明書を前記記憶部に記憶させることを特徴とする請求項８に記載の情報処理装置。
【請求項１０】
前記鍵生成部は、
前記擬似ランダム値生成部により生成された擬似ランダム値が前記第２タイムスタンプ対象値に合致しないために署名鍵の生成が連続して所定数の擬似ランダム値に対して行われなかった場合に、新たに生成された擬似ランダム値が前記第２タイムスタンプ対象値に合致しないと前記アクセス制御部により判断された場合であっても、署名鍵の生成を行うことを特徴とする請求項７に記載の情報処理装置。
【請求項１１】
前記アクセス制御部は、
前記鍵生成部により生成された検証鍵を擬似ランダム値とともに前記タイムスタンプ生成装置に対して送信し、前記タイムスタンプ生成装置から前記検証鍵と前記擬似ランダム値に対するタイムスタンプを第２タイムスタンプとして受信することを特徴とする請求項９に記載の情報処理装置。
【請求項１２】
前記タイムスタンプ生成部は、
一定の生成周期ごとに、第１タイムスタンプを生成することを特徴とする請求項１に記載の情報処理装置。
【請求項１３】
前記情報処理装置は、更に、
タイムスタンプの生成を要求するタイムスタンプ生成要求を送信するタイムスタンプ生成要求装置から、タイムスタンプ生成要求を受信する要求入力部を有し、
前記タイムスタンプ生成部は、
一定の生成周期ごとに前記要求入力部によりタイムスタンプ生成要求が受信されているか否かを確認し、前記要求入力部によりタイムスタンプ生成要求が受信されている場合は、受信されたタイムスタンプ生成要求に対して第１タイムスタンプを生成し、前記要求入力部によりタイムスタンプの生成要求が受信されていない場合は、任意の情報に対して第１タイムスタンプを生成することを特徴とする請求項１２に記載の情報処理装置。
【請求項１４】
前記情報処理装置は、更に、
タイムスタンプの生成を要求するタイムスタンプ生成要求を送信するタイムスタンプ生成要求装置から、タイムスタンプ生成要求を受信する要求入力部を有し、
前記タイムスタンプ生成部は、
前記要求入力部によりタイムスタンプ生成要求が受信される度に、受信されたタイムスタンプ生成要求に対して第１タイムスタンプを生成することを特徴とする請求項１に記載の情報処理装置。
【請求項１５】
前記アクセス制御部は、
前記擬似ランダム値生成部により生成された擬似ランダム値が前記第２タイムスタンプ対象値に合致しないために前記タイムスタンプ生成装置への擬似ランダム値の送信が連続して所定数の擬似ランダム値に対して行われなかった場合に、新たに生成された擬似ランダム値が前記第２タイムスタンプ対象値に合致しないと判断した場合であっても、当該擬似ランダム値を前記タイムスタンプ生成装置に対して送信することを特徴とする請求項１に記載の情報処理装置。
【請求項１６】
前記情報処理装置は、
前記タイムスタンプ生成装置として、ＴＳＡ（Ｔｉｍｅ−Ｓｔａｍｐｉｎｇ  Ａｕｔｈｏｒｉｔｙ）サーバ装置に接続していることを特徴とする請求項１に記載の情報処理装置。
【請求項１７】
第１タイムスタンプを生成するとともに第１タイムスタンプの生成の度に生成した第１タイムスタンプ及び当該第１タイムスタンプの生成時に存在している一方向演算値を用いて一方向演算を行い、第１タイムスタンプの生成の度に一方向演算により得られる複数の一方向演算値を蓄積して記憶し複数の一方向演算値を時系列に沿って連鎖させることが可能であり、また、生成した一方向演算値を送信条件に従ってランダムに第２タイムスタンプ生成装置に送信する第１タイムスタンプ生成装置と、前記第１タイムスタンプ生成装置から一方向演算値を入力し、入力した一方向演算値に対して第２タイムスタンプを生成する第２タイムスタンプ生成装置とが含まれるタイムスタンプ生成システムを対象とし、
前記第１タイムスタンプ生成装置により生成されたいずれかの第１タイムスタンプを検証対象第１タイムスタンプとし、前記検証対象第１タイムスタンプに対する検証を行う検証装置であって、
前記検証対象第１タイムスタンプが時刻証明の対象としている値を時刻証明対象値として入力し、前記検証対象第１タイムスタンプの生成の際のデジタル署名に用いられた署名鍵と対になる検証鍵を第一タイムスタンプ検証鍵として入力し、前記検証対象第１タイムスタンプの生成前に生成された先行第２タイムスタンプが時刻証明の対象としている先行一方向演算値から前記検証対象第１タイムスタンプの生成後に生成された後行第２タイムスタンプが時刻証明の対象としている後行一方向演算値までの複数の一方向演算値を対象区間一方向演算値として入力し、前記先行第２タイムスタンプの生成後から前記後行第２タイムスタンプの生成前までに生成された前記検証対象第１タイムスタンプを除く一つ以上の第１タイムスタンプを対象区間第１タイムスタンプとして入力する検証対象データ入力部と、
前記検証対象データ入力部により入力された前記複数の対象区間一方向演算値と前記検証対象第１タイムスタンプ及び前記対象区間第１タイムスタンプとを用いて一方向演算を行い、前記先行一方向演算値から前記後行一方向演算値までの複数の対象区間一方向演算値が時系列に沿って連鎖するか否かを判断する一方向演算値連鎖判断部と、
前記検証対象データ入力部により入力された前記複数の対象区間一方向演算値のうち前記先行一方向演算値及び前記後行一方向演算値を除く他の一方向演算値の各々が、前記送信条件に合致するか否かを判断する送信条件判断部と、
前記検証対象データ入力部により入力された前記検証対象第１タイムスタンプに対して前記第一タイムスタンプ検証鍵を適用して得られた値と前記時刻証明対象値とを照合するデジタル署名照合部とを有することを特徴とする検証装置。
【請求項１８】
前記検証装置は、
前記第１タイムスタンプ生成装置が、擬似ランダム値の一方向演算値が得られる一方向演算を行い、前記送信条件として、前記第２タイムスタンプ生成装置への送信の対象となる第２タイムスタンプ対象値を管理し、一方向演算値が前記第２タイムスタンプ対象値に合致する場合に前記第２タイムスタンプ生成装置へ一方向演算値を送信するタイムスタンプ生成システムを対象とし、
前記送信条件判断部は、
前記検証対象データ入力部により入力された前記複数の対象区間一方向演算値のうち前記先行一方向演算値及び前記後行一方向演算値を除く他の一方向演算値の各々が、前記第２タイムスタンプ対象値に合致するか否かを判断することを特徴とする請求項１７に記載の検証装置。
【請求項１９】
前記検証装置は、
データを生成するとともに、生成したデータのデジタル署名値又はデジタル署名値から派生する値に対する第１タイムスタンプの生成を前記第１タイムスタンプ生成装置に対して要求するタイムスタンプ生成要求装置が含まれるタイムスタンプ生成システムを対象とし、
前記検証対象データ入力部は、
前記タイムスタンプ生成要求装置により生成された生成データと前記生成データのデジタル署名値とを入力し、更に、前記生成データのデジタル署名値の生成に用いられた署名鍵と対になる検証鍵をデジタル署名検証鍵として入力し、
前記デジタル署名照合部は、
前記検証対象データ入力部により入力された前記生成データのデジタル署名値に対して前記デジタル署名検証鍵を適用して得られた値と前記生成データとを照合することを特徴とする請求項１７に記載の検証装置。
【請求項２０】
前記検証装置は、
前記第１タイムスタンプ生成装置が、一定の生成周期ごとに第１タイムスタンプを生成するタイムスタンプ生成システムを対象とし、
前記検証対象データ入力部は、
前記先行第２タイムスタンプと前記後行第２タイムスタンプとを入力し、
前記検証装置は、更に、
前記先行第２タイムスタンプに示されている時刻と前記後行第２タイムスタンプに示されている時刻との間の時刻差と、前記複数の対象区間一方向演算値の一方向演算値の個数と前記第１タイムスタンプ生成装置における生成周期との乗算値とを比較する時刻差比較部とを有することを特徴とする請求項１７に記載の検証装置。
【請求項２１】
前記検証装置は、
前記第１タイムスタンプ生成装置が、生成した一方向演算値が前記送信条件に合致する度に、第１タイムスタンプの生成の際のデジタル署名に用いられる署名鍵と当該署名鍵と対になる検証鍵を生成し、当該署名鍵の生成前から存在する既存の署名鍵を用いて、新たに生成した検証鍵のデジタル署名を検証鍵証明書として生成し、新たに生成した署名鍵を既存の署名鍵に代えて記憶部に記憶し、新たに生成した検証鍵及び検証鍵証明書を前記記憶部に蓄積して記憶し、第１タイムスタンプの生成の際に前記記憶部に記憶されている署名鍵を用いてデジタル署名を行い、また、前記記憶部に記憶した複数の検証鍵証明書を時系列に沿って連鎖させることが可能なタイムスタンプ生成システムを対象とし、
前記検証対象データ入力部は、
前記第１タイムスタンプ生成装置の記憶部に記憶されている複数の検証鍵及び複数の検証鍵証明書を入力し、
前記検証装置は、更に、
前記検証対象データ入力部により入力された複数の検証鍵及び複数の検証鍵証明書を用いて、前記検証対象データ入力部により入力された複数の検証鍵証明書が時系列に沿って連鎖するか否かを判断する検証鍵証明書連鎖判断部を有することを特徴とする請求項１７に記載の検証装置。
【請求項２２】
前記検証装置は、
前記第１タイムスタンプ生成装置が、一方向演算値を前記第２タイムスタンプ生成装置に送信する際に、当該時点において前記記憶部に記憶されている検証鍵を併せて前記第２タイムスタンプ生成装置に送信し、前記第２タイムスタンプ生成装置が、前記第１タイムスタンプ生成装置から入力した一方向演算値及び検証鍵に対して第２タイムスタンプを生成するタイムスタンプ生成システムを対象とし、
前記検証対象データ入力部は、
前記第１タイムスタンプ生成装置の記憶部に記憶されている複数の検証鍵及び複数の検証鍵証明書のうち、最新の検証鍵及び最新の検証鍵証明書から、前記第２タイムスタンプ生成装置により第２タイムスタンプが生成されている検証鍵及び当該検証鍵に対応する検証鍵証明書までの複数の検証鍵及び複数の検証鍵証明書を入力することを特徴とする請求項２１に記載の検証装置。
【請求項２３】
前記検証装置は、
前記第２タイムスタンプ生成装置が、ＴＳＡ（Ｔｉｍｅ−Ｓｔａｍｐｉｎｇ  Ａｕｔｈｏｒｉｔｙ）サーバ装置であるタイムスタンプ生成システムを対象としていることを特徴とする請求項１７に記載の検証装置。
【請求項２４】
タイムスタンプ生成装置に接続するコンピュータを用いるタイムスタンプ生成方法であって、
コンピュータが、第１タイムスタンプを生成するタイムスタンプ生成ステップと、
前記タイムスタンプ生成ステップにより第１タイムスタンプが生成される度に、生成された第１タイムスタンプを用いて、コンピュータが、擬似ランダム値を生成する擬似ランダム値生成ステップと、
コンピュータが、前記擬似ランダム値生成ステップにより生成された擬似ランダム値が前記タイムスタンプ生成装置による第２タイムスタンプの生成の対象となる第２タイムスタンプ対象値に合致するか否かを判断し、前記擬似ランダム値が前記第２タイムスタンプ対象値に合致する場合に、前記擬似ランダム値を前記タイムスタンプ生成装置に対して送信し、前記タイムスタンプ生成装置から前記擬似ランダム値に対するタイムスタンプを第２タイムスタンプとして受信するアクセス制御ステップとを有することを特徴とするタイムスタンプ生成方法。
【請求項２５】
第１タイムスタンプを生成するとともに第１タイムスタンプの生成の度に生成した第１タイムスタンプ及び当該第１タイムスタンプの生成時に存在している一方向演算値を用いて一方向演算を行い、第１タイムスタンプの生成の度に一方向演算により得られる複数の一方向演算値を蓄積して記憶し複数の一方向演算値を時系列に沿って連鎖させることが可能であり、また、生成した一方向演算値を送信条件に従ってランダムに第２タイムスタンプ生成装置に送信する第１タイムスタンプ生成装置と、前記第１タイムスタンプ生成装置から一方向演算値を入力し、入力した一方向演算値に対して第２タイムスタンプを生成する第２タイムスタンプ生成装置とが含まれるタイムスタンプ生成システムを対象とし、
前記第１タイムスタンプ生成装置により生成されたいずれかの第１タイムスタンプを検証対象第１タイムスタンプとし、前記検証対象第１タイムスタンプに対する検証を行うタイムスタンプ検証方法であって、
コンピュータが、前記検証対象第１タイムスタンプが時刻証明の対象としている値を時刻証明対象値として入力し、前記検証対象第１タイムスタンプの生成の際のデジタル署名に用いられた署名鍵と対になる検証鍵を第一タイムスタンプ検証鍵として入力し、前記検証対象第１タイムスタンプの生成前に生成された先行第２タイムスタンプが時刻証明の対象としている先行一方向演算値から前記検証対象第１タイムスタンプの生成後に生成された後行第２タイムスタンプが時刻証明の対象としている後行一方向演算値までの複数の一方向演算値を対象区間一方向演算値として入力し、前記先行第２タイムスタンプの生成後から前記後行第２タイムスタンプの生成前までに生成された前記検証対象第１タイムスタンプを除く一つ以上の第１タイムスタンプを対象区間第１タイムスタンプとして入力する検証対象データ入力ステップと、
コンピュータが、前記検証対象データ入力ステップにより入力された前記複数の対象区間一方向演算値と前記検証対象第１タイムスタンプ及び前記対象区間第１タイムスタンプとを用いて一方向演算を行い、前記先行一方向演算値から前記後行一方向演算値までの複数の対象区間一方向演算値が時系列に沿って連鎖するか否かを判断する一方向演算値連鎖判断ステップと、
コンピュータが、前記検証対象データ入力ステップにより入力された前記複数の対象区間一方向演算値のうち前記先行一方向演算値及び前記後行一方向演算値を除く他の一方向演算値の各々が、前記送信条件に合致するか否かを判断する送信条件判断ステップと、
コンピュータが、前記検証対象データ入力ステップにより入力された前記検証対象第１タイムスタンプに対して前記第一タイムスタンプ検証鍵を適用して得られた値と前記時刻証明対象値とを照合するデジタル署名照合ステップとを有することを特徴とするタイムスタンプ検証方法。
【請求項２６】
タイムスタンプ生成装置に接続するコンピュータに、
第１タイムスタンプを生成するタイムスタンプ生成処理と、
前記タイムスタンプ生成処理により第１タイムスタンプが生成される度に、生成された第１タイムスタンプを用いて、擬似ランダム値を生成する擬似ランダム値生成処理と、
前記擬似ランダム値生成処理により生成された擬似ランダム値が前記タイムスタンプ生成装置による第２タイムスタンプの生成の対象となる第２タイムスタンプ対象値に合致するか否かを判断し、前記擬似ランダム値が前記第２タイムスタンプ対象値に合致する場合に、前記擬似ランダム値を前記タイムスタンプ生成装置に対して送信し、前記タイムスタンプ生成装置から前記擬似ランダム値に対するタイムスタンプを第２タイムスタンプとして受信するアクセス制御処理とを実行させることを特徴とするプログラム。
【請求項２７】
第１タイムスタンプを生成するとともに第１タイムスタンプの生成の度に生成した第１タイムスタンプ及び当該第１タイムスタンプの生成時に存在している一方向演算値を用いて一方向演算を行い、第１タイムスタンプの生成の度に一方向演算により得られる複数の一方向演算値を蓄積して記憶し複数の一方向演算値を時系列に沿って連鎖させることが可能であり、また、生成した一方向演算値を送信条件に従ってランダムに第２タイムスタンプ生成装置に送信する第１タイムスタンプ生成装置と、前記第１タイムスタンプ生成装置から一方向演算値を入力し、入力した一方向演算値に対して第２タイムスタンプを生成する第２タイムスタンプ生成装置とが含まれるタイムスタンプ生成システムを対象とし、
前記第１タイムスタンプ生成装置により生成されたいずれかの第１タイムスタンプを検証対象第１タイムスタンプとし、前記検証対象第１タイムスタンプに対する検証を行うコンピュータに、
前記検証対象第１タイムスタンプが時刻証明の対象としている値を時刻証明対象値として入力し、前記検証対象第１タイムスタンプの生成の際のデジタル署名に用いられた署名鍵と対になる検証鍵を第一タイムスタンプ検証鍵として入力し、前記検証対象第１タイムスタンプの生成前に生成された先行第２タイムスタンプが時刻証明の対象としている先行一方向演算値から前記検証対象第１タイムスタンプの生成後に生成された後行第２タイムスタンプが時刻証明の対象としている後行一方向演算値までの複数の一方向演算値を対象区間一方向演算値として入力し、前記先行第２タイムスタンプの生成後から前記後行第２タイムスタンプの生成前までに生成された前記検証対象第１タイムスタンプを除く一つ以上の第１タイムスタンプを対象区間第１タイムスタンプとして入力する検証対象データ入力処理と、
前記検証対象データ入力処理により入力された前記複数の対象区間一方向演算値と前記検証対象第１タイムスタンプ及び前記対象区間第１タイムスタンプとを用いて一方向演算を行い、前記先行一方向演算値から前記後行一方向演算値までの複数の対象区間一方向演算値が時系列に沿って連鎖するか否かを判断する一方向演算値連鎖判断処理と、
前記検証対象データ入力処理により入力された前記複数の対象区間一方向演算値のうち前記先行一方向演算値及び前記後行一方向演算値を除く他の一方向演算値の各々が、前記送信条件に合致するか否かを判断する送信条件判断処理と、
前記検証対象データ入力処理により入力された前記検証対象第１タイムスタンプに対して前記第一タイムスタンプ検証鍵を適用して得られた値と前記時刻証明対象値とを照合するデジタル署名照合処理とを実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デジタルデータに関する時刻証明のためのタイムスタンプの生成技術及び検証技術に関する。
【背景技術】
【０００２】
ある組織内におけるデジタルデータの作成や修正の日時とその後の改竄の有無を証明するために第三者機関であるＴＳＡ（Ｔｉｍｅ−Ｓｔａｍｐｉｎｇ  Ａｕｔｈｏｒｉｔｙ＝タイムスタンプ発行局）サーバ装置を利用するシステムにおいて、ＴＳＡサーバ装置（以下、単にＴＳＡサーバともいう）へのアクセス数を削減するために、複数のデータのダイジェストを統合し、統合したダイジェストをＴＳＡサーバに送信してタイムスタンプを受領する技術がある（例えば、特許文献１、２）。
一方、ＴＳＡサーバを利用せずして上記証明を行うために、ローカルサーバ上でローカルタイムスタンプを発行し、ローカルタイムスタンプ発行のための署名鍵を定期的に更新することでローカルタイムスタンプの改竄を困難にし、それによってローカルタイムスタンプの信頼度を保証する技術がある（例えば、特許文献３）。
【特許文献１】特開２００１−１４２３９８号公報  第８頁〜９頁、第１図
【特許文献２】特開２００６−２９３６８１号公報  第４頁〜９頁、第１図〜７図
【特許文献３】特開２００１−５１７８１８号公報  第９頁〜１１頁、第１図
【発明の開示】
【発明が解決しようとする課題】
【０００３】
特許文献１、２に記載の技術のように、複数のデジタルデータのダイジェストを統合し、統合データをＴＳＡサーバに送信してタイムスタンプを受領する方式では、統合された各データがタイムスタンプ発行時点までに存在し、かつ各データがそれ以降改竄されていないことを保証することはできるが、各データ間の作成・修正時刻の前後関係を保証することはできない。
また、ＴＳＡサーバへアクセスするタイミングは、特許文献１では定期的であり、特許文献２ではデータ件数が一定量を超えた場合や一定間隔、一定時刻、あるいはこれらの任意の組み合わせであるため、ユーザがＴＳＡへのアクセスタイミングを容易に推定可能であり、したがってそれまでの間は、ユーザとローカルサーバ管理者が結託することにより、すでに作成したデータを改竄したりデータの前後関係を入れ替えたりすることが容易にできてしまうという課題がある。
【０００４】
また、特許文献３に記載の技術のように、タイムスタンプ発行のための署名鍵を定期的に更新する方式の場合、次回の署名鍵更新のタイミングを容易に推定可能であり、したがってそれまでの間はすでに作成したデータを改竄したり、データの前後関係を入れ替えたりすることが容易にできてしまうという課題がある。
一方、それを防ぐためにローカルタイムスタンプの発行ごとに署名鍵を更新することとすると、署名鍵の生成に時間がかかるほか、署名の検証の際にも莫大な時間がかかってしまうため、現実的でないという課題がある。
さらにＴＳＡサーバのタイムスタンプを利用していないため、ローカルサーバの時計が信用できなければ、ローカルタイムスタンプの時刻情報も信用できないという課題がある。
【０００５】
本発明はかかる課題を解決することを主な目的とするもので、ＴＳＡサーバへのアクセス回数を削減しつつ、データの前後関係やデータが改竄されていないことを保証することのできるタイムスタンプ方式を提供することを主な目的とする。
【課題を解決するための手段】
【０００６】
本発明に係る情報処理装置は、
タイムスタンプ生成装置に接続する情報処理装置であって、
第１タイムスタンプを生成するタイムスタンプ生成部と、
前記タイムスタンプ生成部により第１タイムスタンプが生成される度に、生成された第１タイムスタンプを用いて、擬似ランダム値を生成する擬似ランダム値生成部と、
前記擬似ランダム値生成部により生成された擬似ランダム値が前記タイムスタンプ生成装置による第２タイムスタンプの生成の対象となる第２タイムスタンプ対象値に合致するか否かを判断し、前記擬似ランダム値が前記第２タイムスタンプ対象値に合致する場合に、前記擬似ランダム値を前記タイムスタンプ生成装置に対して送信し、前記タイムスタンプ生成装置から前記擬似ランダム値に対するタイムスタンプを第２タイムスタンプとして受信するアクセス制御部とを有することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、擬似ランダム値が第２タイムスタンプ対象値に合致する場合にのみ、タイムスタンプ生成装置へ擬似ランダム値を送信するため、タイムスタンプ生成装置へのアクセス回数を削減し、タイムスタンプ生成装置へのアクセスに伴うトラフィックを抑制することができる。
また、擬似ランダム値が第２タイムスタンプ対象値に合致する場合にのみ、タイムスタンプ生成装置へ擬似ランダム値を送信するため、タイムスタンプ生成装置へのアクセスタイミングがランダムとなり、タイムスタンプ生成装置へのアクセスタイミングを推定することが困難であり、このため、データの改竄やデータの前後関係を入れ替えることが困難となり、また、このような改竄があっても改竄を検出することができるため、データ内容の改竄、データの前後関係の改竄を有効に抑制することができる。
【発明を実施するための最良の形態】
【０００８】
実施の形態１．
図１は、本発明の実施の形態１におけるタイムスタンプ生成システムの構成例を示す図である。
図１において、ユーザＡ１ａ、ユーザＢ１ｂ、…ユーザＮ１ｎは、本システムを利用するユーザである。
ＩＣカード１００ａ、ＩＣカード１００ｂ、…、ＩＣカード１００ｎは、それぞれユーザＡ１ａ、ユーザＢ１ｂ、…、ユーザＮ１ｎが所持するＩＣカードである。
ＩＣカードＲ／Ｗ（リーダライタ）１１０ａ、…、ＩＣカードＲ／Ｗ１１０ｍは、ＩＣカードの読み取りおよび書き込みを行う装置である。
コンピュータ１２０ａ、…、コンピュータ１２０ｍは、ユーザがデータの作成やデータに対するローカルタイムスタンプの発行要求などデータに関わる操作を行う機器であり、例えばパーソナルコンピュータや携帯電話、携帯情報端末機などである。
図のように、ＩＣカードＲ／Ｗおよびコンピュータは１人のユーザで占有してもよいし、複数人のユーザで共有してもよい。
【０００９】
ローカルサーバ装置１３０（以下、単にローカルサーバ１３０ともいう）は、コンピュータ１２０ａ、…、コンピュータ１２０ｍからローカルタイムスタンプの発行要求を受け取ってローカルタイムスタンプを発行する装置であり、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）などの構内網によって各コンピュータと接続されている。つまり、ローカルサーバ１３０は、コンピュータ１２０が接続されている内部ネットワークに配置されており、内部ネットワークのコンピュータ１２０のためにローカルタイムスタンプを発行する。
インターネット１４０は、ローカルサーバ１３０とＴＳＡサーバ装置１５０とを接続する公衆網である。
ＴＳＡサーバ装置１５０（以下、単にＴＳＡサーバともいう）は、ローカルサーバ１３０からタイムスタンプの発行要求を受け取ってタイムスタンプを発行する装置である。
【００１０】
ローカルサーバ１３０は、ＴＳＡサーバ１５０との関係では情報処理装置の例となり、図１には図示していない検証装置（後述）との関係では、第１タイムスタンプ生成装置の例となる。
また、ＴＳＡサーバ１５０は、ローカルサーバ１３０との関係ではタイムスタンプ生成装置の例となり、検証装置との関係では第２タイムスタンプ生成装置の例となる。
また、コンピュータは、タイムスタンプ生成要求装置の例である。
【００１１】
図２は、図１の各構成要素の内部構成例を示す図である。
図２において、まず、ＩＣカード１００ａの構成要素について説明する。
記憶部２０１は、ＩＣカードごとに異なる署名鍵および検証鍵を格納する。
署名生成部２０２は、入出力部２０３から受け取ったデータに対し、記憶部２０１に格納された署名鍵を用いてデジタル署名を生成する。
入出力部２０３は、ＩＣカード１００ａとＩＣカードＲ／Ｗ１１０ａとの間でデータの受け渡しを行う。
【００１２】
次に、コンピュータ１２０ａの構成要素について説明する。
入出力部２２１は、ユーザからの入力の受け付けやＩＣカードＲ／Ｗ１１０ａ、ローカルサーバ１３０との間でデータの受け渡しを行う。
データ処理部２２２は、ユーザからの入力に応じてデータの作成や修正を行う。
ローカルタイムスタンプ要求部２２３は、データ処理部２２２で作成したデータからハッシュ値を計算してローカルタイムスタンプの発行要求を生成する。
記憶部２２４は、ローカルサーバ１３０から受け取ったローカルタイムスタンプを記憶しておく。
【００１３】
次に、ローカルサーバ１３０の構成要素について説明する。
アクセス制御部２３１は、ＴＳＡサーバ１５０へのアクセスを制御する。
累積ハッシュ値演算部２３２は、ローカルタイムスタンプおよび既存の累積ハッシュ値から新たな累積ハッシュ値を計算する。
ここで累積ハッシュ値は、過去に発行したローカルタイムスタンプに依存するローカルサーバ内部値である。累積ハッシュ値は、擬似ランダム値である。
ローカルタイムスタンプ生成部２３３は、ユーザから受け取ったローカルタイムスタンプの発行要求に対し、記憶部２３６に格納された署名鍵を用いてローカルタイムスタンプを生成する。
タイマ部２３４は、計時用カウンタであり、一定の時間間隔で値を更新する。
受付部２３５は、各コンピュータから発行要求を受け付け、受付順に記憶する。
記憶部２３６は、ローカルタイムスタンプを生成するための署名鍵や発行したローカルタイムスタンプやＴＳＡサーバ１５０から受領したＴＳＡタイムスタンプや累積ハッシュ値演算部２３２で作成した累積ハッシュ値を記憶しておく。
入出力部２３７は、コンピュータ１２０やＴＳＡサーバ１５０との間でデータの受け渡しを行う。
【００１４】
ローカルサーバ１３０において、入出力部２３７は、コンピュータ１２０ａから、デジタル署名のハッシュ値が含まれた発行要求（タイムスタンプ生成要求）を受信する。入出力部２３７は、要求入力部の例である。
【００１５】
ローカルタイムスタンプ生成部２３３は、タイマ部２３４のカウントに基づいて、一定の生成周期ごとに発行要求が受付部２３５により受け付けられているか否かを確認し、発行要求が受け付けられている場合は受け付けられている発行要求からデジタル署名のハッシュ値を抽出し、抽出したデジタル署名のハッシュ値を用いてローカルタイムスタンプを生成する。一方、発行要求が受け付けられていない場合は、任意の情報に対してローカルタイムスタンプを生成する。
ローカルタイムスタンプ生成部２３３により生成されるローカルタイムスタンプは、第１タイムスタンプに相当する。また、ローカルタイムスタンプ生成部２３３は、タイムスタンプ生成部の例である。
【００１６】
記憶部２３６は、累積ハッシュ値演算部２３２により累積ハッシュ値が生成される度に、生成された累積ハッシュ値を記憶している。
累積ハッシュ値演算部２３２は、ローカルタイムスタンプ生成部２３３によりローカルタイムスタンプが生成される度に、生成されたローカルタイムスタンプと、記憶部２３６に記憶されている最新の累積ハッシュ値とを用いて、擬似ランダム値である新たな累積ハッシュ値を生成する。累積ハッシュ値演算部２３２は、擬似ランダム値生成部の例である。
このように、累積ハッシュ値は、先行する累積ハッシュ値に基づいて生成されており、記憶部２３６に蓄積されている複数の累積ハッシュ値を時系列に沿って連鎖させることが可能であり、累積ハッシュ値の連鎖をハッシュチェーンという。
【００１７】
そして、アクセス制御部２３１は、累積ハッシュ値演算部２３２により生成された擬似ランダム値である累積ハッシュ値がＴＳＡサーバ１５０によるＴＳＡタイムスタンプ（第２タイムスタンプ）の生成の対象となる値（第２タイムスタンプ対象値）に合致するか否かを判断し、累積ハッシュ値がＴＳＡタイムスタンプの対象となる値に合致する場合に、入出力部２３７を介して、当該累積ハッシュ値をＴＳＡサーバ１５０に対して送信し、入出力部２３７を介して、ＴＳＡサーバ１５０から当該累積ハッシュ値に対するＴＳＡタイムスタンプを受信する。
一方、累積ハッシュ値演算部２３２により生成された累積ハッシュ値がＴＳＡタイムスタンプの対象となる値に合致しない場合に、アクセス制御部２３１は、当該累積ハッシュ値をＴＳＡサーバ１５０に対して送信することなく、記憶部２３６に当該累積ハッシュ値を記憶させる。
このように、アクセス制御部２３１は、擬似ランダム値である累積ハッシュ値が所定の値に該当するか否かにより、累積ハッシュ値をＴＳＡサーバ１５０に送信するか否かを決定しており、累積ハッシュ値のＴＳＡサーバ１５０への送信はランダムに発生することになる。
なお、ＴＳＡタイムスタンプの対象となる値、すなわちＴＳＡサーバ１５０へのアクセスの対象となる値は、複数存在する。これは、後述するように、連続する一定範囲の数値（例えば、ビット値０〜２ｎ−１の範囲）とすることができ、このような数値範囲をアクセス領域Ｌという。
【００１８】
図３は、ユーザがデータを作成しローカルタイムスタンプの発行要求を生成するまでのデータの流れを示した図である。
【００１９】
図３において、データＸ３０１は、ユーザが作成又は修正したデータである。
署名鍵ｓｋａ３０２は、データＸ３０１に対するデジタル署名を計算するための鍵であり、ＩＣカードごとに異なる値である。
この署名鍵ｓｋａ３０２は、ＩＣカード１００ａの記憶部２０１に格納されており、ＩＣカードの外部からは盗聴も改竄もできないようになっている。
署名ＳＩＧｓｋａ（Ｘ）３０３は、データＸ３０１に対し署名鍵ｓｋａ３０２を用いて計算したデジタル署名である。
ハッシュ値Ｈ３０４は、署名ＳＩＧｓｋａ（Ｘ）３０３のハッシュ値であり、
具体的にはＨ＝ｈａｓｈ（ＳＩＧｓｋａ（Ｘ））である。ここで、ｈａｓｈはＳＨＡ−１やＭＤ５などのハッシュ関数である。
発行要求Ｒ３０５はローカルタイムスタンプの発行要求であり、ハッシュ値Ｈ３０４と個人識別用の値を含む任意の形式である。
【００２０】
図４は、ローカルサーバ１３０が発行要求を受信しローカルタイムスタンプを発行して累積ハッシュ値を更新するまでのデータの流れを示した図である。
【００２１】
図４において、署名鍵ｓｋ４０１は、ローカルサーバ１３０の署名鍵である。
この署名鍵ｓｋ４０１は、ローカルサーバ１３０の記憶部２３６に格納されており、ローカルサーバの外部からは盗聴も改竄もできないようになっている。
関連情報Ｉ４０２は、ローカルタイムスタンプの受付番号や現在の時刻などローカルタイムスタンプに必要な情報である。
ローカルタイムスタンプＬＴＳ４０３は、タイムスタンプ発行要求Ｒ３０５から抜き出されたハッシュ値Ｈ３０４と関連情報Ｉ４０２に対し、署名鍵ｓｋ４０１を用いて計算したデジタル署名であり、具体的には、ＬＴＳ＝ＳＩＧｓｋ（Ｈ‖Ｉ）である。ここで「‖」はビット列の連結を表す。
累積ハッシュ値Ｌｉ−１４０４は、ローカルサーバのｉ−１番目の累積ハッシュ値で、累積ハッシュ値Ｌｉ４０５はｉ番目の累積ハッシュ値である。
これら累積ハッシュ値は、過去に発行したすべてのローカルタイムスタンプの影響を受けた値であり、具体的には、Ｌｉ＝ｈａｓｈ（Ｌｉ−１‖ＬＴＳ）である。
ここで、ｈａｓｈはＳＨＡ−１やＭＤ５などのハッシュ関数であるが、必ずしもコンピュータ１２０ａで使用するｈａｓｈと同一である必要はない。
累積ハッシュ値の初期値Ｌ０はあらかじめ定められた値である。
【００２２】
（タイムスタンプの生成）
次に、図３乃至図６を用いて、本発明の実施の形態１におけるタイムスタンプ生成方法を説明する。
ここでは、ユーザＡ１ａが作成したデータに対するタイムスタンプ生成方法を説明するが、他のユーザの場合も同様である。
【００２３】
図５は、ユーザがデータを作成してから、ローカルサーバ１３０よりローカルタイムスタンプを受領し記憶部２２４に格納するまでの動作例を示すフローチャートである。
【００２４】
ユーザは、図示しないキーボードやマウスなどのコンピュータ操作用機器を用いてコンピュータ１２０ａに対する操作を行い、データＸ３０１を作成あるいは修正したものとする。
ユーザがローカルタイムスタンプの発行要求を指示すると、ステップ５０１においてコンピュータ１２０ａはデータＸ３０１をＩＣカード１００ａに送る。
次に、ステップ５０２にて、ＩＣカード１００ａは記憶部２０１に格納された署名鍵ｓｋａ３０２を用いてデータＸ３０１のデジタル署名ＳＩＧｓｋａ（Ｘ）３０３を計算する。具体的には、データＸ３０１のハッシュ値を署名鍵ｓｋａ３０２で暗号化する。
そして、ステップ５０３にて、署名ＳＩＧｓｋａ（Ｘ）３０３をコンピュータ１２０ａに送り返す。
ステップ５０４にて、コンピュータ１２０ａは署名ＳＩＧｓｋａ（Ｘ）３０３からハッシュ値Ｈ３０４を計算する。この計算はＨ＝ｈａｓｈ（ＳＩＧｓｋａ（Ｘ））により行う。
続いて、ステップ５０５にて、ハッシュ値Ｈ３０４から発行要求Ｒ３０５を作成する。
そして、ステップ５０６にて、発行要求Ｒ３０５をローカルサーバ１３０に送る。
ステップ５０７にて、ローカルサーバから返ってきたローカルタイムスタンプＬＴＳ４０３を記憶部２２４に格納する。
【００２５】
なお、上記説明ではユーザがタイムスタンプの発行要求の作成をコンピュータに指示するものとして説明したが、コンピュータがある規則に基づいて自発的に発行要求を作成する構成であってもよい。
【００２６】
また、ステップ５０２にてデータＸ３０１に対し直接デジタル署名ＳＩＧｓｋａ（Ｘ）３０３を計算する構成としたが、データＸ３０１のハッシュ値をとってそのハッシュ値に対しデジタル署名を計算する構成も望ましい。
【００２７】
図６は、ローカルサーバ１３０がローカルタイムスタンプＬＴＳ４０３を発行する際の手順を示すフローチャートである。
ローカルサーバ１３０は図６に示された処理を無限回繰り返すが、ここではｉ回目の処理を例に説明する。
なお、処理の中で累積ハッシュ値の更新を行うが、処理を行う前の段階での最新の累積ハッシュ値はＬｉ−１４０４であり、Ｌｉ４０５は更新後の累積ハッシュ値であることに注意されたい。
【００２８】
図６の処理は主にローカルタイムスタンプの生成６００ａと累積ハッシュ値の更新６００ｂから成り立っており、まずローカルタイムスタンプの生成６００ａについて説明する。
【００２９】
ステップ６０１にて、ローカルサーバ１３０のタイマ部２３４が一定の値をカウントする。
このタイマ部２３４は、周期的に値を更新する仕組みであればよく、例えば発振器でもよいし、１＋１を１万回計算するプログラムであってもよい。
カウントすべき値はローカルサーバの管理者があらかじめ定めておく。
なお、この値の選択基準については後述する。
次に、タイマ部２３４のカウントによりタイムスタンプ生成周期が到来した場合には、ステップ６０２にて、ローカルタイムスタンプ生成部２３３が、受付部２３５にコンピュータ１２０ａからの発行要求Ｒ３０５が存在するかを確認する。
発行要求Ｒ３０５があれば、ローカルタイムスタンプ生成部２３３は、ステップ６０３にて、受付部２３５から最も古い発行要求を取り出してローカルタイムスタンプ生成部２３３内に格納し、当該発行要求Ｒ３０５を受付部２３５から消去する。
次に、ステップ６０４にて、ローカルタイムスタンプ生成部２３３は、発行要求Ｒ３０５からハッシュ値Ｈ３０４を抜き出す。
次に、ローカルタイムスタンプ生成部２３３は、ステップ６０５ａにて、ハッシュ値Ｈ３０４に対し、記憶部２３６に格納された署名鍵ｓｋ４０１および関連情報Ｉ４０２を用いてローカルタイムスタンプＬＴＳ４０３を生成する（タイムスタンプ生成ステップ）。
そして、ステップ６０６にて、ローカルタイムスタンプ生成部２３３は、入出力部２３７を介して、ローカルタイムスタンプＬＴＳ４０３をコンピュータ１２０ａに送るとともに、ステップ６０７にて、発行要求Ｒ３０５とローカルタイムスタンプＬＴＳ４０３を記憶部２３６に格納する。
【００３０】
一方、ステップ６０２にて受付部２３５に発行要求がなかった場合、ステップ６０５ｂにて、ローカルタイムスタンプ生成部２３３は、累積ハッシュ値演算部２３２にある最新の累積ハッシュ値Ｌｉ−１４０４に対し、記憶部２３６に格納された署名鍵ｓｋ４０１および関連情報Ｉ４０２を用いてローカルタイムスタンプＬＴＳ４０３を生成する（タイムスタンプ生成ステップ）。
そして、ステップ６０７にて、ローカルタイムスタンプ生成部２３３は、ローカルタイムスタンプＬＴＳ４０３を記憶部２３６に格納する。
このとき発行要求については無いので格納しなくてよい。
【００３１】
なお、ステップ６０５ｂにて累積ハッシュ値Ｌｉ−１４０４に対しローカルタイムスタンプＬＴＳ４０３を作成したが、これの代わりに定数や擬似乱数等の任意の情報に対してローカルタイムスタンプＬＴＳ４０３を作成する構成としてもよい。
【００３２】
次に、累積ハッシュ値の更新６００ｂを説明する。
【００３３】
ステップ６０８にて、累積ハッシュ値演算部２３２が、ローカルタイムスタンプＬＴＳ４０３を用いて新しい累積ハッシュ値を計算する（擬似ランダム値生成ステップ）。
具体的には、累積ハッシュ値演算部２３２は、Ｌｉ＝ｈａｓｈ（Ｌｉ−１‖ＬＴＳ）によりｉ番目の累積ハッシュ値を計算する。
次に、ステップ６０９にて、アクセス制御部２３１において累積ハッシュ値Ｌｉ４０５がアクセス領域Ｌ内の値であるかを判定する（アクセス制御ステップ）。
ここで、アクセス領域Ｌは、ＴＳＡサーバ１５０にアクセスすべき累積ハッシュ値の集合であり、あらかじめローカルサーバ１３０の管理者が定めたものであるが、詳細は後述する。
累積ハッシュ値Ｌｉ４０５がアクセス領域Ｌ内にあるとき、すなわちＬｉ∈Ｌのとき、アクセス制御部２３１は、この累積ハッシュ値はＴＳＡサーバ１５０に送信すべき値であると判断し、ステップ６１０にて、入出力部２３７を介して、累積ハッシュ値Ｌｉ４０５をＴＳＡサーバ１５０に送る（アクセス制御ステップ）。
そして、ステップ６１１にて、アクセス制御部２３１は、ＴＳＡサーバ１５０から累積ハッシュ値Ｌｉ４０５に対するタイムスタンプ（これをＴＳＡタイムスタンプと呼ぶ）を受け取り（アクセス制御ステップ）、ステップ６１２にてＴＳＡタイムスタンプを記憶部２３６に格納する。
さらに、アクセス制御部２３１は、ステップ６１３にて累積ハッシュ値Ｌｉ４０５を記憶部２３６に格納する。
【００３４】
ステップ６０９にて累積ハッシュ値Ｌｉ４０５がアクセス領域Ｌ内の値でなかった場合、アクセス制御部２３１は、ＴＳＡサーバ１５０へのアクセスは行わずに、ステップ６１３にて累積ハッシュ値Ｌｉ４０５を記憶部２３６に格納する。
【００３５】
なお、ここではアクセス領域ＬのみをＴＳＡサーバ１５０へのアクセスの判断基準としたが、これに別の判断基準、例えば最後にＴＳＡサーバ１５０にアクセスしてからのカウント数が一定値に達した場合などを加え、各判断基準のうちいずれか一つが合致すればＴＳＡサーバ１５０にアクセスする構成としてもよい。
つまり、アクセス制御部２３１は、累積ハッシュ値がアクセス領域Ｌに含まれないため、ＴＳＡサーバ１５０へのアクセスが連続して所定数の累積ハッシュ値に対して行われなかった場合に、新たに生成された累積ハッシュ値がアクセス領域Ｌに含まれないと判断した場合であっても、当該累積ハッシュ値をＴＳＡサーバ１５０に対して送信する。
このような構成にすることで、ローカルタイムスタンプの改竄がより困難になることが、後述するタイムスタンプの検証過程から理解される。
【００３６】
また、以上では、累積ハッシュ値の計算にハッシュ関数を用いたが、実際にはハッシュ関数に限らず、一方向性を満足する関数を用いた一方向演算で擬似ランダム値を生成することにより同じ効果を奏することは、当業者の容易に理解し得るところである。
【００３７】
ステップ６０１におけるカウントすべき値はローカルサーバ管理者が定めるが、以下にその制定基準を述べる。
カウントすべき値が大きい場合、すなわちローカルタイムスタンプの発行間隔が長い場合、例えば１日ごとであるとか１週間ごとであるなどの場合は、その間に複数の発行要求が到着することが容易に起こり得る。
本実施の形態に係るローカルサーバ１３０は同時に複数の発行要求を処理するものではないため、次の処理までの間、発行要求が処理されずに残ることになる。
一般にタイムスタンプは対象となるデータが作成あるいは修正された時点から間を置かずに発行されるべきであり、したがってこのような事態は望ましくない。
一方、カウントすべき値が小さい場合すなわちローカルタイムスタンプの発行間隔が短い場合、例えば１マイクロ秒ごとであるとか１ミリ秒ごとであるなどの場合は、発行要求がない状態でローカルタイムスタンプを発行することが多くなる。
発行要求のないローカルタイムスタンプ発行は改竄防止のために行うものであり、ローカルタイムスタンプそれ自体には意味はない。
したがって、このようなローカルタイムスタンプが多くなりすぎる事態は望ましくない。
また、本実施の形態に係るシステムでは検証のためすべてのローカルタイムスタンプとすべての累積ハッシュ値を記憶部にて保存する。
したがって、ローカルタイムスタンプの発行頻度が高い場合はそれに応じた記憶容量が必要となり、コストの増加につながる。
以上のことから、ローカルサーバ管理者はユーザ数や使用頻度、許容されるコストなどの要素を鑑みて適切なカウント値を設定する。
【００３８】
ステップ６０９におけるアクセス領域Ｌの定め方を述べる。
累積ハッシュ値の計算にハッシュ関数ＳＨＡ−１を用いているとすると、累積ハッシュ値のビット長は１６０ビットである。
したがって累積ハッシュ値のとりうる値は０から２１６０−１までの２１６０通りである。
ここで、ＴＳＡへのアクセスの割合を１／２５６に設定する場合を考える。
これは、２５６回に１回の割合でＴＳＡへのアクセスを発生させるというものである。
このとき、例えばアクセス領域Ｌを２１５２未満、すなわち０≦Ｌ＜２１５２に定めると、ＴＳＡへのアクセス割合は１／２５６となる。
なぜならば、アクセス領域Ｌはハッシュ値のとりうる値の範囲の１／２５６の大きさを占めており、かつハッシュ関数は擬似ランダム関数とみなしてよく、したがってハッシュ値の出力分布はほぼ均一であり、擬似ランダム値と言えるからである。
【００３９】
アクセス割合の制定基準を述べる。
アクセス割合が小さい場合すなわちアクセスの頻度が低い場合、例えばアクセス割合が１／１００００や１／１０００００の場合は、ほとんどＴＳＡへのアクセスが発生しない。
この場合、コストやトラフィックの面では有利であるが、ローカルタイムスタンプの改竄は行いやすくなる。なぜなら、過去に発行したローカルタイムスタンプを改竄し、それ以降の累積ハッシュを再計算しても、ＴＳＡへのアクセスが発生しない可能性が高く、したがって後述する検証過程において改竄が検出されなくなるからである。このため、ローカルタイムスタンプの信頼性は低下する。したがって、低い頻度は望ましくない。
一方、アクセス割合が大きい場合すなわちアクセスの頻度が高い場合、例えばアクセス割合が１／２や１／３の場合は、頻繁にＴＳＡへのアクセスが発生する。
この場合、ローカルタイムスタンプの改竄は非常に困難になり、したがってローカルタイムスタンプの信頼性は向上するが、ＴＳＡサーバへのアクセスはコストの増大やネットワークトラフィックの増加をもたらしてしまう。したがって、あまり高い頻度は望ましくない。
以上のことから、ローカルサーバ管理者は必要な信頼性や許容されるコストなどの要素を鑑みて適切なアクセス割合を設定する。
【００４０】
（タイムスタンプの検証）
次に、図４乃至図８及び図２３を用いてローカルタイムスタンプの検証方法を述べる。
【００４１】
まず、図２３を参照して、ローカルタイムスタンプの検証を行う検証装置３３０について説明する。
検証装置３３０は、図１に示したタイムスタンプ生成システムにおいて、ローカルサーバ１３０が生成したローカルタイムスタンプ（第１タイムスタンプ）の検証を行う。
【００４２】
図２３において、検証対象データ入力部３３１は、ローカルタイムスタンプの検証に必要なデータを入力する。
具体的には、検証対象のローカルタイムスタンプ（検証対象第１タイムスタンプ）、検証対象のローカルタイムスタンプが時刻証明の対象としている時刻証明対象値（発行要求Ｒ３０５に含まれていたハッシュ値Ｈ３０４）、検証対象のローカルタイムスタンプの生成の際のデジタル署名に用いられた署名鍵と対になるローカルサーバの検証鍵（第一タイムスタンプ検証鍵）、検証対象のローカルタイムスタンプの生成前に生成されたＴＳＡタイムスタンプである先行ＴＳＡタイムスタンプ（先行第２タイムスタンプ）、検証対象のローカルタイムスタンプの生成後に生成されたＴＳＡタイムスタンプである後行ＴＳＡタイムスタンプ（後行第２タイムスタンプ）、先行ＴＳＡタイムスタンプが時刻証明の対象としている先行累積ハッシュ値（先行一方向演算値）（ローカルサーバ１３０によりＴＳＡサーバ１５０に送信され先行ＴＳＡタイムスタンプが発行されたハッシュ値）から後行ＴＳＡタイムスタンプが時刻証明の対象としている後行累積ハッシュ値（後行一方向演算値）（ローカルサーバ１３０によりＴＳＡサーバ１５０に送信され後行ＴＳＡタイムスタンプが発行されたハッシュ値）までの複数の累積ハッシュ値（対象区間一方向演算値）、先行ＴＳＡタイムスタンプの生成後から後行ＴＳＡタイムスタンプの生成前までに生成された一つ以上のローカルタイムスタンプ（対象区間第１タイムスタンプ）、コンピュータ１２０で生成又は修正されたユーザデータ（データ（Ｘ）３０１）、当該ユーザデータ（データ（Ｘ）３０１）に対してＩＣカード１００で生成されたデジタル署名値（署名ＳＩＧｓｋａ（Ｘ）３０３）、ＩＣカード１００におけるデジタル署名値（署名ＳＩＧｓｋａ（Ｘ）３０３）の生成に用いられた署名鍵と対になるユーザの検証鍵（デジタル署名検証鍵）、すなわち、ＩＣカードの記憶部２０１に格納されているユーザの検証鍵等を入力する。
但し、検証装置３３０においてデジタル署名値（署名ＳＩＧｓｋａ（Ｘ）３０３）からハッシュ値Ｈ（時刻証明対象値）を生成可能な場合は、ハッシュ値自体を入力しなくてもよい。この場合は、デジタル署名値（署名ＳＩＧｓｋａ（Ｘ）３０３）の入力によりハッシュ値Ｈ（時刻証明対象値）も入力したものとする。
なお、検証対象データ入力部３３１が入力するデータの詳細は、具体例を紹介しながら後述する。
【００４３】
検証処理部３３２は、検証対象データ入力部３３１により入力されたデータを用いて検証対象のローカルタイムスタンプの検証を行う。
本実施の形態では、検証処理部３３２には、ハッシュチェーン判断部３３２１（一方向演算値連鎖判断部）、アクセス領域判断部３３２２（送信条件判断部）、ＴＳＡタイムスタンプ時刻差判断部３３２３（時刻差判断部）、デジタル署名照合部３３２４が含まれる。
以下、それぞれについて説明する。
【００４４】
ハッシュチェーン判断部３３２１は、ローカルサーバ１３０に蓄積された累積ハッシュ値のハッシュチェーンが構築できるかを判断する。
つまり、検証対象データ入力部３３１により入力された複数のハッシュ値、検証対象のローカルタイムスタンプ、先行ＴＳＡタイムスタンプから後行ＴＳＡタイムスタンプまでの間に生成されたローカルタイムスタンプを用いてハッシュ演算を行い、複数のハッシュ値が時系列に沿って連鎖するか否かを判断する。
【００４５】
アクセス領域判断部３３２２は、ローカルサーバ１３０がＴＳＡサーバ１５０への累積ハッシュ値の送信条件に従っているか、すなわちアクセス領域Ｌに含まれる累積ハッシュ値がＴＳＡサーバ１５０へ送信されていないという事態が生じていないかを判断する。
具体的には、検証対象データ入力部３３１により入力された複数のハッシュ値のうち先行累積ハッシュ値、後行累積ハッシュ値を除く他の累積ハッシュ値の各々が、アクセス領域Ｌ外であるかを判断する。
【００４６】
ＴＳＡタイムスタンプ時刻差判断部３３２３は、先行ＴＳＡタイムスタンプに示されている時刻と後行ＴＳＡタイムスタンプに示されている時刻との間の時刻差が妥当であるかを判断する。
具体的には、ＴＳＡタイムスタンプ時刻差判断部３３２３は、検証対象データ入力部３３１により入力された複数の累積ハッシュ値の個数とローカルサーバ１３０におけるローカルタイムスタンプの生成周期とを乗算し、乗算により得られた乗算値と、先行ＴＳＡタイムスタンプと後行ＴＳＡタイムスタンプ間の時刻差とを比較して、時刻差の妥当性を判断する。
【００４７】
デジタル署名照合部３３２４は、検証対象のローカルタイムスタンプにローカルサーバの検証鍵（第一タイムスタンプ検証鍵）を適用して得られた値と時刻証明対象値（発行要求Ｒ３０５に含まれていたハッシュ値Ｈ３０４）とを照合して、ローカルタイムスタンプが時刻証明対象値（ハッシュ値Ｈ３０４）のデジタル署名であるかどうかを判断する。
また、デジタル署名照合部３３２４は、デジタル署名値（署名ＳＩＧｓｋａ（Ｘ）３０３）に対してユーザの検証鍵（デジタル署名検証鍵）を適用して得られた値とユーザデータ（データ（Ｘ）３０１）とを照合して、当該デジタル署名値がユーザデータ（データ（Ｘ）３０１）のデジタル署名であるかを判断する。
【００４８】
また、図２３において、ユーザ入力部３３３は、検証装置３３０の利用者からの各種指示を入力する。
また、表示部３３４は、検証装置３３０の利用者に各種情報を表示する。
記憶部３３５は、例えば、検証対象データ入力部３３１により入力したデータを記憶し、また、検証処理部３３２の各部により検証された検証結果を記憶する。
【００４９】
図７は、ローカルサーバ１３０の記憶部２３６に格納された情報のうち、検証の際に必要な情報と各情報の間の前後関係とを示した図である。
図７に示される各情報は、検証装置３３０に入力され、検証に用いられる。
【００５０】
図７において、ローカルタイムスタンプＬＴＳｈ７０１はｈ番目のローカルタイムスタンプである。
ローカルタイムスタンプＬＴＳｈ＋１７０２は、ｈ＋１番目のローカルタイムスタンプである。
ローカルタイムスタンプＬＴＳｉ７０３は、ｉ番目のローカルタイムスタンプである。
ローカルタイムスタンプＬＴＳｊ７０４は、ｊ番目のローカルタイムスタンプである。
ローカルタイムスタンプＬＴＳｊ＋１７０５は、ｊ＋１番目のローカルタイムスタンプである。
累積ハッシュ値Ｌｈ−１７１１は、ｈ−１番目の累積ハッシュ値である。
累積ハッシュ値Ｌｈ７１２は、ｈ番目の累積ハッシュ値である。
累積ハッシュ値Ｌｈ＋１７１３は、ｈ＋１番目の累積ハッシュ値である。
累積ハッシュ値Ｌｉ−１７１４は、ｉ−１番目の累積ハッシュ値である。
累積ハッシュ値Ｌｉ７１５は、ｉ番目の累積ハッシュ値である。
累積ハッシュ値Ｌｊ−１７１６は、ｊ−１番目の累積ハッシュ値である。
累積ハッシュ値Ｌｊ７１７は、ｊ番目の累積ハッシュ値である。
ＴＳＡタイムスタンプＴＴＳｈ７２１は、累積ハッシュ値Ｌｈ７１２に対するＴＳＡタイムスタンプである。
ＴＳＡタイムスタンプＴＴＳｊ７２２は、累積ハッシュ値Ｌｊ７１６に対するＴＳＡタイムスタンプである。
ここで、ｈ＜ｉ≦ｊである。
なお、ＴＳＡタイムスタンプＴＴＳｈ７２１はローカルタイムスタンプＬＴＳｉ７０３の直前のＴＳＡタイムスタンプとし、ＴＳＡタイムスタンプＴＴＳｊ７２２はローカルタイムスタンプＬＴＳｉ７０３の直後のＴＳＡタイムスタンプとする。
【００５１】
図７の例において、ローカルタイムスタンプＬＴＳｉ７０３を検証対象のローカルタイムスタンプとした場合に、ＴＳＡタイムスタンプＴＴＳｈ７２１が先行ＴＳＡタイムスタンプ（先行第２タイムスタンプ）となり、ＴＳＡタイムスタンプＴＴＳｊ７２２が後行ＴＳＡタイムスタンプ（後行第２タイムスタンプ）となる。
また、累積ハッシュ値Ｌｈ７１２はＴＳＡタイムスタンプＴＴＳｈ７２１の時刻証明の対象の累積ハッシュ値であり、先行累積ハッシュ値（先行一方向演算値）となる。
また、累積ハッシュ値Ｌｊ７１７はＴＳＡタイムスタンプＴＴＳｊ７２２の時刻証明の累積ハッシュ値であり、後行累積ハッシュ値（後行一方向演算値）となる。
また、累積ハッシュ値Ｌｈ７１２から累積ハッシュ値Ｌｊ７１７までの複数の累積ハッシュ値（対象区間一方向演算値）も検証装置３３０への入力対象となる。
更に、ＴＳＡタイムスタンプＴＴＳｈ７２１の生成後からＴＳＡタイムスタンプＴＴＳｊ７２２の生成前までに生成されたＬＴＳｈ＋１７０２〜ＬＴＳｊ７０４のローカルタイムスタンプ（対象区間第１タイムスタンプ）も検証装置３３０への入力対象となる。
【００５２】
図８は検証装置３３０がローカルタイムスタンプの検証を行う手順を示したフローチャートである。
以下、検証装置３３０が、あるユーザＡ１ａが作成したデータＸの作成時刻およびその後の改竄の有無を、データＸのローカルタイムスタンプＬＴＳｉ７０３などの情報をもとに検証する方法を説明する。
【００５３】
まず、ステップ８０１にて、検証装置３３０の検証対象データ入力部３３１が、ユーザＡ１ａおよびローカルサーバ１３０から検証に必要な情報を入手する（検証対象データ入力ステップ）。
具体的には、ユーザＡ１ａから、データＸ、データＸのデジタル署名ＳＩＧｓｋａ（Ｘ）、ユーザの検証鍵（ＩＣカードに記憶されている検証鍵）と、データＸに対応するローカルタイムスタンプＬＴＳｉ７０３を入手する。
また、ローカルサーバ１３０に対してデジタル署名ＳＩＧｓｋａ（Ｘ）に基づく発行要求Ｒを送り、ローカルサーバ１３０から、ローカルタイムスタンプＬＴＳｉ７０３の直前のＴＳＡタイムスタンプＴＴＳｈ７２１、直後のＴＳＡタイムスタンプＴＴＳｊ７２２、およびその間のすべての累積ハッシュ値Ｌｈ７１２、Ｌｈ＋１７１３、…、Ｌｊ−１７１６、Ｌｊ７１７、さらには、その間のすべてのローカルタイムスタンプＬＴＳｈ＋１７０２、…、ＬＴＳｊ７０４を入手する。また、ローカルサーバ１３０から、ローカルタイムスタンプＬＴＳｉ７０３生成時のデジタル署名に用いた署名鍵に対応するローカルサーバの検証鍵も入手する。
【００５４】
次に、ハッシュチェーン判断部３３２１が、ステップ８０２にて、ローカルサーバから入手した累積ハッシュ値Ｌｈ７１２、Ｌｈ＋１７１３、…、Ｌｊ−１７１６、Ｌｊ７１７、ローカルタイムスタンプＬＴＳｈ＋１７０２、…、ＬＴＳｊ７０４から図７のようなハッシュチェーンが構築できるかを調べる。具体的には、先の順序の累積ハッシュ値（例えば、Ｌｈ）にローカルタイムスタンプ（例えばＬＴＳｈ＋１）を連結してハッシュ演算を行って、後の順序の累積ハッシュ値（例えばＬｈ＋１）が得られるかを判断する。時系列に沿って順次累積ハッシュ値に対してこの演算を行って、全ての累積ハッシュ値が連鎖するかどうかを判断する。
もし、ハッシュチェーンが構築できなければ、ローカルサーバによるローカルタイムスタンプの改竄があったことが検知されるので、検証失敗とする（ステップ８０８）。
【００５５】
次に、アクセス領域判断部３３２２が、ステップ８０３にて、ＴＳＡタイムスタンプの時刻証明の対象となっていない累積ハッシュ値Ｌｈ＋１７１３、…、Ｌｊ−１７１６がすべてアクセス領域Ｌの領域外の値であるかを調べる。
もし、アクセス領域Ｌの領域内の値が存在すれば、ローカルサーバ１３０が本来ＴＳＡタイムスタンプを受領すべきにもかかわらず受領していないことが検知されるので、検証失敗とする（ステップ８０８）。
【００５６】
次に、ステップ８０４にて、ＴＳＡタイムスタンプ時刻差判断部３３２３が、累積ハッシュの数と、ＴＳＡタイムスタンプＴＴＳｈ７２１およびＴＳＡタイムスタンプＴＴＳｊ７２２の時間差とが矛盾しないかを調べる。
両ＴＳＡタイムスタンプの時間差をΔとし、ローカルタイムスタンプの発行周期をτとすると、Δ＝（ｊ−ｈ）・τが成り立っていなければならない。
もし、Δと（ｊ−ｈ）・τの差が許容し得る範囲（閾値）を超えている場合には、本来取得すべき時刻とは異なる時刻にＴＳＡタイムスタンプを受領していたことが分かり、したがってユーザとローカルサーバ管理者の結託によるタイムスタンプの改竄があったことが検知されるので、検証失敗とする（ステップ８０８）。
一方、許容すべき範囲内であれば、ローカルタイムスタンプＬＴＳｉ７０３は確かに図７に示された前後関係に位置するローカルタイムスタンプであることが確認できる。
したがって、この段階でローカルタイムスタンプＬＴＳｉ７０３の発行時刻を確認できたことになる。
【００５７】
続いて、デジタル署名照合部３３２４が、ステップ８０５にて、ローカルサーバ１３０の検証鍵を用いて、このローカルタイムスタンプＬＴＳｉ７０３がＳＩＧｓｋａ（Ｘ）のハッシュ値Ｈに対するデジタル署名であるかを調べる。
つまり、ローカルサーバ１３０の検証鍵を用いてローカルタイムスタンプＬＴＳｉ７０３を復号し、復号値がＳＩＧｓｋａ（Ｘ）のハッシュ値Ｈと一致するか否かを照合する。
もし、ハッシュ値Ｈに対するデジタル署名でなければ、このローカルタイムスタンプがデータＸに対するものでないことが検知されるので、検証失敗とする（ステップ８０８）。
【００５８】
最後に、デジタル署名照合部３３２４が、ステップ８０６にて、ユーザの検証鍵を用いて、ＳＩＧｓｋａ（Ｘ）がデータＸのデジタル署名であるかを調べる。
具体的には、ユーザの検証鍵を用いてデジタル署名ＳＩＧｓｋａ（Ｘ）を復号し、復号値がデータＸのハッシュ値と一致するか否かを照合する。
ＳＩＧｓｋａ（Ｘ）がデータＸのデジタル署名でなければ、このユーザＡ１ａのデータではないことが検知されるので、検証失敗とする（ステップ８０８）。
データＸのデジタル署名であれば、検証に成功する（ステップ８０７）。
【００５９】
なお、図８の構成では、検証失敗の場合同一のステップ８０８に至るとしているが、これを検証失敗となったステップごとに異なる検証失敗時の処理を行う構成としてもよい。
【００６０】
また、ステップ８０１で検証者はローカルサーバ１３０に対して発行要求Ｒを送り、必要な情報を入手する構成としたが、ローカルサーバがローカルタイムスタンプの発行ごとにあるいは定期的にこれらの情報を公開サーバにアップロードし、必要に応じて検証装置３３０が自由に参照できる構成としてもよい。
【００６１】
以上の検証方法により、次のような不正をある確率で検出することができる。
あるユーザが時刻ｉにデータＸを作成し、ローカルタイムスタンプＬＴＳｉ７０３を受け取ったとする。その後時刻ｊ（ｊ＞ｉ）において、このローカルタイムスタンプＬＴＳｉ７０３を改竄し、データＹに対するローカルタイムスタンプであったことにしたいとする。
もし時刻ｉから時刻ｊの間にＴＳＡサーバへのアクセスが発生していたならば、もはやＬＴＳｉ７０３の改竄はできない。
しかし、そうでなければ改竄できる可能性がある。
ユーザはローカルサーバ管理者に依頼し、ＬＴＳｉ７０３を改竄してもらう。
ローカルサーバ管理者はローカルタイムスタンプ発行用の署名鍵ｓｋ４０１を所有しているため、これは可能である。
ところが、この改竄により、ローカルサーバ管理者は時刻ｉ以降時刻ｊに至るまでの累積ハッシュ値を再計算しなければならなくなる。
すると、再計算された累積ハッシュはある確率でアクセス領域Ｌの領域内の値となる。
たとえこのような累積ハッシュに対してＴＳＡタイムスタンプを受領したとしても、それは現在時刻すなわち時刻ｊにおけるＴＳＡタイムスタンプであり、本来受領すべき時刻のものではない。
そのため、この改竄は図８のステップ８０４により検出されてしまう。
一方、ＴＳＡタイムスタンプを受領しなかったとしたら、図８のステップ８０３により改竄を検出されてしまう。
また、このようにアクセス領域Ｌの領域内に含まれた累積ハッシュ値をＬｋ（ｉ＜ｋ＜ｊ）として、時刻ｋにおけるデータを改竄することによりＬｋをアクセス領域外の値になるようにしようとしても、それはそのデータを作成したユーザとの結託をしない限り不可能である。
なぜならば、データを書き換えるにはそのユーザの署名が必要だからである。以上のことから、過去のローカルタイムスタンプの改竄をある確率で検出することができる。
【００６２】
このように、本実施の形態によれば、ローカルタイムスタンプの発行により、データの前後関係を保証しつつ、ＴＳＡサーバへのアクセスを削減することが可能になり、ＴＳＡタイムスタンプの発行コストの削減やネットワークトラフィックの抑制を図ることができる。
【００６３】
また、ユーザとローカルサーバ管理者の結託によるローカルタイムスタンプの改竄をある確率で検出することができるので、ローカルサーバ管理者が信用できない場合においても信頼性を確保することができる。
【００６４】
実施の形態２．
本発明の実施の形態２は、本発明の実施の形態１において定期的に発行していたローカルタイムスタンプの発行方式を、ローカルタイムスタンプの発行要求が到着するごとに発行する方式としたものである。
【００６５】
図９は本発明の実施の形態２における各装置の内部構成図である。
図２に示した本発明の実施の形態１における各装置の内部構成図とほぼ同一であるが、タイマ部２３４が省略されている点が異なる。
【００６６】
（タイムスタンプの生成）
図１０は本発明の実施の形態２におけるローカルタイムスタンプの発行手順を示すフローチャートである。
図１０において、累積ハッシュ値の更新６００ｂは図６に示した実施の形態１におけるローカルタイムスタンプの発行手順と同一である。
【００６７】
図４、図９および図１０により、本発明の実施の形態２におけるローカルタイムスタンプの発行手順を説明する。
ただし、累積ハッシュ値の更新過程６００ｂについては図６と同一であるから説明を省略し、ローカルタイムスタンプの生成過程１０００のみ説明する。
ステップ１００１にて、ローカルサーバ１３０では、ローカルタイムスタンプ生成部２３３が、コンピュータ１２０ａからのローカルタイムスタンプの発行要求Ｒ３０５を受付部２３５から受け取る。
これは、ローカルタイムスタンプ生成部３２２が受付部２３５を常に監視することにより、入出力部２３７により発行要求Ｒ３０５が受信される度に、ローカルタイムスタンプの生成処理が行われる。
次に、ステップ１００２にて、ローカルタイムスタンプ生成部２３３が、発行要求Ｒ３０５からハッシュ値Ｈ３０４を抜き出す。
ステップ１００３にて、ローカルタイムスタンプ生成部２３３は、ハッシュ値Ｈ３０４に対し、記憶部２３６に格納された署名鍵ｓｋ４０１および関連情報Ｉ４０２を用いてローカルタイムスタンプＬＴＳ４０３を生成する。
そして、ステップ１００４にて、ローカルタイムスタンプ生成部２３３は、ローカルタイムスタンプＬＴＳ４０３をコンピュータに送るとともに、ステップ１００５にて発行要求Ｒ３０５とローカルタイムスタンプＬＴＳ４０３を記憶部２３６に格納する。
【００６８】
（タイムスタンプの検証）
図１１は、本発明の実施の形態２におけるローカルタイムスタンプの検証方法を示したフローチャートである。
図８に示した本発明の実施の形態１における検証方法と比較すると、ステップ８０４の累積ハッシュ数とＴＳＡタイムスタンプの時間差との比較が省略されている。
また、図２４は、本実施の形態に係る検証装置３３０の構成例を示すものであるが、実施の形態１に示した図２３と比較すると、ＴＳＡタイムスタンプ時刻差判断部３３２３が省略されている。
これは、実施の形態１では定期的にローカルタイムスタンプを発行していたため、この比較を行うことによりローカルサーバ管理者とユーザの結託によるローカルタイムスタンプの改竄を検出することができたが、実施の形態２では不定期にローカルタイムスタンプを発行するため、このような比較ができないことによる。
このため、ローカルタイムスタンプの発行時刻を特定することはできない。
しかしながら、ローカルタイムスタンプ間の前後関係については保証し得る。上記の部分を除いては、実施の形態２における検証は実施の形態１における検証と同様である。
【００６９】
本実施の形態によれば、ローカルタイムスタンプの発行により、データの前後関係を保証しつつ、ＴＳＡサーバへのアクセスを削減することが可能になり、ＴＳＡタイムスタンプの発行コストの削減やネットワークトラフィックの抑制を図ることができる。
【００７０】
また、ローカルタイムスタンプの発行要求が出されると、即時にローカルタイムスタンプを発行するため、ユーザの待ち時間を低減することができる。
【００７１】
実施の形態３．
本発明の実施の形態１および２は、ユーザがＩＣカードを所持し、作成したデータに署名を付けることで事後の改竄を困難にする方式であったが、実施の形態３はＴＳＡサーバへのアクセスに合わせてローカルサーバの署名鍵を更新することにより事後の改竄を困難にする方式である。
【００７２】
図１２は、本発明の実施の形態３におけるタイムスタンプ生成システムの構成図である。
本発明の実施の形態１および２におけるタイムスタンプ生成システムの構成図である図１と比較して、各ユーザはＩＣカードを必要とせず、したがってＩＣカードＲ／Ｗも必要としない。
その他の部分は図１と同一である。
【００７３】
図１３は、図１２の各構成要素の内部構成図である。
ＩＣカードおよびＩＣカードＲ／Ｗの部分が省略され、ローカルサーバ１３０に鍵生成部２３８が追加された点以外は、本発明の実施の形態１における内部構成図である図２と同一である。
【００７４】
鍵生成部２３８は、アクセス制御部２３１により累積ハッシュ値がアクセス領域Ｌに合致していると判断される度に、ローカルタイムスタンプ生成部２３３によるローカルタイムスタンプの生成の際のデジタル署名に用いられる署名鍵を生成する。
本実施の形態では、記憶部２３６は、鍵生成部２３８により生成された署名鍵を記憶し、鍵生成部２３８は、新たに署名鍵を生成する度に、新たな署名鍵の生成の際に記憶部２３６に記憶されている既存の署名鍵に代えて新たな署名鍵を記憶部２３６に記憶させる。つまり、記憶部２３６に記憶されている署名鍵は鍵生成部２３８により新たに署名鍵が生成される度に削除され、最新の署名鍵だけが記憶部２３６に記憶される。
そして、本実施の形態では、ローカルタイムスタンプ生成部２３３は、記憶部２３６に記憶されている署名鍵を用いてデジタル署名を行って、ローカルタイムスタンプを生成する。
また、鍵生成部２３８は、新たに署名鍵を生成する度に、当該新たな署名鍵と対になる検証鍵を生成し、更に、新たな署名鍵の生成の際に記憶部２３６に記憶されている既存の署名鍵を用いて、新たに生成した検証鍵のデジタル署名を公開鍵証明書（検証鍵証明書）として生成する。
そして、記憶部２３６は、新たに生成した署名鍵、検証鍵及び公開鍵証明書を記憶する。
前述したように、署名鍵については、以前の署名鍵は削除され、最新の署名鍵だけが記憶されるが、検証鍵、公開鍵証明書については以前のものは削除されず、検証鍵、公開鍵証明書は作成される度に記憶部２３６に順次蓄積されていく。
また、後述するように、記憶部２３６に順次蓄積された複数の公開鍵証明書は、時系列に沿って連鎖しており、公開鍵証明書チェーンが構築される。
【００７５】
図１４は、ユーザがデータを作成しローカルタイムスタンプの発行要求を生成するまでのデータの流れを示した図である。
本発明の実施の形態１および２におけるデータの流れを示した図３と比較して、ＩＣカードおよびＩＣカードＲ／Ｗの部分が無いこと、およびハッシュ値Ｈ３０４の元データがデータＸ３０１そのものである点以外は図３と同一である。
【００７６】
図１５は、ローカルサーバが発行要求を受信してから、ローカルタイムスタンプを発行して累積ハッシュ値を更新し、署名鍵を更新して公開鍵証明書を作成するまでのデータの流れを示した図である。
【００７７】
図１５において、署名鍵ｓｋι−１１５０１はローカルサーバのι−１番目の署名鍵であり、検証鍵ｖｋι−１１５０２はそれに対応する検証鍵である。
署名鍵ｓｋι１５０３はローカルサーバのι番目の署名鍵であり、検証鍵ｖｋι１５０４はそれに対応する検証鍵である。
公開鍵証明書ＣＥＲι１５０５は検証鍵ｖｋι１５０４に対し署名鍵ｓｋι−１１５０１を用いて作成した公開鍵証明書であり、検証鍵ｖｋι−１１５０２を用いて検証することができる。つまり、公開鍵証明書ＣＥＲι１５０５を検証鍵ｖｋι−１１５０２で復号すれば、復号値は検証鍵ｖｋι１５０４に一致することになる。
検証鍵ｖｋι−１１５０２に対しても図示しない公開鍵証明書ＣＥＲι−１が発行されており、これは図示しない検証鍵ｖｋι−２を用いて検証することができる。
このようにして公開鍵証明書のチェーンＣＥＲι、ＣＥＲι−１、…、ＣＥＲ１が構築される。
最初の公開鍵証明書ＣＥＲ１は署名鍵ｓｋ０によって作成され、検証鍵ｖｋ０を用いて検証されるが、この検証鍵については信頼できるＣＡ（Ｃｅｒｔｉｆｉｃａｔｅ  Ａｕｔｈｏｒｉｔｙ）から公開鍵証明書を発行され、検証者が信認しうるものである。
これら及び鍵生成部２３８が追加されている以外の部分については図４と同一である。
【００７８】
なお、検証鍵ｖｋ０は必ずしも公開鍵証明書を発行されている必要はなく、検証者が信認できるものであればよい。
【００７９】
（タイムスタンプの生成）
次に、図１４乃至図１７を用いて、本発明の実施の形態３におけるタイムスタンプ生成方法を説明する。
ここでは、ユーザＡ１ａが作成したデータに対するタイムスタンプ生成方法を説明するが、他のユーザの場合も同様である。
【００８０】
図１６は、ユーザがデータを作成してから、ローカルサーバ１３０よりローカルタイムスタンプを受領し記憶部２２４に格納するまでの動作を示すフローチャートである。
【００８１】
ユーザは図示しないキーボードやマウスなどのコンピュータ操作用機器を用いてコンピュータ１２０ａに対する操作を行い、データＸ３０１を作成あるいは修正したものとする。
ユーザがローカルタイムスタンプの発行要求を指示すると、ステップ１６０１においてコンピュータ１２０ａはデータＸ３０１からハッシュ値Ｈ３０４を計算する。
この計算はＨ＝ｈａｓｈ（Ｘ）により行う。
次に、ステップ１６０２にて、ハッシュ値Ｈ３０４から発行要求Ｒ３０５を作成する。そしてステップ１６０３にて発行要求Ｒ３０５をローカルサーバ１３０に送る。
ステップ１６０４にて、ローカルサーバから返ってきたローカルタイムスタンプＬＴＳ４０３を記憶部２２４に格納する。
【００８２】
なお、上記説明ではユーザがタイムスタンプの発行要求の作成をコンピュータに指示するものとして説明したが、コンピュータがある規則に基づいて自発的に発行要求を作成する構成であってもよい。
【００８３】
図１７は、ローカルサーバ１３０がローカルタイムスタンプＬＴＳ４０３を発行する際の手順を示すフローチャートである。
ローカルサーバ１３０は、図１７に示された処理を無限回繰り返すが、ここではｉ回目の処理を例に説明する。
また、現在の署名鍵をｓｋι−１１５０１とする。
なお、処理の中で累積ハッシュ値の更新を行うが、処理を行う前の段階での最新の累積ハッシュ値はＬｉ−１４０４であり、Ｌｉ４０５は更新後の累積ハッシュ値であることに注意されたい。
【００８４】
図１７の処理は主にローカルタイムスタンプの生成６００ａと累積ハッシュ値および署名鍵・検証鍵の更新１７００ａから成り立っている。
このうちローカルタイムスタンプの生成６００ａに関しては図６と同一である。
【００８５】
累積ハッシュ値および署名鍵・検証鍵の更新１７００ａを説明する。
ステップ６０８にて、累積ハッシュ値演算部２３２が、ローカルタイムスタンプＬＴＳ４０３を用いて新しい累積ハッシュ値を計算する（擬似ランダム値生成ステップ）。
具体的には、Ｌｉ＝ｈａｓｈ（Ｌｉ−１‖ＬＴＳ）によりｉ番目の累積ハッシュ値を計算する。
次に、ステップ６０９にて、アクセス制御部２３１において累積ハッシュ値Ｌｉ４０５がアクセス領域Ｌ内の値であるかを判定する（アクセス制御ステップ）。ここでアクセス領域ＬはＴＳＡサーバ１５０にアクセスすべき累積ハッシュ値の集合であり、あらかじめローカルサーバの管理者が定めたものであって、詳細は実施の形態１で述べたとおりである。
累積ハッシュ値Ｌｉ４０５がアクセス領域Ｌ内にあるとき、すなわちＬｉ∈Ｌのとき、まずステップ１７０１にて、鍵生成部２３８が、記憶部２３６内において新しい署名鍵ｓｋι１５０３および検証鍵ｖｋι１５０４を生成し、記憶部２３６に記憶させる。
続いて、鍵生成部２３８は、ステップ１７０２にて、現在の署名鍵ｓｋι−１１５０１を用いて新しい検証鍵ｖｋι１５０４の公開鍵証明書ＣＥＲι１５０５を生成し、記憶部２３６に記憶させる。
続いて、記憶部２３６が、ステップ１７０３にて、現在の署名鍵ｓｋι−１１５０１を消去する。
次に、アクセス制御部２３１が、ステップ１７０４にて、累積ハッシュ値Ｌｉ４０５をＴＳＡサーバ１５０に送る（アクセス制御ステップ）。
ステップ１７０５にて、アクセス制御部２３１が、ＴＳＡサーバ１５０から累積ハッシュ値Ｌｉ４０５に対するＴＳＡタイムスタンプを受け取り（アクセス制御ステップ）、ステップ１７０６にてＴＳＡタイムスタンプを記憶部２３６に格納する。
さらに、アクセス制御部２３１は、ステップ１７０７にて累積ハッシュ値Ｌｉ４０５を記憶部２３６に格納する。
【００８６】
ステップ６０９にて累積ハッシュ値Ｌｉ４０５がアクセス領域Ｌ内の値でなかった場合、署名鍵・検証鍵の更新とＴＳＡへのアクセスは行わずに、アクセス制御部２３１は、ステップ１７０７にて累積ハッシュ値Ｌｉ４０５を記憶部２３６に格納する。
【００８７】
なお、ここでは、累積ハッシュ値がアクセス領域Ｌに該当する場合のみ署名鍵・検証鍵の更新とＴＳＡサーバ１５０へのアクセスを行うとしたが、これに別の判断基準、例えば最後にＴＳＡサーバ１５０にアクセスしてからのカウント数が一定値に達した場合などを加え、各判断基準のうちいずれか一つが合致すれば署名鍵・検証鍵を更新しＴＳＡサーバ１５０にアクセスする構成としてもよい。
【００８８】
また、署名鍵および検証鍵の更新（１７００ｂ）に関しては、累積ハッシュ値がアクセス領域内の値であるという条件に、これとは別の判断基準、例えば最後に鍵更新してからのカウント数が一定値に達した場合などを加え、各判断基準のうちいずれか一つが合致すれば署名鍵および検証鍵の更新（１７００ｂ）を行う構成としてもよい。
つまり、累積ハッシュ値がアクセス領域Ｌに含まれないために署名鍵の生成が連続して所定数の累積ハッシュ値に対して行われなかった場合に、新たに生成された累積ハッシュ値がアクセス領域Ｌに含まれないとアクセス制御部２３１により判断された場合であっても、鍵生成部２３８は、署名鍵の生成を行うようにしてもよい。
このような構成にすることで、より改竄が困難になることが、後述するタイムスタンプの検証過程から理解される。
【００８９】
また、ステップ１７０４にて累積ハッシュ値をＴＳＡサーバ１５０に送信したが、これに加えてその時点での検証鍵をも送信し、ＴＳＡサーバ１５０から累積ハッシュ値及び検証鍵に対するＴＳＡタイムスタンプを受信するようにしてもよい。
これにより、後述する検証過程での公開鍵証明書チェーンの構築を簡略化することができる。
【００９０】
上記説明では、ユーザとローカルサーバ管理者とを区別したが、ローカルサーバ管理者がユーザと同じようにデータを作成する構成であってもよい。
したがって、例えばユーザが存在せず、コンピュータ１２０ａの機能がローカルサーバ１３０内に統合されていて、ローカルサーバ管理者が単独で本システムを用いる方式であってもよい。
【００９１】
（タイムスタンプの検証）
次に、図１５乃至図１９及び図２５を用いてローカルタイムスタンプの検証方法を述べる。
【００９２】
まず、図２５を参照して、本実施の形態に係る検証装置３３０について説明する。
図２５に示す構成では、実施の形態１にて示した図２３の構成と比較して、証明書チェーン判断部３３２５（検証鍵証明書連鎖判断部）が追加されている。
また、本実施の形態では、検証対象データ入力部３３１は、ローカルサーバ１３０に記憶されている複数の検証鍵及び複数の公開鍵証明書を入力する。
また、デジタル署名照合部３３２４は、ローカルタイムスタンプのデジタル署名の正当性のみを判断する。
その他の要素は、図２３に示したものと同様である。
【００９３】
証明書チェーン判断部３３２５は、検証対象データ入力部３３１により入力された複数の検証鍵及び複数の公開鍵証明書を用いて、公開鍵証明書チェーンが構築できるか、すなわち、複数の公開鍵証明書が時系列に沿って連鎖するか否かを判断する。
【００９４】
図１８は、ローカルサーバ１３０の記憶部２３６に格納された情報のうち、検証の際に必要な情報と各情報の間の前後関係とを示した図である。
図１８において、ローカルタイムスタンプＬＴＳｈ１８０１は、ｈ番目のローカルタイムスタンプである。
ローカルタイムスタンプＬＴＳｈ＋１１８０２は、ｈ＋１番目のローカルタイムスタンプである。
ローカルタイムスタンプＬＴＳｉ１８０３は、ｉ番目のローカルタイムスタンプである。
ローカルタイムスタンプＬＴＳｊ１８０４は、ｊ番目のローカルタイムスタンプである。
ローカルタイムスタンプＬＴＳｊ＋１１８０５は、ｊ＋１番目のローカルタイムスタンプである。
累積ハッシュ値Ｌｈ−１１８１１は、ｈ−１番目の累積ハッシュ値である。
累積ハッシュ値Ｌｈ１８１２は、ｈ番目の累積ハッシュ値である。
累積ハッシュ値Ｌｈ＋１１８１３は、ｈ＋１番目の累積ハッシュ値である。
累積ハッシュ値Ｌｉ−１１８１４は、ｉ−１番目の累積ハッシュ値である。
累積ハッシュ値Ｌｉ１８１５は、ｉ番目の累積ハッシュ値である。
累積ハッシュ値Ｌｊ−１１８１６は、ｊ−１番目の累積ハッシュ値である。
累積ハッシュ値Ｌｊ１８１７は、ｊ番目の累積ハッシュ値である。
ＴＳＡタイムスタンプＴＴＳｈ１８２１は、累積ハッシュ値Ｌｈ１８１２に対するＴＳＡタイムスタンプである。
ＴＳＡタイムスタンプＴＴＳｊ１８２２は、累積ハッシュ値Ｌｊ１８１６に対するＴＳＡタイムスタンプである。
ここで、ｈ＜ｉ≦ｊである。
なお、ＴＳＡタイムスタンプＴＴＳｈ１８２１はローカルタイムスタンプＬＴＳｉ１８０３の直前のＴＳＡタイムスタンプとし、ＴＳＡタイムスタンプＴＴＳｊ１８２２はローカルタイムスタンプＬＴＳｉ１８０３の直後のＴＳＡタイムスタンプとする。
【００９５】
同じく図１８において、署名鍵ｓｋ１１８３１は、１番目の署名鍵である。
署名鍵ｓｋ２は、２番目の署名鍵である。
署名鍵ｓｋι−１１８３３は、ι−１番目の署名鍵である。
署名鍵ｓｋι１８３４は、ι番目の署名鍵である。
なお、署名鍵ｓｋι１８３４に先行する署名鍵ｓｋ１１８３１〜署名鍵ｓｋι−１１８３３は、この時点では既に消去されており、これらの署名鍵の実体は存在しない。
検証鍵ｖｋ１１８３５は、１番目の検証鍵である。
検証鍵ｖｋ２１８３６は、２番目の検証鍵である。
検証鍵ｖｋι―１１８３７は、ι−１番目の検証鍵である。
検証鍵ｖｋι１８３８は、ι番目の検証鍵である。
公開鍵証明書ＣＥＲ１１８３９は、検証鍵ｖｋ１１８３５に対する公開鍵証明書である。
公開鍵証明書ＣＥＲ２１８４０は、検証鍵ｖｋ２１８３６に対する公開鍵証明書である。
公開鍵証明書ＣＥＲι−１１８４１は、検証鍵ｖｋι−１１８３７に対する公開鍵証明書である。
公開鍵証明書ＣＥＲι１８４２は、検証鍵ｖｋι１８３８に対する公開鍵証明書である。
公開鍵証明書ＣＥＲ１１８３９は、ＣＡが発行するものとする。
【００９６】
図１９は検証者がローカルタイムスタンプの検証を行う手順を示したフローチャートである。
【００９７】
以下、検証装置３３０が、あるユーザが作成したデータＸの作成時刻およびその後の改竄の有無を、データＸのローカルタイムスタンプＬＴＳｉ１８０３やローカルタイムスタンプＬＴＳｉ１８０３を検証するための検証鍵ｖｋι１８３８などの情報をもとに検証する方法を説明する。
【００９８】
まず、ステップ１９０１にて、検証装置３３０の検証対象データ入力部３３１は、ユーザおよびローカルサーバ１３０から検証に必要な情報を入手する（検証対象データ入力ステップ）。
具体的には、ユーザからデータＸに対応するローカルタイムスタンプＬＴＳｉ１８０３を入手する。
また、ローカルサーバ１３０に対してハッシュ値Ｈに基づく発行要求Ｒを送り、ローカルサーバ１３０から、ローカルタイムスタンプＬＴＳｉ１８０３の直前のＴＳＡタイムスタンプＴＴＳｈ１８２１、直後のＴＳＡタイムスタンプＴＴＳｊ１８２２、およびその間のすべての累積ハッシュ値Ｌｈ１８１２、Ｌｈ＋１１８１３、…、Ｌｊ−１１８１６、Ｌｊ１８１７、さらには、その間のすべてのローカルタイムスタンプＬＴＳｈ＋１１８０２、…、ＬＴＳｊ１８０４、さらには、ローカルタイムスタンプＬＴＳｉ１８０３を検証するための検証鍵ｖｋι１８３８、およびそれに至るまでのすべての検証鍵ｖｋ１１８３５、ｖｋ２１８３６、…、ｖｋι−１１８３７、さらには、検証鍵ｖｋι１８３８の公開鍵証明書ＣＥＲι１８４２、およびそれに至るまでのすべての公開鍵証明書ＣＥＲ１１８３９、ＣＥＲ２１８４０、…、ＣＥＲι−１１８４１を入手する。
【００９９】
次に、ハッシュチェーン判断部３３２１が、ステップ１９０２にて、ローカルサーバから入手した累積ハッシュ値Ｌｈ１８１２、Ｌｈ＋１１８１３、…、Ｌｊ−１１８１６、Ｌｊ１８１７、ローカルタイムスタンプＬＴＳｈ＋１１８０２、…、ＬＴＳｊ１８０４から図１８のようなハッシュチェーンが構築できるかを調べる（一方向演算値連鎖判断ステップ）。
もし構築できなければ、ローカルサーバによるローカルタイムスタンプの改竄があったことが検知されるので、検証失敗とする（ステップ１９０８）。
【０１００】
次に、アクセス領域判断部３３２２が、ステップ１９０３にて、累積ハッシュ値Ｌｈ＋１１８１３、…、Ｌｊ−１１８１６がすべてアクセス領域Ｌの領域外の値であるかを調べる（送信条件判断ステップ）。
もし、アクセス領域Ｌの領域内の値が存在すれば、ローカルサーバが本来ＴＳＡタイムスタンプを受領すべきにもかかわらず受領していないことが検知されるので、検証失敗とする（ステップ１９０８）。
【０１０１】
次に、ＴＳＡタイムスタンプ時刻差判断部３３２３が、ステップ１９０４にて、累積ハッシュの数と、ＴＳＡタイムスタンプＴＴＳｈ１８２１およびＴＳＡタイムスタンプＴＴＳｊ１８２２の時間差とが矛盾しないかを調べる。
両ＴＳＡタイムスタンプの時間差をΔとし、ローカルタイムスタンプの発行周期をτとすると、Δ＝（ｊ−ｈ）・τが成り立っていなければならない。
もし、Δと（ｊ−ｈ）・τの差が許容し得る範囲（閾値）を超えている場合は、本来取得すべき時刻とは異なる時刻にＴＳＡタイムスタンプを受領していたことが分かり、したがってユーザとローカルサーバ管理者の結託によるタイムスタンプの改竄があったことが検知されるので、検証失敗とする（ステップ１９０８）。
一方、許容すべき範囲内であれば、ローカルタイムスタンプＬＴＳｉ１８０３は確かに図１８に示された前後関係に位置するローカルタイムスタンプであることが確認できる。
したがって、この段階でローカルタイムスタンプＬＴＳｉ１８０３の発行時刻を確認できたことになる。
【０１０２】
続いて、デジタル署名照合部３３２４が、ステップ１９０５にて、検証鍵ｖｋι１８３８を用いて、このローカルタイムスタンプＬＴＳｉ１８０３がデータＸのハッシュ値Ｈに対するデジタル署名であるかを調べる（デジタル署名照合ステップ）。
もしハッシュ値Ｈに対するデジタル署名でなければ、このローカルタイムスタンプがデータＸに対するものでないことが検知されるので、検証失敗とする（ステップ１９０８）。
【０１０３】
最後に、証明書チェーン判断部３３２５が、ステップ１９０６にて、図１８のような公開鍵証明書チェーンが構築できるかを調べる。
もし、構築できなければ、途中で不正な署名鍵によりローカルタイムスタンプの発行が行われたことが検知されるので、検証失敗とする（ステップ１９０８）。
構築できれば、検証に成功する（ステップ１９０７）。
【０１０４】
なお、図１９の構成では、検証失敗の場合同一のステップ１９０８に至るとしているが、これを検証失敗となったステップごとに異なる検証失敗時の処理を行う構成としてもよい。
【０１０５】
また、ステップ１９０１で検証装置３３０はローカルサーバ１３０に対して発行要求Ｒを送り、必要な情報を入手する構成としたが、ローカルサーバがローカルタイムスタンプの発行ごとにあるいは定期的にこれらの情報を公開サーバにアップロードし、必要に応じて検証者が自由に参照できる構成としてもよい。
【０１０６】
また、ステップ１９０６で先頭の公開鍵証明書ＣＥＲ１１８３９にいたるまでの公開鍵証明書チェーンを構築したが、もし途中でＴＳＡサーバ１５０からその時点での検証鍵に対するＴＳＡタイムスタンプが発行されていれば、その検証鍵に対応した公開鍵証明書に至るまでの公開鍵証明書チェーンを構築し、それをもって検証成功（ステップ１９０７）と判定する構成としてもよい。
つまり、ＴＳＡサーバ１５０から検証鍵に対するＴＳＡタイムスタンプが発行されている場合は、検証対象データ入力部３３１は、最新の検証鍵及び最新の公開鍵証明書から、ＴＳＡサーバ１５０によりＴＳＡタイムスタンプが生成されている検証鍵及び当該検証鍵に対応する検証鍵証明書までの検証鍵及び公開鍵証明書を入力し、証明書チェーン判断部３３２５は、検証対象データ入力部３３１により入力された公開鍵証明書において公開鍵証明書チェーンが構築できるかを判断する。
【０１０７】
以上の検証方法により、次のような不正をある確率で検出することができる。
あるユーザが時刻ｉにデータＸを作成し、ローカルタイムスタンプＬＴＳｉ１８０３を受け取ったとする。
その後時刻ｊ（ｊ＞ｉ）において、このローカルタイムスタンプＬＴＳｉ１８０３を改竄し、データＹに対するローカルタイムスタンプであったことにしたいとする。
もし時刻ｉから時刻ｊの間にＴＳＡへのアクセスが発生していたならば、もはやＬＴＳｉ１８０３の改竄はできない。
なぜならば、その当時の署名鍵は消去されてしまっているからである。
しかし、そうでなければ改竄できる可能性がある。
ユーザはローカルサーバ管理者に依頼し、ＬＴＳｉ１８０３を改竄してもらう。ローカルサーバ管理者は記憶部２３６内にローカルタイムスタンプ発行用の署名鍵ｓｋι１８３４を保有しているため、これは可能である。
ところが、この改竄により、ローカルサーバ管理者は時刻ｉ以降の累積ハッシュ値を再計算しなければならなくなる。
すると、再計算された累積ハッシュはある確率でアクセス領域Ｌの領域内の値となる。たとえこのような累積ハッシュに対してＴＳＡタイムスタンプを受領したとしても、それは現在時刻すなわち時刻ｊにおけるＴＳＡタイムスタンプであり、本来受領すべき時刻のものではない。そのためこの改竄は図１９のステップ１９０４により検出されてしまう。
また、たとえＴＳＡにアクセスしないとしても、アクセス領域Ｌの領域内の値になったならば、署名鍵ｓｋι１８３４が更新され、署名鍵ｓｋι＋１となる。本来ＴＳＡのアクセスの際にのみ更新されるべきところが、ＴＳＡアクセス以外に更新が発生することとなる。これは検出可能である。具体的には、本来１つの署名鍵で署名すべきローカルタイムスタンプであるＬＴＳｈ１８０１、…、ＬＴＳｊ１８０４が１つの検証鍵ｖｋι１８３８で検証できるかどうかを調べることにより、検出できる。以上のことから、過去のローカルタイムスタンプの改竄をある確率で検出することができる。
【０１０８】
このように、本実施の形態によれば、ローカルタイムスタンプの発行により、データの前後関係を保証しつつ、ＴＳＡサーバへのアクセスを削減することが可能になり、ＴＳＡタイムスタンプの発行コストの削減やネットワークトラフィックの抑制を図ることができる。
【０１０９】
また、ユーザとローカルサーバ管理者の結託によるローカルタイムスタンプの改竄をある確率で検出することができるので、ローカルサーバ管理者が信用できない場合においても高い信頼性を得ることができる。
【０１１０】
実施の形態４．
本発明の実施の形態４は、本発明の実施の形態３において定期的に発行していたローカルタイムスタンプの発行方式を、ローカルタイムスタンプの発行要求が到着するごとに発行する方式としたものである。
【０１１１】
図２０は、本発明の実施の形態４における各装置の内部構成図である。
図１３に示した本発明の実施の形態３における各装置の内部構成図とほぼ同一であるが、タイマ部２３４が省略されている点が異なる。
【０１１２】
（タイムスタンプの生成）
図２１は、本発明の実施の形態４におけるローカルタイムスタンプの発行手順を示すフローチャートである。
図２１において、累積ハッシュ値の更新および署名鍵・検証鍵の更新１７００ａは図１７に示した実施の形態３におけるローカルタイムスタンプの発行手順と同一である。
【０１１３】
図１５、図２０および図２１により、本発明の実施の形態４におけるローカルタイムスタンプの発行手順を説明する。
ただし、累積ハッシュ値の更新過程１７００ａについては図１７と同一であるから説明を省略し、ローカルタイムスタンプの生成過程２１００のみ説明する。
ステップ２１０１にて、ローカルサーバ１３０では、ローカルタイムスタンプ生成部２３３が、コンピュータ１２０ａからのローカルタイムスタンプの発行要求Ｒ３０５を受付部２３５から受け取る。
これは、ローカルタイムスタンプ生成部３２２が受付部２３５を常に監視することにより、入出力部２３７により発行要求Ｒ３０５が受信される度に、ローカルタイムスタンプの生成処理が行われる。
次に、ステップ２１０２にて、ローカルタイムスタンプ生成部３２２が、発行要求Ｒ３０５からハッシュ値Ｈ３０４を抜き出す。
ステップ２１０３にて、ローカルタイムスタンプ生成部３２２が、ハッシュ値Ｈ３０４に対し、記憶部２３６に格納された署名鍵ｓｋι１５０３および関連情報Ｉ４０２を用いてローカルタイムスタンプＬＴＳ４０３を生成する。
そして、ステップ２１０４にて、ローカルタイムスタンプ生成部３２２が、ローカルタイムスタンプＬＴＳ４０３をコンピュータに送るとともに、ステップ２１０５にて発行要求とローカルタイムスタンプＬＴＳ４０３を記憶部２３６に格納する。
【０１１４】
（タイムスタンプの検証）
図２２は本発明の実施の形態４におけるローカルタイムスタンプの検証方法を示したフローチャートである。
図１９に示した本発明の実施の形態３における検証方法と比較すると、ステップ１９０４の累積ハッシュ数とＴＳＡタイムスタンプの時間差との比較が省略されている。
また、図２６は、本実施の形態に係る検証装置３３０の構成例を示すものであるが、実施の形態３に示した図２５と比較すると、ＴＳＡタイムスタンプ時刻差判断部３３２３が省略されている。
これは、実施の形態３では定期的にローカルタイムスタンプを発行していたため、この比較を行うことによりローカルサーバ管理者とユーザの結託によるローカルタイムスタンプの改竄を検出することができたが、実施の形態４では不定期にローカルタイムスタンプを発行するため、このような比較ができないことによる。
上記の部分を除いては、実施の形態４における検証は実施の形態３における検証と同一である。
【０１１５】
このように、本実施の形態によれば、ローカルタイムスタンプの発行により、データの前後関係を保証しつつ、ＴＳＡへのアクセスを削減することが可能になり、ＴＳＡタイムスタンプの発行コストの削減やネットワークトラフィックの抑制を図ることができる。
【０１１６】
また、ローカルタイムスタンプの発行要求が出されると、即時にローカルタイムスタンプを発行するため、ユーザの待ち時間を低減することができる。
【０１１７】
以上、様々な実施の形態を示して本発明を説明したが、当業者であれば、本発明の趣旨と範囲は本明細書内の特定の説明に限定されるものではないことが理解されることは言うまでもない。
したがって、例えば実施の形態１と３を組み合わせ、ＩＣカードと署名鍵・検証鍵更新を併用してもよい。このような構成とすることで、ローカルタイムスタンプの信頼性をより高めることができる。
逆に、必ずしも高度な信頼性を必要としないような用途であれば、例えば、実施の形態１に示した手順からＩＣカードによるデジタル署名を省略する運用も可能であるし、また、実施の形態３の手順から署名鍵・検証鍵更新を省略する運用も可能である。
【０１１８】
また、実施の形態１〜４に示した内容は、ＴＳＡサーバ自身に適用可能であることも当業者であれば容易に理解し得るところである。
すなわち、ＴＳＡサーバが自らの発行するタイムスタンプの信頼性を高めるために、他のＴＳＡサーバを利用する場合に実施の形態１〜４の技術を適用することができる。
【０１１９】
ここで、実施の形態１〜４に示したタイムスタンプ発行方式、タイムスタンプの検証方式の主な特徴を再現する。
【０１２０】
実施の形態１〜４に示したタイムスタンプ発行方式は、ローカルタイムスタンプ間の前後関係を保証する方式であり、ＴＳＡサーバへのアクセスを定期的にではなく確率的に行うことにより、ローカルタイムスタンプの改竄を困難にした（＝信頼性を向上させた）方式である。
【０１２１】
実施の形態１〜４に示したタイムスタンプ発行方式は、タイムスタンプを生成するたびに内部値を更新し、確率的に時刻証明機関に内部値を送付し、時刻証明機関のタイムスタンプを受け取っている。
当該内部値はタイムスタンプに依存して決まるものである。
より厳密には、内部値はタイムスタンプと累積ハッシュ値とを入力とする累積ハッシュ値である。
そして、確率は、内部値がある値の集合に含まれる確率である。
また、時間的順序関係は、時刻証明機関の時計の時刻を基準とする関係である。
時刻証明機関の時計の時刻は、複数の時刻証明機関タイムスタンプとタイムスタンプの発行周期とから求められる。
タイムスタンプは、データとその作成者とを関連づける特徴値に対して生成される。この特徴値は、作成者のデジタル署名である。
また、タイムスタンプを発行するための鍵は確率的に更新され、鍵更新は内部値と、最後に鍵更新してからのタイムスタンプ発行回数と、の少なくとも１つに依存して決まる。
また、ハッシュチェーンの値をアクセスの判断基準にすることで、確率的なアクセスを実現すると同時に、改竄検出も容易にしている。
【０１２２】
そして、実施の形態１に示したタイムスタンプ発行方式は、ユーザの署名を付けることで、より改竄を困難にした方式であり、ローカルタイムスタンプの発行時刻を特定できる方式である。
【０１２３】
実施の形態２に示したタイムスタンプ発行方式は、ローカルタイムスタンプを即時に発行するものである。
【０１２４】
実施の形態３に示したタイムスタンプ発行方式は、署名鍵を更新することで、より改竄を困難にした方式である。
そして、ローカルタイムスタンプの発行時刻を特定できる方式である。
【０１２５】
実施の形態４に示したタイムスタンプ発行方式は、ローカルタイムスタンプを即時に発行するものである。
【０１２６】
また、実施の形態１〜４に示したタイムスタンプ検証方式は、データの時間的順序関係を検証するタイムスタンプ検証方式であって、当該タイムスタンプに対応した内部値を含む前後の複数の内部値が矛盾していないかを検証する。
また、内部値と時刻証明機関のタイムスタンプとが矛盾していないかを検証する。
また、データとその作成者とを関連づける特徴値とタイムスタンプとが矛盾していないかを検証する。
更に、鍵の更新時期とタイムスタンプとが矛盾していないかを検証する。
【０１２７】
最後に実施の形態１〜４に示したコンピュータ１２０、ローカルサーバ１３０、ＴＳＡサーバ１５０、検証装置３３０のハードウェア構成例について説明する。
図２７は、実施の形態１〜４に示すコンピュータ１２０、ローカルサーバ１３０、ＴＳＡサーバ１５０、検証装置３３０のハードウェア資源の一例を示す図である。なお、図２７の構成は、あくまでもコンピュータ１２０、ローカルサーバ１３０、ＴＳＡサーバ１５０、検証装置３３０のハードウェア構成の一例を示すものであり、コンピュータ１２０、ローカルサーバ１３０、ＴＳＡサーバ１５０、検証装置３３０のハードウェア構成は図２７に記載の構成に限らず、他の構成であってもよい。
【０１２８】
図２７において、コンピュータ１２０、ローカルサーバ１３０、ＴＳＡサーバ１５０、検証装置３３０は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。ＣＰＵ９１１は、バス９１２を介して、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９１３、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。更に、ＣＰＵ９１１は、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７と接続していてもよい。また、磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
通信ボード９１５、キーボード９０２、スキャナ装置９０７、ＦＤＤ９０４などは、入力部、入力装置の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力部、出力装置の一例である。
【０１２９】
通信ボード９１５は、図１に示すように、ネットワークに接続されている。通信ボード９１５は、ＬＡＮ（ローカルエリアネットワーク）、インターネット、ＷＡＮ（ワイドエリアネットワーク）などに接続される。
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。
【０１３０】
上記プログラム群９２３には、実施の形態１〜４の説明において「〜部」として説明している機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、実施の形態１〜４の説明において、「〜の判断」、「〜の計算」、「〜の比較」、「〜の生成」、「〜の更新」、「〜の設定」、「〜の登録」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリになどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、実施の形態１〜４で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【０１３１】
また、実施の形態１〜４の説明において「〜部」として説明しているものは、「〜回路」、「〜装置」、「〜機器」、であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明しているものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、実施の形態１〜４の「〜部」としてコンピュータを機能させるものである。あるいは、実施の形態１〜４の「〜部」の手順や方法をコンピュータに実行させるものである。
【０１３２】
このように、実施の形態１〜４に示すコンピュータ１２０、ローカルサーバ１３０、ＴＳＡサーバ１５０、検証装置３３０は、処理装置たるＣＰＵ、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータであり、上記したように「〜部」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【図面の簡単な説明】
【０１３３】
【図１】実施の形態１に係るタイムスタンプ生成システムの構成例を示す図。
【図２】実施の形態１に係るタイムスタンプ生成システムの要素の内部構成例を示す図。
【図３】実施の形態１に係るローカルタイムスタンプの発行要求の生成までのデータの流れを示す図。
【図４】実施の形態１に係るローカルサーバにおけるデータの流れを示す図。
【図５】実施の形態１に係るＩＣカードとコンピュータの動作例を示すフローチャート図。
【図６】実施の形態１に係るローカルサーバの動作例を示すフローチャート図。
【図７】実施の形態１に係るローカルタイムスタンプ、累積ハッシュ値、ＴＳＡタイムスタンプの関係を示す図。
【図８】実施の形態１に係る検証装置の動作例を示すフローチャート図。
【図９】実施の形態２に係るタイムスタンプ生成システムの要素の内部構成例を示す図。
【図１０】実施の形態２に係るローカルサーバの動作例を示すフローチャート図。
【図１１】実施の形態２に係る検証装置の動作例を示すフローチャート図。
【図１２】実施の形態３に係るタイムスタンプ生成システムの構成例を示す図。
【図１３】実施の形態３に係るタイムスタンプ生成システムの要素の内部構成例を示す図。
【図１４】実施の形態３に係るローカルタイムスタンプの発行要求の生成までのデータの流れを示す図。
【図１５】実施の形態３に係るローカルサーバにおけるデータの流れを示す図。
【図１６】実施の形態３に係るコンピュータの動作例を示すフローチャート図。
【図１７】実施の形態３に係るローカルサーバの動作例を示すフローチャート図。
【図１８】実施の形態３に係るローカルタイムスタンプ、累積ハッシュ値、ＴＳＡタイムスタンプの関係及び署名鍵、検証鍵、公開鍵証明書の関係を示す図。
【図１９】実施の形態３に係る検証装置の動作例を示すフローチャート図。
【図２０】実施の形態４に係るタイムスタンプ生成システムの要素の内部構成例を示す図。
【図２１】実施の形態４に係るローカルサーバの動作例を示すフローチャート図。
【図２２】実施の形態４に係る検証装置の動作例を示すフローチャート図。
【図２３】実施の形態１に係る検証装置の構成例を示す図。
【図２４】実施の形態２に係る検証装置の構成例を示す図。
【図２５】実施の形態３に係る検証装置の構成例を示す図。
【図２６】実施の形態４に係る検証装置の構成例を示す図。
【図２７】実施の形態１〜４に示すコンピュータ１２０、ローカルサーバ１３０、ＴＳＡサーバ１５０、検証装置３３０のハードウェア構成例を示す図。
【符号の説明】
【０１３４】
１  ユーザ、１００  ＩＣカード、１１０  ＩＣカードＲ／Ｗ、１２０  コンピュータ、１３０  ローカルサーバ装置、１４０  インターネット、１５０  ＴＳＡサーバ装置、２０１  記憶部、２０２  署名生成部、２０３  入出力部、２２１  入出力部、２２２  データ処理部、２２３  ローカルタイムスタンプ要求部、２２４  記憶部、２３１  アクセス制御部、２３２  累積ハッシュ値演算部、２３３  ローカルタイムスタンプ生成部、２３４  タイマ部、２３５  受付部、２３６  記憶部、２３７  入出力部、２３８  鍵生成部、３３０  検証装置、３３１  検証対象データ入力部、３３２  検証処理部、３３３  ユーザ入力部、３３４  表示部、３３５  記憶部、３３２１  ハッシュチェーン判断部、３３２２  アクセス領域判断部、３３２３  ＴＳＡタイムスタンプ時刻差判断部、３３２４  デジタル署名照合部、３３２５  証明書チェーン判断部。
【図１０】
2008258820.tif 000003
【図１４】
2008258820.tif 000004
【図１】
2008258820.tif 000005
【図２】
2008258820.tif 000006
【図３】
2008258820.tif 000007
【図４】
2008258820.tif 000008
【図５】
2008258820.tif 000009
【図６】
2008258820.tif 000010
【図７】
2008258820.tif 000011
【図８】
2008258820.tif 000012
【図９】
2008258820.tif 000013
【図１１】
2008258820.tif 000014
【図１２】
2008258820.tif 000015
【図１３】
2008258820.tif 000016
【図１５】
2008258820.tif 000017
【図１６】
2008258820.tif 000018
【図１７】
2008258820.tif 000019
【図１８】
2008258820.tif 000020
【図１９】
2008258820.tif 000021
【図２０】
2008258820.tif 000022
【図２１】
2008258820.tif 000023
【図２２】
2008258820.tif 000024
【図２３】
2008258820.tif 000025
【図２４】
2008258820.tif 000026
【図２５】
2008258820.tif 000027
【図２６】
2008258820.tif 000028
【図２７】
2008258820.tif 000029