JP5387282B2 - コンテンツ処理装置、コンテンツの部分完全性保証のためのプログラム - Google Patents
コンテンツ処理装置、コンテンツの部分完全性保証のためのプログラム Download PDFInfo
- Publication number
- JP5387282B2 JP5387282B2 JP2009221466A JP2009221466A JP5387282B2 JP 5387282 B2 JP5387282 B2 JP 5387282B2 JP 2009221466 A JP2009221466 A JP 2009221466A JP 2009221466 A JP2009221466 A JP 2009221466A JP 5387282 B2 JP5387282 B2 JP 5387282B2
- Authority
- JP
- Japan
- Prior art keywords
- hash value
- content
- block
- update
- unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Description
本技術は、コンテンツ(例えば、文書、動画、写真、音楽など)の部分完全性保証技術(PIAT:Partial Integrity Assurance Technology)に関する。
例えばRSA(Rivest Shamir Adleman)等の公開鍵暗号方式を利用した電子署名を文書に付与することによって、その文書が改竄されていないこと、及び文書の作成者を保証することができる。しかし、この方式では、文書の一部を変更した場合、変更後の文書に新たな電子署名を付与することによって、変更後の文書全体の完全性を保証することはできるが、変更されていない部分が元の文書から引き継いだものであることを保証することはできない。
そこで、文書の一部が変更された場合に、変更後の文書の完全性を保証すると共に、変更されていない部分が元の文書から引き継いだものであることを保証(以下、部分完全性保証と呼ぶ)するための技術として、例えばPIAT(Partial Integrity Assurance Technology)と呼ばれる技術が従来から存在する。PIATでは、文書を予めいくつかのブロックに分割しておき、各ブロックに対して完全性を保証するようになっている。これにより、変更後の文書の完全性だけでなく、変更されていないブロックが元の文書から引き継いだものであることを保証することができる。なお、PIATでは、図1に示すように、署名者が文書を作成する署名フェーズと、変更者が文書に変更を加える変更フェーズと、検証者が変更後の文書を受け取り、検証を行う検証フェーズの3つのフェーズに分かれている。図1に示すように、変更者は複数人いる場合もあり、複数回変更を加える場合もある。また、署名者が変更者となる場合もある。さらに、誰が検証者になってもよい。
従来のPIATの代表的な方式としては、SCCS(Source Code Control System)型とRCS(Revision Control System)型の2つの方式が存在する。例えば、SCCS型では、図2に示すように、署名フェーズにおいて、署名者により作成された文書Mは、複数のブロック(図2では、m1〜m5)に分割され、各ブロックに対するハッシュ値(図2では、h1〜h5)が計算される。そして、各ブロックのハッシュ値を含むハッシュ値リストに対する電子署名σ0が生成される。なお、ハッシュ値リストと電子署名σ0とは、検証者に公開される。
そして、変更フェーズにおいて、変更者1が署名者から文書Mを受け取り、例えばブロックm3をブロックm3’に変更したものとする。そうすると、ブロックm3’に対するハッシュ値h3’が計算され、変更者の識別番号(1)と変更位置番号(3)と当該ハッシュ値(h3’)とを含むデータ(以下、公開ハッシュ値と呼ぶ)に対する電子署名σ1が生成される。なお、公開ハッシュ値(1,3,h3’)と電子署名σ1とは、検証者に公開される。
また、同じく変更フェーズにおいて、変更者2が変更者1から文書M’を受け取り、例えばブロックm4をブロックm4’に変更したものとする。そうすると、ブロックm4’に対するハッシュ値h4’が計算され、変更者の識別番号(2)と変更位置番号(4)と当該ハッシュ値(h4’)とを含む公開ハッシュ値に対する電子署名σ2が生成される。なお、変更後の文書M”と公開ハッシュ値(2,4,h4’)と電子署名σ2とは、検証者に公開される。
そして、図3に示すように、SCCS型では、検証フェーズにおいて、検証者は、ハッシュ値リストと、電子署名σ0と、公開ハッシュ値(1,3,h3’)と、電子署名σ1と、公開ハッシュ値(2,4,h4’)と、電子署名σ2と、変更後の文書M”とを受け取る。そして、第1の検証段階として、変更者2によって行われた変更内容の検証が行われる。具体的には、まず、文書M”に含まれる各ブロックに対するハッシュ値(図3では、h1、h2、h3’、h4’及びh5)が計算される。次に、電子署名σ2の検証が行われ、検証に成功した場合には、公開ハッシュ値(2,4,h4’)を用いて、4番目のブロックの検証が行われる。例えば、先に計算されたハッシュ値h4’と、公開ハッシュ値に含まれるハッシュ値h4’とが一致すれば、検証成功と判断される。なお、4番目のハッシュ値h4’は、ハッシュ値リストに含まれるハッシュ値h4に置き換えられる。
そして、第2の検証段階として、変更者1によって行われた変更内容の検証が行われる。具体的には、電子署名σ1の検証が行われ、検証に成功した場合には、公開ハッシュ値(1,3,h3’)を用いて、3番目のブロックの検証が行われる。例えば、先に計算されたハッシュ値h3’と、公開ハッシュ値に含まれるハッシュ値h3’とが一致すれば、検証成功と判断される。なお、3番目のハッシュ値h3’は、ハッシュ値リストに含まれるハッシュ値h3に置き換えられる。
そして、第3の検証段階では、第1及び第2の検証段階においてハッシュ値h3及びh4への置き換えが行われたハッシュ値リストを用いて、電子署名σ0の検証が行われる。そして、検証に成功した場合には、署名者から公開されたハッシュ値リストをさらに用いてブロックの検証が行われる。これにより、変更後の文書M”に含まれるブロックm4’は、変更者2によって変更されたものであることが保証され、ブロックm3’は、変更者1によって変更されたものであることが保証される。さらに、変更されなかったブロックについては文書Mから引き継いだものであることが保証される。
また、例えばRCS型では、図4に示すように、SCCS型と同様に、署名フェーズにおいて、署名者により作成された文書Mは、複数のブロック(図4では、m1〜m5)に分割され、各ブロックに対するハッシュ値(図4では、h1〜h5)が計算される。そして、各ブロックのハッシュ値を含むハッシュ値リストに対する電子署名σ0が生成される。なお、電子署名σ0は、検証者に公開される。RCS型では、署名フェーズにおいて計算されたハッシュ値(h1〜h5)は、検証者には公開されない。
そして、変更フェーズにおいて、変更者1が署名者から文書Mを受け取ると、文書Mに含まれる各ブロック対するハッシュ値(h1〜h5)が計算され、ハッシュ値リストが生成される。そして、例えば、変更者1がブロックm3をブロックm3’に変更したものとする。そうすると、変更者の識別番号(1)と、変更位置番号(3)と、変更前のブロックm3のハッシュ値(h3)とを含む公開ハッシュ値が生成される。そして、変更後のブロックm3’に対するハッシュ値h3’が計算され、ハッシュ値リストのハッシュ値h3がハッシュ値h3’に置き換えられる。そして、このハッシュ値リストと、公開ハッシュ値とに対する電子署名σ1が生成される。なお、公開ハッシュ値(1,3,h3)と電子署名σ1とは、検証者に公開される。
また、同じく変更フェーズにおいて、変更者2が変更者1から文書M’を受け取ると、文書M’に含まれる各ブロック対するハッシュ値(h1、h2、h3’、h4及びh5)が計算され、ハッシュ値リストが生成される。そして、例えば、変更者2がブロックm4をブロックm4’に変更したものとする。そうすると、変更者の識別番号(2)と、変更位置番号(4)と、変更前のブロックm4のハッシュ値(h4)とを含む公開ハッシュ値が生成される。そして、変更後のブロックm4’に対するハッシュ値h4’が計算され、ハッシュ値リストのハッシュ値h4がハッシュ値h4’に置き換えられる。そして、このハッシュ値リストと、公開ハッシュ値とに対する電子署名σ2が生成される。なお、公開ハッシュ値(2,4,h4)と電子署名σ2とは、検証者に公開される。
そして、図5に示すように、RCS型では、検証フェーズにおいて、検証者は、電子署名σ0と、公開ハッシュ値(1,3,h3)と、電子署名σ1と、公開ハッシュ値(2,4,h4)と、電子署名σ2と、変更後の文書M”とを受け取る。そして、第1の検証段階として、変更者2によって行われた変更内容の検証が行われる。具体的には、まず、文書M”に含まれる各ブロックに対するハッシュ値(図5では、h1、h2、h3’、h4’及びh5)が計算され、ハッシュ値リストが生成される。そして、このハッシュ値リストと、公開ハッシュ値(2,4,h4)とを用いて、電子署名σ2の検証が行われ、検証に成功した場合には、4番目のブロックのハッシュ値h4’が、公開ハッシュ値に含まれるハッシュ値h4に置き換えられる。
そして、第2の検証段階として、変更者1によって行われた変更内容の検証が行われる。具体的には、第1の検証段階においてハッシュ値h4への置き換えが行われたハッシュ値リストと、公開ハッシュ値(1,3,h3)とを用いて、電子署名σ1の検証が行われ、検証に成功した場合には、3番目のブロックのハッシュ値h3’が、公開ハッシュ値に含まれるハッシュ値h3に置き換えられる。
そして、第3の検証段階では、第1及び第2の検証段階においてハッシュ値h3及びh4への置き換えが行われたハッシュ値リストを用いて、電子署名σ0の検証が行われる。これにより、SCCS型と同様に、変更されたブロックを保証すると共に、変更されなかったブロックについては文書Mから引き継いだものであることが保証される。
なお、図6に示すように、文書がn個のブロックに分割されている際に、m人の変更者によってd箇所の変更が行われた場合、従来のSCCS型では、検証時、n個のメッセージと、n+d個のハッシュ値と、m+1個の電子署名とが必要となる。また、再変更時に元の電子署名の検証が必要となる。また、従来のRCS型では、ハッシュ値がd個となる以外は、SCCS型と同様である。
このように、従来のPIATでは、文書の一部のブロックを変更した場合に、変更後の文書の完全性を保証すると共に、変更されていない部分が元の文書から引き継いだものであることを保証できる。
武仲正彦,伊豆哲也,吉岡孝司,「電子文書の訂正・流通を考慮した部分完全性保証方式の改良(その2)」,SCIS2006,2B2-4,Jan.2006
一方で、変更者が、文書、動画、写真、音楽などのコンテンツの最後にブロックを追加したり、コンテンツの途中にブロックを挿入したりする場合もある。例えば、図7に示すように、変更者によってコンテンツの最後に新たなブロックm6が追加された場合、変更フェーズでは、ブロックm6に対するハッシュ値h6’が計算され、追加された1ブロック分の公開ハッシュ値と、その公開ハッシュ値に対する電子署名σ1とが生成される。なお、図7は、ブロック追加時におけるSCCS型の全体的な流れを示している。
そして、図7に示すように、検証フェーズでは、署名フェーズで生成されたハッシュ値リスト及び電子署名σ0と、変更フェーズで生成された1ブロック分の公開ハッシュ値及び電子署名σ1と、ブロック追加後のコンテンツとを用いて検証が行われる。具体的には、まずブロック追加後のコンテンツに含まれる各ブロックのハッシュ値が計算される。そして、電子署名σ1の検証が行われ、検証に成功した場合には、公開ハッシュ値(1,6,h6’)を用いて、6番目の追加ブロックの検証が行われる。また、電子署名σ0の検証が行われ、検証に成功した場合には、元のコンテンツに含まれる各ブロックの検証が行われる。これにより、追加ブロックm6は、変更者1によって追加されたものであることが保証され、ブロックm1〜m5については、元のコンテンツから引き継いだものであることが保証される。
しかしながら、従来のPIATでは、変更者によってコンテンツの途中に新たなブロックが挿入された場合、挿入ブロックより後方の各ブロックは、内容自体に変更はないが、位置がずれたことで、変更扱いとなってしまう。例えば図8に、ブロック挿入時におけるSCCS型の全体的な流れを示す。図8に示すように、ブロックm6が3番目の位置に挿入された場合、変更フェーズでは、挿入ブロック以降の4つのブロックの各々について、ハッシュ値(図8では、h3’〜h6’)が計算され、公開ハッシュ値が生成されることになる。そのため、例えば、ブロック数の多い動画ファイルなどに対してブロックを挿入する場合、部分完全性保証のために必要となる公開ハッシュ値のデータ量が膨大になってしまう。
また、図8に示すように、ブロックが挿入された場合、検証フェーズでは、公開ハッシュ値を用いて、挿入ブロック以降の各ブロックの検証が行われるようになっている。そのため、従来のPIATでは、挿入ブロックより後方の各ブロックは実際には変更していないにもかかわらず、変更されたものと扱われてしまうため、元のコンテンツから引き継いだものであることを保証することができないという問題もある。
従って、本技術の目的は、コンテンツにブロックを挿入する場合でも、公開ハッシュ値のデータ量を抑えつつ、コンテンツの部分完全性保証を実現できるようにすることである。
第1の態様に係るコンテンツ処理装置は、更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部と、複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付手段と、更新種別が挿入であった場合、コンテンツにおける更新位置に更新ブロックを挿入することにより更新済みコンテンツを生成する挿入手段と、更新ブロックに対するハッシュ値を計算する第1ハッシュ値計算手段と、管理データ格納部から更新者識別子及び秘密鍵を読み出し、当該更新者識別子と、更新位置と、更新ブロックに対するハッシュ値と、更新種別とを含む更新記録情報に対して、秘密鍵を用いて電子署名を生成する署名手段と、更新済みコンテンツと更新記録情報と電子署名とを出力する出力手段とを有する。
第2の態様に係るコンテンツ処理装置は、更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部と、複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付手段と、更新種別が挿入であった場合、コンテンツにおける更新位置に更新ブロックを挿入することにより更新済みコンテンツを生成する挿入手段と、生成した更新済みコンテンツに含まれる各ブロックのハッシュ値を計算し、各ブロックのハッシュ値を含むハッシュ値リストを生成する第1ハッシュ値リスト生成手段と、管理データ格納部から更新者識別子及び秘密鍵を読み出し、当該更新者識別子と更新位置と更新種別とを含む更新記録情報と、ハッシュ値リストとに対して、秘密鍵を用いて電子署名を生成する署名手段と、更新済みコンテンツと更新記録情報と電子署名とを出力する出力手段とを有する。
コンテンツにブロックを挿入する場合でも、公開ハッシュ値のデータ量を抑えつつ、コンテンツの部分完全性保証を実現できるようになる。
[実施の形態1]
第1の実施の形態では、図9に示すような流れで、ブロック挿入時の部分完全性保証を実現する。なお、第1の実施の形態は、従来のSCCS型PIATを変形したものである。図9に示すように、第1の実施の形態では、例えばコンテンツの3番目にブロックm6が挿入された場合、挿入ブロックm6に対するハッシュ値を計算し、変更者の識別子と、挿入位置番号と、そのハッシュ値とを含むデータ(以下、公開ハッシュ値と呼ぶ)を生成する。また、第1の実施の形態では、変更フェーズにおいて、図9に示すようなリンクテーブルを生成する。図9に示すリンクテーブルにおいて、先頭から3番目の番号6は、元のコンテンツに含まれるブロック数「5」より大きい値であるため、挿入済みコンテンツの3番目のブロックは変更者1によって挿入されたものであることが分かる。また、図9では、リンクテーブルから、ハッシュ値リストの1番目のハッシュ値は、挿入済みコンテンツの1番目のブロックに対応していることが分かる。同様に、ハッシュ値リストの2番目のハッシュ値は、挿入済みコンテンツの2番目のブロックに対応していることが分かる。さらに、ハッシュ値リストの3番目のハッシュ値は、挿入済みコンテンツの4番目のブロックに対応していることが分かる。また、ハッシュ値リストの4番目のハッシュ値は、挿入済みコンテンツの5番目のブロックに対応していることが分かる。さらに、ハッシュ値リストの5番目のハッシュ値は、挿入済みコンテンツの6番目のブロックに対応していることが分かる。そして、公開ハッシュ値とリンクテーブルとに対する電子署名σ1を生成する。
第1の実施の形態では、図9に示すような流れで、ブロック挿入時の部分完全性保証を実現する。なお、第1の実施の形態は、従来のSCCS型PIATを変形したものである。図9に示すように、第1の実施の形態では、例えばコンテンツの3番目にブロックm6が挿入された場合、挿入ブロックm6に対するハッシュ値を計算し、変更者の識別子と、挿入位置番号と、そのハッシュ値とを含むデータ(以下、公開ハッシュ値と呼ぶ)を生成する。また、第1の実施の形態では、変更フェーズにおいて、図9に示すようなリンクテーブルを生成する。図9に示すリンクテーブルにおいて、先頭から3番目の番号6は、元のコンテンツに含まれるブロック数「5」より大きい値であるため、挿入済みコンテンツの3番目のブロックは変更者1によって挿入されたものであることが分かる。また、図9では、リンクテーブルから、ハッシュ値リストの1番目のハッシュ値は、挿入済みコンテンツの1番目のブロックに対応していることが分かる。同様に、ハッシュ値リストの2番目のハッシュ値は、挿入済みコンテンツの2番目のブロックに対応していることが分かる。さらに、ハッシュ値リストの3番目のハッシュ値は、挿入済みコンテンツの4番目のブロックに対応していることが分かる。また、ハッシュ値リストの4番目のハッシュ値は、挿入済みコンテンツの5番目のブロックに対応していることが分かる。さらに、ハッシュ値リストの5番目のハッシュ値は、挿入済みコンテンツの6番目のブロックに対応していることが分かる。そして、公開ハッシュ値とリンクテーブルとに対する電子署名σ1を生成する。
そして、検証フェーズでは、公開ハッシュ値とリンクテーブルとを用いて、挿入ブロックを検証すると共に、電子署名σ1を検証する。一方、挿入ブロック以外のブロックについては、リンクテーブルと、署名フェーズで生成されたハッシュ値リストとを用いて検証すると共に、電子署名σ0を検証する。これにより、挿入ブロックについては、変更者によって挿入されたものであることが保証され、挿入ブロック以外の各ブロックについては、元のコンテンツから引き継いだものであることが保証される。また、リンクテーブルから挿入ブロックを特定できるので、挿入ブロック以外のブロックについては公開ハッシュ値のデータを生成する必要がなくなり、従来のSCCS型PIATに比べて、公開ハッシュ値のデータ量を削減できる。以下、第1の実施の形態について詳細に説明する。
図10に、第1の実施の形態に係るシステム構成図を示す。例えばインターネットであるネットワーク1には、署名者により操作される署名者端末3と、変更者により操作される変更者端末5(図10では5a乃至5c)と、検証者により操作される検証者端末7とが接続されている。なお、図10では、署名者端末3が1台、変更者端末5が3台、検証者端末7が1台の例を示しているが、各端末の台数は、これに限定されない。
図11に、図10に示した署名者端末3の機能ブロック図を示す。署名者端末3は、入力部31と、出力部32と、メモリ部33と、分割部34と、ハッシュ値計算部35と、署名部36とを有する。なお、図12に示すように、メモリ部33には、管理データ格納部331と、コンテンツ格納部332と、ハッシュ値格納部333と、電子署名格納部334とが含まれる。管理データ格納部331には、署名者の秘密鍵が予め格納される。
なお、入力部31は、署名者からコンテンツ作成の操作を受け付け、署名者により作成されたコンテンツ(例えば、文書、動画、静止画、音楽など)をコンテンツ格納部332に格納し、コンテンツの分割要求を分割部34に出力する。分割部34は、入力部31からの分割要求に応じて、コンテンツ格納部332に格納されているコンテンツを複数ブロックに分割する。また、分割部34は、ハッシュ値計算要求をハッシュ値計算部35に出力する。ハッシュ値計算部35は、分割部34からの要求に応じて、コンテンツ格納部332からコンテンツを読み出し、コンテンツに含まれる各ブロックに対するハッシュ値を計算する。そして、ハッシュ値計算部35は、計算したハッシュ値を含むハッシュ値リストをハッシュ値格納部333に格納し、署名要求を署名部36に出力する。署名部36は、ハッシュ値計算部35からの要求に応じて、管理データ格納部331とハッシュ値格納部333とに格納されるデータを用いて、ハッシュ値リストに対する電子署名を生成し、電子署名格納部334に格納する。出力部32は、コンテンツ格納部332に格納されているコンテンツと、ハッシュ値格納部333に格納されているハッシュ値リストと、電子署名格納部334に格納されている電子署名を含む署名リストとを変更者端末5に出力する。
また、図13に、図10に示した変更者端末5の機能ブロック図を示す。変更者端末5は、入力部51と、出力部52と、メモリ部53と、コンテンツ変更部54と、ハッシュ値計算部55と、署名部56と、検証部57と、リンクテーブル生成部58とを有する。なお、図14に示すように、メモリ部53には、管理データ格納部531と、コンテンツ格納部532と、ハッシュ値格納部533と、電子署名格納部534と、リンクテーブル格納部535とが含まれる。管理データ格納部531には、変更者の識別子と秘密鍵とが予め格納される。また、管理データ格納部531には、署名者の公開鍵が格納される場合もある。
なお、入力部51は、署名者端末3からコンテンツとハッシュ値リストと署名リストとを受信すると、コンテンツをコンテンツ格納部532に格納し、ハッシュ値リストをハッシュ値格納部533に格納し、署名リストを電子署名格納部534に格納する。また、入力部51は、必要に応じて、電子署名の検証要求を検証部57に出力する。さらに、入力部51は、変更者からブロックの変更、追加又は挿入の操作を受け付け、コンテンツ更新要求をコンテンツ変更部54に出力する。検証部57は、入力部51からの要求に応じて、管理データ格納部531に格納されるデータを用いて、署名リストに含まれる電子署名の検証処理を実施する。コンテンツ変更部54は、入力部51からの要求に応じて、コンテンツ格納部532に格納されているコンテンツにブロックの変更、追加又は挿入を行うことによりコンテンツを更新する。また、コンテンツ変更部54は、変更、追加又は挿入されたブロックをハッシュ値計算部55に出力したり、ブロック挿入の場合には挿入位置番号をリンクテーブル生成部58に出力したりする。ハッシュ値計算部55は、コンテンツ変更部54から変更、追加又は挿入されたブロックを受信すると、そのブロックに対するハッシュ値を計算し、公開ハッシュ値を生成してハッシュ値格納部533に格納する。リンクテーブル生成部58は、コンテンツ変更部54から挿入位置番号を受信すると、後で説明するリンクテーブルを生成し、リンクテーブル格納部535に格納する。署名部56は、管理データ格納部531とハッシュ値格納部533とリンクテーブル格納部535とに格納されるデータを用いて、公開ハッシュ値とリンクテーブルとに対する電子署名を生成し、電子署名格納部534に格納されている署名リストに追加する。出力部52は、コンテンツ格納部532に格納されている更新後コンテンツと、ハッシュ値格納部533に格納されているハッシュ値リストと、電子署名格納部534に格納されている署名リストと、リンクテーブル格納部535に格納されているリンクテーブルとを他の変更者端末5又は検証者端末7に出力する。
また、図15に、図10に示した検証者端末7の機能ブロック図を示す。検証者端末7は、入力部71と、出力部72と、メモリ部73と、ハッシュ値計算部74と、ハッシュ値検証部75と、署名検証部76とを有する。なお、図16に示すように、メモリ部73には、公開鍵格納部731と、コンテンツ格納部732と、ハッシュ値格納部733と、電子署名格納部734と、リンクテーブル格納部735とが含まれる。なお、公開鍵格納部731には、署名者の公開鍵、変更者の公開鍵が格納される。
なお、入力部71は、変更者端末5から更新後コンテンツとハッシュ値リストと署名リストと公開ハッシュ値リストとリンクテーブルリストとを受信すると、更新後コンテンツをコンテンツ格納部732に格納し、ハッシュ値リストをハッシュ値格納部733に格納し、署名リストを電子署名格納部734に格納し、リンクテーブルリストをリンクテーブル格納部735に格納する。ハッシュ値計算部74は、コンテンツ格納部732から更新後コンテンツを読み出し、更新後コンテンツに含まれる各ブロックに対するハッシュ値を計算してハッシュ値格納部733に格納する。ハッシュ値検証部75は、ハッシュ値格納部733とリンクテーブル格納部735とに格納されるデータを用いて、各ブロックの検証処理を実施する。署名検証部76は、公開鍵格納部731とハッシュ値格納部733と電子署名格納部734とに格納されるデータを用いて、署名リストに含まれる電子署名の検証処理を実施する。出力部72は、検証結果を表示装置等に出力する。
次に、図17を用いて、第1の実施の形態における署名者端末3の処理について説明する。まず、署名者が、署名者端末3を操作して、文書、動画、静止画、音楽などのコンテンツを作成する(図17:ステップS1)。なお、本ステップは、署名者の動作であるため、図17では点線ブロックで示している。そして、入力部31は、署名者からコンテンツ作成の操作を受け付け、署名者によって作成されたコンテンツをコンテンツ格納部332に格納する。その後、入力部31は、コンテンツの分割要求を分割部34に出力する。なお、分割要求には、作成されたコンテンツのファイル名などが含まれる。
そして、分割部34は、入力部31から分割要求を受信すると、コンテンツ格納部332に格納されているコンテンツをn個のブロックに分割する(ステップS3)。なお、コンテンツをM、分割後のブロックをmとすると、M={m1,・・・,mn}となる。例えば図9では、コンテンツが、ブロックm1からブロックm5までの5個のブロックに分割される。そして、分割部34は、ハッシュ値計算要求をハッシュ値計算部35に出力する。なお、ハッシュ値計算要求には、コンテンツのファイル名などが含まれる。
そして、ハッシュ値計算部35は、分割部34からハッシュ値計算要求を受信すると、コンテンツ格納部332からハッシュ値計算要求に係るコンテンツを読み出す。そして、読み出したコンテンツに含まれるn個のブロックの各々に対するハッシュ値を計算し、計算したn個のハッシュ値を含むハッシュ値リストH0を生成する(ステップS5)。なお、ハッシュ値をhとすると、H0={h1,・・・,hn}となる。また、ハッシュ値リストH0は、ハッシュ値格納部333に格納される。例えば図9では、ハッシュ値h1からハッシュ値h5までの5個のハッシュ値が計算され、この5個のハッシュ値を含むハッシュ値リストH0が生成される。その後、ハッシュ値計算部35は、署名対象となるハッシュ値リストH0の指定を含む署名要求を署名部36に出力する。
そして、署名部36は、ハッシュ値計算部35から署名要求を受信すると、管理データ格納部331から署名者の秘密鍵を読み出し、さらにハッシュ値格納部333から署名要求に係るハッシュ値リストH0を読み出す。そして、署名部36は、秘密鍵を用いて、ハッシュ値リストH0に対する電子署名σ0を生成する(ステップS7)。この際、署名部36は、署名リストΣ={σ0}として電子署名格納部334に格納する。
その後、出力部32が、コンテンツ格納部332に格納されているコンテンツと、ハッシュ値格納部333に格納されているハッシュ値リストH0と、電子署名格納部334に格納されている署名リストΣとを読み出し、変更者端末5に出力する(ステップS9)。そして、処理を終了する。
次に、図18及び図19を用いて、第1の実施の形態における変更者端末5の処理について説明する。ここでは、一人目の変更者である場合について説明する。まず、入力部51が、署名者端末3からコンテンツ、ハッシュ値リストH0及び署名リストΣを受信する(図18:ステップS11)。そして、入力部51は、受信したコンテンツをコンテンツ格納部532に格納し、ハッシュ値リストH0をハッシュ値格納部533に格納し、署名リストΣを電子署名格納部534に格納する。そして、入力部51は、電子署名の検証要求を検証部57に出力する。
そして、検証部57は、入力部51から検証要求を受信すると、電子署名格納部534から署名リストΣを読み出し、署名リストΣに含まれる署名者の電子署名σ0の検証処理を実施する(ステップS13)。例えば、コンテンツに含まれる各ブロックに対するハッシュ値を計算し、これらのハッシュ値と署名者の公開鍵とを用いて、電子署名σ0を検証する。なお、署名を検証する処理自体は、従来と変わらないので、これ以上述べない。
その後、変更者が、変更者端末5を操作し、ブロックの変更、追加又は挿入を行うことによりコンテンツを変更する(ステップS15)。なお、本ステップは、変更者の動作であるため、図18では点線ブロックで示している。そして、入力部51は、変更ブロック、追加ブロック又は挿入ブロックの入力を受け付け、コンテンツ更新要求をコンテンツ変更部54に出力する。なお、コンテンツ更新要求には、入力されたブロックのデータや、操作種別、ブロック番号などが含まれる。
そして、コンテンツ変更部54は、入力部51からコンテンツ更新要求を受信すると、メモリ部53、ハッシュ値計算部55及びリンクテーブル生成部58と連携して、コンテンツ変更処理1を実施する(ステップS17)。コンテンツ変更処理1については図19を用いて説明する。
まず、コンテンツ変更部54は、操作種別がブロックの変更であるか判断する(図19:ステップS31)。操作種別がブロックの変更である場合(ステップS31:Yesルート)、コンテンツ変更部54は、ブロックを変更することにより、コンテンツ格納部532に格納されているコンテンツを更新する(ステップS33)。具体的には、コンテンツ更新要求に含まれるブロック番号のブロックを変更ブロックの内容に変更する。その後、ステップS49の処理に移行する。
一方、操作種別がブロックの変更ではない場合(ステップS31:Noルート)、コンテンツ変更部54は、操作種別がブロックの追加であるか判断する(ステップS35)。操作種別がブロックの追加である場合(ステップS35:Yesルート)、コンテンツ変更部54は、追加ブロックをコンテンツの最後に追加することにより、コンテンツ格納部532に格納されているコンテンツを更新する(ステップS37)。その後、ステップS49の処理に移行する。
一方、操作種別がブロックの追加ではない場合(ステップS35:Noルート)、コンテンツ変更部54は、操作種別がブロックの挿入であるか判断する(ステップS39)。操作種別がブロックの挿入である場合(ステップS39:Yesルート)、コンテンツ変更部54は、最終ブロックと同一ブロックをコンテンツの最後に追加する(ステップS41)。例えば、コンテンツM={m1,m2,m3,m4,m5}の3番目に新たなブロックm6を挿入しようとする場合に、本ステップの処理を実施すると、コンテンツM={m1,m2,m3,m4,m5,m5}となる。
そして、コンテンツ変更部54は、挿入位置以降の各ブロックを1つずつ後ろにシフトする(ステップS43)。但し、挿入前のコンテンツにおける最終ブロックは除く。例えば、上の例では、ブロックm4を5番目の位置に移動し、ブロックm3を4番目の位置に移動する。従って、コンテンツM={m1,m2,m3,m3,m4,m5}となる。
そして、コンテンツ変更部54は、挿入位置にブロックを挿入する(ステップS45)。例えば、上の例では、ブロックm6を3番目に挿入する。従って、コンテンツM={m1,m2,m6,m3,m4,m5}となり、図9に示したような挿入済みコンテンツとなる。また、コンテンツ変更部54は、ブロックの挿入位置番号をリンクテーブル生成部58に通知する。
そして、リンクテーブル生成部58は、コンテンツ変更部54から挿入位置番号を受信すると、リンクテーブル格納部535におけるリンクテーブルLkに、挿入ブロックの番号を設定する(ステップS47)。具体的には、以下のような処理を実施する。まず、リンクテーブル格納部535にリンクテーブルLkが格納されているか判断し、格納されていなければ、初回の処理であると判断し、リンクテーブルLkを生成する。例えば、挿入前のブロックの数がn個であった場合、リンクテーブルLk={1,2,・・・,n}を生成する。そして、リンクテーブルLkを生成した後、又は、2回目以降の処理の場合、現時点のリンクテーブルLkで最も大きい番号を特定し(初回処理時であればn)、その番号の次の番号(初回処理時であればn+1)を挿入ブロックの番号として、リンクテーブルLkに設定する。例えば、図9に示したように、挿入位置が3である場合には、リンクテーブルLkの3番目に挿入ブロックの番号設定する。従って、リンクテーブルLkは、Lk={1,2,6,3,4,5}となる。その後、ステップS49の処理に移行する。
一方、ステップS39において、操作種別がブロックの挿入ではないと判断された場合(ステップS39:Noルート)、以降の処理をスキップし、本処理を終了する。そして、元の処理に戻る。
そして、ハッシュ値計算部55は、変更、追加又は挿入されたブロックのハッシュ値を計算する(ステップS49)。なお、計算対象となるブロックの位置は、コンテンツ変更部54から通知される。例えば図9では、先頭から3番目の位置に挿入されたブロックm6に対するハッシュ値h6が計算される。
そして、ハッシュ値計算部55は、管理データ格納部531に格納されている変更者の識別子と、ブロック番号と、計算したハッシュ値とを含む公開ハッシュ値vを生成し、ハッシュ値格納部533に格納する(ステップS51)。本実施の形態では、変更者の識別子をk、ブロック番号をi、ハッシュ値をhn+1、挿入前のブロック数をnとして、v=(k,i,hn+1)で表す。なお、一人の変更者によって複数のブロックが挿入される場合もあり、その場合には、各挿入ブロックについて公開ハッシュ値vが生成されることとなる。本実施の形態では、挿入ブロックの数をpとした場合、公開ハッシュ値Vk={v1,・・・,vp}と表す。例えば図9では、変更者1によって挿入されたブロックは1個であるので、公開ハッシュ値V1={v}となり、v=(1,3,h6)となる。その後、本処理を終了し、元の処理に戻る。
図18の説明に戻って、コンテンツ変更処理1(ステップS17)を実施した後、入力部51は、コンテンツの変更が完了したか判断する(ステップS19)。例えば、変更者から次の操作(ブロックの変更、追加又は挿入)を受け付けた場合には、コンテンツの変更は完了していないと判断し(ステップS19:Noルート)、ステップS15の処理に戻り、上で述べた処理を繰り返す。
一方、例えば変更者から変更完了が指示された場合には、コンテンツの変更が完了したと判断し(ステップS19:Yesルート)、ステップS21の処理に移行する。この際、入力部51は、署名対象となる公開ハッシュ値Vk及びリンクテーブルLkの指定を含む署名要求を署名部56に出力する。
そして、署名部56は、入力部51から署名要求を受信すると、管理データ格納部531から変更者kの秘密鍵を読み出し、ハッシュ値格納部533から公開ハッシュ値Vkを読み出し、リンクテーブル格納部535からリンクテーブルLkを読み出す。そして、署名部56は、変更者kの秘密鍵を用いて、読み出した公開ハッシュ値VkとリンクテーブルLkとに対する電子署名σkを生成する(ステップS21)。そして、生成した電子署名σkを、電子署名格納部534における署名リストΣに追加する。例えば図9では、電子署名σ1が生成され、署名リストΣ={σ0,σ1}となる。
その後、出力部52は、コンテンツ格納部532から挿入済みコンテンツを読み出し、ハッシュ値格納部533からハッシュ値リストH0及び公開ハッシュ値Vkを読み出し、電子署名格納部534から署名リストΣを読み出し、リンクテーブル格納部535からリンクテーブルLkを読み出す。そして、出力部52は、公開ハッシュ値Vkを公開ハッシュ値リストVに追加し、リンクテーブルLkをリンクテーブルリストLに追加する。一人目の変更者の場合、公開ハッシュ値リストVは、V={Vk}となり、リンクテーブルリストLは、L={Lk}となる。そして、出力部52は、挿入済みコンテンツと、ハッシュ値リストH0と、署名リストΣと、公開ハッシュ値リストVと、リンクテーブルリストLとを他の変更者端末5又は検証者端末7に出力する(ステップS23)。そして、処理を終了する。
なお、上では、一人目の変更者である場合について説明したが、二人目以降の変更者の場合も基本的な処理は同じである。但し、二人目以降の変更者の場合、ステップS11では、入力部51は、前の変更者が操作する変更者端末5から、挿入済みコンテンツと、ハッシュ値リストH0と、署名リストΣと、公開ハッシュ値リストVと、リンクテーブルリストLとを受信する。この場合、入力部51は、挿入済みコンテンツをコンテンツ格納部532に格納し、ハッシュ値リストH0及び公開ハッシュ値リストVをハッシュ値格納部533に格納し、署名リストΣを電子署名格納部534に格納し、リンクテーブルリストLをリンクテーブル格納部535に格納するようにすればよい。
また、ステップS23では、出力部52は、受信した公開ハッシュ値リストVに、公開ハッシュ値Vkを追加するようにすればよい。すなわち、V={・・・,Vk}となる。さらに、出力部52は、受信したリンクテーブルリストLに、リンクテーブルLkを追加するようにすればよい。すなわち、L={・・・,Lk}となる。
以上のような処理を実施することにより、挿入ブロックを特定するためのリンクテーブルを生成することができる。なお、挿入ブロックより後方の各ブロックについては公開ハッシュ値を生成しないようになっているので、動画ファイルに対してブロックを挿入する場合でも、公開ハッシュ値のデータ量が膨大になることはない。
次に、図20及び図21を用いて、第1の実施の形態における検証者端末7の処理について説明する。ここでは、挿入済みコンテンツを検証する場合の処理について説明する。まず、入力部71が、変更者端末5から挿入済みコンテンツと、ハッシュ値リストH0と、署名リストΣと、公開ハッシュ値リストVと、リンクテーブルリストLとを受信する(図20:ステップS61)。そして、入力部71は、受信した挿入済みコンテンツをコンテンツ格納部732に格納し、ハッシュ値リストH0及び公開ハッシュ値リストVをハッシュ値格納部733に格納し、署名リストΣを電子署名格納部734に格納し、リンクテーブルリストLをリンクテーブル格納部735に格納する。そして、入力部71は、ハッシュ値計算要求をハッシュ値計算部74に出力する。なお、ハッシュ値計算要求には、挿入済みコンテンツのファイル名などが含まれる。
そして、ハッシュ値計算部74は、入力部71からハッシュ値計算要求を受信すると、コンテンツ格納部732からハッシュ値計算要求に係る挿入済みコンテンツを読み出す。そして、ハッシュ値計算部74は、読み出した挿入済みコンテンツに含まれる各ブロックに対するハッシュ値を計算し、ハッシュ値格納部733に格納する(ステップS63)。例えば図9では、ハッシュ値h1、h2、h6、h3、h4及びh5が計算される。また、ハッシュ値計算部74は、検証要求を署名検証部76に出力する。
そして、署名検証部76は、ハッシュ値計算部74から検証要求を受信すると、最終変更者から順に未処理の変更者kを特定する(ステップS65)。例えば、変更フェーズでは、変更を行った順番に、公開ハッシュ値Vkが、公開ハッシュ値リストVに追加されていく。従って、公開ハッシュ値リストVに含まれる公開ハッシュ値Vkを逆順で辿ることで、最終変更者から順に変更者kを特定することができる。
そして、署名検証部76は、公開鍵格納部731とハッシュ値格納部733と電子署名格納部734とリンクテーブル格納部735とから、特定した変更者kに係るデータを読み出す。すなわち、公開鍵格納部731から変更者kの公開鍵を読み出し、ハッシュ値格納部733から公開ハッシュ値Vkを読み出し、電子署名格納部734から電子署名σkを読み出し、リンクテーブル格納部735からリンクテーブルLkを読み出す。そして、署名検証部76は、公開鍵と公開ハッシュ値VkとリンクテーブルLkとを用いて、電子署名σkの検証処理を実施する(ステップS67)。なお、電子署名の検証処理は、従来と変わらないので、これ以上述べない。
そして、ステップS67における検証に失敗した場合(ステップS69:Noルート)、端子Aを介してステップS91(図21)の処理に移行する。
一方、ステップS67における検証に成功した場合(ステップS69:Yesルート)、署名検証部76は、公開ハッシュ値を検証するようハッシュ値検証部75に指示する。この際、署名検証部76は、指示と併せて、公開ハッシュ値Vk及びリンクテーブルLkなどを通知する。なお、ステップS67における検証に成功したということは、公開ハッシュ値Vk及びリンクテーブルLkについて、変更者kが作成者であり、さらに偽造・改竄されていないことが証明されたことを意味する。
そして、ハッシュ値検証部75は、署名検証部76からの指示と共に、公開ハッシュ値Vk及びリンクテーブルLkを受信する。そして、ハッシュ値検証部75は、公開ハッシュ値Vkにおいて、最後に挿入されたブロックの公開ハッシュ値vから順に未処理の公開ハッシュ値vを特定する(ステップS71)。なお、変更者端末5についての説明の際に述べたように、公開ハッシュ値Vkには、変更者kによって挿入されたブロック数分の公開ハッシュ値vが含まれる。公開ハッシュ値vは挿入順に並んでいるので、本ステップでは、後ろから順に公開ハッシュ値vを特定する。
そして、ハッシュ値検証部75は、リンクテーブルLkを用いて、特定した公開ハッシュ値に対応する挿入ブロックを特定する(ステップS72)。なお、ステップS71では、挿入順の逆順で公開ハッシュ値vが特定されるので、本ステップにおいても、リンクテーブルLkから、挿入順の逆順で挿入ブロックを特定するようにする。例えば、変更者kにより、5個のブロックを含むコンテンツに2個のブロックが挿入された際のリンクテーブルLkが、Lk={1,2,6,3,4,7,5}であった場合、初回の処理では、先頭から6番目の番号「7」が特定され、挿入済みコンテンツにおける6番目のブロックが特定される。さらに、2回目の処理では、先頭から3番目の番号「6」が特定され、挿入済みコンテンツにおける3番目のブロックが特定される。このように、番号の大きいものから順に辿っていく。
そして、ハッシュ値検証部75は、特定した公開ハッシュ値を用いて、特定した挿入ブロックに対するハッシュ値の検証処理を実施する(ステップS73)。ここでは、挿入ブロックに対するハッシュ値を検証することによって、その挿入ブロックの正当性を確認する。具体的には、ステップS63において計算され且つ当該挿入ブロックに対するハッシュ値と、公開ハッシュ値vに含まれるハッシュ値とを比較し、ハッシュ値が一致すれば、検証成功と判断する。例えば、図9の例では、ステップS72において3番目のブロックが特定され、3番目のブロックm6に対応するハッシュ値h6と、公開ハッシュ値に含まれるハッシュ値h6とが比較される。
そして、ステップS73における検証に失敗した場合(ステップS75:Noルート)、すなわちハッシュ値が一致しなかった場合、端子Aを介してステップS91(図21)の処理に移行する。
一方、ステップS73における検証に成功した場合(ステップS75:Yesルート)、ステップS77の処理に移行する。なお、ステップS73における検証に成功したということは、挿入ブロックの正当性が確認できたということを意味する。
そして、ハッシュ値検証部75は、特定された変更者kによって挿入された挿入ブロックに係る公開ハッシュ値vの全てについて処理が完了したか判断する(ステップS77)。特定された変更者kによって挿入された挿入ブロックに係るハッシュ値vの全てについて処理が完了していなければ(ステップS77:Noルート)、ステップS71の処理に戻り、上で述べた処理を繰り返す。
一方、特定された変更者kによって挿入された挿入ブロックに係る公開ハッシュ値vの全てについて処理が完了した場合(ステップS77:Yesルート)、ハッシュ値検証部75は、特定された変更者kについての処理が完了した旨を署名検証部76に通知する。そして、処理は、端子Bを介してステップS79(図21)に移行する。
図21の説明に移行して、端子Bの後、署名検証部76は、ハッシュ値検証部75から完了通知を受信すると、全ての変更者について処理が完了したか判断する(図21:ステップS79)。全ての変更者について処理が完了していなければ(ステップS79:Noルート)、端子Cを介してステップS65に戻り、上で述べた処理を繰り返す。すなわち、最終変更者から順に、最初にコンテンツ変更を行った変更者まで、上で述べたような処理が繰り返される。
一方、全ての変更者について処理が完了した場合(ステップS79:Yesルート)、署名検証部76は、挿入ブロック以外の各ブロックを検証するようハッシュ値検証部75に指示する。
そして、ハッシュ値検証部75は、署名検証部76からの指示を受信すると、ハッシュ値格納部733に格納されているハッシュ値リストH0を用いて、挿入ブロック以外の各ブロックに対するハッシュ値の検証処理を実施する(ステップS81)。ここでは、挿入ブロック以外の各ブロックに対するハッシュ値の検証を行うことによって、挿入ブロック以外の各ブロックの正当性を確認する。具体的には、ステップS63において計算されたハッシュ値のうち、挿入ブロック以外の各ブロックに対するハッシュ値と、ハッシュ値リストH0に含まれるハッシュ値とを比較する。この際、どれとどれを比較するかは、リンクテーブルLから特定される。例えば、図9の例では、リンクテーブルLから、挿入済みコンテンツの1番目のブロックm1は、元のコンテンツの1番目のブロックであることが分かる。従って、ブロックm1に対するハッシュ値h1と、ハッシュ値リストH0に含まれる1番目のハッシュ値h1とが比較される。また、挿入済みコンテンツの2番目のブロックm2は、元のコンテンツの2番目のブロックであることが分かる。従って、ブロックm2に対するハッシュ値h2と、ハッシュ値リストH0に含まれる2番目のハッシュ値h2とが比較される。さらに、挿入済みコンテンツの3番目のブロックm6は、挿入ブロックであることが分かる。すなわち、ブロックm6については、本ステップの対象外となる。また、挿入済みコンテンツの4番目のブロックm3は、元のコンテンツの3番目のブロックであったことが分かる。従って、ブロックm3に対するハッシュ値h3と、ハッシュ値リストH0に含まれる3番目のハッシュ値h3とが比較される。さらに、挿入済みコンテンツの5番目のブロックm4は、元のコンテンツの4番目のブロックであったことが分かる。従って、ブロックm4に対するハッシュ値h4と、ハッシュ値リストH0に含まれる4番目のハッシュ値h4とが比較される。また、挿入済みコンテンツの6番目のブロックm5は、元のコンテンツの5番目のブロックであったことが分かる。従って、ブロックm5に対するハッシュ値h5と、ハッシュ値リストH0に含まれる5番目のハッシュ値h5とが比較される。そして、比較した結果、挿入ブロック以外の全てのブロックについて、ハッシュ値が一致すれば、検証成功と判断する。
そして、ステップS81における検証に成功した場合(ステップS83:Yesルート)、ハッシュ値検証部75は、検証が完了した旨を署名検証部76に通知する。なお、ステップS81における検証に成功したということは、挿入ブロック以外の各ブロックの正当性が確認できたということを意味する。そして、処理は、ステップS85に移行する。
そして、署名検証部76は、ハッシュ値検証部75から完了通知を受信すると、公開鍵格納部731から署名者の公開鍵を読み出し、ハッシュ値格納部733からハッシュ値リストH0を読み出し、電子署名格納部734から署名リストΣを読み出す。そして、署名検証部76は、署名者の公開鍵とハッシュ値リストH0とを用いて、署名リストΣに含まれる署名者に係る電子署名σ0の検証処理を実施する(ステップS85)。なお、電子署名の検証処理は、従来と変わらないので、これ以上述べない。
そして、ステップS85における検証に成功した場合(ステップS87:Yesルート)、検証に成功した旨を出力部72に通知する。そして、出力部72は、検証成功を表示装置等に出力する(ステップS89)。そして、処理を終了する。
一方、ステップS81における検証に失敗した場合(ステップS83:Noルート)、ステップS85における検証に失敗した場合(ステップS87:Noルート)、又は、端子Aの後、出力部72は、検証失敗を表示装置等に出力する(ステップS91)。なお、いずれの検証に失敗したかを併せて表示するようにしてもよい。そして、処理を終了する。
以上のようにSCCS型PIATを変形することにより、ブロック挿入時においても、コンテンツの部分完全性保証を実現することができるようになる。すなわち、検証に成功した場合には、挿入後のコンテンツの完全性を証明すると共に、挿入ブロック以外のブロックが元のコンテンツから引き継いだものであることが保証される。
[実施の形態2]
次に、第2の実施の形態について説明する。第2の実施の形態では、図22に示すような流れで、ブロック挿入時の部分完全性保証を実現する。なお、第2の実施の形態は、第1の実施の形態を変形したものであり、おおまかな流れは第1の実施の形態と同じである。第2の実施の形態では、リンクテーブルの代わりに挿入テーブルを用いる。
次に、第2の実施の形態について説明する。第2の実施の形態では、図22に示すような流れで、ブロック挿入時の部分完全性保証を実現する。なお、第2の実施の形態は、第1の実施の形態を変形したものであり、おおまかな流れは第1の実施の形態と同じである。第2の実施の形態では、リンクテーブルの代わりに挿入テーブルを用いる。
図22に示すように、第2の実施の形態では、例えばコンテンツの3番目にブロックm6が挿入された場合、挿入ブロックm6に対するハッシュ値を計算し、変更者の識別子と、挿入位置番号と、そのハッシュ値とを含む公開ハッシュ値を生成する。そして、第2の実施の形態では、変更フェーズにおいて、図22に示すような挿入テーブルを生成する。挿入テーブルには、挿入位置番号が含まれる。そして、公開ハッシュ値と挿入テーブルとに対する電子署名σ1を生成する。
そして、検証フェーズでは、公開ハッシュ値と挿入テーブルとを用いて、挿入ブロックを検証すると共に、電子署名σ1を検証する。そして、検証に成功した場合、第2の実施の形態では、挿入ブロックに対するハッシュ値h6を取り除く。その後、挿入ブロックに対するハッシュ値を取り除いたハッシュ値と、署名フェーズで生成されたハッシュ値とを用いて、挿入ブロック以外のブロックを検証すると共に、電子署名σ0を検証する。これにより、挿入ブロックについては、変更者によって挿入されたものであることが保証され、挿入ブロック以外の各ブロックについては、元のコンテンツから引き継いだものであることが保証される。また、挿入テーブルは、リンクテーブルより小さなデータであるため、第1の実施の形態の場合よりも、データ量を削減することができる。以下、第2の実施の形態について詳細に説明する。
第2の実施の形態に係るシステム構成は、図10に示したシステム構成図と同じである。また、本実施の形態における署名者端末3の構成は、図11及び図12に示したブロック図と同じである。
図23に、本実施の形態における変更者端末5の機能ブロック図を示す。本実施の形態における変更者端末5は、入力部51と、出力部52と、メモリ部53と、コンテンツ変更部54と、ハッシュ値計算部55と、署名部56と、検証部57と、挿入テーブル生成部59とを有する。なお、入力部51と、出力部52と、メモリ部53と、コンテンツ変更部54と、ハッシュ値計算部55と、署名部56と、検証部57とは、基本的には第1の実施の形態と同じものであるが、本実施の形態では、メモリ部53には、図24に示すような各種格納部が含まれる。具体的には、メモリ部53には、管理データ格納部531と、コンテンツ格納部532と、ハッシュ値格納部533と、電子署名格納部534と、挿入テーブル格納部536とが含まれる。なお、管理データ格納部531と、コンテンツ格納部532と、ハッシュ値格納部533と、電子署名格納部534とは、第1の実施の形態と同じものである。
本実施の形態では、コンテンツ変更部54が、挿入位置番号を挿入テーブル生成部59に出力する。そして、挿入テーブル生成部59は、コンテンツ変更部54から挿入位置番号を受信すると、挿入テーブルを生成し、挿入テーブル格納部536に格納する。
また、本実施の形態における検証者端末7の構成は、基本的には図15に示したものと同じであるが、本実施の形態では、メモリ部73には、図25に示すような各種格納部が含まれる。具体的には、メモリ部73には、公開鍵格納部731と、コンテンツ格納部732と、ハッシュ値格納部733と、電子署名格納部734と、挿入テーブル格納部736とが含まれる。なお、公開鍵格納部731と、コンテンツ格納部732と、ハッシュ値格納部733と、電子署名格納部734とは、第1の実施の形態と同じものである。
本実施の形態では、入力部71が、リンクテーブルリストの代わりに、後で説明する挿入テーブルリストを受信し、挿入テーブル格納部736に格納する。そして、ハッシュ値検証部75が、挿入テーブル格納部736に格納される挿入テーブルリストを用いて、挿入ブロックに対するハッシュ値の検証処理を実施する。
次に、第2の実施の形態における変更者端末5及び検証者端末7の処理について説明する。なお、署名者端末3の処理は、第1の実施の形態と同じであるため、ここでは説明は省略する。
まず、図26乃至図28を用いて、第2の実施の形態における変更者端末5の処理について説明する。ここでは、一人目の変更者である場合について説明する。まず、入力部51が、署名者端末3からコンテンツ、ハッシュ値リストH0及び署名リストΣを受信する(図26:ステップS101)。そして、入力部51は、受信したコンテンツをコンテンツ格納部532に格納し、ハッシュ値リストH0をハッシュ値格納部533に格納し、署名リストΣを電子署名格納部534に格納する。そして、入力部51は、電子署名の検証要求を検証部57に出力する。
そして、検証部57は、入力部51から検証要求を受信すると、電子署名格納部534から署名リストΣを読み出し、署名リストΣに含まれる署名者の電子署名σ0の検証処理を実施する(ステップS103)。例えば、コンテンツに含まれる各ブロックに対するハッシュ値を計算し、これらのハッシュ値と署名者の公開鍵とを用いて、電子署名σ0を検証する。なお、署名を検証する処理自体は、従来と変わらないので、これ以上述べない。
その後、変更者が、変更者端末5を操作し、ブロックの変更、追加又は挿入を行うことによりコンテンツを変更する(ステップS105)。なお、本ステップは、変更者の動作であるため、図26では点線ブロックで示している。そして、入力部51は、変更ブロック、追加ブロック又は挿入ブロックの入力を受け付け、コンテンツ更新要求をコンテンツ変更部54に出力する。なお、コンテンツ更新要求には、入力されたブロックのデータや、操作種別、ブロック番号などが含まれる。
そして、コンテンツ変更部54は、入力部51からコンテンツ更新要求を受信すると、メモリ部53、ハッシュ値計算部55及び挿入テーブル生成部59と連携して、コンテンツ変更処理2を実施する(ステップS107)。コンテンツ変更処理2については図27を用いて説明する。
まず、コンテンツ変更部54は、操作種別がブロックの変更であるか判断する(図27:ステップS121)。操作種別がブロックの変更である場合(ステップS121:Yesルート)、コンテンツ変更部54は、ブロックを変更することにより、コンテンツ格納部532に格納されているコンテンツを更新する(ステップS123)。具体的には、コンテンツ更新要求に含まれるブロック番号のブロックを変更ブロックの内容に変更する。その後、ステップS139の処理に移行する。
一方、操作種別がブロックの変更ではない場合(ステップS121:Noルート)、コンテンツ変更部54は、操作種別がブロックの追加であるか判断する(ステップS125)。操作種別がブロックの追加である場合(ステップS125:Yesルート)、コンテンツ変更部54は、追加ブロックをコンテンツの最後に追加することにより、コンテンツ格納部532に格納されているコンテンツを更新する(ステップS127)。その後、ステップS139の処理に移行する。
一方、操作種別がブロックの追加ではない場合(ステップS125:Noルート)、コンテンツ変更部54は、操作種別がブロックの挿入であるか判断する(ステップS129)。操作種別がブロックの挿入である場合(ステップS129:Yesルート)、コンテンツ変更部54は、最終ブロックと同一ブロックをコンテンツの最後に追加する(ステップS131)。そして、コンテンツ変更部54は、挿入位置以降の各ブロックを1つずつ後ろにシフトする(ステップS133)。そして、コンテンツ変更部54は、挿入位置にブロックを挿入する(ステップS135)。なお、ステップS131乃至S135の処理は、第1の実施の形態と同じ処理であるため、詳細な説明は省略する。そして、コンテンツ変更部54は、ブロックの挿入位置番号を挿入テーブル生成部59に通知する。
そして、挿入テーブル生成部59は、コンテンツ変更部54から挿入位置番号を受信すると、挿入テーブル格納部536における挿入テーブルIkに、挿入位置番号を設定する(ステップS137)。なお、挿入テーブル格納部536に挿入テーブルIkが格納されていなければ、初回の処理であると判断し、挿入位置番号を含む挿入テーブルIkを生成し、挿入テーブル格納部536に格納する。また、2回目以降の処理であれば、今回受信した挿入位置番号を挿入テーブルIkに追加する。例えば、図28に、挿入テーブルIkの設定例を示す。なお、図28は、5個のブロックを含むコンテンツに、3個のブロックが順に挿入される場合の設定例を示す。まず、コンテンツの3番目の位置に第1の挿入ブロック(図28では、番号6のブロック)が挿入され、挿入テーブルIk={3}が生成される。次に、挿入済みコンテンツAの5番目の位置に第2の挿入ブロック(図28では、番号7のブロック)が挿入され、挿入テーブルIkに「5」が追加される。すなわち、挿入テーブルIk={3,5}となる。そして、挿入済みコンテンツBの2番目の位置に第3の挿入ブロックが挿入され、挿入テーブルIkに「2」が追加される。すなわち、挿入テーブルIk={3,5,2}となる。なお、詳細については後で説明するが、挿入ブロックの検証は、挿入順の逆順で行う。その後、ステップS139の処理に移行する。
一方、ステップS129において、操作種別がブロックの挿入ではないと判断された場合(ステップS129:Noルート)、以降の処理をスキップし、本処理を終了する。そして、元の処理に戻る。
そして、ハッシュ値計算部55は、変更、追加又は挿入されたブロックのハッシュ値を計算する(ステップS139)。なお、計算対象となるブロックの位置は、コンテンツ変更部54から通知される。そして、ハッシュ値計算部55は、管理データ格納部531に格納されている変更者の識別子と、ブロック番号と、計算したハッシュ値とを含む公開ハッシュ値vを生成し、ハッシュ値格納部533に格納する(ステップS141)。なお、ステップS139及びS141の処理は、第1の実施の形態と同じ処理であるため、詳細な説明は省略する。その後、本処理を終了し、元の処理に戻る。
図26の説明に戻って、コンテンツ変更処理2(ステップS107)を実施した後、入力部51は、コンテンツの変更が完了したか判断する(ステップS109)。例えば、変更者から次の操作(ブロックの変更、追加又は挿入)を受け付けた場合には、コンテンツの変更は完了していないと判断し(ステップS109:Noルート)、ステップS105の処理に戻り、上で述べた処理を繰り返す。
一方、例えば変更者から変更完了が指示された場合には、コンテンツの変更が完了したと判断し(ステップS109:Yesルート)、ステップS111の処理に移行する。この際、入力部51は、署名対象となる公開ハッシュ値Vk及び挿入テーブルIkの指定を含む署名要求を署名部56に出力する。
そして、署名部56は、入力部51から署名要求を受信すると、管理データ格納部531から変更者kの秘密鍵を読み出し、ハッシュ値格納部533から公開ハッシュ値Vkを読み出し、挿入テーブル格納部536から挿入テーブルIkを読み出す。そして、署名部56は、変更者kの秘密鍵を用いて、読み出した公開ハッシュ値Vkと挿入テーブルIkとに対する電子署名σkを生成する(ステップS111)。そして、生成した電子署名σkを、電子署名格納部534における署名リストΣに追加する。例えば図22では、電子署名σ1が生成され、署名リストΣ={σ0,σ1}となる。
その後、出力部52は、コンテンツ格納部532から挿入済みコンテンツを読み出し、ハッシュ値格納部533からハッシュ値リストH0及び公開ハッシュ値Vkを読み出し、電子署名格納部534から署名リストΣを読み出し、挿入テーブル格納部536から挿入テーブルIkを読み出す。そして、出力部52は、公開ハッシュ値Vkを公開ハッシュ値リストVに追加し、挿入テーブルIkを挿入テーブルリストIに追加する。一人目の変更者の場合、公開ハッシュ値リストVは、V={Vk}となり、挿入テーブルリストIは、I={Ik}となる。そして、出力部52は、挿入済みコンテンツと、ハッシュ値リストH0と、署名リストΣと、公開ハッシュ値リストVと、挿入テーブルリストIとを他の変更者端末5又は検証者端末7に出力する(ステップS113)。そして、処理を終了する。
なお、上では、一人目の変更者である場合について説明したが、二人目以降の変更者の場合も基本的な処理は同じである。但し、二人目以降の変更者の場合、ステップS101では、入力部51は、前の変更者が操作する変更者端末5から、挿入済みコンテンツと、ハッシュ値リストH0と、署名リストΣと、公開ハッシュ値リストVと、挿入テーブルIとを受信する。この場合、入力部51は、挿入済みコンテンツをコンテンツ格納部532に格納し、ハッシュ値リストH0及び公開ハッシュ値リストVをハッシュ値格納部533に格納し、署名リストΣを電子署名格納部534に格納し、挿入テーブルリストIを挿入テーブル格納部536に格納するようにすればよい。
また、ステップS113では、出力部52は、受信した挿入テーブルリストIに、挿入テーブルIkを追加するようにすればよい。すなわち、I={・・・,Ik}となる。
以上のような処理を実施することにより、挿入ブロックを特定するための挿入テーブルを生成することができる。なお、挿入テーブルは、リンクテーブルより小さなデータであるため、第1の実施の形態の場合よりも、データ量を削減することができる。
次に、図29及び図30を用いて、第2の実施の形態における検証者端末7の処理について説明する。ここでは、挿入済みコンテンツを検証する場合の処理について説明する。まず、入力部71が、変更者端末5から挿入済みコンテンツと、ハッシュ値リストH0と、署名リストΣと、公開ハッシュ値リストVと、挿入テーブルリストIとを受信する(図29:ステップS151)。そして、入力部71は、受信した挿入済みコンテンツをコンテンツ格納部732に格納し、ハッシュ値リストH0及び公開ハッシュ値リストVをハッシュ値格納部733に格納し、署名リストΣを電子署名格納部734に格納し、挿入テーブルリストIを挿入テーブル格納部736に格納する。そして、入力部71は、ハッシュ値計算要求をハッシュ値計算部74に出力する。なお、ハッシュ値計算要求には、挿入済みコンテンツのファイル名などが含まれる。
そして、ハッシュ値計算部74は、入力部71からハッシュ値計算要求を受信すると、コンテンツ格納部732からハッシュ値計算要求に係る挿入済みコンテンツを読み出す。そして、ハッシュ値計算部74は、読み出した挿入済みコンテンツに含まれる各ブロックに対するハッシュ値を計算し、ハッシュ値格納部733に格納する(ステップS153)。例えば図22では、ハッシュ値h1、h2、h6、h3、h4及びh5が計算される。また、ハッシュ値計算部74は、検証要求を署名検証部76に出力する。
そして、署名検証部76は、ハッシュ値計算部74から検証要求を受信すると、最終変更者から順に未処理の変更者kを特定する(ステップS155)。そして、署名検証部76は、公開鍵格納部731とハッシュ値格納部733と電子署名格納部734と挿入テーブル格納部736とから、特定した変更者kに係るデータを読み出す。すなわち、公開鍵格納部731から変更者kの公開鍵を読み出し、ハッシュ値格納部733から公開ハッシュ値Vkを読み出し、電子署名格納部734から電子署名σkを読み出し、挿入テーブル格納部736から挿入テーブルIkを読み出す。そして、署名検証部76は、公開鍵と公開ハッシュ値Vkと挿入テーブルIkとを用いて、電子署名σkの検証処理を実施する(ステップS157)。なお、電子署名の検証処理は、従来と変わらないので、これ以上述べない。
そして、ステップS157における検証に失敗した場合(ステップS159:Noルート)、端子Dを介してステップS181(図30)の処理に移行する。
一方、ステップS157における検証に成功した場合(ステップS159:Yesルート)、署名検証部76は、公開ハッシュ値を検証するようハッシュ値検証部75に指示する。この際、署名検証部76は、指示と併せて、公開ハッシュ値Vk及び挿入テーブルIkなどを通知する。なお、ステップS157における検証に成功したということは、公開ハッシュ値Vk及び挿入テーブルIkについて、変更者kが作成者であり、さらに偽造・改竄されていないことが証明されたことを意味する。
そして、ハッシュ値検証部75は、署名検証部76からの指示と共に、公開ハッシュ値Vk及び挿入テーブルIkを受信する。そして、ハッシュ値検証部75は、公開ハッシュ値Vkにおいて、最後に挿入されたブロックの公開ハッシュ値vから順に未処理の公開ハッシュ値vを特定する(ステップS161)。なお、公開ハッシュ値Vkには、変更者kによって挿入されたブロック数分の公開ハッシュ値vが含まれる。公開ハッシュ値vは挿入順に並んでいるので、本ステップでは、後ろから順に公開ハッシュ値vを特定する。
そして、ハッシュ値検証部75は、挿入テーブルIkを用いて、特定した公開ハッシュ値に対応する挿入ブロックを特定する(ステップS162)。なお、ステップS161では、挿入順の逆順で公開ハッシュ値vが特定されるので、本ステップにおいても、挿入順の逆順で挿入ブロックを特定する。例えば図28では、挿入テーブルIk={3,5,2}となっているので、挿入済みコンテンツCにおける2番目のブロックが挿入ブロックとして特定される。なお、詳細については後で説明するが、この挿入ブロックは取り除かれる。次に、挿入済みコンテンツBにおける5番目のブロックが挿入ブロックとして特定される。同様に、この挿入ブロックは取り除かれる。そして、挿入済みコンテンツAにおける3番目のブロックが挿入ブロックとして特定される。
そして、ハッシュ値検証部75は、特定した公開ハッシュ値を用いて、特定した挿入ブロックに対するハッシュ値の検証処理を実施する(ステップS163)。ここでは、挿入ブロックに対するハッシュ値を検証することによって、その挿入ブロックの正当性を確認する。なお、本ステップの処理は、第1の実施の形態と同じ処理であるため、詳細な説明は省略する。
そして、ステップS163における検証に失敗した場合(ステップS165:Noルート)、すなわちハッシュ値が一致しなかった場合、端子Dを介してステップS181(図30)の処理に移行する。
一方、ステップS163における検証に成功した場合(ステップS165:Yesルート)、ステップS166の処理に移行する。なお、ステップS163における検証に成功したということは、挿入ブロックの正当性が確認できたということを意味する。
そして、ハッシュ値検証部75は、挿入済みコンテンツから、特定した挿入ブロックを取り除く(ステップS166)。これにより、特定した挿入ブロックが挿入される前の状態に戻ることになる。なお、変更者端末5から受信した挿入済みコンテンツを複製して検証用のデータを生成し、検証用のデータを用いて処理する。
そして、ハッシュ値検証部75は、特定された変更者kによって挿入された挿入ブロックに係る公開ハッシュ値vの全てについて処理が完了したか判断する(ステップS167)。特定された変更者kによって挿入された挿入ブロックに係るハッシュ値vの全てについて処理が完了していなければ(ステップS167:Noルート)、ステップS161の処理に戻り、上で述べた処理を繰り返す。
一方、特定された変更者kによって挿入された挿入ブロックに係る公開ハッシュ値vの全てについて処理が完了した場合(ステップS167:Yesルート)、ハッシュ値検証部75は、特定された変更者kについての処理が完了した旨を署名検証部76に通知する。そして、処理は、端子Eを介してステップS169(図30)に移行する。
図30の説明に移行して、端子Eの後、署名検証部76は、ハッシュ値検証部75から完了通知を受信すると、全ての変更者について処理が完了したか判断する(図30:ステップS169)。全ての変更者について処理が完了していなければ(ステップS169:Noルート)、端子Fを介してステップS155に戻り、上で述べた処理を繰り返す。すなわち、最終変更者から順に、最初にコンテンツ変更を行った変更者まで、上で述べたような処理が繰り返される。
一方、全ての変更者について処理が完了した場合(ステップS169:Yesルート)、署名検証部76は、挿入ブロック以外の各ブロックを検証するようハッシュ値検証部75に指示する。
そして、ハッシュ値検証部75は、署名検証部76からの指示を受信すると、ハッシュ値格納部733に格納されているハッシュ値リストH0を用いて、挿入ブロック以外の各ブロックに対するハッシュ値の検証処理を実施する(ステップS171)。ここでは、挿入ブロック以外の各ブロックに対するハッシュ値の検証を行うことによって、挿入ブロック以外の各ブロックの正当性を確認する。なお、ステップS166において挿入ブロックは取り除かれるので、全ての変更者について処理が完了したということは、全ての挿入ブロックが取り除かれ、元のコンテンツの状態に戻っているはずである。従って、残っているブロックに対応するハッシュ値と、ハッシュ値リストH0に含まれるハッシュ値とを比較し、ハッシュ値が一致すれば、検証成功と判断する。
そして、ステップS171における検証に成功した場合(ステップS173:Yesルート)、ハッシュ値検証部75は、検証が完了した旨を署名検証部76に通知する。なお、ステップS171における検証に成功したということは、挿入ブロック以外の各ブロックの正当性が確認できたということを意味する。そして、処理は、ステップS175に移行する。
そして、署名検証部76は、ハッシュ値検証部75から完了通知を受信すると、公開鍵格納部731から署名者の公開鍵を読み出し、ハッシュ値格納部733からハッシュ値リストH0を読み出し、電子署名格納部734から署名リストΣを読み出す。そして、署名検証部76は、署名者の公開鍵とハッシュ値リストH0とを用いて、署名リストΣに含まれる署名者に係る電子署名σ0の検証処理を実施する(ステップS175)。なお、電子署名の検証処理は、従来と変わらないので、これ以上述べない。
そして、ステップS175における検証に成功した場合(ステップS177:Yesルート)、検証に成功した旨を出力部72に通知する。そして、出力部72は、検証成功を表示装置等に出力する(ステップS179)。そして、処理を終了する。
一方、ステップS171における検証に失敗した場合(ステップS173:Noルート)、ステップS175における検証に失敗した場合(ステップS177:Noルート)、又は、端子Dの後、出力部72は、検証失敗を表示装置等に出力する(ステップS181)。なお、いずれの検証に失敗したかを併せて表示するようにしてもよい。そして、処理を終了する。
以上のようにSCCS型PIATを変形することにより、第1の実施の形態よりも少ないデータ量で、ブロック挿入時の部分完全性保証を実現することができるようになる。
[実施の形態3]
次に、第3の実施の形態について説明する。第3の実施の形態では、図31に示すような流れで、ブロック挿入時の部分完全性保証を実現する。なお、第3の実施の形態は、第1の実施の形態を変形したものであり、おおまかな流れは第1の実施の形態と同じである。第3の実施の形態では、上で述べたようなリンクテーブル及び挿入テーブルは使用せず、変更、追加又は挿入を表すタグを公開ハッシュ値に追加する。
次に、第3の実施の形態について説明する。第3の実施の形態では、図31に示すような流れで、ブロック挿入時の部分完全性保証を実現する。なお、第3の実施の形態は、第1の実施の形態を変形したものであり、おおまかな流れは第1の実施の形態と同じである。第3の実施の形態では、上で述べたようなリンクテーブル及び挿入テーブルは使用せず、変更、追加又は挿入を表すタグを公開ハッシュ値に追加する。
図31に示すように、第3の実施の形態では、例えばコンテンツの3番目にブロックm6が挿入された場合、挿入ブロックm6に対するハッシュ値を計算し、変更者の識別子と、挿入位置番号と、挿入を表すタグ「insert」(以下、insと略す場合もある)と、そのハッシュ値とを含む公開ハッシュ値を生成する。そして、公開ハッシュ値に対する電子署名σ1を生成する。
そして、検証フェーズでは、公開ハッシュ値を用いて、挿入ブロックを検証すると共に、電子署名σ1を検証する。そして、検証に成功した場合、挿入ブロックに対するハッシュ値h6を取り除く。その後、挿入ブロックに対するハッシュ値を取り除いたハッシュ値と、署名フェーズで生成されたハッシュ値とを用いて、挿入ブロック以外のブロックを検証すると共に、電子署名σ0を検証する。これにより、挿入ブロックについては、変更者によって挿入されたものであることが保証され、挿入ブロック以外の各ブロックについては、元のコンテンツから引き継いだものであることが保証される。また、挿入を表すタグを公開ハッシュ値に含めるようにすることで、リンクテーブルを生成する必要がなくなり、第1の実施の形態の場合よりも、データ量を削減することができる。以下、第3の実施の形態について詳細に説明する。
第3の実施の形態に係るシステム構成は、図10に示したシステム構成図と同じである。また、本実施の形態における署名者端末3の構成は、図11及び図12に示したブロック図と同じである。
図32に、本実施の形態における変更者端末5の機能ブロック図を示す。本実施の形態における変更者端末5は、入力部51と、出力部52と、メモリ部53と、コンテンツ変更部54と、ハッシュ値計算部55と、署名部56と、検証部57と、タグ設定部60とを有する。なお、入力部51と、出力部52と、メモリ部53と、コンテンツ変更部54と、ハッシュ値計算部55と、署名部56と、検証部57とは、基本的には第1の実施の形態と同じものであるが、本実施の形態では、メモリ部53には、図33に示すような各種格納部が含まれる。具体的には、メモリ部53には、管理データ格納部531と、コンテンツ格納部532と、ハッシュ値格納部533と、電子署名格納部534とが含まれる。なお、管理データ格納部531と、コンテンツ格納部532と、ハッシュ値格納部533と、電子署名格納部534とは、基本的には第1の実施の形態と同じものである。
本実施の形態では、タグ設定部60が、操作種別に応じたタグを選択し、ハッシュ値計算部55に出力する。そして、ハッシュ値計算部55は、タグ設定部60からのタグを含む公開ハッシュ値を生成し、ハッシュ値格納部533に格納する。
また、本実施の形態における検証者端末7の構成は、基本的には図15に示したものと同じであるが、本実施の形態では、メモリ部73には、図34に示すような各種格納部が含まれる。具体的には、メモリ部73には、公開鍵格納部731と、コンテンツ格納部732と、ハッシュ値格納部733と、電子署名格納部734とが含まれる。なお、公開鍵格納部731と、コンテンツ格納部732と、ハッシュ値格納部733と、電子署名格納部734とは、基本的には第1の実施の形態と同じものである。
次に、第3の実施の形態における変更者端末5及び検証者端末7の処理について説明する。なお、署名者端末3の処理は、第1の実施の形態と同じであるため、ここでは説明は省略する。
まず、図35及び図36を用いて、第3の実施の形態における変更者端末5の処理について説明する。ここでは、一人目の変更者である場合について説明する。まず、入力部51が、署名者端末3からコンテンツ、ハッシュ値リストH0及び署名リストΣを受信する(図35:ステップS191)。そして、入力部51は、受信したコンテンツをコンテンツ格納部532に格納し、ハッシュ値リストH0をハッシュ値格納部533に格納し、署名リストΣを電子署名格納部534に格納する。そして、入力部51は、電子署名の検証要求を検証部57に出力する。
そして、検証部57は、入力部51から検証要求を受信すると、電子署名格納部534から署名リストΣを読み出し、署名リストΣに含まれる署名者の電子署名σ0の検証処理を実施する(ステップS193)。例えば、コンテンツに含まれる各ブロックに対するハッシュ値を計算し、これらのハッシュ値と署名者の公開鍵とを用いて、電子署名σ0を検証する。なお、署名を検証する処理自体は、従来と変わらないので、これ以上述べない。
その後、変更者が、変更者端末5を操作し、ブロックの変更、追加又は挿入を行うことによりコンテンツを変更する(ステップS195)。なお、本ステップは、変更者の動作であるため、図35では点線ブロックで示している。そして、入力部51は、変更ブロック、追加ブロック又は挿入ブロックの入力を受け付け、コンテンツ更新要求をコンテンツ変更部54に出力する。なお、コンテンツ更新要求には、入力されたブロックのデータや、操作種別、ブロック番号などが含まれる。
そして、コンテンツ変更部54は、入力部51からコンテンツ更新要求を受信すると、メモリ部53、ハッシュ値計算部55及びタグ設定部60と連携して、コンテンツ変更処理3を実施する(ステップS197)。コンテンツ変更処理3については図36を用いて説明する。
まず、コンテンツ変更部54は、操作種別がブロックの変更であるか判断する(図36:ステップS211)。操作種別がブロックの変更である場合(ステップS211:Yesルート)、コンテンツ変更部54は、ブロックを変更することにより、コンテンツ格納部532に格納されているコンテンツを更新する(ステップS213)。具体的には、コンテンツ更新要求に含まれるブロック番号のブロックを変更ブロックの内容に変更する。
その後、タグ設定部60が、ブロックの変更を表すタグ「change」を選択し(ステップS215)、選択したタグの情報をハッシュ値計算部55に出力する。そして、ステップS233の処理に移行する。
一方、操作種別がブロックの変更ではない場合(ステップS211:Noルート)、コンテンツ変更部54は、操作種別がブロックの追加であるか判断する(ステップS217)。操作種別がブロックの追加である場合(ステップS217:Yesルート)、コンテンツ変更部54は、追加ブロックをコンテンツの最後に追加することにより、コンテンツ格納部532に格納されているコンテンツを更新する(ステップS219)。
その後、タグ設定部60が、ブロックの追加を表すタグ「append」を選択し(ステップS221)、選択したタグの情報をハッシュ値計算部55に出力する。そして、ステップS233の処理に移行する。
一方、操作種別がブロックの追加ではない場合(ステップS217:Noルート)、コンテンツ変更部54は、操作種別がブロックの挿入であるか判断する(ステップS223)。操作種別がブロックの挿入である場合(ステップS223:Yesルート)、コンテンツ変更部54は、最終ブロックと同一ブロックをコンテンツの最後に追加する(ステップS225)。そして、コンテンツ変更部54は、挿入位置以降の各ブロックを1つずつ後ろにシフトする(ステップS227)。そして、コンテンツ変更部54は、挿入位置にブロックを挿入する(ステップS229)。なお、ステップS225乃至S229の処理は、第1の実施の形態と同じ処理であるため、詳細な説明は省略する。
その後、タグ設定部60が、ブロックの挿入を表すタグ「insert」を選択し(ステップS231)、選択したタグの情報をハッシュ値計算部55に出力する。そして、ステップS233の処理に移行する。
一方、ステップS223において、操作種別がブロックの挿入ではないと判断された場合(ステップS223:Noルート)、以降の処理をスキップし、本処理を終了する。そして、元の処理に戻る。
そして、ハッシュ値計算部55は、タグ設定部60からタグの情報を受信すると、変更、追加又は挿入されたブロックのハッシュ値を計算する(ステップS233)。そして、ハッシュ値計算部55は、管理データ格納部531に格納されている変更者の識別子と、ブロック番号と、変更、追加又は挿入を表すタグと、計算したハッシュ値とを含む公開ハッシュ値vを生成し、ハッシュ値格納部533に格納する(ステップS235)。なお、本実施の形態では、変更者の識別子をk、ブロック番号をi、ハッシュ値をhn+1、挿入前のブロック数をnとして、v=(k,i,TAG,hn+1)で表す。TAGは、change、append及びinsertのいずれかを示す。その後、本処理を終了し、元の処理に戻る。
図35の説明に戻って、コンテンツ変更処理3(ステップS197)を実施した後、入力部51は、コンテンツの変更が完了したか判断する(ステップS199)。例えば、変更者から次の操作(ブロックの変更、追加又は挿入)を受け付けた場合には、コンテンツの変更は完了していないと判断し(ステップS199:Noルート)、ステップS195の処理に戻り、上で述べた処理を繰り返す。
一方、例えば変更者から変更完了が指示された場合には、コンテンツの変更が完了したと判断し(ステップS199:Yesルート)、ステップS201の処理に移行する。この際、入力部51は、署名対象となる公開ハッシュ値Vkの指定を含む署名要求を署名部56に出力する。
そして、署名部56は、入力部51から署名要求を受信すると、管理データ格納部531から変更者kの秘密鍵を読み出し、ハッシュ値格納部533から公開ハッシュ値Vkを読み出す。そして、署名部56は、変更者kの秘密鍵を用いて、読み出した公開ハッシュ値Vkに対する電子署名σkを生成する(ステップS201)。そして、生成した電子署名σkを、電子署名格納部534における署名リストΣに追加する。例えば図31では、電子署名σ1が生成され、署名リストΣ={σ0,σ1}となる。
その後、出力部52は、コンテンツ格納部532から挿入済みコンテンツを読み出し、ハッシュ値格納部533からハッシュ値リストH0及び公開ハッシュ値Vkを読み出し、電子署名格納部534から署名リストΣを読み出す。そして、出力部52は、公開ハッシュ値Vkを公開ハッシュ値リストVに追加する。一人目の変更者の場合、公開ハッシュ値リストVは、V={Vk}となる。そして、出力部52は、挿入済みコンテンツと、ハッシュ値リストH0と、署名リストΣと、公開ハッシュ値リストVとを他の変更者端末5又は検証者端末7に出力する(ステップS203)。そして、処理を終了する。
なお、上では、一人目の変更者である場合について説明したが、二人目以降の変更者の場合も基本的な処理は同じである。但し、二人目以降の変更者の場合、ステップS191では、入力部51は、前の変更者が操作する変更者端末5から、挿入済みコンテンツと、ハッシュ値リストH0と、署名リストΣと、公開ハッシュ値リストVとを受信する。この場合、入力部51は、挿入済みコンテンツをコンテンツ格納部532に格納し、ハッシュ値リストH0及び公開ハッシュ値リストVをハッシュ値格納部533に格納し、署名リストΣを電子署名格納部534に格納するようにすればよい。
以上のような処理を実施することにより、ブロックの変更、追加又は挿入を表すタグを含む公開ハッシュ値を生成することができる。
次に、図37及び図38を用いて、第3の実施の形態における検証者端末7の処理について説明する。ここでは、挿入済みコンテンツを検証する場合の処理について説明する。まず、入力部71が、変更者端末5から挿入済みコンテンツと、ハッシュ値リストH0と、署名リストΣと、公開ハッシュ値リストVとを受信する(図37:ステップS241)。そして、入力部71は、受信した挿入済みコンテンツをコンテンツ格納部732に格納し、ハッシュ値リストH0及び公開ハッシュ値リストVをハッシュ値格納部733に格納し、署名リストΣを電子署名格納部734に格納する。そして、入力部71は、ハッシュ値計算要求をハッシュ値計算部74に出力する。なお、ハッシュ値計算要求には、挿入済みコンテンツのファイル名などが含まれる。
そして、ハッシュ値計算部74は、入力部71からハッシュ値計算要求を受信すると、コンテンツ格納部732からハッシュ値計算要求に係る挿入済みコンテンツを読み出す。そして、ハッシュ値計算部74は、読み出した挿入済みコンテンツに含まれる各ブロックに対するハッシュ値を計算し、ハッシュ値格納部733に格納する(ステップS243)。例えば図31では、ハッシュ値h1、h2、h6、h3、h4及びh5が計算される。また、ハッシュ値計算部74は、検証要求を署名検証部76に出力する。
そして、署名検証部76は、ハッシュ値計算部74から検証要求を受信すると、最終変更者から順に未処理の変更者kを特定する(ステップS245)。そして、署名検証部76は、公開鍵格納部731とハッシュ値格納部733と電子署名格納部734とから、特定した変更者kに係るデータを読み出す。すなわち、公開鍵格納部731から変更者kの公開鍵を読み出し、ハッシュ値格納部733から公開ハッシュ値Vkを読み出し、電子署名格納部734から電子署名σkを読み出す。そして、署名検証部76は、公開鍵と公開ハッシュ値Vkとを用いて、電子署名σkの検証処理を実施する(ステップS247)。なお、電子署名の検証処理は、従来と変わらないので、これ以上述べない。
そして、ステップS247における検証に失敗した場合(ステップS249:Noルート)、端子Gを介してステップS271(図38)の処理に移行する。
一方、ステップS247における検証に成功した場合(ステップS249:Yesルート)、署名検証部76は、公開ハッシュ値を検証するようハッシュ値検証部75に指示する。この際、署名検証部76は、指示と併せて、公開ハッシュ値Vkを通知する。なお、ステップS247における検証に成功したということは、公開ハッシュ値Vkについて、変更者kが作成者であり、さらに偽造・改竄されていないことが証明されたことを意味する。
そして、ハッシュ値検証部75は、署名検証部76からの指示と共に、公開ハッシュ値Vkを受信する。そして、ハッシュ値検証部75は、公開ハッシュ値Vkにおいて、最後に挿入されたブロックの公開ハッシュ値vから順に未処理の公開ハッシュ値vを特定する(ステップS251)。なお、公開ハッシュ値Vkには、変更者kによって挿入されたブロック数分の公開ハッシュ値vが含まれる。公開ハッシュ値vは挿入順に並んでいるので、本ステップでは、挿入を表すタグ「insert」を含む公開ハッシュ値vを後ろから順に特定する。
そして、ハッシュ値検証部75は、特定した公開ハッシュ値を用いて、挿入ブロックに対するハッシュ値の検証処理を実施する(ステップS253)。ここでは、挿入ブロックに対するハッシュ値を検証することによって、その挿入ブロックの正当性を確認する。なお、本ステップの処理は、第1の実施の形態と同じ処理である。
そして、ステップS253における検証に失敗した場合(ステップS255:Noルート)、すなわちハッシュ値が一致しなかった場合、端子Gを介してステップS271(図38)の処理に移行する。
一方、ステップS253における検証に成功した場合(ステップS255:Yesルート)、ステップS256の処理に移行する。なお、ステップS253における検証に成功したということは、挿入ブロックの正当性が確認できたということを意味する。
そして、ハッシュ値検証部75は、挿入済みコンテンツから挿入ブロックを取り除く(ステップS256)。なお、本ステップは、第2の実施の形態の処理と同じである。
そして、ハッシュ値検証部75は、特定された変更者kによって挿入された挿入ブロックに係る公開ハッシュ値vの全てについて処理が完了したか判断する(ステップS257)。特定された変更者kによって挿入された挿入ブロックに係るハッシュ値vの全てについて処理が完了していなければ(ステップS257:Noルート)、ステップS251の処理に戻り、上で述べた処理を繰り返す。
一方、特定された変更者kによって挿入された挿入ブロックに係る公開ハッシュ値vの全てについて処理が完了した場合(ステップS257:Yesルート)、ハッシュ値検証部75は、特定された変更者kについての処理が完了した旨を署名検証部76に通知する。そして、処理は、端子Hを介してステップS259(図38)に移行する。
図38の説明に移行して、端子Hの後、署名検証部76は、ハッシュ値検証部75から完了通知を受信すると、全ての変更者について処理が完了したか判断する(図38:ステップS259)。全ての変更者について処理が完了していなければ(ステップS259:Noルート)、端子Iを介してステップS245に戻り、上で述べた処理を繰り返す。すなわち、最終変更者から順に、最初にコンテンツ変更を行った変更者まで、上で述べたような処理が繰り返される。
一方、全ての変更者について処理が完了した場合(ステップS259:Yesルート)、署名検証部76は、挿入ブロック以外の各ブロックを検証するようハッシュ値検証部75に指示する。
そして、ハッシュ値検証部75は、署名検証部76からの指示を受信すると、ハッシュ値格納部733に格納されているハッシュ値リストH0を用いて、挿入ブロック以外の各ブロックに対するハッシュ値の検証処理を実施する(ステップS261)。ここでは、挿入ブロック以外の各ブロックに対するハッシュ値の検証を行うことによって、挿入ブロック以外の各ブロックの正当性を確認する。なお、ステップS256において挿入ブロックは取り除かれるので、全ての変更者について処理が完了したということは、全ての挿入ブロックが取り除かれ、元のコンテンツの状態に戻っているはずである。従って、残っているブロックに対応するハッシュ値と、ハッシュ値リストH0に含まれるハッシュ値とを比較し、ハッシュ値が一致すれば、検証成功と判断する。
そして、ステップS261における検証に成功した場合(ステップS263:Yesルート)、ハッシュ値検証部75は、検証が完了した旨を署名検証部76に通知する。なお、ステップS261における検証に成功したということは、挿入ブロック以外の各ブロックの正当性が確認できたということを意味する。そして、処理は、ステップS265に移行する。
そして、署名検証部76は、ハッシュ値検証部75から完了通知を受信すると、公開鍵格納部731から署名者の公開鍵を読み出し、ハッシュ値格納部733からハッシュ値リストH0を読み出し、電子署名格納部734から署名リストΣを読み出す。そして、署名検証部76は、署名者の公開鍵とハッシュ値リストH0とを用いて、署名リストΣに含まれる署名者に係る電子署名σ0の検証処理を実施する(ステップS265)。なお、電子署名の検証処理は、従来と変わらないので、これ以上述べない。
そして、ステップS265における検証に成功した場合(ステップS267:Yesルート)、検証に成功した旨を出力部72に通知する。そして、出力部72は、検証成功を表示装置等に出力する(ステップS269)。そして、処理を終了する。
一方、ステップS261における検証に失敗した場合(ステップS263:Noルート)、ステップS265における検証に失敗した場合(ステップS267:Noルート)、又は、端子Gの後、出力部72は、検証失敗を表示装置等に出力する(ステップS271)。なお、いずれの検証に失敗したかを併せて表示するようにしてもよい。そして、処理を終了する。
以上のようにSCCS型PIATを変形することにより、第1の実施の形態よりも少ないデータ量で、ブロック挿入時の部分完全性保証を実現することができるようになる。
[実施の形態4]
次に、第4の実施の形態について説明する。第1乃至第3の実施の形態は、SCCS型PIATに関するものであったが、RCS型PIATについても同様に変形可能である。第4の実施の形態は、RCS型PIATを、第1の実施の形態で述べたリンクテーブルを用いる方式に変更したものである。第4の実施の形態では、図39に示すような流れで、ブロック挿入時の部分完全性保証を実現する。
次に、第4の実施の形態について説明する。第1乃至第3の実施の形態は、SCCS型PIATに関するものであったが、RCS型PIATについても同様に変形可能である。第4の実施の形態は、RCS型PIATを、第1の実施の形態で述べたリンクテーブルを用いる方式に変更したものである。第4の実施の形態では、図39に示すような流れで、ブロック挿入時の部分完全性保証を実現する。
図39に示すように、第1の実施の形態では、変更フェーズにおいて、コンテンツに含まれる各ブロックに対するハッシュ値を計算し、ハッシュ値リスト1を生成する。そして、例えばコンテンツの3番目にブロックm6が挿入された場合、挿入ブロックm6に対するハッシュ値を計算し、そのハッシュ値をハッシュ値リストに挿入することで、ハッシュ値リスト2を生成する。また、変更者の識別子と、挿入位置番号と、そのハッシュ値とを含む公開ハッシュ値を生成し、さらにリンクテーブルを生成する。そして、ハッシュ値リスト2と公開ハッシュ値とリンクテーブルとに対する電子署名σ1を生成する。
そして、検証フェーズでは、まず、挿入済みコンテンツに含まれる各ブロックに対するハッシュ値を計算する。そして、計算したハッシュ値と公開ハッシュ値とリンクテーブルとを用いて、挿入ブロックを検証すると共に、電子署名σ1を検証する。また、計算したハッシュ値のうち、挿入ブロック以外のブロックに対するハッシュ値(図39では、h1〜h5)を用いて、電子署名σ0を検証する。これにより、挿入ブロックについては、変更者によって挿入されたものであることが保証され、挿入ブロック以外の各ブロックについては、元のコンテンツから引き継いだものであることが保証される。なお、リンクテーブルから挿入ブロックを特定できるので、挿入ブロック以外のブロックについては公開ハッシュ値のデータを生成する必要がなくなり、従来のRCS型PIATに比べて、公開ハッシュ値のデータ量を削減できる。以下、第4の実施の形態について詳細に説明する。
第4の実施の形態に係るシステム構成は、図10に示したシステム構成図と同じである。また、本実施の形態における署名者端末3、変更者端末5及び検証者端末7の構成は、基本的には第1の実施の形態のものと同じである。
まず、図40を用いて、第4の実施の形態における署名者端末3の処理について説明する。まず、署名者が、署名者端末3を操作して、文書、動画、静止画、音楽などのコンテンツを作成する(図40:ステップS281)。なお、本ステップは、署名者の動作であるため、図40では点線ブロックで示している。そして、入力部31は、署名者からコンテンツ作成の操作を受け付け、署名者によって作成されたコンテンツをコンテンツ格納部332に格納する。その後、入力部31は、コンテンツの分割要求を分割部34に出力する。なお、分割要求には、作成されたコンテンツのファイル名などが含まれる。
そして、分割部34は、入力部31から分割要求を受信すると、コンテンツ格納部332に格納されているコンテンツをn個のブロックに分割する(ステップS283)。例えば図39では、コンテンツが、ブロックm1からブロックm5までの5個のブロックに分割される。そして、分割部34は、ハッシュ値計算要求をハッシュ値計算部35に出力する。なお、ハッシュ値計算要求には、コンテンツのファイル名などが含まれる。
そして、ハッシュ値計算部35は、分割部34からハッシュ値計算要求を受信すると、コンテンツ格納部332からハッシュ値計算要求に係るコンテンツを読み出す。そして、読み出したコンテンツに含まれるn個のブロックの各々に対するハッシュ値を計算し、計算したn個のハッシュ値を含むハッシュ値リストH0を生成する(ステップS285)。なお、ハッシュ値リストH0は、ハッシュ値格納部333に格納される。例えば図39では、ハッシュ値h1からハッシュ値h5までの5個のハッシュ値が計算され、この5個のハッシュ値を含むハッシュ値リストH0が生成される。その後、ハッシュ値計算部35は、署名対象となるハッシュ値リストH0の指定を含む署名要求を署名部36に出力する。
そして、署名部36は、ハッシュ値計算部35から署名要求を受信すると、管理データ格納部331から署名者の秘密鍵を読み出し、さらにハッシュ値格納部333から署名要求に係るハッシュ値リストH0を読み出す。そして、署名部36は、秘密鍵を用いて、ハッシュ値リストH0に対する電子署名σ0を生成する(ステップS287)。この際、署名部36は、署名リストΣ={σ0}として電子署名格納部334に格納する。
その後、出力部32が、コンテンツ格納部332に格納されているコンテンツと、電子署名格納部334に格納されている署名リストΣとを読み出し、変更者端末5に出力する(ステップS289)。そして、処理を終了する。
次に、図41及び図42を用いて、第1の実施の形態における変更者端末5の処理について説明する。ここでは、一人目の変更者である場合について説明する。まず、入力部51が、署名者端末3からコンテンツ及び署名リストΣを受信する(図41:ステップS291)。そして、入力部51は、受信したコンテンツをコンテンツ格納部532に格納し、署名リストΣを電子署名格納部534に格納する。そして、入力部51は、電子署名の検証要求を検証部57に出力し、ハッシュ値計算要求をハッシュ値計算部55に出力する。
そして、検証部57は、入力部51から検証要求を受信すると、電子署名格納部534から署名リストΣを読み出し、署名リストΣに含まれる署名者の電子署名σ0の検証処理を実施する(ステップS293)。なお、署名を検証する処理自体は、従来と変わらないので、これ以上述べない。
また、ハッシュ値計算部55は、入力部51からハッシュ値計算要求を受信すると、コンテンツ格納部532からコンテンツを読み出す。そして、ハッシュ値計算部55は、コンテンツに含まれる各ブロックに対するハッシュ値を計算し、計算したハッシュ値を含むハッシュ値リストHkを生成する(ステップS295)。なお、ハッシュ値リストHkは、ハッシュ値格納部533に格納される。
その後、変更者が、変更者端末5を操作し、ブロックの変更、追加又は挿入を行うことによりコンテンツを変更する(ステップS297)。なお、本ステップは、変更者の動作であるため、図41では点線ブロックで示している。そして、入力部51は、変更ブロック、追加ブロック又は挿入ブロックの入力を受け付け、コンテンツ更新要求をコンテンツ変更部54に出力する。なお、コンテンツ更新要求には、入力されたブロックのデータや、操作種別、ブロック番号などが含まれる。
そして、コンテンツ変更部54は、入力部51からコンテンツ更新要求を受信すると、メモリ部53、ハッシュ値計算部55及びリンクテーブル生成部58と連携して、コンテンツ変更処理4を実施する(ステップS299)。コンテンツ変更処理4については図42を用いて説明する。
まず、コンテンツ変更部54は、操作種別がブロックの変更であるか判断する(図42:ステップS311)。操作種別がブロックの変更である場合(ステップS311:Yesルート)、コンテンツ変更部54は、ブロックを変更することにより、コンテンツ格納部532に格納されているコンテンツを更新する(ステップS313)。具体的には、コンテンツ更新要求に含まれるブロック番号のブロックを変更ブロックの内容に変更する。その後、ステップS329の処理に移行する。
一方、操作種別がブロックの変更ではない場合(ステップS311:Noルート)、コンテンツ変更部54は、操作種別がブロックの追加であるか判断する(ステップS315)。操作種別がブロックの追加である場合(ステップS315:Yesルート)、コンテンツ変更部54は、追加ブロックをコンテンツの最後に追加することにより、コンテンツ格納部532に格納されているコンテンツを更新する(ステップS317)。その後、ステップS329の処理に移行する。
一方、操作種別がブロックの追加ではない場合(ステップS315:Noルート)、コンテンツ変更部54は、操作種別がブロックの挿入であるか判断する(ステップS319)。操作種別がブロックの挿入である場合(ステップS319:Yesルート)、コンテンツ変更部54は、最終ブロックと同一ブロックをコンテンツの最後に追加する(ステップS321)。そして、コンテンツ変更部54は、挿入位置以降の各ブロックを1つずつ後ろにシフトする(ステップS323)。そして、コンテンツ変更部54は、挿入位置にブロックを挿入する(ステップS325)。なお、ステップS321乃至S325の処理は、第1の実施の形態と同じ処理であるため、詳細な説明は省略する。そして、コンテンツ変更部54は、ブロックの挿入位置番号をリンクテーブル生成部58に通知する。
そして、リンクテーブル生成部58は、コンテンツ変更部54から挿入位置番号を受信すると、リンクテーブル格納部535におけるリンクテーブルLkに、挿入ブロックの番号を設定する(ステップS327)。なお、本ステップの処理は、第1の実施の形態と同じ処理であるため、詳細な説明は省略する。そして、ステップS329の処理に移行する。
一方、ステップS319において、操作種別がブロックの挿入ではないと判断された場合(ステップS319:Noルート)、以降の処理をスキップし、本処理を終了する。そして、元の処理に戻る。
そして、ハッシュ値計算部55は、変更、追加又は挿入されたブロックのハッシュ値を計算する(ステップS329)。なお、計算対象となるブロックの位置は、コンテンツ変更部54から通知される。例えば図39では、先頭から3番目の位置に挿入されたブロックm6に対するハッシュ値h6が計算される。
そして、ハッシュ値計算部55は、管理データ格納部531に格納されている変更者の識別子と、ブロック番号と、計算したハッシュ値とを含む公開ハッシュ値vを生成し、ハッシュ値格納部533に格納する(ステップS331)。
また、ハッシュ値計算部55は、ステップS329において計算したハッシュ値を用いて、ハッシュ値格納部533に格納されているハッシュ値リストHkを更新する(ステップS333)。例えば、操作種別がブロックの挿入であった場合には、ハッシュ値リストHkにハッシュ値を挿入する。例えば図39では、3番目の位置にハッシュ値h6が挿入され、ハッシュ値リストHk={h1,h2,h6,h3,h4,h5}となる。その後、本処理を終了し、元の処理に戻る。
図41の説明に戻って、コンテンツ変更処理4(ステップS299)を実施した後、入力部51は、コンテンツの変更が完了したか判断する(ステップS301)。例えば、変更者から次の操作(ブロックの変更、追加又は挿入)を受け付けた場合には、コンテンツの変更は完了していないと判断し(ステップS301:Noルート)、ステップS297の処理に戻り、上で述べた処理を繰り返す。
一方、例えば変更者から変更完了が指示された場合には、コンテンツの変更が完了したと判断し(ステップS301:Yesルート)、ステップS303の処理に移行する。この際、入力部51は、署名対象となるハッシュ値リストHk、公開ハッシュ値Vk及びリンクテーブルLkの指定を含む署名要求を署名部56に出力する。
そして、署名部56は、入力部51から署名要求を受信すると、管理データ格納部531から変更者kの秘密鍵を読み出し、ハッシュ値格納部533からハッシュ値リストHk及び公開ハッシュ値Vkを読み出し、リンクテーブル格納部535からリンクテーブルLkを読み出す。そして、署名部56は、変更者kの秘密鍵を用いて、読み出したハッシュ値リストHkと公開ハッシュ値VkとリンクテーブルLkとに対する電子署名σkを生成する(ステップS303)。そして、生成した電子署名σkを、電子署名格納部534における署名リストΣに追加する。例えば図39では、電子署名σ1が生成され、署名リストΣ={σ0,σ1}となる。
その後、出力部52は、コンテンツ格納部532から挿入済みコンテンツを読み出し、ハッシュ値格納部533から公開ハッシュ値Vkを読み出し、電子署名格納部534から署名リストΣを読み出し、リンクテーブル格納部535からリンクテーブルLkを読み出す。そして、出力部52は、公開ハッシュ値Vkを公開ハッシュ値リストVに追加し、リンクテーブルLkをリンクテーブルリストLに追加する。そして、出力部52は、挿入済みコンテンツと、署名リストΣと、公開ハッシュ値リストVと、リンクテーブルリストLとを他の変更者端末5又は検証者端末7に出力する(ステップS305)。そして、処理を終了する。
なお、上では、一人目の変更者である場合について説明したが、二人目以降の変更者の場合も基本的な処理は同じである。但し、二人目以降の変更者の場合、ステップS291では、入力部51は、前の変更者が操作する変更者端末5から、挿入済みコンテンツと、署名リストΣと、公開ハッシュ値リストVと、リンクテーブルリストLとを受信する。この場合、入力部51は、挿入済みコンテンツをコンテンツ格納部532に格納し、公開ハッシュ値リストVをハッシュ値格納部533に格納し、署名リストΣを電子署名格納部534に格納し、リンクテーブルリストLをリンクテーブル格納部535に格納するようにすればよい。
また、ステップS305では、出力部52は、受信した公開ハッシュ値リストVに、公開ハッシュ値Vkを追加するようにすればよい。さらに、受信したリンクテーブルリストLに、リンクテーブルLkを追加するようにすればよい。
以上のような処理を実施することにより、RCS型PIATの場合においても、リンクテーブルを生成することができる。
次に、図43を用いて、第4の実施の形態における検証者端末7の処理について説明する。ここでは、挿入済みコンテンツを検証する場合の処理について説明する。まず、入力部71が、変更者端末5から挿入済みコンテンツと、署名リストΣと、公開ハッシュ値リストVと、リンクテーブルリストLとを受信する(図43:ステップS341)。そして、入力部71は、受信した挿入済みコンテンツをコンテンツ格納部732に格納し、公開ハッシュ値リストVをハッシュ値格納部733に格納し、署名リストΣを電子署名格納部734に格納し、リンクテーブルリストLをリンクテーブル格納部735に格納する。そして、入力部71は、ハッシュ値計算要求をハッシュ値計算部74に出力する。なお、ハッシュ値計算要求には、挿入済みコンテンツのファイル名などが含まれる。
そして、ハッシュ値計算部74は、入力部71からハッシュ値計算要求を受信すると、コンテンツ格納部732からハッシュ値計算要求に係る挿入済みコンテンツを読み出す。そして、ハッシュ値計算部74は、読み出した挿入済みコンテンツに含まれる各ブロックに対するハッシュ値を計算し、ハッシュ値リストHを生成する(ステップS343)。なお、ハッシュ値リストHは、ハッシュ値格納部733に格納される。例えば図39では、ハッシュ値リストH={h1,h2,h6,h3,h4,h5}が生成される。そして、ハッシュ値計算部74は、検証要求を署名検証部76に出力する。
そして、署名検証部76は、ハッシュ値計算部74から検証要求を受信すると、最終変更者から順に未処理の変更者kを特定する(ステップS345)。そして、署名検証部76は、公開鍵格納部731とハッシュ値格納部733と電子署名格納部734とリンクテーブル格納部735とから、特定した変更者kに係るデータを読み出す。すなわち、公開鍵格納部731から変更者kの公開鍵を読み出し、ハッシュ値格納部733から公開ハッシュ値Vkを読み出し、電子署名格納部734から変更者kに係る電子署名σkを読み出し、リンクテーブル格納部735からリンクテーブルLkを読み出す。また、ステップS343において生成したハッシュ値リストHをハッシュ値格納部533から読み出す。そして、署名検証部76は、公開鍵とハッシュ値リストHと公開ハッシュ値VkとリンクテーブルLkとを基に、変更者kに係る電子署名σkの検証処理を実施する(ステップS347)。なお、電子署名の検証処理は、従来と変わらないので、これ以上述べない。
そして、ステップS347における検証に成功した場合(ステップS349:Yesルート)、署名検証部76は、ハッシュ値リストHを更新するようハッシュ値検証部75に指示する。この際、署名検証部76は、指示と併せて、公開ハッシュ値Vk及びリンクテーブルLkを通知する。なお、ステップS347における検証に成功したということは、変更者kによって挿入された挿入ブロックの正当性が確認できたということを意味する。
そして、ハッシュ値検証部75は、署名検証部76からの指示と共に、公開ハッシュ値Vk及びリンクテーブルLkを受信する。そして、ハッシュ値検証部75は、公開ハッシュ値Vkから、変更者kによって挿入された挿入ブロックの数を特定する。そして、ハッシュ値検証部75は、リンクテーブルLkに基づき、ハッシュ値リストHから挿入ブロックに対するハッシュ値を取り除くことにより、ハッシュ値リストHを挿入前の状態に復元する(ステップS351)。なお、第1の実施の形態で述べたように、リンクテーブルLkに含まれる番号を番号の大きい順に辿っていくことで、挿入ブロックを特定する。例えば図39では、3番目のハッシュ値h6が取り除かれ、ハッシュ値リストH={h1,h2,h3,h4,h5}となる。そして、ハッシュ値検証部75は、特定された変更者kについての処理が完了した旨を署名検証部76に通知する。
そして、署名検証部76は、ハッシュ値検証部75から完了通知を受信すると、全ての変更者について処理が完了したか判断する(ステップS353)。全ての変更者について処理が完了していなければ(ステップS353:Noルート)、ステップS345に戻り、上で述べた処理を繰り返す。すなわち、最終変更者から順に、最初にコンテンツ変更を行った変更者まで、上で述べたような処理が繰り返される。なお、全ての変更者について、上で述べたような処理を実施することで、全ての挿入ブロックに対応するハッシュ値がハッシュ値リストHから取り除かれ、元のコンテンツの状態に戻ることになる。
一方、全ての変更者について処理が完了した場合(ステップS353:Yesルート)、署名検証部76は、公開鍵格納部731から署名者の公開鍵を読み出し、電子署名格納部734から署名者に係る電子署名σ0を読み出す。そして、署名検証部76は、署名者の公開鍵と、復元されたハッシュ値リストHとを基に、署名者に係る電子署名σ0の検証処理を実施する(ステップS355)。なお、電子署名の検証処理は、従来と変わらないので、これ以上述べない。
そして、ステップS355における検証に成功した場合(ステップS357:Yesルート)、検証に成功した旨を出力部72に通知する。そして、出力部72は、検証成功を表示装置等に出力する(ステップS359)。そして、処理を終了する。
そして、ステップS347における検証に失敗した場合(ステップS349:Noルート)、又は、ステップS355における検証に失敗した場合(ステップS357:Noルート)、出力部72が、検証失敗を表示装置等に出力する(ステップS361)。なお、いずれの検証に失敗したかを併せて表示するようにしてもよい。そして、処理を終了する。
以上のようにRCS型PIATを変形することにより、ブロック挿入時においても、コンテンツの部分完全性保証を実現することができるようになる。すなわち、検証に成功した場合には、挿入後のコンテンツの完全性を証明すると共に、挿入ブロック以外のブロックが元のコンテンツから引き継いだものであることが保証される。
[実施の形態5]
次に、第5の実施の形態について説明する。第5の実施の形態では、図44に示すような流れで、ブロック挿入時の部分完全性保証を実現する。なお、第5の実施の形態は、第4の実施の形態を変形したものであり、おおまかな流れは第4の実施の形態と同じである。第5の実施の形態では、リンクテーブルの代わりに、第2の実施の形態で説明した挿入テーブルを用いる。
次に、第5の実施の形態について説明する。第5の実施の形態では、図44に示すような流れで、ブロック挿入時の部分完全性保証を実現する。なお、第5の実施の形態は、第4の実施の形態を変形したものであり、おおまかな流れは第4の実施の形態と同じである。第5の実施の形態では、リンクテーブルの代わりに、第2の実施の形態で説明した挿入テーブルを用いる。
図44に示すように、第5の実施の形態では、変更フェーズにおいて、コンテンツに含まれる各ブロックに対するハッシュ値を計算し、ハッシュ値リスト1を生成する。そして、例えばコンテンツの3番目にブロックm6が挿入された場合、挿入ブロックm6に対するハッシュ値を計算し、そのハッシュ値をハッシュ値リストに挿入することで、ハッシュ値リスト2を生成する。また、変更者の識別子と、挿入位置番号と、そのハッシュ値とを含む公開ハッシュ値を生成し、さらに挿入テーブルを生成する。そして、ハッシュ値リスト2と公開ハッシュ値と挿入テーブルとに対する電子署名σ1を生成する。
そして、検証フェーズでは、まず、挿入済みコンテンツに含まれる各ブロックに対するハッシュ値を計算する。そして、計算したハッシュ値と公開ハッシュ値と挿入テーブルとを用いて、挿入ブロックを検証すると共に、電子署名σ1を検証する。また、計算したハッシュ値のうち、挿入ブロック以外のブロックに対するハッシュ値(図44では、h1〜h5)を用いて、電子署名σ0を検証する。これにより、挿入ブロックについては、変更者によって挿入されたものであることが保証され、挿入ブロック以外の各ブロックについては、元のコンテンツから引き継いだものであることが保証される。また、挿入テーブルは、リンクテーブルより小さなデータであるため、第4の実施の形態の場合よりも、データ量を削減することができる。以下、第5の実施の形態について詳細に説明する。
第5の実施の形態に係るシステム構成は、図10に示したシステム構成図と同じである。また、本実施の形態における署名者端末3、変更者端末5及び検証者端末7の構成は、基本的には第2の実施の形態のものと同じである。
第5の実施の形態における変更者端末5及び検証者端末7の処理について説明する。なお、署名者端末3の処理は、第4の実施の形態と同じであるため、ここでは説明は省略する。
まず、図45及び図46を用いて、第5の実施の形態における変更者端末5の処理について説明する。ここでは、一人目の変更者である場合について説明する。まず、入力部51が、署名者端末3からコンテンツ及び署名リストΣを受信する(図45:ステップS371)。そして、入力部51は、受信したコンテンツをコンテンツ格納部532に格納し、署名リストΣを電子署名格納部534に格納する。そして、入力部51は、電子署名の検証要求を検証部57に出力し、ハッシュ値計算要求をハッシュ値計算部55に出力する。
そして、検証部57は、入力部51から検証要求を受信すると、電子署名格納部534から署名リストΣを読み出し、署名リストΣに含まれる署名者の電子署名σ0の検証処理を実施する(ステップS373)。なお、署名を検証する処理自体は、従来と変わらないので、これ以上述べない。
また、ハッシュ値計算部55は、入力部51からハッシュ値計算要求を受信すると、コンテンツ格納部532からコンテンツを読み出す。そして、ハッシュ値計算部55は、コンテンツに含まれる各ブロックに対するハッシュ値を計算し、計算したハッシュ値を含むハッシュ値リストHkを生成する(ステップS375)。なお、ハッシュ値リストHkは、ハッシュ値格納部533に格納される。
その後、変更者が、変更者端末5を操作し、ブロックの変更、追加又は挿入を行うことによりコンテンツを変更する(ステップS377)。なお、本ステップは、変更者の動作であるため、図45では点線ブロックで示している。そして、入力部51は、変更ブロック、追加ブロック又は挿入ブロックの入力を受け付け、コンテンツ更新要求をコンテンツ変更部54に出力する。なお、コンテンツ更新要求には、入力されたブロックのデータや、操作種別、ブロック番号などが含まれる。
そして、コンテンツ変更部54は、入力部51からコンテンツ更新要求を受信すると、メモリ部53、ハッシュ値計算部55及び挿入テーブル生成部59と連携して、コンテンツ変更処理5を実施する(ステップS379)。コンテンツ変更処理5については図46を用いて説明する。
まず、コンテンツ変更部54は、操作種別がブロックの変更であるか判断する(図46:ステップS391)。操作種別がブロックの変更である場合(ステップS391:Yesルート)、コンテンツ変更部54は、ブロックを変更することにより、コンテンツ格納部532に格納されているコンテンツを更新する(ステップS393)。具体的には、コンテンツ更新要求に含まれるブロック番号のブロックを変更ブロックの内容に変更する。その後、ステップS409の処理に移行する。
一方、操作種別がブロックの変更ではない場合(ステップS391:Noルート)、コンテンツ変更部54は、操作種別がブロックの追加であるか判断する(ステップS395)。操作種別がブロックの追加である場合(ステップS395:Yesルート)、コンテンツ変更部54は、追加ブロックをコンテンツの最後に追加することにより、コンテンツ格納部532に格納されているコンテンツを更新する(ステップS397)。その後、ステップS409の処理に移行する。
一方、操作種別がブロックの追加ではない場合(ステップS395:Noルート)、コンテンツ変更部54は、操作種別がブロックの挿入であるか判断する(ステップS399)。操作種別がブロックの挿入である場合(ステップS399:Yesルート)、コンテンツ変更部54は、最終ブロックと同一ブロックをコンテンツの最後に追加する(ステップS401)。そして、コンテンツ変更部54は、挿入位置以降の各ブロックを1つずつ後ろにシフトする(ステップS403)。そして、コンテンツ変更部54は、挿入位置にブロックを挿入する(ステップS405)。そして、コンテンツ変更部54は、ブロックの挿入位置番号を挿入テーブル生成部59に通知する。
そして、挿入テーブル生成部59は、コンテンツ変更部54から挿入位置番号を受信すると、挿入テーブル格納部536における挿入テーブルIkに、挿入位置番号を設定する(ステップS407)。なお、本ステップの処理は、第2の実施の形態と同じ処理であるため、詳細な説明は省略する。そして、ステップS409の処理に移行する。
一方、ステップS399において、操作種別がブロックの挿入ではないと判断された場合(ステップS399:Noルート)、以降の処理をスキップし、本処理を終了する。そして、元の処理に戻る。
そして、ハッシュ値計算部55は、変更、追加又は挿入されたブロックのハッシュ値を計算する(ステップS409)。なお、計算対象となるブロックの位置は、コンテンツ変更部54から通知される。そして、ハッシュ値計算部55は、管理データ格納部531に格納されている変更者の識別子と、ブロック番号と、計算したハッシュ値とを含む公開ハッシュ値vを生成し、ハッシュ値格納部533に格納する(ステップS411)。また、ハッシュ値計算部55は、ステップS409において計算したハッシュ値を用いて、ハッシュ値格納部533に格納されているハッシュ値リストHkを更新する(ステップS413)。なお、ステップS409乃至S413の処理は、第4の実施の形態と同じ処理であるため、詳細な説明は省略する。その後、本処理を終了し、元の処理に戻る。
図45の説明に戻って、コンテンツ変更処理5(ステップS379)を実施した後、入力部51は、コンテンツの変更が完了したか判断する(ステップS381)。例えば、変更者から次の操作(ブロックの変更、追加又は挿入)を受け付けた場合には、コンテンツの変更は完了していないと判断し(ステップS381:Noルート)、ステップS377の処理に戻り、上で述べた処理を繰り返す。
一方、例えば変更者から変更完了が指示された場合には、コンテンツの変更が完了したと判断し(ステップS381:Yesルート)、ステップS383の処理に移行する。この際、入力部51は、署名対象となるハッシュ値リストHk、公開ハッシュ値Vk及び挿入テーブルIkの指定を含む署名要求を署名部56に出力する。
そして、署名部56は、入力部51から署名要求を受信すると、管理データ格納部531から変更者kの秘密鍵を読み出し、ハッシュ値格納部533からハッシュ値リストHk及び公開ハッシュ値Vkを読み出し、挿入テーブル格納部536から挿入テーブルIkを読み出す。そして、署名部56は、変更者kの秘密鍵を用いて、読み出したハッシュ値リストHkと公開ハッシュ値Vkと挿入テーブルIkとに対する電子署名σkを生成する(ステップS383)。そして、生成した電子署名σkを、電子署名格納部534における署名リストΣに追加する。例えば図44では、電子署名σ1が生成され、署名リストΣ={σ0,σ1}となる。
その後、出力部52は、コンテンツ格納部532から挿入済みコンテンツを読み出し、ハッシュ値格納部533から公開ハッシュ値Vkを読み出し、電子署名格納部534から署名リストΣを読み出し、挿入テーブル格納部536から挿入テーブルIkを読み出す。そして、出力部52は、公開ハッシュ値Vkを公開ハッシュ値リストVに追加し、挿入テーブルIkを挿入テーブルリストIに追加する。そして、出力部52は、挿入済みコンテンツと、署名リストΣと、公開ハッシュ値リストVと、挿入テーブルリストIとを他の変更者端末5又は検証者端末7に出力する(ステップS385)。そして、処理を終了する。
なお、上では、一人目の変更者である場合について説明したが、二人目以降の変更者の場合も基本的な処理は同じである。但し、二人目以降の変更者の場合、ステップS371では、入力部51は、前の変更者が操作する変更者端末5から、挿入済みコンテンツと、署名リストΣと、公開ハッシュ値リストVと、挿入テーブルリストIとを受信する。この場合、入力部51は、挿入済みコンテンツをコンテンツ格納部532に格納し、公開ハッシュ値リストVをハッシュ値格納部533に格納し、署名リストΣを電子署名格納部534に格納し、挿入テーブルリストIを挿入テーブル格納部536に格納するようにすればよい。
また、ステップS385では、出力部52は、受信した公開ハッシュ値リストVに、公開ハッシュ値Vkを追加するようにすればよい。さらに、受信した挿入テーブルリストIに、挿入テーブルIkを追加するようにすればよい。
以上のような処理を実施することにより、RCS型PIATの場合においても、挿入テーブルを生成することができる。
次に、図47を用いて、第5の実施の形態における検証者端末7の処理について説明する。ここでは、挿入済みコンテンツを検証する場合の処理について説明する。まず、入力部71が、変更者端末5から挿入済みコンテンツと、署名リストΣと、公開ハッシュ値リストVと、挿入テーブルリストIとを受信する(図47:ステップS421)。そして、入力部71は、受信した挿入済みコンテンツをコンテンツ格納部732に格納し、公開ハッシュ値リストVをハッシュ値格納部733に格納し、署名リストΣを電子署名格納部734に格納し、挿入テーブルリストIを挿入テーブル格納部736に格納する。そして、入力部71は、ハッシュ値計算要求をハッシュ値計算部74に出力する。なお、ハッシュ値計算要求には、挿入済みコンテンツのファイル名などが含まれる。
そして、ハッシュ値計算部74は、入力部71からハッシュ値計算要求を受信すると、コンテンツ格納部732からハッシュ値計算要求に係る挿入済みコンテンツを読み出す。そして、ハッシュ値計算部74は、読み出した挿入済みコンテンツに含まれる各ブロックに対するハッシュ値を計算し、ハッシュ値リストHを生成する(ステップS423)。なお、ハッシュ値リストHは、ハッシュ値格納部733に格納される。そして、ハッシュ値計算部74は、検証要求を署名検証部76に出力する。
そして、署名検証部76は、ハッシュ値計算部74から検証要求を受信すると、最終変更者から順に未処理の変更者kを特定する(ステップS425)。そして、署名検証部76は、公開鍵格納部731とハッシュ値格納部733と電子署名格納部734と挿入テーブル格納部736とから、特定した変更者kに係るデータを読み出す。すなわち、公開鍵格納部731から変更者kの公開鍵を読み出し、ハッシュ値格納部733から公開ハッシュ値Vkを読み出し、電子署名格納部734から変更者kに係る電子署名σkを読み出し、挿入テーブル格納部736から挿入テーブルIkを読み出す。また、ステップS423において生成したハッシュ値リストHをハッシュ値格納部533から読み出す。そして、署名検証部76は、公開鍵とハッシュ値リストHと公開ハッシュ値Vkと挿入テーブルIkとを基に、変更者kに係る電子署名σkの検証処理を実施する(ステップS427)。なお、電子署名の検証処理は、従来と変わらないので、これ以上述べない。
そして、ステップS427における検証に成功した場合(ステップS429:Yesルート)、署名検証部76は、ハッシュ値リストHを更新するようハッシュ値検証部75に指示する。この際、署名検証部76は、指示と併せて挿入テーブルIkを通知する。なお、ステップS427における検証に成功したということは、変更者kによって挿入された挿入ブロックの正当性が確認できたということを意味する。
そして、ハッシュ値検証部75は、署名検証部76からの指示と共に挿入テーブルIkを受信する。そして、ハッシュ値検証部75は、挿入テーブルIkに基づき、ハッシュ値リストHから挿入ブロックに対するハッシュ値を取り除くことにより、ハッシュ値リストHを挿入前の状態に復元する(ステップS431)。なお、図28に示したように、挿入テーブルIkには、挿入順に挿入位置番号が設定されるので、後ろから順に挿入位置番号を特定し、その挿入位置番号の挿入ブロックを取り除く。例えば図44では、3番目のハッシュ値h6が取り除かれ、ハッシュ値リストH={h1,h2,h3,h4,h5}となる。そして、ハッシュ値検証部75は、特定された変更者kについての処理が完了した旨を署名検証部76に通知する。
そして、署名検証部76は、ハッシュ値検証部75から完了通知を受信すると、全ての変更者について処理が完了したか判断する(ステップS433)。全ての変更者について処理が完了していなければ(ステップS433:Noルート)、ステップS425に戻り、上で述べた処理を繰り返す。すなわち、最終変更者から順に、最初にコンテンツ変更を行った変更者まで、上で述べたような処理が繰り返される。なお、全ての変更者について、上で述べたような処理を実施することで、全ての挿入ブロックに対応するハッシュ値がハッシュ値リストHから取り除かれ、元のコンテンツの状態に戻ることになる。
一方、全ての変更者について処理が完了した場合(ステップS433:Yesルート)、署名検証部76は、公開鍵格納部731から署名者の公開鍵を読み出し、電子署名格納部734から署名者に係る電子署名σ0を読み出す。そして、署名検証部76は、署名者の公開鍵と、復元されたハッシュ値リストHとを基に、署名者に係る電子署名σ0の検証処理を実施する(ステップS435)。なお、電子署名の検証処理は、従来と変わらないので、これ以上述べない。
そして、ステップS435における検証に成功した場合(ステップS437:Yesルート)、検証に成功した旨を出力部72に通知する。そして、出力部72は、検証成功を表示装置等に出力する(ステップS439)。そして、処理を終了する。
一方、ステップS427における検証に失敗した場合(ステップS429:Noルート)、又は、ステップS435における検証に失敗した場合(ステップS437:Noルート)、出力部72が、検証失敗を表示装置等に出力する(ステップS441)。なお、いずれの検証に失敗したかを併せて表示するようにしてもよい。そして、処理を終了する。
以上のようにRCS型PIATを変形することにより、第4の実施の形態よりも少ないデータ量で、ブロック挿入時の部分完全性保証を実現することができるようになる。
[実施の形態6]
次に、第6の実施の形態について説明する。第6の実施の形態では、図48に示すような流れで、ブロック挿入時の部分完全性保証を実現する。なお、第6の実施の形態は、第4の実施の形態を変形したものであり、おおまかな流れは第4の実施の形態と同じである。第6の実施の形態では、第3の実施の形態で説明したタグを公開ハッシュ値に追加する。
次に、第6の実施の形態について説明する。第6の実施の形態では、図48に示すような流れで、ブロック挿入時の部分完全性保証を実現する。なお、第6の実施の形態は、第4の実施の形態を変形したものであり、おおまかな流れは第4の実施の形態と同じである。第6の実施の形態では、第3の実施の形態で説明したタグを公開ハッシュ値に追加する。
図48に示すように、第5の実施の形態では、変更フェーズにおいて、コンテンツに含まれる各ブロックに対するハッシュ値を計算し、ハッシュ値リスト1を生成する。そして、例えばコンテンツの3番目にブロックm6が挿入された場合、挿入ブロックm6に対するハッシュ値を計算し、そのハッシュ値をハッシュ値リストに挿入することで、ハッシュ値リスト2を生成する。また、変更者の識別子と、挿入位置番号と、挿入を表すタグ「insert」と、そのハッシュ値とを含む公開ハッシュ値を生成する。そして、ハッシュ値リスト2と公開ハッシュ値とに対する電子署名σ1を生成する。
そして、検証フェーズでは、まず、挿入済みコンテンツに含まれる各ブロックに対するハッシュ値を計算する。そして、計算したハッシュ値と公開ハッシュ値とを用いて、挿入ブロックを検証すると共に、電子署名σ1を検証する。また、計算したハッシュ値のうち、挿入ブロック以外のブロックに対するハッシュ値(図48では、h1〜h5)を用いて、電子署名σ0を検証する。これにより、挿入ブロックについては、変更者によって挿入されたものであることが保証され、挿入ブロック以外の各ブロックについては、元のコンテンツから引き継いだものであることが保証される。また、挿入を表すタグを公開ハッシュ値に含めるようにすることで、リンクテーブルを生成する必要がなくなり、第4の実施の形態の場合よりも、データ量を削減することができる。以下、第6の実施の形態について詳細に説明する。
第6の実施の形態に係るシステム構成は、図10に示したシステム構成図と同じである。また、本実施の形態における署名者端末3、変更者端末5及び検証者端末7の構成は、基本的には第3の実施の形態のものと同じである。
第6の実施の形態における変更者端末5及び検証者端末7の処理について説明する。なお、署名者端末3の処理は、第4の実施の形態と同じであるため、ここでは説明は省略する。
まず、図49及び図50を用いて、第6の実施の形態における変更者端末5の処理について説明する。ここでは、一人目の変更者である場合について説明する。まず、入力部51が、署名者端末3からコンテンツ及び署名リストΣを受信する(図49:ステップS451)。そして、入力部51は、受信したコンテンツをコンテンツ格納部532に格納し、署名リストΣを電子署名格納部534に格納する。そして、入力部51は、電子署名の検証要求を検証部57に出力し、ハッシュ値計算要求をハッシュ値計算部55に出力する。
そして、検証部57は、入力部51から検証要求を受信すると、電子署名格納部534から署名リストΣを読み出し、署名リストΣに含まれる署名者の電子署名σ0の検証処理を実施する(ステップS453)。なお、署名を検証する処理自体は、従来と変わらないので、これ以上述べない。
また、ハッシュ値計算部55は、入力部51からハッシュ値計算要求を受信すると、コンテンツ格納部532からコンテンツを読み出す。そして、ハッシュ値計算部55は、コンテンツに含まれる各ブロックに対するハッシュ値を計算し、計算したハッシュ値を含むハッシュ値リストHkを生成する(ステップS455)。なお、ハッシュ値リストHkは、ハッシュ値格納部533に格納される。
その後、変更者が、変更者端末5を操作し、ブロックの変更、追加又は挿入を行うことによりコンテンツを変更する(ステップS457)。なお、本ステップは、変更者の動作であるため、図49では点線ブロックで示している。そして、入力部51は、変更ブロック、追加ブロック又は挿入ブロックの入力を受け付け、コンテンツ更新要求をコンテンツ変更部54に出力する。なお、コンテンツ更新要求には、入力されたブロックのデータや、操作種別、ブロック番号などが含まれる。
そして、コンテンツ変更部54は、入力部51からコンテンツ更新要求を受信すると、メモリ部53、ハッシュ値計算部55及びタグ設定部60と連携して、コンテンツ変更処理6を実施する(ステップS459)。コンテンツ変更処理6については図50を用いて説明する。
まず、コンテンツ変更部54は、操作種別がブロックの変更であるか判断する(図50:ステップS471)。操作種別がブロックの変更である場合(ステップS471:Yesルート)、コンテンツ変更部54は、ブロックを変更することにより、コンテンツ格納部532に格納されているコンテンツを更新する(ステップS473)。
その後、タグ設定部60が、ブロックの変更を表すタグ「change」を選択し(ステップS475)、選択したタグの情報をハッシュ値計算部55に出力する。そして、ステップS493の処理に移行する。
一方、操作種別がブロックの変更ではない場合(ステップS471:Noルート)、コンテンツ変更部54は、操作種別がブロックの追加であるか判断する(ステップS477)。操作種別がブロックの追加である場合(ステップS477:Yesルート)、コンテンツ変更部54は、追加ブロックをコンテンツの最後に追加することにより、コンテンツ格納部532に格納されているコンテンツを更新する(ステップS479)。
その後、タグ設定部60が、ブロックの追加を表すタグ「append」を選択し(ステップS481)、選択したタグの情報をハッシュ値計算部55に出力する。そして、ステップS493の処理に移行する。
一方、操作種別がブロックの追加ではない場合(ステップS477:Noルート)、コンテンツ変更部54は、操作種別がブロックの挿入であるか判断する(ステップS483)。操作種別がブロックの挿入である場合(ステップS483:Yesルート)、コンテンツ変更部54は、最終ブロックと同一ブロックをコンテンツの最後に追加する(ステップS485)。そして、コンテンツ変更部54は、挿入位置以降の各ブロックを1つずつ後ろにシフトする(ステップS487)。そして、コンテンツ変更部54は、挿入位置にブロックを挿入する(ステップS489)。
その後、タグ設定部60が、ブロックの挿入を表すタグ「insert」を選択し(ステップS491)、選択したタグの情報をハッシュ値計算部55に出力する。そして、ステップS493の処理に移行する。
一方、ステップS483において、操作種別がブロックの挿入ではないと判断された場合(ステップS483:Noルート)、以降の処理をスキップし、本処理を終了する。そして、元の処理に戻る。
そして、ハッシュ値計算部55は、タグ設定部60からタグの情報を受信すると、変更、追加又は挿入されたブロックのハッシュ値を計算する(ステップS493)。そして、ハッシュ値計算部55は、管理データ格納部531に格納されている変更者の識別子と、ブロック番号と、変更、追加又は挿入を表すタグと、計算したハッシュ値とを含む公開ハッシュ値vを生成し、ハッシュ値格納部533に格納する(ステップS495)。また、ハッシュ値計算部55は、ステップS493において計算したハッシュ値を用いて、ハッシュ値格納部533に格納されているハッシュ値リストHkを更新する(ステップS497)。なお、本ステップの処理は、第4の実施の形態と同じ処理であるため、詳細な説明は省略する。その後、本処理を終了し、元の処理に戻る。
図49の説明に戻って、コンテンツ変更処理6(ステップS459)を実施した後、入力部51は、コンテンツの変更が完了したか判断する(ステップS461)。例えば、変更者から次の操作(ブロックの変更、追加又は挿入)を受け付けた場合には、コンテンツの変更は完了していないと判断し(ステップS461:Noルート)、ステップS457の処理に戻り、上で述べた処理を繰り返す。
一方、例えば変更者から変更完了が指示された場合には、コンテンツの変更が完了したと判断し(ステップS461:Yesルート)、ステップS463の処理に移行する。この際、入力部51は、署名対象となるハッシュ値リストHk及び公開ハッシュ値Vkの指定を含む署名要求を署名部56に出力する。
そして、署名部56は、入力部51から署名要求を受信すると、管理データ格納部531から変更者kの秘密鍵を読み出し、ハッシュ値格納部533からハッシュ値リストHk及び公開ハッシュ値Vkを読み出す。そして、署名部56は、変更者kの秘密鍵を用いて、読み出したハッシュ値リストHkと公開ハッシュ値Vkとに対する電子署名σkを生成する(ステップS463)。そして、生成した電子署名σkを、電子署名格納部534における署名リストΣに追加する。例えば図48では、電子署名σ1が生成され、署名リストΣ={σ0,σ1}となる。
その後、出力部52は、コンテンツ格納部532から挿入済みコンテンツを読み出し、ハッシュ値格納部533から公開ハッシュ値Vkを読み出し、電子署名格納部534から署名リストΣを読み出す。そして、出力部52は、公開ハッシュ値Vkを公開ハッシュ値リストVに追加する。そして、出力部52は、挿入済みコンテンツと、署名リストΣと、公開ハッシュ値リストVとを他の変更者端末5又は検証者端末7に出力する(ステップS465)。そして、処理を終了する。
なお、上では、一人目の変更者である場合について説明したが、二人目以降の変更者の場合も基本的な処理は同じである。但し、二人目以降の変更者の場合、ステップS451では、入力部51は、前の変更者が操作する変更者端末5から、挿入済みコンテンツと、署名リストΣと、公開ハッシュ値リストVとを受信する。この場合、入力部51は、挿入済みコンテンツをコンテンツ格納部532に格納し、公開ハッシュ値リストVをハッシュ値格納部533に格納し、署名リストΣを電子署名格納部534に格納するようにすればよい。
また、ステップS465では、出力部52は、受信した公開ハッシュ値リストVに、公開ハッシュ値Vkを追加するようにすればよい。
以上のような処理を実施することにより、RCS型PIATの場合においても、ブロックの変更、追加又は挿入を表すタグを含む公開ハッシュ値を生成することができる。
次に、図51を用いて、第6の実施の形態における検証者端末7の処理について説明する。ここでは、挿入済みコンテンツを検証する場合の処理について説明する。まず、入力部71が、変更者端末5から挿入済みコンテンツと、署名リストΣと、公開ハッシュ値リストVとを受信する(図51:ステップS501)。そして、入力部71は、受信した挿入済みコンテンツをコンテンツ格納部732に格納し、公開ハッシュ値リストVをハッシュ値格納部733に格納し、署名リストΣを電子署名格納部734に格納する。そして、入力部71は、ハッシュ値計算要求をハッシュ値計算部74に出力する。なお、ハッシュ値計算要求には、挿入済みコンテンツのファイル名などが含まれる。
そして、ハッシュ値計算部74は、入力部71からハッシュ値計算要求を受信すると、コンテンツ格納部732からハッシュ値計算要求に係る挿入済みコンテンツを読み出す。そして、ハッシュ値計算部74は、読み出した挿入済みコンテンツに含まれる各ブロックに対するハッシュ値を計算し、ハッシュ値リストHを生成する(ステップS503)。なお、ハッシュ値リストHは、ハッシュ値格納部733に格納される。そして、ハッシュ値計算部74は、検証要求を署名検証部76に出力する。
そして、署名検証部76は、ハッシュ値計算部74から検証要求を受信すると、最終変更者から順に未処理の変更者kを特定する(ステップS505)。そして、署名検証部76は、公開鍵格納部731とハッシュ値格納部733と電子署名格納部734とから、特定した変更者kに係るデータを読み出す。すなわち、公開鍵格納部731から変更者kの公開鍵を読み出し、ハッシュ値格納部733から公開ハッシュ値Vkを読み出し、電子署名格納部734から変更者kに係る電子署名σkを読み出す。また、ステップS503において生成したハッシュ値リストHをハッシュ値格納部533から読み出す。そして、署名検証部76は、公開鍵とハッシュ値リストHと公開ハッシュ値Vkとを基に、変更者kに係る電子署名σkの検証処理を実施する(ステップS507)。なお、電子署名の検証処理は、従来と変わらないので、これ以上述べない。
そして、ステップS507における検証に成功した場合(ステップS509:Yesルート)、署名検証部76は、ハッシュ値リストHを更新するようハッシュ値検証部75に指示する。この際、署名検証部76は、指示と併せて公開ハッシュ値Vkを通知する。なお、ステップS507における検証に成功したということは、変更者kによって挿入された挿入ブロックの正当性が確認できたということを意味する。
そして、ハッシュ値検証部75は、署名検証部76からの指示と共に公開ハッシュ値Vkを受信する。そして、ハッシュ値検証部75は、公開ハッシュ値Vkに基づき、ハッシュ値リストHから挿入ブロックに対するハッシュ値を取り除くことにより、ハッシュ値リストHを挿入前の状態に復元する(ステップS511)。なお、公開ハッシュ値Vkには、変更者kによって挿入されたブロック数分の公開ハッシュ値vが含まれ、公開ハッシュ値vは挿入順に並んでいる。従って、本ステップでは、挿入を表すタグ「insert」を含む公開ハッシュ値vを後ろから順に特定し、その公開ハッシュ値vに含まれるブロック番号の挿入ブロックを取り除く。例えば図48では、3番目のハッシュ値h6が取り除かれ、ハッシュ値リストH={h1,h2,h3,h4,h5}となる。そして、ハッシュ値検証部75は、特定された変更者kについての処理が完了した旨を署名検証部76に通知する。
そして、署名検証部76は、ハッシュ値検証部75から完了通知を受信すると、全ての変更者について処理が完了したか判断する(ステップS513)。全ての変更者について処理が完了していなければ(ステップS513:Noルート)、ステップS505に戻り、上で述べた処理を繰り返す。すなわち、最終変更者から順に、最初にコンテンツ変更を行った変更者まで、上で述べたような処理が繰り返される。なお、全ての変更者について、上で述べたような処理を実施することで、全ての挿入ブロックに対応するハッシュ値がハッシュ値リストHから取り除かれ、元のコンテンツの状態に戻ることになる。
一方、全ての変更者について処理が完了した場合(ステップS513:Yesルート)、署名検証部76は、公開鍵格納部731から署名者の公開鍵を読み出し、電子署名格納部734から署名者に係る電子署名σ0を読み出す。そして、署名検証部76は、署名者の公開鍵と、復元されたハッシュ値リストHとを基に、署名者に係る電子署名σ0の検証処理を実施する(ステップS515)。なお、電子署名の検証処理は、従来と変わらないので、これ以上述べない。
そして、ステップS515における検証に成功した場合(ステップS517:Yesルート)、検証に成功した旨を出力部72に通知する。そして、出力部72は、検証成功を表示装置等に出力する(ステップS519)。そして、処理を終了する。
一方、ステップS507における検証に失敗した場合(ステップS509:Noルート)、又は、ステップS515における検証に失敗した場合(ステップS517:Noルート)、出力部72が、検証失敗を表示装置等に出力する(ステップS521)。なお、いずれの検証に失敗したかを併せて表示するようにしてもよい。そして、処理を終了する。
以上のようにRCS型PIATを変形することにより、第4の実施の形態よりも少ないデータ量で、ブロック挿入時の部分完全性保証を実現することができるようになる。
図52に、リンクテーブルを用いる方式(方式1)、挿入テーブルを用いる方式(方式2)及びタグを用いる方式(方式3)と、従来のPIATとの公開データ量の比較例を示す。なお、1時間の動画(32フレーム/秒、1GOP:16フレーム、1GOP:1ブロック)の1ブロック目にブロックを1つ挿入する場面を想定する。また、署名を1024-bit、ハッシュ値を160-bit、ID(挿入位置番号、ブロック番号、タグ等)の付加情報を1つ当たり32-bitとする。例えば、SCCS型PIATの方式3を採用することで、従来のSCCS型PIATに比べて公開データ量を約42%(2.3分の1)に削減できる。また、例えば、RCS型PIATの方式3を採用することで、従来のRCS型PIATに比べて公開データ量を約753分の1に削減できる。
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、上で説明した署名者端末3、変更者端末5及び検証者端末7の機能ブロック図は必ずしも実際のプログラムモジュール構成に対応するものではない。各端末の機能を一台のコンピュータに実装することも可能である。
また、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。また、並列に実行させるようにしても良い。
なお、上で述べた署名者端末3、変更者端末5及び検証者端末7は、コンピュータ装置であって、図53に示すように、メモリ2501とCPU2503とハードディスク・ドライブ(HDD)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。必要に応じてCPU2503は、表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ2501に格納され、必要があればHDD2505に格納される。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
以上述べた本技術の実施の形態をまとめると以下のとおりになる。
第1の態様に係るコンテンツ処理装置は、(z)更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部(図54:管理データ格納部2011)と、(a)複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付手段(図54:受付部2001)と、(b)更新種別が挿入であった場合、コンテンツにおける更新位置に更新ブロックを挿入することにより更新済みコンテンツを生成する挿入手段(図54:挿入部2003)と、(c)更新ブロックに対するハッシュ値を計算する第1ハッシュ値計算手段(図54:ハッシュ値計算部2005)と、(d)管理データ格納部から更新者識別子及び秘密鍵を読み出し、当該更新者識別子と、更新位置と、更新ブロックに対するハッシュ値と、更新種別とを含む更新記録情報に対して、秘密鍵を用いて電子署名を生成する署名手段(図54:署名部2007)と、(e)更新済みコンテンツと更新記録情報と電子署名とを出力する出力手段(図54:出力部2009)とを有する。
このように、更新者識別子と、更新位置と、更新ブロックに対するハッシュ値と、更新種別(挿入)とを含む更新記録情報を生成するようにすることで、検証時に、ブロックが挿入されたことと、挿入位置とを認識できるようになる。すなわち、挿入されたブロックの後方の各ブロックは変更されていないものとして扱うことができるようになる。また、挿入されたブロックについてのみ更新記録情報が生成されるので、コンテンツの部分完全性保証のために必要なデータ量を抑えることができる。なお、更新記録情報に対する電子署名を生成・出力するので、SCCS型PIATで部分完全性保証を実現できるようになる。
また、第1の態様に係るコンテンツ処理装置が、(f)他のコンテンツ処理装置から、更新済みコンテンツと当該更新済みコンテンツに対応する更新記録情報と電子署名とを受信する受信手段と、(g)受信した更新済みコンテンツに含まれる各ブロックに対するハッシュ値を計算する第2ハッシュ値計算手段と、(h)受信した更新記録情報に含まれる更新者識別子に対応する公開鍵を取得する鍵取得手段と、(i)受信した更新記録情報と公開鍵とを用いて、受信した電子署名を検証する署名検証手段と、(j)受信した更新記録情報に含まれる更新種別が挿入であった場合、計算されたハッシュ値のうち当該更新記録情報に含まれる更新位置のブロックに対するハッシュ値と、当該更新記録情報に含まれるハッシュ値とを比較することにより、当該更新位置のブロックの正当性を確認する挿入操作検証手段とをさらに有するようにしてもよい。このようにすれば、電子署名を検証し、更新位置のブロックの正当性が確認されるので、ブロック更新者を保証し、且つその挿入されたブロックに改ざんがないことを証明できるようになる。
さらに、第1の態様において、上で述べた受信手段が、ブロック更新前のコンテンツに含まれる複数ブロックの各々に対応するハッシュ値を含む更新前ハッシュ値リストと、当該更新前ハッシュ値リストに対し、当該コンテンツの作成者の秘密鍵によって生成された更新前電子署名とをさらに受信する場合もある。そして、上で述べた署名検証手段が、受信した更新前ハッシュ値リストと、作成者の公開鍵とを用いて、受信した更新前電子署名を検証する場合もある。また、上で述べた挿入操作検証手段が、更新済みコンテンツに含まれる、更新ブロック以外の各ブロックについて、第2ハッシュ値計算手段により計算された、当該ブロックのハッシュ値と、更新前ハッシュ値リストに含まれ且つ当該ブロックに対応するハッシュ値とを比較することにより、更新ブロック以外のブロックの正当性を確認する場合もある。このようにすれば、挿入されたブロック以外のブロックの正当性が確認されるので、挿入されたブロック以外のブロックが元のコンテンツから引き継いだものであることを保証できるようになる。
第2の態様に係るコンテンツ処理装置は、(Z)更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部(図55:管理データ格納部2111)と、(A)複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付手段(図55:受付部2101)と、(B)更新種別が挿入であった場合、コンテンツにおける更新位置に更新ブロックを挿入することにより更新済みコンテンツを生成する挿入手段(図55:挿入部2103)と、(C)生成した更新済みコンテンツに含まれる各ブロックのハッシュ値を計算し、各ブロックのハッシュ値を含むハッシュ値リストを生成する第1ハッシュ値リスト生成手段(図55:ハッシュ値リスト生成部2105)と、(D)管理データ格納部から更新者識別子及び秘密鍵を読み出し、当該更新者識別子と更新位置と更新種別とを含む更新記録情報と、ハッシュ値リストとに対して、秘密鍵を用いて電子署名を生成する署名手段(図55:署名部2107)と、(E)更新済みコンテンツと更新記録情報と電子署名とを出力する出力手段(図55:出力部2109)とを有する。
このように、更新者識別子と更新位置と更新種別(挿入)とを含む更新記録情報を生成するようにすることで、検証時に、ブロックが挿入されたことと、挿入位置とを認識できるようになる。なお、ハッシュ値リスト及び更新記録情報に対する電子署名を生成・出力するので、RCS型PIATで部分完全性保証を実現できるようになる。
また、第2の態様に係るコンテンツ処理装置が、(F)他のコンテンツ処理装置から、更新済みコンテンツと、当該更新済みコンテンツに対応する更新記録情報と、電子署名と、ブロック更新前のコンテンツに含まれる複数ブロックの各々に対応するハッシュ値を含む更新前ハッシュ値リストに対し、当該コンテンツの作成者の秘密鍵によって生成された更新前電子署名とを受信する受信手段と、(G)受信した更新記録情報に含まれる更新者識別子に対応する公開鍵を取得する鍵取得手段と、(H)受信した更新済みコンテンツに含まれる各ブロックのハッシュ値を計算し、各ブロックのハッシュ値を含むハッシュ値リストを生成する第2ハッシュ値リスト生成手段と、(I)受信した更新記録情報に含まれる更新種別が挿入であった場合、第2ハッシュ値リスト生成手段により生成されたハッシュ値リストと、当該更新記録情報と、公開鍵とを用いて、受信した電子署名を検証するとともに、第2ハッシュ値リスト生成手段により生成されたハッシュ値リストから更新ブロックに対するハッシュ値を取り除いたハッシュ値リストと、作成者の公開鍵とを用いて、更新前電子署名を検証する署名検証手段とをさらに有するようにしてもよい。このようにすれば、ハッシュ値リストと更新記録情報と公開鍵とを用いて電子署名が検証されるので、ブロック更新者を保証し、且つその挿入されたブロックに改ざんがないことを証明できるようになる。また、更新前電子署名が検証されるので、挿入されたブロック以外のブロックが元のコンテンツから引き継いだものであることを保証できるようになる。
第3の態様に係る情報処理方法は、コンテンツの部分完全性保証のための情報処理方法である。そして、本方法は、(a)複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付ステップ(図56:S1001)と、(b)更新種別が挿入であった場合、コンテンツにおける更新位置に更新ブロックを挿入することにより更新済みコンテンツを生成する挿入ステップ(図56:S1003)と、(c)更新ブロックに対するハッシュ値を計算するハッシュ値計算ステップ(図56:S1005)と、(d)更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部(z)から更新者識別子及び秘密鍵を読み出し、当該更新者識別子と、更新位置と、更新ブロックに対するハッシュ値と、更新種別とを含む更新記録情報に対して、秘密鍵を用いて電子署名を生成する署名ステップ(図56:S1007及びS1009)と、(e)更新済みコンテンツと更新記録情報と電子署名とを出力する出力ステップ(図56:S1011)とを含む。
第4の態様に係る情報処理方法は、コンテンツの部分完全性保証のための情報処理方法である。そして、本方法は、(A)複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付ステップ(図57:S1101)と、(B)更新種別が挿入であった場合、コンテンツにおける更新位置に更新ブロックを挿入することにより更新済みコンテンツを生成する挿入ステップ(図57:S1103)と、(C)生成した更新済みコンテンツに含まれる各ブロックのハッシュ値を計算し、各ブロックのハッシュ値を含むハッシュ値リストを生成する第1ハッシュ値リスト生成ステップ(図57:S1105)と、(D)更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部(Z)から更新者識別子及び秘密鍵を読み出し、当該更新者識別子と更新位置と更新種別とを含む更新記録情報と、ハッシュ値リストとに対して、秘密鍵を用いて電子署名を生成する署名ステップ(図57:S1107及びS1109)と、(E)更新済みコンテンツと更新記録情報と電子署名とを出力する出力ステップ(図57:S1111)とを含む。
なお、上で述べたような処理を署名者端末3、変更者端末5及び検証者端末7に実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。また、処理途中のデータについては、コンピュータのメモリ等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部と、
複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付手段と、
前記更新種別が挿入であった場合、前記コンテンツにおける前記更新位置に前記更新ブロックを挿入することにより更新済みコンテンツを生成する挿入手段と、
前記更新ブロックに対するハッシュ値を計算する第1ハッシュ値計算手段と、
前記管理データ格納部から前記更新者識別子及び前記秘密鍵を読み出し、当該更新者識別子と、前記更新位置と、前記更新ブロックに対する前記ハッシュ値と、前記更新種別とを含む更新記録情報に対して、前記秘密鍵を用いて電子署名を生成する署名手段と、
前記更新済みコンテンツと前記更新記録情報と前記電子署名とを出力する出力手段と、
を有するコンテンツ処理装置。
更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部と、
複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付手段と、
前記更新種別が挿入であった場合、前記コンテンツにおける前記更新位置に前記更新ブロックを挿入することにより更新済みコンテンツを生成する挿入手段と、
前記更新ブロックに対するハッシュ値を計算する第1ハッシュ値計算手段と、
前記管理データ格納部から前記更新者識別子及び前記秘密鍵を読み出し、当該更新者識別子と、前記更新位置と、前記更新ブロックに対する前記ハッシュ値と、前記更新種別とを含む更新記録情報に対して、前記秘密鍵を用いて電子署名を生成する署名手段と、
前記更新済みコンテンツと前記更新記録情報と前記電子署名とを出力する出力手段と、
を有するコンテンツ処理装置。
(付記2)
他のコンテンツ処理装置から、前記更新済みコンテンツと当該更新済みコンテンツに対応する前記更新記録情報と前記電子署名とを受信する受信手段と、
受信した前記更新済みコンテンツに含まれる各ブロックに対するハッシュ値を計算する第2ハッシュ値計算手段と、
受信した前記更新記録情報に含まれる前記更新者識別子に対応する公開鍵を取得する鍵取得手段と、
受信した前記更新記録情報と前記公開鍵とを用いて、受信した前記電子署名を検証する署名検証手段と、
受信した前記更新記録情報に含まれる前記更新種別が挿入であった場合、計算された前記ハッシュ値のうち当該更新記録情報に含まれる前記更新位置のブロックに対するハッシュ値と、当該更新記録情報に含まれる前記ハッシュ値とを比較することにより、当該更新位置のブロックの正当性を確認する挿入操作検証手段と、
をさらに有する付記1記載のコンテンツ処理装置。
他のコンテンツ処理装置から、前記更新済みコンテンツと当該更新済みコンテンツに対応する前記更新記録情報と前記電子署名とを受信する受信手段と、
受信した前記更新済みコンテンツに含まれる各ブロックに対するハッシュ値を計算する第2ハッシュ値計算手段と、
受信した前記更新記録情報に含まれる前記更新者識別子に対応する公開鍵を取得する鍵取得手段と、
受信した前記更新記録情報と前記公開鍵とを用いて、受信した前記電子署名を検証する署名検証手段と、
受信した前記更新記録情報に含まれる前記更新種別が挿入であった場合、計算された前記ハッシュ値のうち当該更新記録情報に含まれる前記更新位置のブロックに対するハッシュ値と、当該更新記録情報に含まれる前記ハッシュ値とを比較することにより、当該更新位置のブロックの正当性を確認する挿入操作検証手段と、
をさらに有する付記1記載のコンテンツ処理装置。
(付記3)
前記受信手段が、ブロック更新前の前記コンテンツに含まれる前記複数ブロックの各々に対応するハッシュ値を含む更新前ハッシュ値リストと、当該更新前ハッシュ値リストに対し、当該コンテンツの作成者の秘密鍵によって生成された更新前電子署名とをさらに受信し、
前記署名検証手段が、受信した前記更新前ハッシュ値リストと、前記作成者の公開鍵とを用いて、受信した前記更新前電子署名を検証し、
前記挿入操作検証手段が、前記更新済みコンテンツに含まれる、前記更新ブロック以外の各ブロックについて、前記第2ハッシュ値計算手段により計算された、当該ブロックのハッシュ値と、前記更新前ハッシュ値リストに含まれ且つ当該ブロックに対応するハッシュ値とを比較することにより、前記更新ブロック以外のブロックの正当性を確認する
付記2記載のコンテンツ処理装置。
前記受信手段が、ブロック更新前の前記コンテンツに含まれる前記複数ブロックの各々に対応するハッシュ値を含む更新前ハッシュ値リストと、当該更新前ハッシュ値リストに対し、当該コンテンツの作成者の秘密鍵によって生成された更新前電子署名とをさらに受信し、
前記署名検証手段が、受信した前記更新前ハッシュ値リストと、前記作成者の公開鍵とを用いて、受信した前記更新前電子署名を検証し、
前記挿入操作検証手段が、前記更新済みコンテンツに含まれる、前記更新ブロック以外の各ブロックについて、前記第2ハッシュ値計算手段により計算された、当該ブロックのハッシュ値と、前記更新前ハッシュ値リストに含まれ且つ当該ブロックに対応するハッシュ値とを比較することにより、前記更新ブロック以外のブロックの正当性を確認する
付記2記載のコンテンツ処理装置。
(付記4)
更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部と、
複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付手段と、
前記更新種別が挿入であった場合、前記コンテンツにおける前記更新位置に前記更新ブロックを挿入することにより更新済みコンテンツを生成する挿入手段と、
生成した前記更新済みコンテンツに含まれる各ブロックのハッシュ値を計算し、各前記ブロックのハッシュ値を含むハッシュ値リストを生成する第1ハッシュ値リスト生成手段と、
前記管理データ格納部から前記更新者識別子及び前記秘密鍵を読み出し、当該更新者識別子と前記更新位置と前記更新種別とを含む更新記録情報と、前記ハッシュ値リストとに対して、前記秘密鍵を用いて電子署名を生成する署名手段と、
前記更新済みコンテンツと前記更新記録情報と前記電子署名とを出力する出力手段と、
を有するコンテンツ処理装置。
更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部と、
複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付手段と、
前記更新種別が挿入であった場合、前記コンテンツにおける前記更新位置に前記更新ブロックを挿入することにより更新済みコンテンツを生成する挿入手段と、
生成した前記更新済みコンテンツに含まれる各ブロックのハッシュ値を計算し、各前記ブロックのハッシュ値を含むハッシュ値リストを生成する第1ハッシュ値リスト生成手段と、
前記管理データ格納部から前記更新者識別子及び前記秘密鍵を読み出し、当該更新者識別子と前記更新位置と前記更新種別とを含む更新記録情報と、前記ハッシュ値リストとに対して、前記秘密鍵を用いて電子署名を生成する署名手段と、
前記更新済みコンテンツと前記更新記録情報と前記電子署名とを出力する出力手段と、
を有するコンテンツ処理装置。
(付記5)
他のコンテンツ処理装置から、前記更新済みコンテンツと、当該更新済みコンテンツに対応する前記更新記録情報と、前記電子署名と、ブロック更新前の前記コンテンツに含まれる前記複数ブロックの各々に対応するハッシュ値を含む更新前ハッシュ値リストに対し、当該コンテンツの作成者の秘密鍵によって生成された更新前電子署名とを受信する受信手段と、
受信した前記更新記録情報に含まれる前記更新者識別子に対応する公開鍵を取得する鍵取得手段と、
受信した前記更新済みコンテンツに含まれる各ブロックのハッシュ値を計算し、各前記ブロックのハッシュ値を含むハッシュ値リストを生成する第2ハッシュ値リスト生成手段と、
受信した前記更新記録情報に含まれる前記更新種別が挿入であった場合、前記第2ハッシュ値リスト生成手段により生成された前記ハッシュ値リストと、当該更新記録情報と、前記公開鍵とを用いて、受信した前記電子署名を検証するとともに、前記第2ハッシュ値リスト生成手段により生成された前記ハッシュ値リストから前記更新ブロックに対するハッシュ値を取り除いたハッシュ値リストと、前記作成者の公開鍵とを用いて、前記更新前電子署名を検証する署名検証手段と、
をさらに有する付記4記載のコンテンツ処理装置。
他のコンテンツ処理装置から、前記更新済みコンテンツと、当該更新済みコンテンツに対応する前記更新記録情報と、前記電子署名と、ブロック更新前の前記コンテンツに含まれる前記複数ブロックの各々に対応するハッシュ値を含む更新前ハッシュ値リストに対し、当該コンテンツの作成者の秘密鍵によって生成された更新前電子署名とを受信する受信手段と、
受信した前記更新記録情報に含まれる前記更新者識別子に対応する公開鍵を取得する鍵取得手段と、
受信した前記更新済みコンテンツに含まれる各ブロックのハッシュ値を計算し、各前記ブロックのハッシュ値を含むハッシュ値リストを生成する第2ハッシュ値リスト生成手段と、
受信した前記更新記録情報に含まれる前記更新種別が挿入であった場合、前記第2ハッシュ値リスト生成手段により生成された前記ハッシュ値リストと、当該更新記録情報と、前記公開鍵とを用いて、受信した前記電子署名を検証するとともに、前記第2ハッシュ値リスト生成手段により生成された前記ハッシュ値リストから前記更新ブロックに対するハッシュ値を取り除いたハッシュ値リストと、前記作成者の公開鍵とを用いて、前記更新前電子署名を検証する署名検証手段と、
をさらに有する付記4記載のコンテンツ処理装置。
(付記6)
コンテンツの部分完全性保証のための処理をコンピュータに実行させるためのプログラムであって、
複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付ステップと、
前記更新種別が挿入であった場合、前記コンテンツにおける前記更新位置に前記更新ブロックを挿入することにより更新済みコンテンツを生成する挿入ステップと、
前記更新ブロックに対するハッシュ値を計算するハッシュ値計算ステップと、
更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部から前記更新者識別子及び前記秘密鍵を読み出し、当該更新者識別子と、前記更新位置と、前記更新ブロックに対する前記ハッシュ値と、前記更新種別とを含む更新記録情報に対して、前記秘密鍵を用いて電子署名を生成する署名ステップと、
前記更新済みコンテンツと前記更新記録情報と前記電子署名とを出力する出力ステップと、
をコンピュータに実行させるためのプログラム。
コンテンツの部分完全性保証のための処理をコンピュータに実行させるためのプログラムであって、
複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付ステップと、
前記更新種別が挿入であった場合、前記コンテンツにおける前記更新位置に前記更新ブロックを挿入することにより更新済みコンテンツを生成する挿入ステップと、
前記更新ブロックに対するハッシュ値を計算するハッシュ値計算ステップと、
更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部から前記更新者識別子及び前記秘密鍵を読み出し、当該更新者識別子と、前記更新位置と、前記更新ブロックに対する前記ハッシュ値と、前記更新種別とを含む更新記録情報に対して、前記秘密鍵を用いて電子署名を生成する署名ステップと、
前記更新済みコンテンツと前記更新記録情報と前記電子署名とを出力する出力ステップと、
をコンピュータに実行させるためのプログラム。
(付記7)
コンテンツの部分完全性保証のための処理をコンピュータに実行させるためのプログラムであって、
複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付ステップと、
前記更新種別が挿入であった場合、前記コンテンツにおける前記更新位置に前記更新ブロックを挿入することにより更新済みコンテンツを生成する挿入ステップと、
生成した前記更新済みコンテンツに含まれる各ブロックのハッシュ値を計算し、各前記ブロックのハッシュ値を含むハッシュ値リストを生成する第1ハッシュ値リスト生成ステップと、
更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部から前記更新者識別子及び前記秘密鍵を読み出し、当該更新者識別子と前記更新位置と前記更新種別とを含む更新記録情報と、前記ハッシュ値リストとに対して、前記秘密鍵を用いて電子署名を生成する署名ステップと、
前記更新済みコンテンツと前記更新記録情報と前記電子署名とを出力する出力ステップと、
をコンピュータに実行させるためのプログラム。
コンテンツの部分完全性保証のための処理をコンピュータに実行させるためのプログラムであって、
複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付ステップと、
前記更新種別が挿入であった場合、前記コンテンツにおける前記更新位置に前記更新ブロックを挿入することにより更新済みコンテンツを生成する挿入ステップと、
生成した前記更新済みコンテンツに含まれる各ブロックのハッシュ値を計算し、各前記ブロックのハッシュ値を含むハッシュ値リストを生成する第1ハッシュ値リスト生成ステップと、
更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部から前記更新者識別子及び前記秘密鍵を読み出し、当該更新者識別子と前記更新位置と前記更新種別とを含む更新記録情報と、前記ハッシュ値リストとに対して、前記秘密鍵を用いて電子署名を生成する署名ステップと、
前記更新済みコンテンツと前記更新記録情報と前記電子署名とを出力する出力ステップと、
をコンピュータに実行させるためのプログラム。
(付記8)
コンテンツの部分完全性保証のための情報処理方法であって、
複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付ステップと、
前記更新種別が挿入であった場合、前記コンテンツにおける前記更新位置に前記更新ブロックを挿入することにより更新済みコンテンツを生成する挿入ステップと、
前記更新ブロックに対するハッシュ値を計算するハッシュ値計算ステップと、
更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部から前記更新者識別子及び前記秘密鍵を読み出し、当該更新者識別子と、前記更新位置と、前記更新ブロックに対する前記ハッシュ値と、前記更新種別とを含む更新記録情報に対して、前記秘密鍵を用いて電子署名を生成する署名ステップと、
前記更新済みコンテンツと前記更新記録情報と前記電子署名とを出力する出力ステップと、
を含み、コンピュータにより実行される情報処理方法。
コンテンツの部分完全性保証のための情報処理方法であって、
複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付ステップと、
前記更新種別が挿入であった場合、前記コンテンツにおける前記更新位置に前記更新ブロックを挿入することにより更新済みコンテンツを生成する挿入ステップと、
前記更新ブロックに対するハッシュ値を計算するハッシュ値計算ステップと、
更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部から前記更新者識別子及び前記秘密鍵を読み出し、当該更新者識別子と、前記更新位置と、前記更新ブロックに対する前記ハッシュ値と、前記更新種別とを含む更新記録情報に対して、前記秘密鍵を用いて電子署名を生成する署名ステップと、
前記更新済みコンテンツと前記更新記録情報と前記電子署名とを出力する出力ステップと、
を含み、コンピュータにより実行される情報処理方法。
(付記9)
コンテンツの部分完全性保証のための情報処理方法であって、
複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付ステップと、
前記更新種別が挿入であった場合、前記コンテンツにおける前記更新位置に前記更新ブロックを挿入することにより更新済みコンテンツを生成する挿入ステップと、
生成した前記更新済みコンテンツに含まれる各ブロックのハッシュ値を計算し、各前記ブロックのハッシュ値を含むハッシュ値リストを生成する第1ハッシュ値リスト生成ステップと、
更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部から前記更新者識別子及び前記秘密鍵を読み出し、当該更新者識別子と前記更新位置と前記更新種別とを含む更新記録情報と、前記ハッシュ値リストとに対して、前記秘密鍵を用いて電子署名を生成する署名ステップと、
前記更新済みコンテンツと前記更新記録情報と前記電子署名とを出力する出力ステップと、
を含み、コンピュータにより実行される情報処理方法。
コンテンツの部分完全性保証のための情報処理方法であって、
複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付ステップと、
前記更新種別が挿入であった場合、前記コンテンツにおける前記更新位置に前記更新ブロックを挿入することにより更新済みコンテンツを生成する挿入ステップと、
生成した前記更新済みコンテンツに含まれる各ブロックのハッシュ値を計算し、各前記ブロックのハッシュ値を含むハッシュ値リストを生成する第1ハッシュ値リスト生成ステップと、
更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部から前記更新者識別子及び前記秘密鍵を読み出し、当該更新者識別子と前記更新位置と前記更新種別とを含む更新記録情報と、前記ハッシュ値リストとに対して、前記秘密鍵を用いて電子署名を生成する署名ステップと、
前記更新済みコンテンツと前記更新記録情報と前記電子署名とを出力する出力ステップと、
を含み、コンピュータにより実行される情報処理方法。
1 ネットワーク
3 署名者端末
5a,5b,5c 変更者端末
7 検証者端末
31 入力部 32 出力部 33 メモリ部
34 分割部 35 ハッシュ値計算部 36 署名部
51 入力部 52 出力部 53 メモリ部
54 コンテンツ変更部 55 ハッシュ値計算部 56 署名部
57 検証部 58 リンクテーブル生成部 59 挿入テーブル生成部
60 タグ設定部
71 入力部 72 出力部 73 メモリ部
74 ハッシュ値計算部 75 ハッシュ値検証部 76 署名検証部
331 管理データ格納部 332 コンテンツ格納部
333 ハッシュ値格納部 334 電子署名格納部
531 管理データ格納部 532 コンテンツ格納部
533 ハッシュ値格納部 534 電子署名格納部
535 リンクテーブル格納部 536 挿入テーブル格納部
731 公開鍵格納部 732 コンテンツ格納部
733 ハッシュ値格納部 734 電子署名格納部
735 リンクテーブル格納部 736 挿入テーブル格納部
3 署名者端末
5a,5b,5c 変更者端末
7 検証者端末
31 入力部 32 出力部 33 メモリ部
34 分割部 35 ハッシュ値計算部 36 署名部
51 入力部 52 出力部 53 メモリ部
54 コンテンツ変更部 55 ハッシュ値計算部 56 署名部
57 検証部 58 リンクテーブル生成部 59 挿入テーブル生成部
60 タグ設定部
71 入力部 72 出力部 73 メモリ部
74 ハッシュ値計算部 75 ハッシュ値検証部 76 署名検証部
331 管理データ格納部 332 コンテンツ格納部
333 ハッシュ値格納部 334 電子署名格納部
531 管理データ格納部 532 コンテンツ格納部
533 ハッシュ値格納部 534 電子署名格納部
535 リンクテーブル格納部 536 挿入テーブル格納部
731 公開鍵格納部 732 コンテンツ格納部
733 ハッシュ値格納部 734 電子署名格納部
735 リンクテーブル格納部 736 挿入テーブル格納部
Claims (7)
- 更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部と、
複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付手段と、
前記更新種別が挿入であった場合、前記コンテンツにおける前記更新位置に前記更新ブロックを挿入することにより更新済みコンテンツを生成する挿入手段と、
前記更新ブロックに対するハッシュ値を計算する第1ハッシュ値計算手段と、
前記管理データ格納部から前記更新者識別子及び前記秘密鍵を読み出し、当該更新者識別子と、前記更新位置と、前記更新ブロックに対する前記ハッシュ値と、前記更新種別とを含む更新記録情報に対して、前記秘密鍵を用いて電子署名を生成する署名手段と、
前記更新済みコンテンツと前記更新記録情報と前記電子署名とを出力する出力手段と、
を有するコンテンツ処理装置。 - 他のコンテンツ処理装置から、前記更新済みコンテンツと当該更新済みコンテンツに対応する前記更新記録情報と前記電子署名とを受信する受信手段と、
受信した前記更新済みコンテンツに含まれる各ブロックに対するハッシュ値を計算する第2ハッシュ値計算手段と、
受信した前記更新記録情報に含まれる前記更新者識別子に対応する公開鍵を取得する鍵取得手段と、
受信した前記更新記録情報と前記公開鍵とを用いて、受信した前記電子署名を検証する署名検証手段と、
受信した前記更新記録情報に含まれる前記更新種別が挿入であった場合、計算された前記ハッシュ値のうち当該更新記録情報に含まれる前記更新位置のブロックに対するハッシュ値と、当該更新記録情報に含まれる前記ハッシュ値とを比較することにより、当該更新位置のブロックの正当性を確認する挿入操作検証手段と、
をさらに有する請求項1記載のコンテンツ処理装置。 - 前記受信手段が、ブロック更新前の前記コンテンツに含まれる前記複数ブロックの各々に対応するハッシュ値を含む更新前ハッシュ値リストと、当該更新前ハッシュ値リストに対し、当該コンテンツの作成者の秘密鍵によって生成された更新前電子署名とをさらに受信し、
前記署名検証手段が、受信した前記更新前ハッシュ値リストと、前記作成者の公開鍵とを用いて、受信した前記更新前電子署名を検証し、
前記挿入操作検証手段が、前記更新済みコンテンツに含まれる、前記更新ブロック以外の各ブロックについて、前記第2ハッシュ値計算手段により計算された、当該ブロックのハッシュ値と、前記更新前ハッシュ値リストに含まれ且つ当該ブロックに対応するハッシュ値とを比較することにより、前記更新ブロック以外のブロックの正当性を確認する
請求項2記載のコンテンツ処理装置。 - 更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部と、
複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付手段と、
前記更新種別が挿入であった場合、前記コンテンツにおける前記更新位置に前記更新ブロックを挿入することにより更新済みコンテンツを生成する挿入手段と、
生成した前記更新済みコンテンツに含まれる各ブロックのハッシュ値を計算し、各前記ブロックのハッシュ値を含むハッシュ値リストを生成する第1ハッシュ値リスト生成手段と、
前記管理データ格納部から前記更新者識別子及び前記秘密鍵を読み出し、当該更新者識別子と前記更新位置と前記更新種別とを含む更新記録情報と、前記ハッシュ値リストとに対して、前記秘密鍵を用いて電子署名を生成する署名手段と、
前記更新済みコンテンツと前記更新記録情報と前記電子署名とを出力する出力手段と、
を有するコンテンツ処理装置。 - 他のコンテンツ処理装置から、前記更新済みコンテンツと、当該更新済みコンテンツに対応する前記更新記録情報と、前記電子署名と、ブロック更新前の前記コンテンツに含まれる前記複数ブロックの各々に対応するハッシュ値を含む更新前ハッシュ値リストに対し、当該コンテンツの作成者の秘密鍵によって生成された更新前電子署名とを受信する受信手段と、
受信した前記更新記録情報に含まれる前記更新者識別子に対応する公開鍵を取得する鍵取得手段と、
受信した前記更新済みコンテンツに含まれる各ブロックのハッシュ値を計算し、各前記ブロックのハッシュ値を含むハッシュ値リストを生成する第2ハッシュ値リスト生成手段と、
受信した前記更新記録情報に含まれる前記更新種別が挿入であった場合、前記第2ハッシュ値リスト生成手段により生成された前記ハッシュ値リストと、当該更新記録情報と、前記公開鍵とを用いて、受信した前記電子署名を検証するとともに、前記第2ハッシュ値リスト生成手段により生成された前記ハッシュ値リストから前記更新ブロックに対するハッシュ値を取り除いたハッシュ値リストと、前記作成者の公開鍵とを用いて、前記更新前電子署名を検証する署名検証手段と、
をさらに有する請求項4記載のコンテンツ処理装置。 - コンテンツの部分完全性保証のための処理をコンピュータに実行させるためのプログラムであって、
複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付ステップと、
前記更新種別が挿入であった場合、前記コンテンツにおける前記更新位置に前記更新ブロックを挿入することにより更新済みコンテンツを生成する挿入ステップと、
前記更新ブロックに対するハッシュ値を計算するハッシュ値計算ステップと、
更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部から前記更新者識別子及び前記秘密鍵を読み出し、当該更新者識別子と、前記更新位置と、前記更新ブロックに対する前記ハッシュ値と、前記更新種別とを含む更新記録情報に対して、前記秘密鍵を用いて電子署名を生成する署名ステップと、
前記更新済みコンテンツと前記更新記録情報と前記電子署名とを出力する出力ステップと、
をコンピュータに実行させるためのプログラム。 - コンテンツの部分完全性保証のための情報処理方法であって、
複数ブロックに分割されているコンテンツと、当該コンテンツに対する更新の種類を示す更新種別と、当該コンテンツにおいて更新すべき更新ブロックと、更新位置とを受け付ける受付ステップと、
前記更新種別が挿入であった場合、前記コンテンツにおける前記更新位置に前記更新ブロックを挿入することにより更新済みコンテンツを生成する挿入ステップと、
前記更新ブロックに対するハッシュ値を計算するハッシュ値計算ステップと、
更新者識別子と秘密鍵とを対応付けて格納する管理データ格納部から前記更新者識別子及び前記秘密鍵を読み出し、当該更新者識別子と、前記更新位置と、前記更新ブロックに対する前記ハッシュ値と、前記更新種別とを含む更新記録情報に対して、前記秘密鍵を用いて電子署名を生成する署名ステップと、
前記更新済みコンテンツと前記更新記録情報と前記電子署名とを出力する出力ステップと、
を含み、コンピュータにより実行される情報処理方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009221466A JP5387282B2 (ja) | 2009-09-25 | 2009-09-25 | コンテンツ処理装置、コンテンツの部分完全性保証のためのプログラム |
US12/885,886 US20110078458A1 (en) | 2009-09-25 | 2010-09-20 | Contents processing device and contents partial integrity assurance method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009221466A JP5387282B2 (ja) | 2009-09-25 | 2009-09-25 | コンテンツ処理装置、コンテンツの部分完全性保証のためのプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2011071771A JP2011071771A (ja) | 2011-04-07 |
JP5387282B2 true JP5387282B2 (ja) | 2014-01-15 |
Family
ID=43781617
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009221466A Expired - Fee Related JP5387282B2 (ja) | 2009-09-25 | 2009-09-25 | コンテンツ処理装置、コンテンツの部分完全性保証のためのプログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US20110078458A1 (ja) |
JP (1) | JP5387282B2 (ja) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090238365A1 (en) * | 2008-03-20 | 2009-09-24 | Kinamik Data Integrity, S.L. | Method and system to provide fine granular integrity to digital data |
US10331658B2 (en) * | 2011-06-03 | 2019-06-25 | Gdial Inc. | Systems and methods for atomizing and individuating data as data quanta |
US8644620B1 (en) * | 2011-06-21 | 2014-02-04 | Google Inc. | Processing of matching regions in a stream of screen images |
JP5807537B2 (ja) * | 2011-12-15 | 2015-11-10 | 富士通株式会社 | 検証方法、検証装置、および検証プログラム |
SE537697C2 (sv) * | 2013-08-08 | 2015-09-29 | Enigio Time Ab | Förfarande för att skapa signaler för tidsstämpling av dokument och förfarande för tidsstämpling av dokument |
EP2953045A1 (en) * | 2014-06-05 | 2015-12-09 | Thomson Licensing | Apparatus and method for data taint tracking |
CN107026841B (zh) * | 2016-11-24 | 2021-07-30 | 创新先进技术有限公司 | 在网络中发布作品的方法和装置 |
US10536275B2 (en) * | 2017-05-10 | 2020-01-14 | Microsoft Technology Licensing, Llc | Verification of downloaded subsets of content |
JPWO2018207424A1 (ja) * | 2017-05-11 | 2019-07-11 | 三菱電機株式会社 | メッセージ加工装置、地図管理装置、地図会社装置および自動車会社装置 |
US11245677B2 (en) * | 2018-07-25 | 2022-02-08 | Cisco Technology, Inc. | Secure packet modification |
JP6697038B2 (ja) * | 2018-07-31 | 2020-05-20 | 日本電信電話株式会社 | 情報処理装置、検証方法および検証プログラム |
US11374762B2 (en) * | 2018-10-09 | 2022-06-28 | International Business Machines Corporation | Certifying authenticity of data modifications |
US11849047B2 (en) | 2018-10-09 | 2023-12-19 | International Business Machines Corporation | Certifying authenticity of data modifications |
US10992456B2 (en) * | 2018-10-09 | 2021-04-27 | International Business Machines Corporation | Certifying authenticity of data modifications |
US11669495B2 (en) * | 2019-08-27 | 2023-06-06 | Vmware, Inc. | Probabilistic algorithm to check whether a file is unique for deduplication |
US12045204B2 (en) | 2019-08-27 | 2024-07-23 | Vmware, Inc. | Small in-memory cache to speed up chunk store operation for deduplication |
US11461229B2 (en) | 2019-08-27 | 2022-10-04 | Vmware, Inc. | Efficient garbage collection of variable size chunking deduplication |
US11775484B2 (en) | 2019-08-27 | 2023-10-03 | Vmware, Inc. | Fast algorithm to find file system difference for deduplication |
US11372813B2 (en) | 2019-08-27 | 2022-06-28 | Vmware, Inc. | Organize chunk store to preserve locality of hash values and reference counts for deduplication |
US20240031164A1 (en) * | 2022-07-22 | 2024-01-25 | Intel Corporation | Hybridization of dilithium and falcon for digital signatures |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4739000B2 (ja) * | 2005-12-07 | 2011-08-03 | 富士通株式会社 | 電子文書管理プログラム、電子文書管理システム及び電子文書管理方法 |
US20070168671A1 (en) * | 2006-01-16 | 2007-07-19 | Fujitsu Limited | Digital document management system, digital document management method, and digital document management program |
-
2009
- 2009-09-25 JP JP2009221466A patent/JP5387282B2/ja not_active Expired - Fee Related
-
2010
- 2010-09-20 US US12/885,886 patent/US20110078458A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
JP2011071771A (ja) | 2011-04-07 |
US20110078458A1 (en) | 2011-03-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5387282B2 (ja) | コンテンツ処理装置、コンテンツの部分完全性保証のためのプログラム | |
JP5095013B2 (ja) | プログラマブルコントローラシステムおよび開発システム | |
JP4250914B2 (ja) | 記憶装置システム | |
CN102224492B (zh) | 数据维护系统 | |
WO2019047480A1 (zh) | 程序更新方法、计算机可读存储介质、终端设备及装置 | |
US20070150433A1 (en) | Method for managing file in version control system | |
WO2016177075A1 (zh) | 一种业务数据关联关系校验方法、装置及可读存储介质 | |
EP3346642A1 (en) | Method and device for managing network element model | |
CN102298669B (zh) | 医用图像处理服务器及其管理方法 | |
JP2016001376A (ja) | プログラマブルコントローラシステム、その支援装置 | |
CN111736950A (zh) | 一种虚拟机的加速器资源添加方法及相关装置 | |
CN111399866A (zh) | Vnf包的更新方法及装置 | |
CN114553859A (zh) | 一种bmc配置管理方法、装置、电子设备及存储介质 | |
CN113672261A (zh) | 云软件更新方法、电子设备和存储介质 | |
JP2013232077A (ja) | 半導体製造装置の制御プログラムの更新システム | |
CN105760389A (zh) | 一种设备升级的方法及传送网设备 | |
CN111274211A (zh) | 应用文件的存储方法、装置及系统 | |
CN117880096B (zh) | 区块链配置更新方法、装置、电子设备及可读存储介质 | |
CN112748868A (zh) | 数据存储方法和装置 | |
CN113553090B (zh) | 客户端应用程序的更新控制方法及装置 | |
CN111125001A (zh) | 快照复制方法、电子设备和计算机程序产品 | |
JP2011170760A (ja) | 情報処理装置、情報処理システム及びプログラム | |
CN114063884B (zh) | 扩展存储系统的分区方法、设备和计算机程序产品 | |
CN116257277B (zh) | 镜像文件的更新方法、装置及voi系统 | |
JP2001327102A (ja) | 電力系統監視制御装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20120605 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20130910 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20130923 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |