(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-08-01
(45)【発行日】2023-08-09
(54)【発明の名称】検証方法、プログラム、および情報処理装置
(51)【国際特許分類】
G06F 21/64 20130101AFI20230802BHJP
H04L 9/32 20060101ALI20230802BHJP
G09C 1/00 20060101ALI20230802BHJP
【FI】
G06F21/64
H04L9/32 200B
G09C1/00 640D
(21)【出願番号】P 2020007076
(22)【出願日】2020-01-20
【審査請求日】2022-09-08
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】小嶋 陸大
(72)【発明者】
【氏名】山本 大
(72)【発明者】
【氏名】伊豆 哲也
【審査官】宮司 卓佳
(56)【参考文献】
【文献】特表2006-511996(JP,A)
【文献】特開2001-337600(JP,A)
【文献】国際公開第2008/084547(WO,A1)
【文献】特開平10-020781(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/64
H04L 9/32
G09C 1/00
(57)【特許請求の範囲】
【請求項1】
第1のコンピュータシステムが、
原文の文書に対するハッシュ値である原文第1ハッシュ値と、前記原文第1ハッシュ値のハッシュ値である原文第2ハッシュ値とを計算し、
前記原文の文書を修正した第1修正版の文書が作成されると、前記第1修正版の文書に対するハッシュ値である第1修正版第1ハッシュ値と、前記第1修正版第1ハッシュ値および前記原文第2ハッシュ値を組み合わせた値のハッシュ値である第1修正版第2ハッシュ値とを計算し、
前記第1修正版の文書を修正した第2修正版の文書が作成されると、前記第2修正版の文書に対するハッシュ値である第2修正版第1ハッシュ値と、前記第2修正版第1ハッシュ値および前記第1修正版第2ハッシュ値を組み合わせた値のハッシュ値である第2修正版第2ハッシュ値とを計算し、
第2のコンピュータシステムが、
前記第1のコンピュータシステムから取得した前記第2修正版の文書を用いて検証用の第2修正版第1ハッシュ値を計算し、
計算した前記検証用の第2修正版第1ハッシュ値、および前記第1のコンピュータシステムから取得した前記原文第1ハッシュ値と前記第1修正版第1ハッシュ値を用いて、前記第2修正版第2ハッシュ値の正当性を検証する、
検証方法。
【請求項2】
前記第1のコンピュータシステムは、さらに、
前記原文の文書の作成者の秘密鍵と前記原文第2ハッシュ値とを用いて、前記原文の文書に対する第1の署名を作成し、
前記第1修正版の文書の作成者の秘密鍵と前記第1修正版第2ハッシュ値とを用いて、前記第1修正版の文書に対する第2の署名を作成し、
前記第2修正版の文書の作成者の秘密鍵と前記第2修正版第2ハッシュ値とを用いて、前記第2修正版の文書に対する第3の署名を作成し、
前記第2のコンピュータシステムは、前記原文の文書の作成者の公開鍵、前記第1修正版の文書の作成者の公開鍵、前記第2修正版の文書の作成者の公開鍵、前記原文第1ハッシュ値、前記第1修正版第1ハッシュ値、および前記第2修正版第1ハッシュ値を用いて、前記第1の署名、前記第2の署名、および前記第3の署名の正当性を検証する、
請求項1記載の検証方法。
【請求項3】
前記第1のコンピュータシステムは、さらに、
前記第1の署名、前記第2の署名、および前記第3の署名を集約した集約署名を作成し、
前記第2のコンピュータシステムは、前記集約署名を用いて、前記第1の署名、前記第2の署名、および前記第3の署名の正当性を検証する、
請求項2記載の検証方法。
【請求項4】
前記第1のコンピュータシステムは、
前記原文第1ハッシュ値と乱数とに基づいて、前記原文第2ハッシュ値を計算し、
前記第2のコンピュータシステムは、前記乱数、前記原文第1ハッシュ値、前記第1修正版第1ハッシュ値、前記第2修正版の文書を用いて、前記第2修正版第2ハッシュ値の正当性を検証する、
請求項1ないし3のいずれかに記載の検証方法。
【請求項5】
前記第1のコンピュータシステムは、
前記原文の文書と第1の乱数とに基づいて前記原文第1ハッシュ値を計算し、
前記第1修正版の文書と第2の乱数とに基づいて前記第1修正版第1ハッシュ値を計算し、
前記第2修正版の文書と第3の乱数とに基づいて前記第2修正版第1ハッシュ値を計算し、
前記第2のコンピュータシステムは、前記第1のコンピュータシステムから取得した前記第2修正版の文書と前記第3の乱数とを用いて前記第2修正版第1ハッシュ値を計算する、
請求項
1記載の検証方法。
【請求項6】
前記第2のコンピュータシステムは、さらに、
前記第1のコンピュータシステムから取得した前記第1修正版の文書と前記第2の乱数とを用いて、前記第1のコンピュータシステムから取得した前記第1修正版第1ハッシュ値の正当性を検証する、
請求項
5記載の検証方法。
【請求項7】
コンピュータに、
原文の文書に対するハッシュ値である原文第1ハッシュ値と、前記原文第1ハッシュ値のハッシュ値である原文第2ハッシュ値とを計算し、
前記原文の文書を修正した第1修正版の文書が作成されると、前記第1修正版の文書に対するハッシュ値である第1修正版第1ハッシュ値と、前記第1修正版第1ハッシュ値および前記原文第2ハッシュ値を組み合わせた値のハッシュ値である第1修正版第2ハッシュ値とを計算し、
前記第1修正版の文書を修正した第2修正版の文書が作成されると、前記第2修正版の文書に対するハッシュ値である第2修正版第1ハッシュ値と、前記第2修正版第1ハッシュ値および前記第1修正版第2ハッシュ値を組み合わせた値のハッシュ値である第2修正版第2ハッシュ値とを計算
し、
前記原文第1ハッシュ値と前記第1修正版第1ハッシュ値と前記第2修正版の文書と前記第2修正版第2ハッシュ値とを、前記第2修正版第2ハッシュ値の正当性を検証する装置に送信する、
処理を実行させるプログラム。
【請求項8】
前記コンピュータに、さらに、
前記原文の文書の作成者の秘密鍵と前記原文第2ハッシュ値とを用いて、前記原文の文書に対する第1の署名を作成し、
前記第1修正版の文書の作成者の秘密鍵と前記第1修正版第2ハッシュ値とを用いて、前記第1修正版の文書に対する第2の署名を作成し、
前記第2修正版の文書の作成者の秘密鍵と前記第2修正版第2ハッシュ値とを用いて、前記第2修正版の文書に対する第3の署名を作成する、
処理を実行させる請求項
7記載のプログラム。
【請求項9】
原文の文書に対するハッシュ値である原文第1ハッシュ値と、前記原文第1ハッシュ値のハッシュ値である原文第2ハッシュ値とを計算し、前記原文の文書を修正した第1修正版の文書が作成されると、前記第1修正版の文書に対するハッシュ値である第1修正版第1ハッシュ値と、前記第1修正版第1ハッシュ値および前記原文第2ハッシュ値を組み合わせた値のハッシュ値である第1修正版第2ハッシュ値とを計算し、前記第1修正版の文書を修正した第2修正版の文書が作成されると、前記第2修正版の文書に対するハッシュ値である第2修正版第1ハッシュ値と、前記第2修正版第1ハッシュ値および前記第1修正版第2ハッシュ値を組み合わせた値のハッシュ値である第2修正版第2ハッシュ値とを計算
し、前記原文第1ハッシュ値と前記第1修正版第1ハッシュ値と前記第2修正版の文書と前記第2修正版第2ハッシュ値とを、前記第2修正版第2ハッシュ値の正当性を検証する装置に送信する処理部、
を有する情報処理装置。
【請求項10】
前記処理部は、さらに、
前記原文の文書の作成者の秘密鍵と前記原文第2ハッシュ値とを用いて、前記原文の文書に対する第1の署名を作成し、
前記第1修正版の文書の作成者の秘密鍵と前記第1修正版第2ハッシュ値とを用いて、前記第1修正版の文書に対する第2の署名を作成し、
前記第2修正版の文書の作成者の秘密鍵と前記第2修正版第2ハッシュ値とを用いて、前記第2修正版の文書に対する第3の署名を作成する、
請求項
9記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、検証方法、プログラム、および情報処理装置に関する。
【背景技術】
【0002】
電子文書の署名技術の1つに、複数の秘密鍵を用いるマルチシグネチャ(Multi-Signature)がある。マルチシグネチャでは、同一の文書に対して付与された複数の署名を、単一の署名に集約することが可能である。検証者が集約された署名の検証に成功したならば、そのことは、検証者が複数の署名をすべて検証したのと数学的には同じ意味を持つ。複数の署名を集約可能な代表的な方式として、Schnorrのマルチシグネチャがある。
【0003】
電子文書の信頼性を保証する技術としては、例えば電子文書においてなされた部分的な訂正が正しく行われたことを担保し、これらの正当性を第三者証明可能とすることができる電子文書管理システムが提案されている。また、保管される少ないメタデータ量にて、文書情報の第三者証明を可能とする電子文書管理システムも提案されている。さらに業種業界を超えてやり取りされるデータの信頼性を向上させる技術(Chain Data Linearge)も提案されている。
【先行技術文献】
【特許文献】
【0004】
【文献】国際公開2006/008847号
【文献】特開2007-213549号公報
【非特許文献】
【0005】
【文献】松原正純、宮前剛、伊藤章、鎌倉健、「業種業界を超えたデータ流通の信頼性を向上させるChain Data Linearge」、FUJITSU, Vol.70, No.4, p.55-62, 2019年9月
【発明の概要】
【発明が解決しようとする課題】
【0006】
マルチシグネチャによる複数の署名の集約技術の利用場面として、例えば文書に対して推敲をする人物(以下、推敲者と呼ぶ)が複数存在し、複数の推敲者によって推敲が実施される場合がある。この場合、検証者はマルチシグネチャの署名検証を実施するため、コンピュータを用いて、修正版すべての文書を閲覧し、それに対するハッシュ値を計算する。
【0007】
このとき文書作成者および文書推敲者が所属する組織と、検証者が所属する組織が別の場合があり得る。さらに、修正段階前の原文や修正段階の文書は、文書作成者および文書推敲者が所属する組織内でのみ共有される情報であり、これが外部の検証者の目に触れることは好ましくない場合もあり得る。
【0008】
しかしながら、従来の技術では、文書に対して推敲者が修正を加えるごとに付与された署名を集約した場合において、修正過程の文書を検証者に公開せずに、署名のすり替えのような不正が行われていないことを検証者に検証させることができない。
【0009】
1つの側面では、本件は、修正過程の文書を用いずに複数の署名の確実な検証を可能とすることを目的とする。
【課題を解決するための手段】
【0010】
1つの案では、第1のコンピュータシステムと第2のコンピュータシステムとによる検証方法が提供される。
当該検証方法では、第1のコンピュータシステムが、原文の文書に対するハッシュ値である原文第1ハッシュ値と、原文第1ハッシュ値のハッシュ値である原文第2ハッシュ値とを計算する。次に第1のコンピュータシステムが、原文の文書を修正した第1修正版の文書が作成されると、第1修正版の文書に対するハッシュ値である第1修正版第1ハッシュ値と、第1修正版第1ハッシュ値および原文第2ハッシュ値を組み合わせた値のハッシュ値である第1修正版第2ハッシュ値とを計算する。さらに第1のコンピュータシステムが、第1修正版の文書を修正した第2修正版の文書が作成されると、第2修正版の文書に対するハッシュ値である第2修正版第1ハッシュ値と、第2修正版第1ハッシュ値および第1修正版第2ハッシュ値を組み合わせた値のハッシュ値である第2修正版第2ハッシュ値とを計算する。そして第2のコンピュータシステムが、原文第1ハッシュ値、第1修正版第1ハッシュ値、第2修正版第1ハッシュ値を用いて、第2修正版第2ハッシュ値の正当性を検証する。
【発明の効果】
【0011】
1態様によれば、修正過程の文書を用いずに複数の署名の確実な検証が可能となる。
【図面の簡単な説明】
【0012】
【
図1】第1の実施の形態に係る検証方法の一例を示す図である。
【
図2】第2の実施の形態に係るシステムの一例を示す図である。
【
図3】コンピュータのハードウェアの一構成例を示す図である。
【
図4】複数の推敲者が存在する場合の修正内容の検証負担を説明する図である。
【
図5】Schnorr署名方式による検証回数の削減例を示す図である。
【
図6】マルチシグネチャを基に構成したPIAT署名方式の手順の一例を示す図である。
【
図8】第2の実施の形態で提案する技術を適用しない場合に生じる課題の一例を示す図である。
【
図9】マルチシグネチャとハッシュチェーンとを組み合わせた署名手順の一例を示す図である。
【
図10】2段階のハッシュ変換を伴うハッシュチェーンを適用した署名手順の一例を示す図である。
【
図11】修正版の文書の検証手順の一例を示す図である。
【
図12】作成者端末の機能の一例を示すブロック図である。
【
図13】1人目の推敲者が使用する推敲者端末の機能の一例を示すブロック図である。
【
図14】最終版の文書を作成する推敲者端末の機能の一例を示すブロック図である。
【
図15】代理人端末の機能の一例を示すブロック図である。
【
図16】CAサーバの機能の一例を示すブロック図である。
【
図17】検証者端末の機能の一例を示すブロック図である。
【
図18】作成者端末による署名手順の一例を示す図である。
【
図19】1人目の推敲者が使用する推敲者端末による署名手順の一例を示す図である。
【
図20】最終版の文書を作成する推敲者端末による署名手順の一例を示す図である。
【
図21】代理人端末による署名集約処理の手順の一例を示す図である。
【
図22】検証者端末による検証処理の手順の一例を示す図である。
【
図23】検証者端末による特定の修正版の文書の検証処理の一例を示す図である。
【
図24】文書に対するブロックごとの修正例を示す図である。
【
図25】作成者端末と推敲者端末とで生成される情報の一例を示す図である。
【
図27】ハッシュチェーンを用いた署名検証の一例を示す図である。
【
図28】署名検証処理の手順の一例を示す図(1/2)である。
【
図29】署名検証処理の手順の一例を示す図(2/2)である。
【発明を実施するための形態】
【0013】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第1の実施の形態〕
図1は、第1の実施の形態に係る検証方法の一例を示す図である。第1の実施の形態に係る検証方法は、例えば第1のコンピュータシステム1と第2のコンピュータシステム2との連係動作によって実現される。
【0014】
第1のコンピュータシステム1は、例えば1または複数の情報処理装置(例えばコンピュータ)を含む。第1のコンピュータシステム1は、記憶部1aと処理部1bとを有する。記憶部1aは、例えば第1のコンピュータシステム1に含まれる情報処理装置のメモリまたはストレージ装置である。処理部1bは、例えば第1のコンピュータシステム1に含まれる情報処理装置のプロセッサまたは演算回路である。
【0015】
第2のコンピュータシステム2は、例えば1または複数の情報処理装置(例えばコンピュータ)を含む。第2のコンピュータシステム2は、記憶部2aと処理部2bとを有する。記憶部2aは、例えば第2のコンピュータシステム2に含まれる情報処理装置のメモリまたはストレージ装置である。処理部2bは、例えば第2のコンピュータシステム2に含まれる情報処理装置のプロセッサまたは演算回路である。
【0016】
第1のコンピュータシステム1の処理部1bは、次の手順で文書に電子的な署名を付与する。まず処理部1bは、原文となる文書3aが作成されると、その文書3aに対するハッシュ値である原文第1ハッシュ値4aを計算する。さらに処理部1bは、原文第1ハッシュ値4aのハッシュ値である原文第2ハッシュ値5aを計算する。
【0017】
なお処理部1bは、原文第2ハッシュ値5aの計算では、例えば第2のコンピュータシステム2と共有する乱数7を用いることができる。その場合、例えば第2のコンピュータシステム2の処理部2bが乱数7を生成し、その乱数7を第1のコンピュータシステム1に送信する。処理部2bは、生成した乱数7を記憶部2aに格納する。第1のコンピュータシステム1の処理部1bは、乱数7を受信し、原文第1ハッシュ値4aと乱数7とを組み合わせた値のハッシュ値を計算し、計算結果を原文第2ハッシュ値5aとする。
【0018】
原文第2ハッシュ値5aの計算後、処理部1bは、原文の文書3aの作成者の秘密鍵と原文第2ハッシュ値5aとを用いて、原文の文書に対する第1の署名を作成する。
その後、原文の文書3aを修正した第1修正版の文書3bが作成されると、処理部1bは、第1修正版の文書3bに対するハッシュ値である第1修正版第1ハッシュ値4bを計算する。次に処理部1bは、第1修正版第1ハッシュ値4bおよび原文第2ハッシュ値5aを組み合わせた値のハッシュ値である第1修正版第2ハッシュ値5bを計算する。
【0019】
第1修正版第2ハッシュ値5bの計算後、処理部1bは、第1修正版の文書3bの作成者の秘密鍵と第1修正版第2ハッシュ値5bとを用いて、第1修正版の文書に対する第2の署名を作成する。
【0020】
さらにその後、第1修正版の文書を修正した第2修正版の文書3cが作成されると、処理部1bは、第2修正版の文書3cに対するハッシュ値である第2修正版第1ハッシュ値4cを計算する。次に処理部1bは、第2修正版第1ハッシュ値4cおよび第1修正版第2ハッシュ値5bを組み合わせた値のハッシュ値である第2修正版第2ハッシュ値5cを計算する。
【0021】
処理部1bは、第2修正版の文書3cがさらに修正された場合にも、同様に、2段階のハッシュ値の計算と署名の作成とを行うことができる。2段目のハッシュ値の計算では、修正前の文書作成時に生成された2段目のハッシュ値を用いて、今回の修正後の文書のハッシュ値を計算する。このようにして、2段目のハッシュ値(原文ハッシュ値5a,第1修正版第2ハッシュ値5b、第2修正版第2ハッシュ値5c)のハッシュチェーンが生成される。
【0022】
なお処理部1bは、複数の署名を1つに集約することもできる。例えば処理部1bは、第1の署名、第2の署名、および第3の署名を集約した集約署名6を作成する。
第2のコンピュータシステム2の処理部2bは、原文第1ハッシュ値4a、第1修正版第1ハッシュ値4b、第2修正版第1ハッシュ値4cを用いて、第2修正版第2ハッシュ値5cの正当性を検証する。例えば第1のコンピュータシステム1による原文第1ハッシュ値4aの生成に乱数7が使用されている場合、処理部2bは、記憶部2aから乱数7を読み出す。そして処理部2bは、乱数7と原文第1ハッシュ値4aとに基づいて、原文第2ハッシュ値5aを計算する。次に処理部2bは、原文第2ハッシュ値5aと第1修正版第1ハッシュ値4bとに基づいて、第1修正版第2ハッシュ値5bを計算する。さらに処理部2bは、第1修正版第2ハッシュ値5bと第2修正版第1ハッシュ値4cを用いて、第2修正版第2ハッシュ値5cを計算する。そして処理部2bは、自身が算出した第2修正版第2ハッシュ値5cと、第1のコンピュータシステム1の処理部1bが算出した第2修正版第2ハッシュ値5cの値が一致することを確認することで、第2修正版第2ハッシュ値5cの正当性を検証する。
【0023】
なお処理部2bは、第2修正版第2ハッシュ値5cについては、第2修正版の文書3cを用いて算出することができる。その場合、処理部2bは、検証処理のために、第1のコンピュータシステム1から、原文第1ハッシュ値4a、第1修正版第1ハッシュ値4b、第2修正版の文書3c、および第2修正版第2ハッシュ値5cを取得すればよい。
【0024】
また第2のコンピュータシステム2の処理部2bは、第2修正版の文書3cが最終版の文書である場合、第2修正版の文書3cの作成過程で付与された複数の署名の検証を行う。例えば処理部2bは、原文の文書3aの作成者の公開鍵、第1修正版の文書3bの作成者の公開鍵、および第2修正版の文書3cの作成者の公開鍵を、認証局から取得する。そして処理部2bは、取得した公開鍵を用いて、第1の署名、第2の署名、および第3の署名の正当性を検証する。
【0025】
例えば処理部2bは、第2修正版第2ハッシュ値5cの正当性の検証過程で生成された原文第2ハッシュ値5a、第1修正版第2ハッシュ値5b、および第2修正版第2ハッシュ値5cを取得する。処理部2bは、原文第2ハッシュ値5aと原文の文書3aの作成者の公開鍵とを用いて、原文の文書3aに付与された第1の署名を検証できる。処理部2bは、第1修正版第2ハッシュ値5bと第1修正版の文書3bの作成者の公開鍵とを用いて、第1修正版の文書3bに付与された第2の署名を検証できる。処理部2bは、第2修正版第2ハッシュ値5cと第2修正版の文書3cの作成者の公開鍵とを用いて、第2修正版の文書3cに付与された第3の署名を検証できる。
【0026】
なお第1のコンピュータシステム1において複数の署名が集約されている場合、第2のコンピュータシステム2の処理部2bは、第1のコンピュータシステム1から集約署名6を取得する。そして処理部2bは、集約署名6に対する1回の検証処理で署名の正当性を検証する。
【0027】
このようなシステムによれば、例えば第2のコンピュータシステム2の使用者(検証者)が、第2修正版の文書3cが正当な推敲者の推敲を経たものであることを確認したい場合において、原文の文書3aまたは第1修正版の文書3bを検証者に開示せずに済む。すなわち第2のコンピュータシステム2において、修正過程の文書を用いずに複数の署名の確実な検証が可能となっている。
【0028】
具体的には、第2のコンピュータシステム2において、原文の文書3aまたは第1修正版の文書3bの内容を第2のコンピュータシステム2に開示せずに、ハッシュチェーンにより生成される第2修正版第2ハッシュ値5cの正当性を検証する。第1のコンピュータシステム1から取得した第2修正版第2ハッシュ値5cは、原文第2ハッシュ値5aと第1修正版第2ハッシュ値5bが正しい場合にのみ、第2のコンピュータシステム2において正当であると検証できる。
【0029】
第2修正版第2ハッシュ値5cの正当性が検証できた場合、処理部2bでは、原文第2ハッシュ値5aと第1修正版第2ハッシュ値5bとの生成元の原文の文書3aと第1修正版の文書3bとの作成者を確認することで、誰によって推敲されたのかを確認できる。原文の文書3aと第1修正版の文書3bとの作成者は、署名を検証することで確認可能である。このようなハッシュチェーンを利用した第2修正版第2ハッシュ値5cの正当性の検証により、署名のすり替えのような推敲者の偽装が抑止され、正当な推敲者の推敲を経ていることが確認可能となる。
【0030】
また、
図1の例では、第1のコンピュータシステム1と第2のコンピュータシステム2で乱数7を共有し、乱数7を用いて、ハッシュチェーンの計算を行っている。これにより、最終版となる第2修正版の文書3cが、第2のコンピュータシステム2を使用する検証者の求めに応じて生成されたものであることを確認できる。
【0031】
なお第1のコンピュータシステム1の処理部1bは、原文第1ハッシュ値4a、第1修正版第1ハッシュ値4b、第2修正版第1ハッシュ値4cの計算に乱数を用いることもできる。例えば処理部1bは、原文の文書3aと第1の乱数とに基づいて原文第1ハッシュ値4aを計算する。また処理部1bは、第1修正版の文書3bと第2の乱数とに基づいて第1修正版第1ハッシュ値4bを計算する。さらに処理部1bは、第2修正版の文書3cと第3の乱数とに基づいて第2修正版第1ハッシュ値4cを計算する。この場合、第2のコンピュータシステム2の処理部2bは、第2修正版第1ハッシュ値4cを算出する際には、第1のコンピュータシステム1から取得した第2修正版の文書3cと第3の乱数とを用いて第2修正版第1ハッシュ値4cを計算する。
【0032】
原文第1ハッシュ値4a、第1修正版第1ハッシュ値4b、第2修正版第1ハッシュ値4cの計算に乱数を用いることで、原文第1ハッシュ値4a、第1修正版第1ハッシュ値4b、第2修正版第1ハッシュ値4cの安全性を向上させることができる。
【0033】
なお検証者が、第1修正版の文書3bの内容についての検証を希望する場合もある。この場合において、第1のコンピュータシステム1の使用者が、第1修正版の文書3bの内容を検証者に開示してもよいと判断すれば、第2のコンピュータシステム2が、第1修正版第1ハッシュ値4bの正当性を検証することもできる。例えば第2のコンピュータシステム2の処理部2bは、第1のコンピュータシステム1から取得した第1修正版の文書3bと第2の乱数とを用いて、第1のコンピュータシステム1から取得した第1修正版第1ハッシュ値4bの正当性を検証する。
【0034】
このように第1のコンピュータシステム1の使用者が許可すれば、第2のコンピュータシステム2において、修正版の文書についての検証も容易に行うことができ、高い利便性を確保することができる。
【0035】
〔第2の実施の形態〕
第2の実施の形態は、複数の組織間を流通するような電子署名付き文書の利便性を向上させることを可能とするシステムである。なお以下の説明において、文書作成者とは、最初に文書を作成し、最終的に文書が検証者に検証されることを目的とするエンティティである。また、推敲者(係長、課長、部長らで構成)とは、作成された文書を推敲し、推敲部分のハッシュとその署名を代理人へ送信するエンティティである。代理人とは、文書作成者と推敲者によって付与された署名を集約するエンティティである。検証者とは、代理人から得られた情報を利用して、ハッシュチェーンとマルチシグネチャの検証を行うエンティティである。
【0036】
[システムのハードウェア構成]
まず、第2の実施の形態に係るシステムのハードウェア構成について説明する。
図2は、第2の実施の形態に係るシステムの一例を示す図である。
図2の例では、A社で作成した文書の正当性をB社の検証者41が検証する場合を想定している。
【0037】
A社には、作成者端末100、推敲者端末200a,200b,・・・,200n、代理人端末300、文書保存用サーバ400が設けられている。作成者端末100は、文書作成者30が使用するコンピュータである。推敲者端末200a,200b,・・・,200nは、推敲者31,32,・・・,3nが使用するコンピュータである。代理人端末300は、代理人42が使用するコンピュータである。文書保存用サーバ400は、作成された文書、修正された文書、各文書の署名に使用された情報などを記憶するコンピュータである。
【0038】
作成者端末100、推敲者端末200a,200b,・・・,200n、代理人端末300、文書保存用サーバ400は、ネットワーク20に接続されている。ネットワーク20には、CA(Certificate Authority)に設置されたCAサーバ500、B社に設置された検証者端末600も接続されている。CAは、署名の検証に用いる公開鍵の証明書を発行する機関である。CAサーバ500は、公開鍵の証明書を、ネットワーク20を介して発行するコンピュータである。検証者端末600は、検証者41が署名の検証に用いるコンピュータである。
【0039】
A社では、文書作成者30が作成者端末100を用いて文書を作成する。作成者端末100は、作成した文書に、文書作成者30の電子的な署名を施す。A社には複数の推敲者31,32,・・・,3nが存在し、それぞれ推敲者端末200a,200b,・・・,200nを用いて、文書を推敲し、文書を修正する。推敲者端末200a,200b,・・・,200nは、修正された文書に、推敲者31,32,・・・,3nの電子的な署名を施す。代理人42は、代理人端末300を用いて、文書に施された複数の署名を1つに纏める。代理人端末300は、最終版の文書に複数の署名を一纏めにした署名を付与し、署名付きの文書を検証者端末600に送信する。検証者端末600は、CAサーバ500から文書作成者30および推敲者31,32,・・・,3nの公開鍵を取得し、その公開鍵を用いて、取得した文書の署名を検証する。
【0040】
図3は、コンピュータのハードウェアの一構成例を示す図である。
図3では、代表的に作成者端末100のハードウェア構成を示している。
作成者端末100は、プロセッサ101によって装置全体が制御されている。プロセッサ101には、バス109を介してメモリ102と複数の周辺機器が接続されている。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU(Central Processing Unit)、MPU(Micro Processing Unit)、またはDSP(Digital Signal Processor)である。プロセッサ101がプログラムを実行することで実現する機能の少なくとも一部を、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現してもよい。
【0041】
メモリ102は、作成者端末100の主記憶装置として使用される。メモリ102には、プロセッサ101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ102には、プロセッサ101による処理に必要な各種データが格納される。メモリ102としては、例えばRAM(Random Access Memory)などの揮発性の半導体記憶装置が使用される。
【0042】
バス109に接続されている周辺機器としては、ストレージ装置103、グラフィック処理装置104、入力インタフェース105、光学ドライブ装置106、機器接続インタフェース107およびネットワークインタフェース108がある。
【0043】
ストレージ装置103は、内蔵した記録媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置103は、コンピュータの補助記憶装置として使用される。ストレージ装置103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置103としては、例えばHDD(Hard Disk Drive)やSSD(Solid State Drive)を使用することができる。
【0044】
グラフィック処理装置104には、モニタ21が接続されている。グラフィック処理装置104は、プロセッサ101からの命令に従って、画像をモニタ21の画面に表示させる。モニタ21としては、CRT(Cathode Ray Tube)を用いた表示装置や液晶表示装置などがある。
【0045】
入力インタフェース105には、キーボード22とマウス23とが接続されている。入力インタフェース105は、キーボード22やマウス23から送られてくる信号をプロセッサ101に送信する。なお、マウス23は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【0046】
光学ドライブ装置106は、レーザ光などを利用して、光ディスク24に記録されたデータの読み取りを行う。光ディスク24は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク24には、DVD(Digital Versatile Disc)、DVD-RAM、CD-ROM(Compact Disc Read Only Memory)、CD-R(Recordable)/RW(ReWritable)などがある。
【0047】
機器接続インタフェース107は、作成者端末100に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース107には、メモリ装置25やメモリリーダライタ26を接続することができる。メモリ装置25は、機器接続インタフェース107との通信機能を搭載した記録媒体である。メモリリーダライタ26は、メモリカード27へのデータの書き込み、またはメモリカード27からのデータの読み出しを行う装置である。メモリカード27は、カード型の記録媒体である。
【0048】
ネットワークインタフェース108は、ネットワーク20に接続されている。ネットワークインタフェース108は、ネットワーク20を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【0049】
以上のようなハードウェア構成によって、第2の実施の形態における作成者端末100の処理機能を実現することができる。推敲者端末200a,200b,・・・,200n、代理人端末300、文書保存用サーバ400、CAサーバ500、および検証者端末600も、作成者端末100と同様のハードウェアで実現できる。また、第1の実施の形態に示した第1のコンピュータシステム1または第2のコンピュータシステム2に含まれる情報処理装置も、
図3に示した作成者端末100と同様のハードウェアにより実現できる。
【0050】
作成者端末100は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第2の実施の形態における作成者端末100の処理機能を実現する。作成者端末100に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、作成者端末100に実行させるプログラムをストレージ装置103に格納しておくことができる。プロセッサ101は、ストレージ装置103内のプログラムの少なくとも一部をメモリ102にロードし、プログラムを実行する。また作成者端末100に実行させるプログラムを、光ディスク24、メモリ装置25、メモリカード27などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ101からの制御により、ストレージ装置103にインストールされた後、実行可能となる。またプロセッサ101が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【0051】
推敲者端末200a,200b,・・・,200n、代理人端末300、文書保存用サーバ400、CAサーバ500、および検証者端末600も、プログラムを実行することにより第2の実施の形態における各装置の処理機能を実現する。
【0052】
以上のようなシステムによって、修正過程の文書を公開せずに複数の署名の検証を行うことができる。修正過程の文書を公開せずに複数の署名の検証を行う場合、代理人端末300によって複数の署名を1つに纏めることができる。しかし、修正過程の文書を公開せずに済ませるためには、単に複数の署名を1つに纏めただけでは不十分な場合がある。そこで、修正過程の文書を公開せずに済ませることの困難性について、以下に説明する。
【0053】
[修正過程の文書を公開せずに済ませることの困難性]
近年Society5.0の実現が、国内外に向けて政府から提唱されている。Society5.0とは、サイバー空間(仮想空間)とフィジカル空間(現実空間)を高度に融合させたシステムにより、経済発展と社会的課題の解決を両立する、人間中心の社会(Society)である。
【0054】
Society5.0の根幹となる法人認証・トラストサービス基盤の実現のため、人、組織、モノの認証及びデータの完全性を確保する技術が求められている。
その根幹技術の1つである電子署名技術は、証明書導入に伴う金銭面でのコストと安全性確保のメリットのバランスが現状釣り合っていないなどの問題から、未だに実社会での普及が思うように進んでいない。一方で、暗号・署名の理論的な研究分野においては、組織におけるグループを跨いだ承認や、複数の署名検証作業の一括化など、印鑑的な用途に縛られない署名アプリケーションが数多く提案されている。安全性確保や完全性保障の観点からこれまでは実現困難だったサービスが実現すれば、ユーザに対する新たな価値提供を生み出し、電子署名の普及促進に繋げることができる。
【0055】
例えばビジネスの場面で利用される電子署名は、文書作成者と検証者が異なる組織に属している場合が基本となる。そのため、検証者が、作成された文書の正当性を信頼することができるようなシステムの構築が課題となる。第2の実施の形態では、複数の組織間を流通するような電子署名付き文書に対し、効率の向上と安全性の向上との両立を実現するようなシステムを提案する。
【0056】
第2の実施の形態に係るシステムは、電子署名を利用することで文書に対し、改ざんされていないかを検証する分野全般での適用を想定したものである。特に更新・削除・追記など、文面に対し複数の組織間で複数回変更が実施されるような文書に対する電子署名を想定している。
【0057】
一般にPKI(Public Key Infrastructure)基盤を利用した文書に対する電子署名の検証は、A社に所属する文書作成者、B社に所属する検証者、第三者機関であるCAの三者間による以下の簡略な手順で実施される。
【0058】
[ステップ1]文書作成者30は、作成者端末100により、ユーザ秘密鍵とユーザ公開鍵を作成し、CAサーバ500により証明書を発行してもらう。
[ステップ2]文書作成者30は、作成者端末100により、自身が作成した文書に対し、ユーザ秘密鍵を用いて電子署名を付与する。文書作成者30は、作成者端末100により、署名した文書と証明書を検証者に送付する。
【0059】
[ステップ3]検証者41は、検証者端末600により、証明書の検証後、そこに記述された公開鍵を取り出し、文書に対する電子署名の正当性について検証する。
一般的に一度電子署名が付与された文書は、以降内容を変更することができない。しかし実社会では、署名が付与された文書に対し、文書作成者以外のユーザによって文書自体に推敲(加筆・削除・修正など文書に対する変更)が実施されるユースケースが想定される。そのため、推敲にも対応する電子署名方式が複数提案されている。
【0060】
関連技術として、部分修正が頻繁に発生するような文書に対して、転送・保存コストの観点から検証データ量を削減し、効率的に電子署名を生成・検証する方式が提案されている(上記の特許文献1参照)。この方式では、作成者端末100は、元々の文書を複数のブロックに分割し、修正する箇所のブロックに対してのみ部分識別情報(修正した文書部分ブロックに対するハッシュ値)を作成する。検証者41が使用する検証者端末600は、この部分識別情報に対し検証用の公開鍵を用いて検証する。これにより、検証する第三者は修正箇所の特定と修正箇所以外の不変性を確認することが可能となる。
【0061】
また他分野における関連技術として、データの利活用を促進するためにデータの加工履歴来歴情報を付与する技術であるChain Data Linearge(上記の非特許文献1参照)などが提案されている。
【0062】
しかしこれらの方式では、文書に対して推敲をする人物(推敲者)によって推敲が実施されるたび、検証者は検証者端末600により原本性を検証することとなる。そのため検証者端末600は、推敲回数分に相当する回数の検証を実施する。
【0063】
図4は、複数の推敲者が存在する場合の修正内容の検証負担を説明する図である。文書作成者30は、作成者端末100を用いて原文となる文書50を作成する。作成者端末100は、原文の文書50に電子的な署名60を行う。複数の推敲者31,32,・・・,3nは、順番に文書50に対して推敲を行い、推敲者端末200a,200b,・・・,200nを用いて文書50の内容を修正する。すると複数の修正版の複数の文書51,52,53,・・・,54が生成されることとなる。
【0064】
推敲者31,32,・・・,3nそれぞれは、推敲を行い文書の内容を修正するごとに、推敲者端末200a,200b,・・・,200nを用いて、修正版の文書に電子的な署名を行う。推敲者31,32,・・・,3nがN人(Nは1以上の整数)いる場合、N回の署名が行われる。すると最終修正版の文書54には、文書作成者30の署名60に加えて、推敲者31,32,・・・,3nそれぞれの署名61,62,63,・・・が付与される。
【0065】
このように複数の推敲者31,32,・・・,3nによって修正された後の文書54について、検証者41が修正内容の正当性を検証する場合がある。この場合、検証者41は、検証者端末600を用いて認証局(CA)40から、文書作成者30と複数の推敲者31,32,・・・,3nとの公開鍵70,71,72,73,・・・を取得する。そして検証者41は、検証者端末600により、複数の推敲者31,32,・・・,3nそれぞれが修正を加えた修正版の文書について、その文書の署名と、修正した推敲者の公開鍵とを用いて正当性を検証する。
【0066】
このように、推敲者が複数存在し、その修正内容についての検証を行う場合、検証者端末600の処理負荷が増大する。しかも、文書を複数のブロックに分割し、ブロックごとに修正を行った場合、検証者端末600はブロックごとの検証を行うこととなり、処理負荷がさらに増大する。
【0067】
例えば推敲者がN人存在し、文書がM個(Mは1以上の整数)のブロックに分割されている場合、最大N×M回の修正版に対する署名検証が行われる。これは本来文書に対する1回の署名検証(文書作成者の原本性保証)のみで文書に対する正当性検証が完了していた検証者端末600にとっては、処理負担が増加することを意味する。そのため検証者41側には、検証の負担を軽減したいというニーズが存在する。
【0068】
複数の署名が付与された文書についての検証回数を削減する技術として、マルチシグネチャがある。マルチシグネチャは同一の文書に対して付与された複数の署名を、単一の署名に集約することが可能な署名方式である。なお一般にマルチシグネチャは、「同じ文書」に対し「複数の秘密鍵」で署名された異なる署名を集約する手段として利用される。それに対し、第2の実施の形態では、「異なる」文書に対し「複数の秘密鍵」で署名した異なる署名を集約する手段として、マルチシグネチャを利用する。
【0069】
マルチシグネチャでは、検証者41が集約された署名の検証に成功したならば、そのことは検証者41が複数の署名をすべて検証したのと数学的には同じ意味を持つ。マルチシグネチャの代表的な方式としてSchnorrのマルチシグネチャがある。なお、第2の実施の形態は、マルチシグネチャに対応する署名方式全般で適用可能であるが、以下の説明では、Schnorr署名方式を利用した場合を想定して説明するものとする。
【0070】
図5は、Schnorr署名方式による検証回数の削減例を示す図である。ここで、群Gの生成元をg、位数をq、暗号学的ハッシュ関数をH(・)とおく。g,qは、暗号強度が高くなるように適切な値に決定された署名パラメータである。秘密鍵xに対して公開鍵はX=g
x(mod q)で生成され、署名ごとに異なる乱数rを利用し、メッセージm(署名対象の文書に相当)に対するSchnorr署名(s,R)が以下のように生成される。
c:=H(m||r)
s:=r+cx
R:=g
r
「||」は、文字列の連結を意味する。このときSchnorr署名は以下の式(1)を満たす。
g
s=RX
c (1)
このとき、検証者端末600は、メッセージmのハッシュ値cとSchnorr署名(s,R)と公開鍵Xを取得し、式(1)が満たされることを確認することで、メッセージの正当性が検証できる。
【0071】
ここで、同じメッセージmに対する、異なる3つの秘密鍵x1,x2,x3(それぞれ公開鍵はX1,X2,X3)を用いたSchnorr署名(s1,R1),(s2,R2)、(s3,R3)を考える。これらのSchnorr署名それぞれを式(1)の形式で表し、各式の左辺同士および右辺同士を乗算すると、これらSchnorr署名は以下の式(2)を満たす。
【0072】
【0073】
式(2)によって、(s
1+s
2+s
3,R
1R
2R
3)が集約された署名として利用可能となる。
図5に示すように、署名が集約できれば、検証者端末600での検証回数が1回で済む。
【0074】
また、異なるメッセージm4,m5,m6(それぞれのハッシュ値はc4,c5,c6)に対する、異なる秘密鍵x4,x5,x6(それぞれの公開鍵はX4,X5,X6)を用いたSchnorr署名(s4,R4),(s5,R5),(s6,R6)を考える。これらのSchnorr署名それぞれを式(1)の形式で表し、各式の左辺同士および右辺同士を乗算すると、これらのSchnorr署名は下の式(3)を満たす。
【0075】
【0076】
式(3)によって、(s4+s5+s6,R4R5R6)が集約された署名として検証可能となる。すなわち検証者端末600は、ハッシュ値c4,c5,c6と公開鍵X4,X5,X6と集約署名(s4+s5+s6,R4R5R6)とを用いて、式(3)が満たされることを確認することで、集約署名を検証することができる。
【0077】
このようにマルチシグネチャを利用することで、署名を集約することが可能である。1つの文書が複数のブロックに分割され、ブロックごとに修正が行われる場合には、マルチシグネチャと、例えばPIAT署名(Partial Information Assuring Technology for Signature)とを組み合わせることができる。なおPIAT署名は、複数回文面が修正された文書に対して検証可能な署名方式の一例である。
【0078】
PIAT署名は任意の署名方式を基に、部分完全性(文書に対する部分的な修正の正しさを第三者に証明可能とする性質)を保証するように機能を追加する署名方式である。PIAT署名には部分完全性保証によって文書の修正を可能にする方式と、墨塗りによって文書を匿名化する方式の2種類が存在するが、第2の実施の形態では主に前者の文書修正を行うPIAT署名を利用する。なおPIAT署名に関する技術は、例えば上記の特許文献2で提案されている。
【0079】
なお、特許文献2では、アグリゲート署名とPIAT署名とを組み合わせて利用している。アグリゲート署名は、複数の署名を1つに重畳することが可能で、重畳した署名を一括して検証することができる署名技術である。他方、第2の実施の形態では、署名サイズが修正回数に依存しない署名方式であるマルチシグネチャ署名方式を利用する。アグリゲート署名方式はマルチシグネチャ署名方式を一般化したものであり、第2の実施の形態にアグリゲート署名方式を用いることも可能である。
【0080】
図6は、マルチシグネチャを基に構成したPIAT署名方式の手順の一例を示す図である。文書作成者30の入力に基づいて、作成者端末100が、文書「m
1」を作成し、文書「m
1」のハッシュ値「c
1」を計算する(ステップS11)。そして作成者端末100は、自身の秘密鍵を用いてハッシュ値に対する署名「署名1」を作成し、そのハッシュ値と署名との組「c
1,署名1」を代理人端末300へ送信する(ステップS12)。
【0081】
推敲者端末200a,200b,・・・,200nは、推敲者31,32,・・・,3nからの入力に基づいて、文書「m1」に対して順番に修正を加える。このとき、推敲者端末200a,200b,・・・,200nは、修正文書「m2,m3,・・・,mN」を作成すると、文書「m2,m3,・・・,mN」のハッシュ値「c2,c3,・・・,cN」を計算する(ステップS13)。次に推敲者端末200a,200b,・・・,200nは、各秘密鍵を用いてハッシュ値に対する署名「署名2,署名3,・・・,署名N」を作成する(ステップS14)。推敲者端末200a,200b,・・・,200nは、ハッシュ値と署名の組「(c2,署名2),(c3,署名3),・・・,(cN,署名N)」を、代理人42が使用する代理人端末300へ送信する。最終版の修正文書「mN」を作成した推敲者端末200nは、作成した修正文書「mN」も代理人端末300へ送信する。
【0082】
代理人端末300は、「署名1,署名2,署名3,・・・,署名N」を集約する(ステップS15)。署名の集約により、集約署名が作成される。代理人端末300は、修正文書「mN」、ハッシュ値「c1,c2,c3,・・・,cN」、および集約署名を、検証者41が使用する検証者端末600へ送信する。検証者端末600は、代理人端末300から取得した情報に基づいて署名検証処理を行う。
【0083】
図7は、署名検証処理の手順の一例を示す図である。検証者端末600は、文書作成者30、推敲者31,32,・・・,3nに対応する公開鍵の証明書をCAサーバ500から取得し、公開鍵の正当性を検証する(ステップS21)。次に検証者端末600は、文書「m
N」のハッシュ値を計算し、算出したハッシュ値が代理人端末300から取得したハッシュ値「c
N」に一致することを検証する(ステップS22)。さらに検証者端末600は、ハッシュ値「c
1,c
2,・・・,c
N」に対応する集約署名を、CAサーバ500から取得した公開鍵を用いて検証する(ステップS23)。ここで、ステップS21の検証を第1の検証、ステップS22の検証を第2の検証、ステップS23の検証を第3の検証とする。
【0084】
以上の一連の処理が、第2の実施の形態で提案する電子署名付き文書の利便性向上技術を適用しない場合の署名検証処理である。このような署名検証処理では、以下のような課題が存在する。
【0085】
第1の課題は、検証者端末600が取得した修正版のハッシュ値が置き換えられていないかを検証するために、すべて、もしくは一部の修正版の文書が検証者41によって閲覧可能となる点である。
【0086】
すなわち、検証者端末600は、各修正版の文書のハッシュ値とそれに対応する集約署名の正当性を検証することができる。しかし修正版の文書のそれぞれのハッシュ値はそれぞれが関連性のない独立した値である。よって実際に修正版のハッシュ値であるか、もしくはまったく関連のない別のメッセージのハッシュ値であるかを検証者は判断することができない。
【0087】
問題が生じる場合の一例として、任意の修正版のハッシュ値と署名のペアが、別のハッシュ値と署名のペアに置き換えられた場合が考えられる。ハッシュ値と署名のペアが置き換えられると、検証者端末600では置き換えられたことを検知することができず、検証を通過してしまう。そのため、任意の修正版に対しハッシュ値が置き換えられていないかという正当性を検証するためには、検証者端末600において、修正版すべて(もしくは一部)の文書を閲覧し、それに対するハッシュ値を計算し、結果が一致するかを確認することが要求される。
【0088】
図8は、第2の実施の形態で提案する技術を適用しない場合に生じる課題の一例を示す図である。
図8の例では、文書「m
2」のハッシュ値「c
2」が、別のハッシュ値「c’
2」に置き換えられている。そして文書「m
2」に対する「署名2」も「署名2’」に置き換えられている。
【0089】
このとき第2の検証(
図7のステップS22)では、置き換えられたハッシュ値と署名とを用いないため、正しく検証できる。また第3の検証(
図7のステップS23)においても、ハッシュ値「c’
2」と「署名2’」との整合性に問題がなければ、正しく検証できてしまう。
【0090】
このような置き換えは、例えば代理人42に悪意がある場合、あるいは悪意のある第三者が代理人端末300を不正使用した場合などに発生し得る。署名が置き換えられるということは、実際の推敲者が誰であったのかを隠ぺいし、他の人物が推敲を行ったように装うことが可能であることを意味する。
【0091】
例えばソフトウェアの納品時に、品質管理部門の責任者による承認が求められるにもかかわらず、その責任者の承認を経ていないソフトウェアを納品する場合が考えられる。この場合、品質管理部門の責任者以外の推敲者が修正した文書のハッシュ値とその推敲者の署名とを、品質管理部門の責任者が過去に署名した文書のハッシュ値とその責任者の署名とに置き換えることで、品質管理部門の責任者の承認を経ているように偽装できる。
【0092】
ハッシュ値と署名との置き換えを抑止するには、文書「m1,m2,m3,・・・」を用いて、検証者端末600でハッシュ値「c1,c2,・・・」を算出すればよい。しかし本来は、検証者41に知られてもよいのは検証対象の文書「mN」のみであり、最終版以外の文書「m1,m2,m3,・・・」は検証者41に知られたくない文書である。
【0093】
修正前の原文の文書や修正段階の文書が社内でのみ共有可能な情報を含む場合、これらの文書が社外の検証者の目に触れることはA社にとって損失となる可能性がある。A社が被る損失の例としては、文書作成者が誤って文書に記入しその後推敲者によって削除されたA社の機密情報の漏洩や、重大な脆弱性を含むため削除されたソースコードの改変部分の情報の漏洩などが挙げられる。
【0094】
一方で検証者41の立場では、文書の推敲が正しい推敲者により行われ、その推敲者の署名が付与されている、という事実を確認はしたいが、最終版以外の修正版の文書に記述された文面自体は不要な情報でしかない。しかし検証者41は、検証者端末600により修正版の文書そのものが閲覧できなければ、正しい推敲者が修正した文書に対する署名が正しく付与されていることを検証することができない。
【0095】
このように、単にマルチシグネチャを利用し、複数の署名を一纏めにした集合署名を生成するだけでは、文書の修正過程を公開せずに済ませることが困難である。すなわち、文書作成側(A社)は検証者側(B社)に対し、どのようにして修正版の文書を公開せずに検証させるかという点が、技術的課題として残っている。
【0096】
[修正版の文書を公開せずに検証させるための提案技術の概要]
第2の実施の形態では、作成者端末100および推敲者端末200a,200b,・・・,200nが、署名する文書に修正履歴を反映した変数を混ぜ込み、署名する。混ぜ込む変数は、ハッシュチェーンから生成される。ハッシュチェーンはハッシュ関数(出力から入力を計算することが計算量的に困難であるような関数)を利用して構成される鎖状のデータ構造である。
【0097】
図9は、マルチシグネチャとハッシュチェーンとを組み合わせた署名手順の一例を示す図である。
図9に示すハッシュチェーンでは、文書ごとに管理された「seed」(使い捨ての乱数)を先頭とし、各文書をハッシュチェーンの各鎖に組み込み、末尾の鎖で最終版の文書が組み込まれるような構造を想定する。「seed」は検証者端末600で生成され、作成者端末100に送信される。使用されるハッシュ関数として、変数x、yからハッシュ値cを求める関数であり、かつハッシュ値cから変数x、yを求めることが困難な関数が使用される。
【0098】
例えば文書作成者30が使用する作成者端末100は、原文の文書「m1」と「seed」とを変数として用いて、ハッシュ値「c1」を計算する。次に推敲者31が使用する推敲者端末200aによって修正版の文書「m2」が作成された場合、推敲者端末200aは、修正版の文書「m2」とハッシュ値「c1」とを変数として用いて、ハッシュ値「c2」を計算する。このように、修正前の文書のハッシュ値を使用して、修正後の文書のハッシュ値を連鎖的に計算していく処理がハッシュチェーンである。最終版の文書「mN」のハッシュ値「cN」の生成には、原文とすべての修正版の文書が利用されている。
【0099】
本来、検証者41は、修正版のハッシュ値が与えられたとしても、それと修正版の文書との関係を検証することができない。しかし
図9の例のように、文書作成前に検証者端末600と作成者端末100とで「seed」を共有することで、ハッシュチェーンが「seed」から始まる。検証者端末600は、「seed」から始まったハッシュチェーンのハッシュ値に修正版のハッシュ値が組み込まれ、最後に計算された最終版の文書「m
N」のハッシュ値「c
N」に到達しているという事実を確かめる。これにより、検証者端末600は、ハッシュチェーンの性質から鎖を構成する各修正版のハッシュ値の正当性を確認することができる。最後に検証者端末600は、マルチシグネチャの性質を利用して生成された集約署名を検証することで、すべての修正版に付与された署名の正当性を確認することができる。
【0100】
これにより、一見すると、検証者端末600は、修正履歴を反映した変数(ハッシュ値「c1,c2,c3,・・・,cN」)と、最終版の文書「mN」とそれに対する集約署名を用いて、最終版の文書「mN」と署名との検証ができるように思われる。すなわち、A社にとって知られたくない文書「m1,m2,m3,・・・」をB社に公開せずに済むように思われる。
【0101】
しかし、署名ではなくハッシュチェーンの正当性を検証するためには、検証者端末600においてハッシュ値を計算することとなる。すなわち、新たにハッシュチェーンを導入したことで、ハッシュチェーンの正当性の検証が要求される。ハッシュチェーンの計算には文書「m1,m2,m3,・・・」が利用されるため、A社は検証者端末600に対して文書「m1,m2,m3,・・・」を公開しなければならなくなる。
【0102】
このように、単純にマルチシグネチャとハッシュチェーンとを組み合わせただけでは、検証者が修正版の文書をすべて公開しなければ検証できないという課題が解決できない。そこで第2の実施の形態では、2段階のハッシュ変換を伴うハッシュチェーンを適用する。
【0103】
図10は、2段階のハッシュ変換を伴うハッシュチェーンを適用した署名手順の一例を示す図である。
図9に示すように、作成者端末100と推敲者端末200a,200b,・・・,200nとは、ハッシュチェーンに組み込む前の段階で、さらにハッシュ関数を適用する。すなわち2段階のハッシュ関数を利用するようなハッシュチェーンを利用する。この場合、1段目のハッシュ値「h
1,h
2,h
3,・・・,h
N」が、
図8の例における文書「m
1,m
2,m
3,・・・,m
N」に替えて、連鎖するハッシュ値「c
1,c
2,c
3,・・・,c
N」の計算に用いられる。1段目のハッシュ値「h
1,h
2,h
3,・・・,h
N」の計算には、文書「m
1,m
2,m
3,・・・,m
N」と乱数「r
1,r
2,r
3,・・・,r
N」とが用いられる。例えば作成者端末100は、文書「m
1」と乱数「r
1」とを変数としてハッシュ値「h
1」を計算する。推敲者端末200aは、文書「m
2」と乱数「r
2」とを変数としてハッシュ値「h
2」を計算する。
【0104】
これにより、連鎖するハッシュ値「c1,c2,c3,・・・,cN」の計算に、文書「m1,m2,m3,・・・,mN」を直接は利用せずに済むようになる。すなわち、検証者端末600は、ハッシュチェーンの正当性の検証のために、原文の文書「m1」または、最終版以外の文書「m2,m3,・・・」そのものを入手せずに済む。
【0105】
検証者端末600がハッシュチェーンの正当性の検証をするためには、「seed」とハッシュ値「h1,h2,h3,・・・,hN」があればよい。このうち、「seed」は検証者端末600が生成した値であるため、外部から取得せずに済む。従って、検証者端末600は、A者側の装置(例えば代理人端末300)からハッシュ値「h1,h2,h3,・・・,hN」を取得できればよい。なおハッシュ値「hN」は、最終版の文書「mN」と乱数「rN」を用いて計算できる。最終版の文書「mN」は、本来の検証対象であり、当然に検証者端末600は取得する。すると検証者端末600は、ハッシュ値「hN」に替えて乱数「rN」を取得して、ハッシュ値「hN」を算出することが可能である。
【0106】
そこで検証者端末600は、すべての文書「m1,m2,m3,・・・,mN」のハッシュ値「h1,h2,h3,・・・,hN」、最終版の文書「mN」とその文書に対応する乱数「rN」を取得する。そして検証者端末600は、取得した情報を用いて、原文と修正版との各文書のハッシュ値「h1,h2,h3,・・・,hN」がハッシュチェーンに含まれていることを確認する。これにより、提示された最終版の文書「mN」が確かに検証したいドキュメントであり、正しい推敲者により推敲されていることを確認できる。
【0107】
なお、
図10に示した処理は、検証者41が最終版の文書「m
N」を検証する場合を想定しているが、原文または修正版の文書のいずれかを検証者41が指定し、指定した文書を検証対象とする場合も考えられる。
【0108】
図11は、修正版の文書の検証手順の一例を示す図である。検証者端末600は、例えば複数の推敲者31,32,・・・,3nのうちの、特定の推敲者が推敲することで作成された修正版の開示請求を、その推敲者が使用する推敲者端末に送信する。開示請求を受信した推敲者端末は、修正版の文書とその文書の署名とを検証者端末600に送信する。検証者端末600は、受信した修正版の文書の内容の正当性を、署名を用いて検証する。
【0109】
なお、
図11には、検証者端末600が修正版の文書の開示請求を行う例を示したが、検証者端末600が原文の文書の開示請求を行うことも可能である。その場合、検証者端末600は、作成者端末100に対して原文の開示請求を行うこととなる。
【0110】
以上が、第2の実施の形態における署名検証処理の概要である。以下、署名検証処理について詳細に説明する。
[署名検証のための各装置の機能]
次に、システム内の各端末が有する機能について
図12~
図17を参照して説明する。
【0111】
図12は、作成者端末の機能の一例を示すブロック図である。作成者端末100は、原文生成部110、鍵生成部120、秘密鍵記憶部130、公開鍵登録部140、署名検証要求部150、ハッシュ値計算部160、署名生成部170、原文情報送信部180、および原文開示部190を有する。
【0112】
原文生成部110は、文書作成者30からの入力に基づいて、原文となる文書を作成する。原文生成部110は、生成した文書を、鍵生成部120とハッシュ値計算部160とに送信する。
【0113】
鍵生成部120は、原文の文書の署名に用いる秘密鍵と、署名の検証に用いる公開鍵とのペアを生成する。鍵生成部120は、生成した秘密鍵を秘密鍵記憶部130に格納する。また鍵生成部120は、生成した公開鍵を公開鍵登録部140に送信する。
【0114】
秘密鍵記憶部130は、鍵生成部120が生成した秘密鍵を記憶する。秘密鍵記憶部130としては、例えばメモリ102またはストレージ装置103の記憶領域の一部が用いられる。
【0115】
公開鍵登録部140は、CAサーバ500への公開鍵の登録処理を行う。例えば公開鍵登録部140は、公開鍵を含む登録要求をCAサーバ500に送信する。
署名検証要求部150は、検証者端末600に対して、A社で作成した文書(最終版の文書)の署名検証リクエストを送信する。また署名検証要求部150は、例えば検証者端末600が生成した乱数である「seed」を、検証者端末600から受信する。例えば検証者端末600からは、検証者41の署名が付与された「seed」が送られる。その場合、署名検証要求部150は、CAサーバ500から検証者41の署名の証明書を取得し、「seed」に付与された署名の正当性を検証する。署名検証要求部150は、取得した「seed」を署名生成部170に送信する。
【0116】
ハッシュ値計算部160は、原文の文書に基づいて、2段階のハッシュ値を計算する。例えばハッシュ値計算部160は、乱数を生成し、原文の文書と生成した乱数とに基づいて、1段目のハッシュ値を計算する。次にハッシュ値計算部160は、1段目のハッシュ値と「seed」とに基づいて、ハッシュチェーンに用いる2段目のハッシュ値を計算する。そしてハッシュ値計算部160は、2段目のハッシュ値を署名生成部170に送信する。またハッシュ値計算部160は、原文の文書と1段目のハッシュ値と2段目のハッシュ値とを原文情報送信部180に送信する。
【0117】
署名生成部170は、原文の文書の署名を生成する。例えば署名生成部170は、秘密鍵記憶部130から秘密鍵を取得する。そして署名生成部170は、2段目のハッシュ値を秘密鍵で暗号化することで得られた暗号文を、原文の文書の署名とする。署名生成部170は、作成した署名を原文情報送信部180に送信する。
【0118】
原文情報送信部180は、原文の文書と2段目のハッシュ値とを推敲者端末200aに送信する。また原文情報送信部180は、原文の文書とその文書の署名とを文書保存用サーバ400に送信する。これにより、原文の文書と署名との組が文書保存用サーバ400で記憶される。さらに原文情報送信部180は、原文の文書の署名と1段目のハッシュ値とを代理人端末300に送信する。
【0119】
原文開示部190は、原文の文書の開示処理を行う。例えば原文開示部190は、検証者端末600からの原文の開示請求を受け取ると、文書作成者30の開示の許否の判断入力を受け付ける。原文開示部190は、開示を許可する旨の入力が行われると、原文の文書と対応する署名とを文書保存用サーバ400から取得する。そして原文開示部190は、原文の文書と署名とを検証者端末600に送信する。
【0120】
図13は、1人目の推敲者が使用する推敲者端末の機能の一例を示すブロック図である。推敲者端末200aは、文書情報受信部210a、修正版生成部220a、鍵生成部230a、秘密鍵記憶部240a、公開鍵登録部250a、ハッシュ値計算部260a、署名生成部270a、修正版情報送信部280a、および修正版開示部290aを有する。
【0121】
文書情報受信部210aは、作成者端末100から原文の文書と、その文書の2段目のハッシュ値とを取得する。文書情報受信部210aは、取得した文書を修正版生成部220aに送信する。また文書情報受信部210aは、取得したハッシュ値をハッシュ値計算部260aに送信する。
【0122】
修正版生成部220aは、推敲者31からの入力に基づいて文書を修正し、修正版の文書を作成する。修正版生成部220aは、作成した修正版の文書を、ハッシュ値計算部260aに送信する。
【0123】
鍵生成部230aは、修正版の文書の署名に用いる秘密鍵と、署名の検証に用いる公開鍵とのペアを生成する。鍵生成部230aは、生成した秘密鍵を秘密鍵記憶部240aに格納する。また鍵生成部230aは、生成した公開鍵を公開鍵登録部250aに送信する。
【0124】
秘密鍵記憶部240aは、鍵生成部230aが生成した秘密鍵を記憶する。秘密鍵記憶部240aとしては、例えば推敲者端末200aが有するメモリまたはストレージ装置の記憶領域の一部が用いられる。
【0125】
公開鍵登録部250aは、CAサーバ500への公開鍵の登録処理を行う。例えば公開鍵登録部250aは、公開鍵を含む登録要求をCAサーバ500に送信する。
ハッシュ値計算部260aは、修正版の文書に基づいて、2段階のハッシュ値を計算する。例えばハッシュ値計算部260aは、乱数を生成し、修正版の文書と生成した乱数とに基づいて、1段目のハッシュ値を計算する。次にハッシュ値計算部260aは、1段目のハッシュ値と、原文の2段目のハッシュ値とに基づいて、ハッシュチェーンに用いる2段目のハッシュ値を計算する。そしてハッシュ値計算部260aは、2段目のハッシュ値を署名生成部270aに送信する。またハッシュ値計算部260aは、修正版の文書と1段目のハッシュ値と2段目のハッシュ値とを修正版情報送信部280aに送信する。
【0126】
署名生成部270aは、修正版の文書の署名を生成する。例えば署名生成部270aは、秘密鍵記憶部240aから秘密鍵を取得する。そして署名生成部270aは、2段目のハッシュ値を秘密鍵で暗号化することで得られた暗号文を、修正版の文書の署名とする。署名生成部270aは、作成した署名を修正版情報送信部280aに送信する。
【0127】
修正版情報送信部280aは、修正版の文書と2段目のハッシュ値とを推敲者端末200bに送信する。また修正版情報送信部280aは、修正版の文書とその文書の署名とを文書保存用サーバ400に送信する。これにより、修正版の文書と署名との組が文書保存用サーバ400で記憶される。さらに修正版情報送信部280aは、修正版の文書の署名と1段目のハッシュ値とを代理人端末300に送信する。
【0128】
修正版開示部290aは、修正版の文書の開示処理を行う。例えば修正版開示部290aは、検証者端末600からの修正版の開示請求を受け取ると、推敲者31の開示の許否の判断入力を受け付ける。修正版開示部290aは、開示を許可する旨の入力が行われると、修正版の文書と対応する署名とを文書保存用サーバ400から取得する。そして修正版開示部290aは、修正版の文書と署名とを検証者端末600に送信する。
【0129】
2人目以降の推敲者端末200b,・・・,200nも、推敲者端末200aと同様の機能を有している。ただし、最終版の文書を作成する推敲者端末200nについては、他の推敲者端末への情報送信は行わない。
【0130】
図14は、最終版の文書を作成する推敲者端末の機能の一例を示すブロック図である。推敲者端末200nは、推敲者端末200mから受信した文書および2段目のハッシュ値に基づいて、最終版の文書の生成やその文書への署名などの処理を行う。
【0131】
推敲者端末200nは、文書情報受信部210n、修正版生成部220n、鍵生成部230n、秘密鍵記憶部240n、公開鍵登録部250n、ハッシュ値計算部260n、署名生成部270n、修正版情報送信部280n、および修正版開示部290nを有する。文書情報受信部210n、修正版生成部220n、鍵生成部230n、秘密鍵記憶部240n、公開鍵登録部250n、ハッシュ値計算部260n、署名生成部270n、および修正版開示部290nそれぞれの機能は、
図13に示した同名の要素と同じである。
【0132】
修正版情報送信部280nは、最終版の文書、その文書の署名、1段目のハッシュ値、および2段目のハッシュ値を、代理人端末300に送信する。また修正版情報送信部280nは、最終版の文書とその文書の署名とを文書保存用サーバ400に送信する。これにより、最終版の文書と署名との組が文書保存用サーバ400で記憶される。
【0133】
図15は、代理人端末の機能の一例を示すブロック図である。代理人端末300は、文書情報受信部310、署名集約部320、および文書情報送信部330を有する。
文書情報受信部310は、作成者端末100、推敲者端末200a,200b,・・・,200nから送信された情報を受信する。例えば文書情報受信部310は、作成者端末100から原文の文書の署名と1段目のハッシュ値とを受信する。また文書情報受信部310は、各推敲者端末200a,200b,・・・,200nから修正版の文書の署名と1段目のハッシュ値とを受信する。文書情報受信部310は、最終版の文書を作成する推敲者端末200nからは、さらに最終版の文書と2段目のハッシュ値とを受信する。文書情報受信部310は、受信した複数の署名を、署名集約部320に送信する。また文書情報受信部310は、受信した情報のうちの署名以外の情報を、文書情報送信部330に送信する。
【0134】
署名集約部320は、受信した複数の署名をマルチシグネチャによって1つの署名に集約する。例えば署名集約部320は、複数の署名がSchnorr署名(s,R)の場合、各署名の「s」の値の和を求め、各署名の「R」の値の積を求める。そして、署名集約部320は、「s」の和と「R」の積の組からなる集約署名を生成する。例えば取得した署名が(s1,R1)、(s2,R2)、(s3,R3)の3つであれば、集約署名は(s1+s2+s3,R1R2R3)となる。署名集約部320は、集約した署名を文書情報送信部330に送信する。
【0135】
文書情報送信部330は、集約署名、原文と修正版の文書それぞれの1段目のハッシュ値、最終版の文書の2段目のハッシュ値、最終版の文書、および1段目のハッシュ値の生成に使用した乱数を、検証者端末600に送信する。
【0136】
図16は、CAサーバの機能の一例を示すブロック図である。CAサーバ500は、公開鍵受信部510、証明書発行部520、証明書記憶部530、および公開鍵送信部540を有する。
【0137】
公開鍵受信部510は、作成者端末100、または複数の推敲者端末200a,200b,・・・,200nから、公開鍵を含む登録要求を受信する。公開鍵受信部510は、受信した登録要求に含まれる公開鍵を証明書発行部520に送信する。
【0138】
証明書発行部520は、文書作成者または推敲者の公開鍵に対する証明書を生成する。例えば証明書発行部520は、文書作成者または推敲者を示す所有者情報と公開鍵を、CAの秘密鍵で暗号化し、暗号化で生成された暗号文をCAの署名とする。そして証明書発行部520は、所有者情報と公開鍵とCAの署名とを含む証明書を生成する。証明書発行部520は、生成した証明書を、証明書記憶部530に格納する。
【0139】
証明書記憶部530は、文書作成者および推敲者の公開鍵に対する証明書を記憶する。例えばCAサーバ500のメモリまたはストレージ装置の記憶領域の一部が、証明書記憶部530として使用される。
【0140】
公開鍵送信部540は、検証者端末600からの要求に応じて、文書作成者および推敲者の公開鍵に対する証明書を証明書記憶部530から取得する。そして公開鍵送信部540は、取得した証明書を検証者端末600に送信する。
【0141】
図17は、検証者端末の機能の一例を示すブロック図である。検証者端末600は、検証要求応答部610、seed記憶部620、文書情報受信部630、証明書検証部640、ハッシュ値検証部650、および署名検証部660を有する。
【0142】
検証要求応答部610は、作成者端末100からの署名検証リクエストに対する応答を行う。例えば検証要求応答部610は、署名検証リクエストを受信すると、乱数を生成し、その乱数の値を「seed」とする。そして検証要求応答部610は、「seed」を含む署名検証レスポンスを作成者端末100に送信する。また検証要求応答部610は、生成した「seed」をseed記憶部620に格納する。
【0143】
seed記憶部620は、「seed」(乱数の値)を記憶する。例えば検証者端末600のメモリまたはストレージ装置の記憶領域の一部が、seed記憶部620として使用される。
【0144】
文書情報受信部630は、代理人端末300から文書の検証に用いる情報を受信する。例えば文書情報受信部630は、集約署名、原文と修正版の文書それぞれの1段目のハッシュ値、最終版の文書の2段目のハッシュ値、最終版の文書、および最終版の文書の1段目のハッシュ値の生成に使用した乱数を、代理人端末300から受信する。
【0145】
証明書検証部640は、CAサーバ500から、文書作成者および推敲者の公開鍵を含む証明書を取得し、その証明書の正当性を検証する。例えば証明書検証部640は、CAサーバ500から、CAの公開鍵を取得する。次に証明書検証部640は、証明書に含まれるCAの署名を、CAの公開鍵で復号する。そして証明書検証部640は、復号して得られた情報と、証明書に含まれる所有者情報と公開鍵とが一致するか否かを検証する。証明書検証部640は、検証の結果、一致した場合、取得した証明書に含まれる公開鍵が、その証明書に示される所有者のものであると認定する。
【0146】
ハッシュ値検証部650は、文書情報受信部630が受信した最終版の文書の2段目のハッシュ値(ハッシュチェーンで求められた値)を検証する。例えばハッシュ値検証部650は、seed記憶部620から「seed」を取得する。次にハッシュ値検証部650は、「seed」を元に、原文と修正版の文書それぞれの1段目のハッシュ値、最終版の文書、および最終版の文書の1段目のハッシュ値の生成に使用した乱数を用いて、
図10に示す手順でハッシュチェーンの値を算出する。ハッシュ値検証部650は、算出したハッシュチェーンの値と、文書情報受信部630が受信した最終版の文書の2段目のハッシュ値とが一致するか否かを判断する。ハッシュ値検証部650は、ハッシュチェーンの値と、受信した最終版の文書の2段目のハッシュ値とが一致した場合、そのハッシュ値が正当であると認定する。
【0147】
ハッシュ値検証部650は、ハッシュ値が正当であると認定した場合、ハッシュチェーンの計算過程で算出された、各文書の2段目のハッシュ値を署名検証部660に送信する。
【0148】
署名検証部660は、文書作成者と推敲者それぞれの署名を検証する。例えば署名検証部660は、各文書の2段目のハッシュ値と集約署名と、文書作成者と推敲者それぞれの公開鍵とを用いて、上記の式(3)が満たされることを検証する。署名検証部660は、正しく検証できた場合、作成者端末100に対して署名検証が成功した旨を通知する。
【0149】
各装置が
図12~
図17に示したような機能を有することにより、修正過程の文書を公開せずに複数の署名の検証が可能となる。なお、
図12~
図17に示した各機能を示す要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。また、
図12~
図17に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
【0150】
[署名・検証手順]
以下に、
図18~
図22を参照し、文書への署名と署名の検証の手順を説明する。なお
図18~
図22では、作成者端末100と推敲者端末200a,200b,・・・,200nによる秘密鍵と公開鍵の生成、秘密鍵の記憶、公開鍵のCAサーバ500への登録処理は省略されている。作成者端末100と推敲者端末200a,200b,・・・,200nの各装置は
図18~
図22の処理で署名を作成する前に秘密鍵と公開鍵とを生成し、公開鍵をCAサーバ500に登録する。これによりCAサーバ500には、公開鍵束「L=X
1,X
2,・・・,X
N」が登録される。
【0151】
図18は、作成者端末による署名手順の一例を示す図である。作成者端末100の原文生成部110は、文書作成者30からの入力に基づいて原文の文書「m
1」を作成する。次にハッシュ値計算部160が乱数「r
1」を生成する。そしてハッシュ値計算部160は、生成した乱数「r
1」と原文の文書「m
1」を用いて、1段目のハッシュ値「h
1=H(m
1,r
1)」を計算する。さらにハッシュ値計算部160は、1段目のハッシュ値「h
1」と、検証者端末600から取得した「seed」とを用いて、ハッシュチェーンに用いる2段目のハッシュ値「c
1=H(h
1,seed)」を計算する。次に署名生成部170が文書作成者30の秘密鍵でハッシュ値「c
1」を暗号化し、暗号化された暗号文を文書作成者30の署名「署名1」とする。
【0152】
原文情報送信部180は、原文の文書「m1」と2段目のハッシュ値「c1」とを、推敲者端末200aに送信する。また原文情報送信部180は、文書作成者30の署名「署名1」と1段目のハッシュ値「h1」とを代理人端末300に送信する。
【0153】
図19は、1人目の推敲者が使用する推敲者端末による署名手順の一例を示す図である。推敲者端末200aは、作成者端末100から原文の文書「m
1」と2段目のハッシュ値「c
1」とを受信すると、推敲者31の推敲による入力に基づいて、修正版生成部220aが修正版の文書「m
2」を作成する。次にハッシュ値計算部260aが乱数「r
2」を生成する。そしてハッシュ値計算部260aは、生成した乱数「r
2」と修正版の文書「m
2」を用いて、1段目のハッシュ値「h
2=H(m
2,r
2)」を計算する。さらにハッシュ値計算部260aは、1段目のハッシュ値「h
2」と、作成者端末100から取得したハッシュ値「c
1」とを用いて、ハッシュチェーンに用いる2段目のハッシュ値「c
2=H(h
2,c
1)」を計算する。次に署名生成部270aが推敲者31の秘密鍵でハッシュ値「c
2」を暗号化し、暗号化された暗号文を推敲者31の署名「署名2」とする。
【0154】
修正版情報送信部280aは、修正版の文書「m2」と2段目のハッシュ値「c2」とを、次の推敲者32が使用する推敲者端末200bに送信する。また修正版情報送信部280aは、推敲者31の署名「署名2」と1段目のハッシュ値「h2」とを代理人端末300に送信する。
【0155】
その後、推敲者32,・・・,それぞれの推敲者端末200b,・・・により、
図19の処理と同様の署名処理が行われる。最後の推敲者3nが使用する推敲者端末200nは、生成した情報の送信先が他の推敲者端末200a,200b,・・・と異なる。
【0156】
図20は、最終版の文書を作成する推敲者端末による署名手順の一例を示す図である。推敲者端末200nは、推敲者端末200mから原文の文書「m
N-1」と2段目のハッシュ値「c
N-1」とを受信すると、推敲者3nの推敲による入力に基づいて、修正版生成部220nが修正版の文書「m
N」を作成する。次にハッシュ値計算部260nが乱数「r
N」を生成する。そしてハッシュ値計算部260nは、生成した乱数「r
N」と修正版の文書「m
N」を用いて、1段目のハッシュ値「h
N=H(m
N,r
N)」を計算する。さらにハッシュ値計算部260nは、1段目のハッシュ値「h
N」と、推敲者端末200mから取得したハッシュ値「c
N-1」とを用いて、ハッシュチェーンに用いる2段目のハッシュ値「c
N=H(h
N,c
N-1)」を計算する。次に署名生成部270aが推敲者3nの秘密鍵でハッシュ値「c
N」を暗号化し、暗号化された暗号文を推敲者3nの署名「署名N」とする。
【0157】
修正版情報送信部280nは、推敲者31の署名「署名N」、2段目のハッシュ値「cN」、1段目のハッシュ値「hN」、1段目のハッシュ値「hN」の生成に用いた乱数「rN」、および最終版の文書「mN」を代理人端末300に送信する。
【0158】
図21は、代理人端末による署名集約処理の手順の一例を示す図である。代理人端末300の文書情報受信部310が作成者端末100、および推敲者端末200a,・・・,200nから情報を取得すると、署名集約部320が、各署名「署名1,署名2,・・・,署名N」を1つの署名に集約し、集約署名を作成する。そして文書情報送信部330が、検証者端末600に、1段目のハッシュ値「h
1,h
2,・・・,h
N」、ハッシュ値「h
N」の生成に使用した乱数「r
N」、最終版の文書「m
N」、最終版の文書の2段目のハッシュ値「c
N」、および集約署名を送信する。
【0159】
図22は、検証者端末による検証処理の手順の一例を示す図である。検証者端末600の文書情報受信部630が代理人端末300から情報を受信する。するとハッシュ値検証部650が、「seed」、1段目のハッシュ値「h
1,h
2,・・・」、乱数「r
N」、および最終版の文書「m
N」を用いて、ハッシュチェーンのハッシュ値「C
N」を計算する。そしてハッシュ値検証部650は、計算して得られたハッシュ値「C
N」が、代理人端末300から取得したハッシュ値「C
N」と等しいかどうかを検証する。
【0160】
証明書検証部640がCAサーバ500から公開鍵リストLを取得し、CAの公開鍵を用いて、公開鍵リストLに含まれる文書作成者30、および推敲者31,32,・・・,3nそれぞれの公開鍵の証明書を検証する。文書作成者30、および推敲者31,32,・・・,3nそれぞれの公開鍵が真正なものであると確認できた場合、署名検証部660が集約署名を検証する。集約署名の検証には、文書作成者30および推敲者31,32,・・・,3nそれぞれの公開鍵と、ハッシュ値「CN」の計算過程で生成された各ハッシュ値「c1,c2,・・・,cN」とが用いられる。
【0161】
このようにして、検証者41へ、最終版の文書以外の文書を公開せずに、最終版の文書が、正しい原文作成者によって作成され、正しい推敲者によって推敲されていることを、検証者端末600において検証することが可能となる。
【0162】
[特定の修正版の文書の検証]
検証者端末600は、検証者41によって指定された所定の修正版の文書について、検証することもできる。
【0163】
図23は、検証者端末による特定の修正版の文書の検証処理の一例を示す図である。検証者端末600の文書情報受信部630は、検証者41からの入力に応じて、所定の修正版の文書を作成した推敲者端末200iに対して、修正版の文書の開示要求を送信する。推敲者端末200iは、推敲者による開示承認の入力があると、修正版の文書「m
i」と、1段目のハッシュ値の計算に用いた乱数「r
i」とを文書保存用サーバ400から取得する。そして推敲者端末200iは、SSL(Secure Sockets Layer)/TLS(Transport Layer Security)通信などの安全な経路を利用して、修正版の文書「m
i」と乱数「r
i」とを検証者端末600に送信する。
【0164】
検証者端末600の文書情報受信部630は、修正版の文書「mi」と乱数「ri」とを受信し、それらの情報をハッシュ値検証部650に送信する。ハッシュ値検証部650は、修正版の文書「mi」と乱数「ri」とに基づいて計算したハッシュ値「hi」と、代理人端末300から取得したハッシュ値「hi」とが一致するか否かを検証する。検証者端末600がhi=H(mi,ri)であることを確認できれば、該当する修正版の任意の文書「mi」の正当性が確認できたこととなる。なお、集約署名により署名の検証が実施済みであるため、個別の署名の検証は行わずに済む。
【0165】
[署名検証の具体例]
次に
図24~
図27を参照して、文書が複数のブロックに分割されており、ブロックごとに推敲者による修正が行われる場合を例にとり、署名検証処理を具体的に説明する。
【0166】
図24は、文書に対するブロックごとの修正例を示す図である。このケースでは、文書作成者30である「Alice」によって、作成者端末100を用いて作成された文書81が、m
11からm
14の4個の文書ブロックに分割されている。分割された文書ブロックには、それぞれ「以下の通り業務委託契約を結ぶ。」、「年間5%の利息を支払うものとする。」、「契約の期間は1年とする。」、「文責:Alice」と記載されている。
【0167】
このような文書に対して、課長である「Carol」と部長である「Charlie」が順に推敲し、文書ブロックごとに内容を修正している。例えば最初の推敲者31である「Carol」は、推敲者端末200aを用いて文書81を修正している。例えば文書ブロック「m12」が「年間10%の利息を支払うものとする。」と修正され、文書ブロック「m14」が「文責:Alice 推敲:Carol」と修正されている。修正後の文書82の文書ブロックを「m21,m22,m23,m24」とする。
【0168】
最後の推敲者3nである「Charlie」は、推敲者端末200nを用いて文書82を修正している。例えば文書ブロック「m22」が「年間3%の利息を支払うものとする。」と修正され、文書ブロック「m23」が「契約の期間は半年とする。」と修正され、文書ブロック「m24」が「文責:Alice 推敲:Carol,Charlie」と修正されている。修正後の文書83の文書ブロックを「m31,m32,m33,m34」とする。
【0169】
「Charlie」が推敲した後の文書83が、最終版の文書である。その結果、最終版の文書83の内容は「以下の通り業務委託契約を結ぶ。」「年間3%の利息を支払うものとする。」「契約の期間は半年とする。」「文責:Alice 推敲:Carol,Charlie」となる。
【0170】
このとき、検証者41は、文書の内容についての検証のモチベーションがある情報は、最終版の文書のみである。しかし検証者41が、推敲の手続きにおいて不正が行われていないかの確認を希望する場合もある。このような場合において、原文や修正版のすべての文書ブロックの検証を個別に検証者端末600で実施することにすると、原文と修正版とのすべてが検証者41に開示されてしまう。この場合、文書作成者30や推敲者31,32,・・・,3nが所属するA社にとって不利益となる情報が検証者側に流出してしまう。
【0171】
そこで第2の実施の形態では、作成者端末100と推敲者端末200a,200b,・・・,200nは、文書ブロックごとに2段階のハッシュ値計算を行い、2段目のハッシュ値によるハッシュチェーンを構成する。そして、作成者端末100と推敲者端末200a,200b,・・・,200nは2段目のハッシュ値に対して署名を行う。
【0172】
図25は、作成者端末と推敲者端末とで生成される情報の一例を示す図である。作成者端末100が生成する原文情報84には、原文の文書ブロックと、文書ブロックそれぞれのハッシュ値および署名が含まれる。
【0173】
例えば作成者端末100は、文書ブロック「m11」の文の後に乱数「r11」をつなげ、「以下の通り・・・,r11」の1段目のハッシュ値h11を計算する。さらに作成者端末100は、1段目のハッシュ値h11の後に「seed」をつなげ、2段目のハッシュ値c11を計算する。同様に、作成者端末100は、文書ブロック「m12,m13,m14」それぞれに対して、乱数「r12,r13,r14」を用いて2段階のハッシュ計算を行い、1段目のハッシュ値「h12,h13,h14」と2段目のハッシュ値「c12,c13,c14」を生成する。
【0174】
さらに作成者端末100は、生成した2段目のハッシュ値「c11,c12,c13,c14」それぞれの署名「Sign(c11,Alice),Sign(c12,Alice),Sign(c13,Alice),Sign(c14,Alice)」を生成する。なお、Sign(Message,Name)は、「Message」に対して「Name」の秘密鍵で署名したことを意味する。
【0175】
推敲者端末200aが生成する修正版情報85には、最初の修正版の文書ブロックと、文書ブロックそれぞれのハッシュ値および署名が含まれる。
例えば推敲者端末200aは、修正後の文書ブロック「m22」の文の後に乱数「r22」をつなげ、「年間10%・・・,r22」の1段目のハッシュ値h22を計算する。さらに推敲者端末200aは、1段目のハッシュ値「h22」の後に「c12」をつなげ、2段目のハッシュ値「c22」を計算する。同様に、推敲者端末200aは、修正後の文書ブロック「m24」に対して、乱数「r24」を用いて2段階のハッシュ計算を行い、1段目のハッシュ値「h24」と2段目のハッシュ値「c24」を生成する。
【0176】
推敲者端末200aは、修正していない文書ブロック「m21、m23」についても同様に、乱数「r21,r23」とハッシュ値「c11,c13」とを用いて、1段目のハッシュ値「h21,h23」と2段目のハッシュ値「c21,c23」とを計算する。さらに推敲者端末200aは、生成した2段目のハッシュ値「c21,c22,c23,c24」それぞれの署名「Sign(c21,Carol),Sign(c22,Carol),Sign(c23,Carol),Sign(c24,Carol)」を生成する。なお、推敲者端末200aは、修正していない文書ブロック「m21,m23」については、ハッシュ値「c11,c13」それぞれを、文書ブロック「m21,m23」の2段目のハッシュ値「c21,c23」としてもよい。
【0177】
推敲者端末200nが生成する修正版情報86には、最終版となる修正版の文書ブロックと、文書ブロックそれぞれのハッシュ値および署名が含まれる。
例えば推敲者端末200nは、修正後の文書ブロック「m32」の文の後に乱数「r32」をつなげ、「年間3%・・・,r32」の1段目のハッシュ値「h32」を計算する。そして推敲者端末200nは、計算したハッシュ値h32の後に「c22」をつなげ、2段目のハッシュ値「c32」を計算する。同様に、推敲者端末200nは、修正後の文書ブロック「m33,m34」に対して、乱数「r33,r34」を用いて2段階のハッシュ計算を行い、1段目のハッシュ値「h33,h34」と2段目のハッシュ値「c33,c34」を生成する。
【0178】
推敲者端末200nは、修正していない文書ブロック「m31」についても同様に、乱数「r31」とハッシュ値「c21」とを用いて、1段目のハッシュ値「h31」と2段目のハッシュ値「c31」とを計算する。さらに推敲者端末200nは、生成した2段目のハッシュ値「c31,c32,c33,c34」それぞれの署名「Sign(c31,Charlie),Sign(c32,Charlie),「Sign(c33,Charlie),Sign(c34,Charlie)」を生成する。なお、推敲者端末200nは、修正していない文書ブロック「m31」については、ハッシュ値「c21」を、文書ブロック「m31」の2段目のハッシュ値「c31」とする。
【0179】
このようにして生成された情報が代理人端末300に送信され、署名が集約される。
図26は、署名集約の一例を示す図である。代理人端末300は、作成者端末100、推敲者端末200a、および推敲者端末200nから取得した署名の束(署名群87)を、例えば文書ブロックごとに署名を集約する。さらに代理人端末300は、複数の文書ブロックそれぞれの集約署名をさらに集約する。これにより、複数の文書ブロックそれぞれについての文書作成者と推敲者との署名が1つの集約署名88に集約される。
【0180】
図27は、ハッシュチェーンを用いた署名検証の一例を示す図である。検証者端末600は、文書ブロックごとのハッシュチェーンを計算し、2段目のハッシュ値「c
11,c
12,・・・,c
34」を取得する。そして検証者端末600は、2段目のハッシュ値「c
11,c
12,・・・,c
34」を用いて集約署名の検証を行う。
【0181】
また検証者が任意の修正版の文書の検証を希望する場合、検証者端末600は、該当する修正版の文書と、その文書の1段目のハッシュ値の生成に使用した乱数とを取得し、1段目のハッシュ値が正しいことを検証する。例えば文書82(
図24参照)を検証する場合、検証者端末600は、文書ブロック「m
21,m
22,m
23,m
24」と乱数「r
21,r
22,r
23,r
24」とを取得し、ハッシュ値「h
21,h
22,h
23,h
24」を計算する。
【0182】
[署名検証の全体フロー]
次に、署名検証の全体の処理の流れを、
図28、
図29を参照して説明する。
図28は、署名検証処理の手順の一例を示す図(1/2)である。作成者端末100は、検証者端末600へ署名検証リクエストを送信する(ステップS101)。検証者端末600は、作成者端末100へ署名検証レスポンスを応答する(ステップS102)。
【0183】
作成者端末100は、推敲者端末200a,200n、検証者端末600それぞれとの間で、署名パラメータの共有を行う(ステップS103~S105)。署名パラメータは、例えば公開鍵の計算「X=gx(mod q)」に用いられる「q」の値である。
【0184】
次に作成者端末100は、秘密鍵と公開鍵との鍵ペア(sk1,pk1)を生成する(ステップS106)。そして作成者端末100は、文書作成者の名前「Signer」と公開鍵「pk1」とをCAサーバ500に登録する(ステップS107)。
【0185】
推敲者端末200aは、秘密鍵と公開鍵との鍵ペア(sk2,pk2)を生成する(ステップS108)。そして推敲者端末200aは、推敲者の名前「CoSigner1」と公開鍵「pk2」とをCAサーバ500に登録する(ステップS109)。
【0186】
推敲者端末200nは、秘密鍵と公開鍵との鍵ペア(sk3,pk3)を生成する(ステップS110)。そして推敲者端末200nは、推敲者の名前「CoSigner2」と公開鍵「pk3」とをCAサーバ500に登録する(ステップS111)。
【0187】
検証者端末600は、秘密鍵と公開鍵との鍵ペア(skV,pkV)を生成する(ステップS112)。そして検証者端末600は、検証者の名前「Verifier」と公開鍵「pkV」とをCAサーバ500に登録する(ステップS113)。さらに検証者端末600は、乱数「seed」を生成し、検証者の署名を付与した乱数「seed」を作成者端末100に送信する(ステップS114)。
【0188】
作成者端末100は、CAサーバ500に対して、検証者の公開鍵「pkV」の証明書を要求する(ステップS115)。CAサーバ500は、作成者端末100に検証者の公開鍵「pkV」の証明書を送信する(ステップS116)。作成者端末100は、検証者の公開鍵「pkV」の証明書を用いて「seed」の署名を検証する(ステップS117)。
【0189】
図29は、署名検証処理の手順の一例を示す図(2/2)である。作成者端末100は、2段階のハッシュ値h
1,c
1を計算すると共に、「seed」と原文の文書「m
1」との署名「sig
1←Sign(seed,m
1)」を生成する(ステップS121)。作成者端末100は、原文の文書「m
1」と2段目のハッシュ値「c
1」とを推敲者端末200aに送信する(ステップS122)。さらに作成者端末100は、署名「sig
1」と1段目のハッシュ値「h
1」とを代理人端末300に送信する(ステップS123)。
【0190】
推敲者端末200aは、2段階のハッシュ値h2,c2を計算すると共に、「h1」と修正版の文書「m2」との署名「sig2←Sign(c1,m2)」を生成する(ステップS124)。推敲者端末200aは、修正版の文書「m2」と2段目のハッシュ値「c2」とを推敲者端末200nに送信する(ステップS125)。さらに推敲者端末200aは、署名「sig2」と1段目のハッシュ値「h2」とを代理人端末300に送信する(ステップS126)。
【0191】
推敲者端末200nは、2段階のハッシュ値h3,c3を計算すると共に、「h2」と修正版の文書「m3」との署名「sig3←Sign(c2,m3)」を生成する(ステップS127)。推敲者端末200nは、修正版の文書「m3」、2段目のハッシュ値「c3」、署名「sig3」、および1段目のハッシュ値「h3」を代理人端末300に送信する(ステップS128)。
【0192】
代理人端末300は、作成者端末100、推敲者端末200a,および推敲者端末200nから取得した署名「sig1,sig2,sig3」を集約した集約署名「sig←AggSig(sig1,sig2,sig3)」を生成する(ステップS129)。そして代理人端末300は、1段目のハッシュ値の集合H={h1,h2,h3}、乱数「r3」が繋げられた最終版の文書「m3||r3」、2段目のハッシュ値「c3」、および集約署名「sig」を、検証者端末600に送信する(S130)。
【0193】
検証者端末600は、CAサーバ500に対して、公開鍵リストL(pk1,pk2,pk3)の証明書を要求する(ステップS131)。CAサーバ500は、検証者端末600に、公開鍵リストLの証明書を送信する(ステップS132)。検証者端末600は、「seed」、1段目のハッシュ値の集合H、および文書「m3||r3」を用いて、2段目のハッシュ値「c3」を検証する(ステップS133)。検証者端末600は、ハッシュ値の検証に失敗した場合{HashchainVerify(seed,H,m3,c3)=0}、ハッシュ値検証に失敗した旨を作成者端末100に通知する。
【0194】
検証者端末600は、ハッシュ値の検証に成功した場合{HashchainVerify(seed,H,m3,c3)=1}、集約署名sigを検証する(ステップS135)。検証者端末600は、集約署名sigの検証に、2段目のハッシュ値の和「c1+c2+c3」と証明書に基づいて証明された公開鍵リストLとを用いる。なお、2段目のハッシュ値「c1,c2」については、ハッシュ値の検証過程で算出されている。検証者端末600は、署名の検証に失敗した場合{MultiSigVerify(c1+c2+c3,sig,L)=0}、署名検証に失敗した旨を作成者端末100に送信する(ステップS136)。
【0195】
検証者端末600は、ハッシュ値と署名との検証に成功した場合({HashchainVerify(seed,H,m3,c3)=1}&{MultiSigVerify(c1+c2+c3,sig,L)=1})、その旨を作成者端末100に送信する。
【0196】
このようにして、検証者端末600に、原文、または最終版以外の修正版の文書を開示せずに、正当な推敲者の署名を含む集約署名の検証を、検証者端末600で実施することが可能となる。
【0197】
すなわち検証者41の修正版の文面を閲覧させることなく、検証者端末600により、最終版に至るまで修正版が正当なフローに従って作成された正当性をハッシュチェーンの検証で確認できる。しかも検証者端末600は、すべてのフローにおける修正版に付与された署名の正当性を修正回数に依存せず1回の署名検証で確認することが可能である。これにより、安全かつ効率的に文書への電子署名及び修正が可能となる。
【0198】
さらに、検証者41は任意の推敲者から同意が得られた場合、他の修正版に関する情報を漏洩せずに、該当する修正版を取得することが可能である。この場合、検証者端末600はハッシュ値の検証によってその正当性を検証できる。これにより、基本的には修正版を秘匿しつつ、証拠としての修正版が必要な状況に限り、推敲者によるごまかし(改ざん)ができない形で修正版を開示することが可能となる。
【0199】
〔その他の実施の形態〕
第2の実施の形態では、署名の集約にSchnorr署名を用いた例を示しているが、他の署名方式で集約してもよい。
【0200】
また第2の実施の形態では、文書作成者30と推敲者31,32,・・・,3nと代理人42が、それぞれ異なる端末装置(コンピュータ)を使用しているが、1台のコンピュータを二人で共用することも可能である。例えば1台のサーバを文書作成者30と推敲者31,32,・・・,3nが共有し、そのサーバ上で文書の作成および修正、ハッシュチェーンの計算、および署名作成を行うことも可能である。
【0201】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。
【符号の説明】
【0202】
1 第1のコンピュータシステム
1a 記憶部
1b 処理部
2 第2のコンピュータシステム
2a 記憶部
2b 処理部
3a,3b,3c 文書
4a 原文第1ハッシュ値
4b 第1修正版第1ハッシュ値
4c 第2修正版第1ハッシュ値
5a 原文第2ハッシュ値
5b 第1修正版第2ハッシュ値
5c 第2修正版第2ハッシュ値
6 集約署名
7 乱数