(57)【要約】【課題】改ざん位置の特定ないし限定が可能なデータの認証方式を効率よく構築する。【解決手段】データ認証装置５０は、改ざん検出の対象とされるメッセージに含まれるアイテムからなる部分系列であって、組み合わせグループテストに基づき生成された１つ以上の部分系列の各々に対して、ブロックスライス２層ハッシュ木構造を適用して、メッセージに対応する複数の認証タグであってテストの数に応じた複数の認証タグを生成する２層ハッシュ木適用手段５０１を備え、２層ハッシュ木適用手段５０１は、複数のテストに共通に用いられるアイテムについて、１度の第１のハッシュ関数の適用処理により得られた出力値を、複数のテストに対応する認証タグの生成処理で共用する。【選択図】図１２
2017005409.tif 000002
【特許請求の範囲】
【請求項１】
改ざん検出の対象とされるメッセージに含まれるアイテムからなる部分系列であって、組み合わせグループテストに基づき生成された１つ以上の部分系列の各々に対して、ブロックスライス２層ハッシュ木構造を適用して、前記メッセージに対応する複数の認証タグであって前記テストの数に応じた複数の認証タグを生成する２層ハッシュ木適用手段を備え、
前記２層ハッシュ木適用手段は、複数のテストに共通に用いられるアイテムについて、１度の第１のハッシュ関数の適用処理により得られた出力値を、前記複数のテストに対応する認証タグの生成処理で共用する
ことを特徴とするデータ認証装置。
【請求項２】
改ざん検出の対象とされるメッセージに含まれるアイテムからなる部分系列であって、組み合わせグループテストに基づき生成された１つ以上の部分系列の各々に対して、ブロックスライス２層ハッシュ木構造を適用して、前記メッセージに対応する複数の検証用の認証タグであって前記テストの数に応じた複数の検証用の認証タグを生成する２層ハッシュ木適用手段と、
前記メッセージに予め対応づけられている複数の認証タグと、前記複数の検証用の認証タグとを比較して、前記メッセージに対する改ざんの有無および改ざんがあった場合にその範囲を特定ないし限定する認証タグ検証手段とを備え、
前記第２の２層ハッシュ木適用手段は、複数のテストに共通に用いられるアイテムについて、１度の第１のハッシュ関数の適用処理により得られた出力値を、前記複数のテストに対応する認証タグの生成処理で共用する
ことを特徴とするデータ認証装置。
【請求項３】
２層ハッシュ木適用手段は、
改ざん検出の対象とされるメッセージを、Ｍ＝（Ｍ［１］，．．．，Ｍ［ｍ］）、（ただしｍはアイテム数）とし、組み合わせグループテストの数をｓとした場合、ｓ個の初期化済みの状態変数Ｚ［１］，．．．，Ｚ［ｓ］を用意し、ｊ＝１，．．．，ｍについて、ｊ番目のアイテムＭ［ｊ］を第１のハッシュ関数Ｈ（）に適用し、中間ハッシュ値Ｈ（Ｍ［ｊ］）を得て、当該アイテムを使用するテストｉ（ただし、ｉ＝１，．．．，ｓ）がある場合に、状態変数Ｚ［ｉ］に前記中間ハッシュ値Ｈ（Ｍ［ｊ］）を連結する処理を、前記ｊの全てに対して行い、最終的に得られた状態変数Ｚ［１］，．．．，Ｚ［ｓ］の各々に対して第２のハッシュ関数Ｈ（）に適用して、ｓ個の認証タグまたはｓ個の検証用の認証タグを生成する
請求項１または請求項２に記載のデータ認証装置。
【請求項４】
２層ハッシュ木適用手段は、
改ざん検出の対象とされるメッセージを、Ｍ＝（Ｍ［１］，．．．，Ｍ［ｍ］）、（ただしｍはアイテム数）とし、組み合わせグループテストの数をｓとした場合、ｓ個の初期化済みの状態変数Ｚ［１］，．．．，Ｚ［ｓ］を用意し、ｊ＝１，．．．，ｍについて、ｊ番目のアイテムＭ［ｊ］を第１のハッシュ関数Ｈ（）に適用し、中間ハッシュ値Ｈ（Ｍ［ｊ］）を得て、当該アイテムを使用するテストｉ（ただし、ｉ＝１，．．．，ｓ）がある場合に、状態変数Ｚ［ｉ］に、前記中間ハッシュ値Ｈ（Ｍ［ｊ］）を第２のハッシュ関数の圧縮関数に適用して得られた結果を記憶させる処理を、所定の順番で前記ｊの全てに対して行い、ｓ個の認証タグまたはｓ個の検証用の認証タグを生成する
請求項１または請求項２に記載のデータ認証装置。
【請求項５】
改ざん検出の対象とされるメッセージについて、前記メッセージに含まれるアイテムに対する組み合わせグループテストに用いる１つ以上の部分系列であって、互いに重複を許す１つ以上のアイテムからなる１つ以上の部分系列を生成するグループテスト生成手段を備えた
請求項１から請求項４のうちのいずれか１項に記載のデータ認証装置。
【請求項６】
認証タグ生成装置と、認証タグ検証装置とを備え、
前記認証タグ生成装置は、
改ざん検出の対象とされるメッセージについて、前記メッセージに含まれるアイテムに対するグループテストに用いる１つ以上の部分系列であって、互いに重複を許す１つ以上のアイテムからなる１つ以上の部分系列を生成するグループテスト生成手段と、
前記部分系列の各々に対して、ブロックスライス２層ハッシュ木構造を適用して、前記メッセージに対応する複数の認証タグであって前記テストの数に応じた複数の認証タグを生成する２層ハッシュ木適用手段とを含み、
前記認証タグ検証装置は、
改ざん検出の対象とされるメッセージから、前記２層ハッシュ木生成適用手段と同様の方法を用いて、前記テストの数に応じた複数の検証用の認証タグを生成する第２の２層ハッシュ木適用手段と、
前記メッセージに予め対応づけられている複数の認証タグと、前記複数の前記検証用の認証タグとを比較して、前記メッセージに対する改ざんの有無および改ざんがあった場合にその範囲を特定ないし限定する認証タグ検証手段とを含み、
前記２層ハッシュ木適用手段は、複数のテストに共通に用いられるアイテムについて、１度の第１のハッシュ関数の適用処理により得られた出力値を、前記複数のテストに対応する認証タグの生成処理で共用する
ことを特徴とするデータ認証システム。
【請求項７】
情報処理装置が、
改ざん検出の対象とされるメッセージに含まれるアイテムからなる部分系列であって、組み合わせグループテストに基づき生成された１つ以上の部分系列の各々に対して、ブロックスライス２層ハッシュ木構造を適用して、前記メッセージに対応する複数の認証タグであって前記テストの数に応じた複数の認証タグを生成する過程で、複数のテストに共通に用いられるアイテムについて、１度の第１のハッシュ関数の適用処理により得られた出力値を、前記複数のテストに対応する認証タグの生成処理で共用する
ことを特徴とするデータ認証方法。
【請求項８】
情報処理装置が、
所定のタイミングで、改ざん検出の対象とされるメッセージに含まれるアイテムからなる部分系列であって、組み合わせグループテストに基づき生成された１つ以上の部分系列の各々に対して、ブロックスライス２層ハッシュ木構造を適用して、前記メッセージに対応する複数の認証タグであって前記テストの数に応じた複数の認証タグを生成し、
所定のタイミングで、前記メッセージから、前記複数の認証タグを生成した方法と同じ方法を用いて、前記テストの数に応じた複数の検証用の認証タグを生成し、
前記複数の認証タグと、前記複数の検証用の認証タグとを比較して、前記メッセージに対する改ざんの有無およびおよび改ざんがあった場合にその範囲を特定ないし限定し、
前記ブロックスライス２層ハッシュ木構造の適用に際して、複数のテストに共通に用いられるアイテムについて、１度の第１のハッシュ関数の適用処理により得られた出力値を、前記複数のテストに対応する認証タグの生成処理で共用する
ことを特徴とするデータ認証方法。
【請求項９】
コンピュータに、
改ざん検出の対象とされるメッセージに含まれるアイテムからなる部分系列であって、組み合わせグループテストに基づき生成された１つ以上の部分系列の各々に対して、ブロックスライス２層ハッシュ木構造を適用して、前記メッセージに対応する複数の認証タグであって前記テストの数に応じた複数の認証タグを生成する処理を実行させ、
複数のテストに共通に用いられるアイテムについて、１度の第１のハッシュ関数の適用処理により得られた出力値を、前記複数のテストに対応する認証タグを生成する処理で共用させる
ためのデータ認証プログラム。
【請求項１０】
コンピュータに、
改ざん検出の対象とされるメッセージに含まれるアイテムからなる部分系列であって、組み合わせグループテストに基づき生成された１つ以上の部分系列の各々に対して、ブロックスライス２層ハッシュ木構造を適用して、前記メッセージに対応する複数の認証タグであって前記テストの数に応じた複数の検証用の認証タグを生成する処理、および
前記メッセージに予め対応づけられている複数の前記認証タグと、前記第２の２層ハッシュ木適用手段により生成された複数の前記検証用の認証タグとを比較して、前記メッセージに対する改ざんの有無および改ざんがあった場合にその範囲を特定ないし限定する処理を実行させ、
複数のテストに共通に用いられるアイテムについて、１度の第１のハッシュ関数の適用処理により得られた出力値を、前記複数のテストに対応する認証タグを生成する処理で共用させる
ためのデータ認証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、認証タグを用いてデータの改ざんを検出するためのデータ認証システム、データ認証装置、データ認証方法およびデータ認証プログラムに関する。
【背景技術】
【０００２】
任意のメッセージの入力に対して固定長の短いハッシュ値を出力するハッシュ関数がある。ハッシュ関数の暗号学的な安全性としては、衝突困難性（Collision-resistance、CR）が挙げられる。これは、ハッシュ関数Ｈについて任意の異なる２つの入力ｘ，ｘ’に対して、Ｈ（ｘ）＝Ｈ（ｘ’）を見つける、すなわち出力の衝突を起こすものを見つけることが困難であることを指す。
【０００３】
保護する対象のデータＤについて衝突困難性を有するハッシュ関数Ｈのハッシュ値Ｔ＝Ｈ（Ｄ）を、データ認証用のタグである認証タグとして保持しておくことで、後にデータＤがデータＤ’に改ざんされた場合にＴ’＝Ｈ（Ｄ’）とＴを比較することで、安全に改ざんを検出することができる。例えば、ＳＨＡ−２などの一般的な暗号学的ハッシュ関数は、衝突困難性を有するものとみなされており、上記のような改ざんの検出用途等に用いられている。
【０００４】
ハッシュ関数を用いた改ざんの検出技術に関連して、例えば、非特許文献１〜３に記載の技術がある。
【０００５】
非特許文献１〜３には、組み合わせグループテスト（combinatorial group testing, CGT）と呼ばれる組み合わせ問題を利用した、メッセージの改ざん検出技術の一例が記載されている。
【０００６】
また、本発明に関連する技術として、非特許文献４には、符号理論を用いて、グループテストの適切なテスト数およびテスト毎のアイテムを決定する手法が記載されている。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】Michael T. Goodrich, Mikhail J. Atallah, Roberto Tamassia, "Indexing Information for Data Forensics.", Applied Cryptography and Network Security, Third International Conference, ACNS 2005, New York, NY, USA, June 7-10, 2005, p.206-221.
【非特許文献２】Giovanni Di Crescenzo, Shaoquan Jiang, Reihaneh Safavi-Naini, "Corruption-Localizing Hashing.", Computer Security - ESORICS 2009, 14th European Symposium on Research in Computer Security, Saint-malo, France, September 21-23, 2009. p.489-504.
【非特許文献３】Annalisa De Bonis, Giovanni Di Crescenzo, "Combinatorial Group Testing for Corruption Localizing Hashing.", COCOON 2011, p.579-591.
【非特許文献４】Ely Porat, AＭir Rothschild, "Explicit Non-Adaptive Combinatorial Group Testing Schemes.", ICALP 2008.
【発明の概要】
【発明が解決しようとする課題】
【０００８】
一般に、メッセージの全体に対して１回のハッシュ関数を適用して１つの認証タグを生成する方法（以下、「ｏｎｅ−ｔａｇ法」という。）の場合、メッセージ中の改ざん位置の情報を得るのは不可能である。これは、改ざんが行われた場合、ハッシュ値の値は正しい値とは全く異なるランダムな値となるからである。
【０００９】
この問題に対して、例えば、メッセージの全体に１回のハッシュ関数を適用するのではなく、メッセージを任意の部分に分割し、それらの部分ごとにハッシュ関数を適用する方法がある。この方法によれば、部分ごとのチェックが可能となる。すなわち、メッセージに対する改ざん位置を、分割後の部分の範囲内に特定することが可能になる。
【００１０】
例えばメッセージＭがｍ個のアイテムＭ［１］，．．．，Ｍ［ｍ］からなる場合に、各アイテムに対してハッシュ関数を適用して、認証タグＴ［１］＝Ｈ（Ｍ［１］），．．．，Ｔ［ｍ］＝Ｈ（Ｍ［ｍ］）を求める例が挙げられる。なお、求めたｍ個の認証タグ（Ｔ［１］，．．．，Ｔ［ｍ]）は、改ざんの危険のない場所に保持されればよい。以下、このような改ざんを検出したい最小単位であるアイテムの各々に対してハッシュ関数を適用して認証タグを生成する方法を「ｅａｃｈ−ｔａｇ法」という場合がある。
【００１１】
メッセージの分割例としては、ハードディスク上のデータに対し、ファイルごとやディスクセクタごとに分けることが挙げられる。しかし、ｅａｃｈ−ｔａｇ法はｍ個のアイテムに対してｍ個のタグが生成されるため、保存すべきデータ量の増加が大きいという問題がある。
【００１２】
そこで、非特許文献１や非特許文献２に記載されているように、ＣＧＴを利用して、メッセージを、互いに重なりを許す複数の部分系列に分解し、この部分系列ごとにハッシュ関数を適用するというアプローチがある。
【００１３】
例えば、メッセージＭ＝（Ｍ［１］，．．．，Ｍ［７］）のように、メッセージが７個のアイテムからなるとき、該メッセージを、
Ｓ［１］＝（Ｍ［１］，Ｍ［２］，Ｍ［３］，Ｍ［４］），
Ｓ［２］＝（Ｍ［１］，Ｍ［２］，Ｍ［５］，Ｍ［６］），
Ｓ［３］＝（Ｍ［１］，Ｍ［３］，Ｍ［５］，Ｍ［７］）
という３つの部分系列Ｓ［１］〜Ｓ［３］に分解し、それぞれに対してハッシュ関数を適用して、３つの認証タグＴ［１］，．．．，Ｔ［３］を計算しとする。すなわち、
Ｔ［１］＝Ｈ（Ｓ［１］），
Ｔ［２］＝Ｈ（Ｓ［２］），
Ｔ［３］＝Ｈ（Ｓ［３］）
を計算したとする。
【００１４】
この場合、ｅａｃｈ法において７つ必要であった認証タグの数を、３つに減らすことが可能となる。
【００１５】
なお、改ざん位置は、各（Ｔ［ｉ］，Ｓ［ｉ］）に対する検証結果から、ＣＧＴ理論に基づき特定ないし限定される。以下、部分系列を例示する際に、上記の部分系列Ｓ［１］〜Ｓ［３］のことを「第１の分解例」という場合がある。
【００１６】
ＣＧＴの性質をより一般に言えば、部分系列の取り方を工夫することにより、改ざんされたアイテム数が所与のしきい値以下のときには、改ざんされたアイテムまで特定することが可能となる。
【００１７】
どのような部分系列に分解し、またその結果どのような改ざんアイテムの特定が可能になるかは、非特許文献１に記載されているように、組み合わせ問題（ＣＧＴ）と密接に関連する。
【００１８】
例えば、非特許文献１には、特定の分布を持つ乱数を用いてＣＧＴ行列を生成する方法が記載されている。また、非特許文献２には、巡回行列を用いてＣＧＴ行列を生成する方法が記載されている。また、非特許文献３には、より明示的にＣＧＴとハッシュ関数を用いた方法が開示されている。
【００１９】
ここで、ＣＧＴ行列とは、グループテストに用いるテスト毎の部分系列（アイテムの組合せ）を示す２値行列である。例えば、ｒ個のアイテムおよびｓ個のテストからなるＣＧＴでは、ｓ行ｒ列の２値行列であるＣＧＴ行列Ｗを生成して、生成したＣＧＴ行列Ｗに従ってテストを行う。ＣＧＴ行列Ｗは、ｉ行のｊ列目の要素が１であれば、ｊ番目のテストでｉ番目のアイテムをテストに含める、といったことが示されればよい。以下、非特許文献１〜３に記載されているような、ＣＧＴを利用して各グループテスト毎にハッシュ関数を適用する方法を「単純ＣＧＴ−ｔａｇ法」という場合がある。
【００２０】
ところで、データベースシステムに記憶されているデータ群に対して、認証タグを用いて改ざんの検出を行うことを考えた場合、現実的なシステムの制約などから、不正者が一度に大量のアイテム（ファイルやディスクセクタ）を改ざんすることは考えにくい。このような場合に、ＣＧＴを利用してテスト毎（より具体的には、部分系列毎）に認証タグを生成する単純ＣＧＴ−ｔａｇ法は、認証タグの総数を抑えつつ、現実的に起こりうる改ざんに対し、その場所を特定可能なデータベースシステムを構築することができるため、好ましい。なお、各アイテムにハッシュ関数を適用した場合と同様、ＣＧＴの各テストにハッシュ関数を適用した場合であっても、任意の改ざんに対して、改ざんがあったという事実を検出可能という性質は変わらない。
【００２１】
なお、非特許文献１には、認証タグとして、鍵付きのハッシュ関数の出力値であるメッセージ認証コード（Message authentication code, MAC）を用いる例が記載されているのに対して、非特許文献２には、鍵のないハッシュ関数の出力値であるハッシュ値を用いる例が記載されている。鍵のないハッシュ関数の場合、タグ計算を誰でも行うことができるため、求めたタグ（ハッシュ値）をメッセージと別の安全な場所に保存する必要が一般に生じるが、得られる効果（改ざん検出効果）としては鍵付きであっても鍵なしであっても基本的に変わらない。
【００２２】
このように、非特許文献１〜３に記載されているような単純ＣＧＴ−ｔａｇ法を用いれば、ｅａｃｈ法と比べて認証タグの総数を抑えつつ、改ざんの有無に加えて改ざん位置の特定ないし限定が可能である。しかし、単純にＣＧＴを利用してテスト毎に認証タグを生成する方法（単純ＣＧＴ−ｔａｇ法）は、ｏｎｅ−ｔａｇ法に比べて計算量が大幅に増加するという問題がある。
【００２３】
一般的なハッシュ関数は入力長に対して線形オーダーの計算量を持つ。このため、おおまかに言えば、ｓ個の認証タグを計算するために、仮にｍ個のアイテムからなる入力に対するハッシュ関数の計算をｓ回行うとすると、単純に計算量をｓ倍する効果を持つ。
【００２４】
より正確に言えば、どれだけ計算量が増加するかはどのようなＣＧＴを実行するかに依存する。例えば、上記の第１の分解例のように、アイテム数がｍのメッセージＭに対して、任意の１アイテムの改ざんを特定可能にするＣＧＴを適用した場合、必要なテストの数ｓは、ｌｏｇ２（ｍ）となることが知られている。また、ほぼすべてのテストにおいてｒ＝ｍ／２個のアイテムが用いられる。
【００２５】
従って、ハッシュ関数の計算量が、入力されるアイテム数に比例すると考えると、単純ＣＧＴ−ｔａｇ法は、改ざん有無のみを検出するために認証タグを１つ生成する場合（ｏｎｅ−ｔａｇ法）に比べて、約（１／２）ｌｏｇ２（ｍ）倍の計算量が必要となる。データベースなどのアプリケーションでは、ｍは極めて大きいことが予想されるため、たとえ（１／２）ｌｏｇ２（ｍ）倍であっても、計算量の増加は著しいものになる。
【００２６】
さらに、一般にｄ個のアイテムの改ざんを同定しようとする場合、ＣＧＴによるテストの数ｓは、Ｏ（ｄ２ｌｏｇ２（ｍ））となることが知られている。したがって、仮に各テストの部分系列がｒ＝ｍ／２個程度のアイテムを含んでいるとすると、ｏｎｅ−ｔａｇ法に比べて、ｄ個のアイテムの改ざんを同定するために、約（ｄ２／２）ｌｏｇ２（ｍ）倍の計算量が必要となる。ここで、Ｏ（）はオーダ記法を表している。
【００２７】
そこで、本発明は、改ざん位置の特定ないし限定が可能なデータの認証方式を効率よく構築することを目的とする。
【００２８】
なお、改ざん位置の範囲を特定することと、改ざん位置の範囲を限定することの違いは、基本的に事前に想定する攻撃のモデルと、個々のテスト結果の一致／不一致の情報をどう解釈するかに依存する。したがって、改善位置の範囲の特定と限定の違いは、個々のテストにおける認証タグの計算方法とは切り離して考えることが可能であり、本発明では、改ざん位置の範囲の特定と限定とを特に区別せず取り扱うものとする。また、非特許文献２に記載されているように、ＣＧＴを用いた場合、同時に改ざんされたアイテム数が多い場合には改ざん位置の特定に至らないことが考えられるが、その場合でも改ざんされた範囲を限定することは一般に可能である。
【課題を解決するための手段】
【００２９】
本発明によるデータ認証装置は、改ざん検出の対象とされるメッセージに含まれるアイテムからなる部分系列であって、組み合わせグループテストに基づき生成された１つ以上の部分系列の各々に対して、ブロックスライス２層ハッシュ木構造を適用して、メッセージに対応する複数の認証タグであってテストの数に応じた複数の認証タグを生成する２層ハッシュ木適用手段を備え、２層ハッシュ木適用手段は、複数のテストに共通に用いられるアイテムについて、１度の第１のハッシュ関数の適用処理により得られた出力値を、複数のテストに対応する認証タグの生成処理で共用することを特徴とする。
【００３０】
本発明によるデータ認証装置は、改ざん検出の対象とされるメッセージに含まれるアイテムからなる部分系列であって、組み合わせグループテストに基づき生成された１つ以上の部分系列の各々に対して、ブロックスライス２層ハッシュ木構造を適用して、メッセージに対応する複数の検証用の認証タグであってテストの数に応じた複数の検証用の認証タグを生成する２層ハッシュ木適用手段と、メッセージに予め対応づけられている複数の認証タグと、複数の検証用の認証タグとを比較して、メッセージに対する改ざんの有無および改ざんがあった場合にその範囲を特定ないし限定する認証タグ検証手段とを備え、第２の２層ハッシュ木適用手段は、複数のテストに共通に用いられるアイテムについて、１度の第１のハッシュ関数の適用処理により得られた出力値を、複数のテストに対応する認証タグの生成処理で共用することを特徴とする。
【００３１】
また、本発明によるデータ認証システムは、認証タグ生成装置と、認証タグ検証装置とを備え、認証タグ生成装置は、改ざん検出の対象とされるメッセージについて、メッセージに含まれるアイテムに対するグループテストに用いる１つ以上の部分系列であって、互いに重複を許す１つ以上のアイテムからなる１つ以上の部分系列を生成するグループテスト生成手段と、部分系列の各々に対して、ブロックスライス２層ハッシュ木構造を適用して、メッセージに対応する複数の認証タグであってテストの数に応じた複数の認証タグを生成する２層ハッシュ木適用手段とを含み、認証タグ検証装置は、改ざん検出の対象とされるメッセージから、２層ハッシュ木生成適用手段と同様の方法を用いて、テストの数に応じた複数の検証用の認証タグを生成する第２の２層ハッシュ木適用手段と、メッセージに予め対応づけられている複数の認証タグと、複数の検証用の認証タグとを比較して、メッセージに対する改ざんの有無および改ざんがあった場合にその範囲を特定ないし限定する認証タグ検証手段とを含み、２層ハッシュ木適用手段は、複数のテストに共通に用いられるアイテムについて、１度の第１のハッシュ関数の適用処理により得られた出力値を、複数のテストに対応する認証タグの生成処理で共用することを特徴とする。
【００３２】
また、本発明によるデータ認証方法は、情報処理装置が、改ざん検出の対象とされるメッセージに含まれるアイテムからなる部分系列であって、組み合わせグループテストに基づき生成された１つ以上の部分系列の各々に対して、ブロックスライス２層ハッシュ木構造を適用して、メッセージに対応する複数の認証タグであってテストの数に応じた複数の認証タグを生成する過程で、複数のテストに共通に用いられるアイテムについて、１度の第１のハッシュ関数の適用処理により得られた出力値を、複数のテストに対応する認証タグの生成処理で共用することを特徴とする。
【００３３】
また、本発明によるデータ認証方法は、情報処理装置が、所定のタイミングで、改ざん検出の対象とされるメッセージに含まれるアイテムからなる部分系列であって、組み合わせグループテストに基づき生成された１つ以上の部分系列の各々に対して、ブロックスライス２層ハッシュ木構造を適用して、メッセージに対応する複数の認証タグであってテストの数に応じた複数の認証タグを生成し、所定のタイミングで、メッセージから、複数の認証タグを生成した方法と同じ方法を用いて、テストの数に応じた複数の検証用の認証タグを生成し、複数の認証タグと、複数の検証用の認証タグとを比較して、メッセージに対する改ざんの有無およびおよび改ざんがあった場合にその範囲を特定ないし限定し、ブロックスライス２層ハッシュ木構造の適用に際して、複数のテストに共通に用いられるアイテムについて、１度の第１のハッシュ関数の適用処理により得られた出力値を、複数のテストに対応する認証タグの生成処理で共用することを特徴とする。
【００３４】
また、本発明によるデータ認証プログラムは、コンピュータに、改ざん検出の対象とされるメッセージに含まれるアイテムからなる部分系列であって、組み合わせグループテストに基づき生成された１つ以上の部分系列の各々に対して、ブロックスライス２層ハッシュ木構造を適用して、メッセージに対応する複数の認証タグであってテストの数に応じた複数の認証タグを生成する処理を実行させ、複数のテストに共通に用いられるアイテムについて、１度の第１のハッシュ関数の適用処理により得られた出力値を、複数のテストに対応する認証タグを生成する処理で共用させることを特徴とする。
【００３５】
また、本発明によるデータ認証プログラムは、コンピュータに、改ざん検出の対象とされるメッセージに含まれるアイテムからなる部分系列であって、組み合わせグループテストに基づき生成された１つ以上の部分系列の各々に対して、ブロックスライス２層ハッシュ木構造を適用して、メッセージに対応する複数の認証タグであってテストの数に応じた複数の検証用の認証タグを生成する処理、およびメッセージに予め対応づけられている複数の認証タグと、第２の２層ハッシュ木適用手段により生成された複数の検証用の認証タグとを比較して、メッセージに対する改ざんの有無および改ざんがあった場合にその範囲を特定ないし限定する処理を実行させ、複数のテストに共通に用いられるアイテムについて、１度の第１のハッシュ関数の適用処理により得られた出力値を、複数のテストに対応する認証タグを生成する処理で共用させることを特徴とする。
【発明の効果】
【００３６】
本発明によれば、改ざん位置の特定ないし限定が可能なデータの認証方式を効率よく構築することができる。
【図面の簡単な説明】
【００３７】
【図１】第１の実施形態の認証タグ生成装置の構成例を示すブロック図である。
【図２】２層ハッシュ木構造の概念図である。
【図３】２層ハッシュ木構造による、ある１つのテストに対応した認証タグ（ハッシュ値）の計算処理の例を示す説明図である。
【図４】第１の分解例に対する愚直な方法の適用例を示す説明図である。
【図５】第１の分解例に対する本実施形態の認証タグ生成方法の適用例を示す説明図である。
【図６】第１の分解例に対する本実施形態の認証タグ生成方法の適用例（別例）を示す説明図である。
【図７】第１の実施形態の認証タグ生成装置の動作の一例を示すフローチャートである。
【図８】第２の実施形態の認証タグ検証装置の構成例を示すブロック図である。
【図９】第２の実施形態の認証タグ検証装置の動作の一例を示すフローチャートである。
【図１０】第３の実施形態のデータ認証システムの構成例を示すシステム構成図である。
【図１１】本実施形態のデータ認証システムの適用例を示す説明図である。
【図１２】本発明によるデータ認証装置の他の構成例を示すブロック図である。
【図１３】本発明によるデータ認証装置の他の構成例を示すブロック図である。
【図１４】本発明によるデータ認証システムの概要を示すブロック図である。
【発明を実施するための形態】
【００３８】
以下、本発明の実施形態を図面を参照して説明する。以下、特に断りのない限り、１ブロックの長さをｎビットとする。
【００３９】
実施形態１．
図１は、第１の実施形態の認証タグ生成装置の構成例を示すブロック図である。図１に示す認証タグ生成装置１０は、メッセージ入力手段１０１と、グループテスト生成手段１０２と、２層ハッシュ木適用手段１０３と、認証タグ出力手段１０４とを備える。
【００４０】
認証タグ生成装置１０は、例えば、ＣＰＵ（Central Processing Unit）と各種記憶装置（メモリやディスク等）と各種入出力装置（マウスやキーボード等）とを備えたコンピュータにより実現可能である。また、認証タグ生成装置の各手段は、プログラムを記憶装置に格納しておき、このプログラムをＣＰＵ上で動作させることにより実現することができる。
【００４１】
メッセージ入力手段１０１は、改ざんの検出対象とされるメッセージＭを入力する。ここでは、メッセージＭがｍ個のアイテムより構成されている、すなわちＭ＝（Ｍ［１］，．．．，Ｍ［ｍ］）とする。それぞれのアイテムＭ［ｊ］（ｊ＝１，．．．，ｍ）は、長さが異なっていてもよいし、値が同じものがあってもよい。アイテムの例としては、例えば、ハードディスクの１セクタの内容であったり、データベースの１エントリあるいは文字情報の１キャラクタであってもよい。メッセージ入力手段１０１は、例えば、キーボードなどの文字入力装置により実現される。
【００４２】
グループテスト生成手段１０２は、改ざん位置の特定ないし限定のための組み合わせグループテストにおけるテスト毎のアイテムの組み合わせを決定し、該組み合わせを示すグループテスト行列Ｗを生成する。具体的には、入力されたメッセージＭのアイテム数ｍ、および特定可能な改ざんアイテム数の最大値ｄに応じて、ｓ行ｍ列の２値行列を生成する。ここで、ｓはテストの数（これは生成する認証タグの数でもある）を表している。以下、グループテストにおけるテスト毎の、メッセージのアイテムの組み合わせを、単に部分系列という場合がある。
【００４３】
例えば、上記の第１の分解例ではメッセージＭ＝（Ｍ［１］，．．．，Ｍ［７］）を、
Ｓ［１］＝（Ｍ［１］，Ｍ［２］，Ｍ［３］，Ｍ［４］）
Ｓ［２］＝（Ｍ［１］，Ｍ［２］，Ｍ［５］，Ｍ［６］）
Ｓ［３］＝（Ｍ［１］，Ｍ［３］，Ｍ［６］，Ｍ［７］）
という３つの部分系列Ｓ［１］〜Ｓ［３］に分解・再構築しているが、これは、グループテスト生成手段１０２が以下の式（１）に示すようなグループテスト行列Ｗを生成することと同意である。
【００４４】
【数１】
2017005409.tif 000003
【００４５】
式（１）に示されるグループテスト行列Ｗは、第ｉ行の第ｊ列の値が１であれば、ｉ番目のテストにアイテムＭ［ｊ］を用いることを表し、値が０であればｉ番目のテストにアイテムＭ［ｊ］を用いないことを表している。例えば、式（１）のグループテスト行列Ｗの第１行の行ベクトルｒＷ１は、（１，１，１，１，０，０，０）であるが、これは、第１のテストに、アイテムＭ［１］，Ｍ［２］，Ｍ［３］，Ｍ［４］という計４つのアイテムが用いられることを表している。また、例えば、式（１）のグループテスト行列Ｗの第２行の行ベクトルｒＷ２は、（１，１，０，０，１，１，０）であるが、これは、第２のテストに、アイテムＭ［１］，Ｍ［２］，Ｍ［５］，Ｍ［６］という計４つのアイテムが用いられることを表している。このように、グループテスト行列Ｗの役割は、各要素の値により、各テストに対応するタグ計算においてメッセージ中のどのアイテムを使用するかを示すことにある。
【００４６】
グループテスト行列の生成方法、すなわちグループテストに用いる部分系列の決定方法としては、任意の既存の手法が利用可能である。グループテスト生成手段１０２は、例えば、非特許文献１に記載されている手法を利用してグループテスト行列Ｗを生成してもよい。なお、非特許文献１には、特定の分布を持つ乱数を用いてグループテスト行列を生成する手法が記載されている。また、グループテスト生成手段１０２は、例えば、非特許文献２に記載されている手法を利用してグループテスト行列Ｗを生成してもよい。なお、非特許文献２には、部分系列の巡回を用いてグループテスト行列を生成する手法が記載されている。また、グループテスト生成手段１０２は、非特許文献４に記載されている手法を利用してグループテスト行列Ｗを生成してもよい。なお、非特許文献４には、テストの数ｓが、Ｏ（ｄ２ｌｏｇ２（ｍ））を達成するように、符号理論を用いてグループテスト行列を生成する手法が記載されている。
【００４７】
２層ハッシュ木適用手段１０３は、改ざん検出の対象とされるメッセージＭに対して、グループテスト生成手段１０２により決定されたグループテストの部分系列の各々に対して２層ハッシュ木構造を適用してｓ個の認証タグを生成する。認証タグの生成には、可変調入力・固定長出力の２種類のハッシュ関数を用いる。すなわち、テスト毎に、当該テストに用いるとされた部分系列（アイテムの組合せ）に対して、２種類のハッシュ関数Ｈ（）とＨ’（）を組み合わせた２層ハッシュ木構造を適用して、ｓ個の認証タグを生成する。
【００４８】
さらに、本実施形態の２層ハッシュ木適用手段１０３は、各テストの部分系列に２層ハッシュ木構造を適用する際に、複数のテストで用いられるアイテムについて、当該アイテム（仮にＭ［ｉ］とする）を第１のハッシュ関数Ｈ（）に与えた出力ｚ［ｊ］＝Ｈ（Ｍ［ｊ］）を、異なるテスト間で共有する。２層ハッシュ木適用手段１０３は、例えば、あるテストに対応する認証タグの計算処理で求めた出力ｚ［ｊ］を、他のテストに対応する認証タグの計算処理でも使用可能にしたり、最初に各アイテムについて第１のハッシュ関数Ｈ（）に与えておき、その出力を任意のテストに対応する認証タグの計算処理で使用可能にする等により、テスト間での共有を行う。
【００４９】
図２は、２層ハッシュ木構造の概念図である。図２に示すように、２層ハッシュ木構造は、ノードにハッシュ値を持つ木構造であって、かつノードの階層が２層の木構造である。上位ノードのハッシュ値（図の例でいう“Ｔｏｐ  ｈａｓｈ”）は、下位ノードのハッシュ値（図の例でいう“ｈａｓｈ１＿１”〜“ｈａｓｈ１＿５”）を結合した結果に対してハッシュ関数を適用した結果得られるハッシュ値である。本例では、２層のハッシュ木構造を用いるので、図中の“Ｔｏｐ  ｈａｓｈ”が、最終的に求めるハッシュ値（認証タグ）となる。また、本例では、部分系列の各々に対して２層ハッシュ木構造を適用するので、１つの２層ハッシュ木構造としては、部分系列に含まれるアイテムの数だけ下位ノードを有していればよい。なお、部分系列に含まれるアイテムをそれぞれ第１のハッシュ関数に与えて得られた出力の各々が、下位ノードの各々に相当する。以下、ある部分系列に対して１回のハッシュ関数を適用して認証タグを生成する単純ＣＧＴ−ｔａｇ法との比較に際し、本例のような、当該部分系列を任意のブロック（ここでは、アイテム単位）に分割して２段階にハッシュ関数を適用して最終的に１つの認証タグを生成する手法を、ブロックスライス２層ハッシュ木構造という場合がある。
【００５０】
図３は、Ｈ（）とＨ’（）とを用いた２層ハッシュ木構造による、ある１つのテストに対応した認証タグの計算処理の例を模式的に示す説明図である。なお、図３において処理は上から下へと進む。今、第１のテストに５個のアイテム（仮に、Ｍ［１］〜Ｍ［５］とする）が用いられるとする。この場合、第１のテストに対応する認証タグの生成処理は、概念的に次のように表される。まず当該テストの部分系列の各アイテムに対して第１のハッシュ関数Ｈ（）を適用する。そして、得られたハッシュ値を全て結合したものを、第２のハッシュ関数Ｈ’（）の入力として得られたハッシュ値を、当該テストに対応する認証タグとする。なお、図３の例を簡易な式で表すと次の通りとなる。なお、“｜｜”はデータの連結処理を表している。
【００５１】
Ｔ［１］＝Ｈ’（Ｈ（Ｍ［１］）｜｜Ｈ（Ｍ［２］）｜｜・・・｜｜Ｈ（Ｍ［５］）
・・・（２）
【００５２】
ここで、Ｈ（）およびＨ’（）には、ＡＥＳなど標準的なブロック暗号に用いられる関数やＳＨＡ−２などのハッシュ関数を用いてもよい。また、Ｈ（）とＨ’（）とは単一の関数に異なる定数（０と１など）を入力アイテムに含む（連結する）よう構成されたものであってもよい。
【００５３】
２層ハッシュ木適用手段１０３は、上記の式（２）の計算を、全てのテストの部分系列に対して行う。ただし、後述するように、本実施形態では異なるテスト間で第１のハッシュ関数の出力を共有する。これにより、計算量の増加を抑制する。
【００５４】
具体的には、アイテムＭ［ｊ］を使用するテストが２つあった場合、この２つのテストでは、共に第１のハッシュ関数の出力、すなわちＨ（Ｍ［ｊ］）を用いている。本願発明は、このことに着目して、各テストに対応する認証タグの計算を、テスト毎に個別に２種類のハッシュ関数を適用して行うのではなく、途中の計算結果をテスト間で共有しつつ並列に行うようにする。
【００５５】
まず、本実施形態の認証タグ生成方法の比較例として、単純に、テスト毎にブロックスライス２層ハッシュ木構造を適用する方法について説明する。以下、当該方法を「愚直な方法」という場合がある。
【００５６】
（愚直な方法）
この方法では、テストのインデックスｉ＝１，．．．，ｓ、アイテムのインデックスｊ＝１，．．．，ｍとして、各ｉについて、グループテスト行列Ｗのｉ行目で値が１である列ｊを見つけ、見つかった全てのｊについて、それぞれ対応するアイテムＭ［ｊ］を第１のハッシュ関数Ｈ（）に与えた出力を計算する。そして、得られた全ての出力を連結した上で、第２のハッシュ関数Ｈ’（）に入力する。そのようにして得られた出力を、当該ｉ番目のテストに対応する認証タグＴ［ｉ］とする。これを全てのｉについて行い、認証タグリストＴＬ＝（Ｔ［１］，．．．，Ｔ［ｓ］）を得る。
【００５７】
図４は、第１の分解例に対する愚直な方法の適用例を示す説明図である。図４に示す内容を、簡易な式で表すと次の通りとなる。
【００５８】
・ｉ＝１
［第１のハッシュ関数適用処理］
Ｚ［ｉ］＝Ｈ（Ｍ［１］）｜｜Ｈ（Ｍ［２］）｜｜Ｈ（Ｍ［３］）｜｜Ｈ（Ｍ［４］）
［第２のハッシュ関数適用処理］
Ｔ［ｉ］＝Ｈ’（Ｚ［ｉ］）
・ｉ＝２
［第の１ハッシュ関数適用処理］
Ｚ［ｉ］＝Ｈ（Ｍ［１］）｜｜Ｈ（Ｍ［２］）｜｜Ｈ（Ｍ［５］）｜｜Ｈ（Ｍ［６］）
［第２のハッシュ関数適用処理］
Ｔ［ｉ］＝Ｈ’（Ｚ［ｉ］）
・ｉ＝３
［第１のハッシュ関数適用処理］
Ｚ［ｉ］＝Ｈ（Ｍ［１］）｜｜Ｈ（Ｍ［３］）｜｜Ｈ（Ｍ［５］）｜｜Ｈ（Ｍ［７］）
［第２のハッシュ関数適用処理］
Ｔ［ｉ］＝Ｈ’（Ｚ［ｉ］）
【００５９】
これにより、ＴＬ＝（Ｔ［１］，Ｔ［２］，Ｔ［３］）を得る。
【００６０】
次に、本実施形態の認証タグ生成方法について説明する。２層ハッシュ木適用手段１０３は、例えば次のようにして、愚直な方法と同様の認証タグリストＴＬを生成する。まず、２層ハッシュ木適用手段１０３は、ｓ個の状態変数Ｚ［１］，．．．Ｚ［ｓ］を用意する。なお、各状態変数はゼロ値で初期化されているものとする。そして、２層ハッシュ木適用手段１０３は、アイテムのインデックスｊを１からｍまで順に示しつつ、Ｈ（Ｍ［ｊ］）の計算を１回ずつ行う。ここでは、仮に、その出力がｂｕｆに一時的に保持されるとする。なお、ｂｕｆ＝Ｈ（ｍ［ｊ］）である。
【００６１】
そして、各ｊにおいてＨ（Ｍ［ｊ］）を計算した際に、その出力を、当該アイテムＭ［ｊ］を用いるテストに対応する状態変数Ｚ［ｉ］に連結させる。すなわち、グループ行列Ｗにおいてｉ行ｊ列の成分が１の値である全てのｉについて、状態変数Ｚ［ｉ］＜＝Ｚ［ｉ］｜｜ｂｕｆを計算する。なお、“＜＝”は右辺と左辺とで同じ変数が用いられる場合に、右辺の計算を行った後にその結果を左辺の変数に代入することを明示的に表す代入記号として用いているが、一般に“＝”と同様である。このような処理を、ｊ＝１，．．．，ｍの全てに対して行う。これにより、各テストの部分系列に含まれる各アイテムに対して第１のハッシュ関数を適用して得られた出力の連結結果が、テスト毎に、状態変数Ｚ［ｉ］に保持される。そして、そのようにして得られた状態変数Ｚ［ｉ］の各々に対してＨ’（）を適用して、各テストに応じた認証タグを得る。ここでは、Ｔ［ｉ］＝Ｈ’（Ｚ［ｉ］）を計算すればよい。この処理（第２のハッシュ関数の適用処理）を、すべてのｉについて行えば、認証グリストＴＬ＝（Ｔ［１］，．．．，Ｔ［ｓ］）を得ることができる。
【００６２】
図５および図６は、第１の分解例に対する本実施形態の認証タグ生成方法の適用例を示す説明図である。本方法の特徴は、ＣＧＴを利用しつつ、テストごとに２層ハッシュ木構造を適用して認証タグを生成する過程で、あるアイテムに対して第１のハッシュ関数を適用して得られた結果を、同じアイテムを用いる他のテストで利用することにある。なお、図５の例では、各テストに応じた認証タグの生成処理の中で、必要なアイテムに対して第１のハッシュ関数を適用しているのに対して、図６の例では、最初に全てのアイテムに対して第１のハッシュ関数を適用している点が異なるが、これらはいずれであってもよい。
【００６３】
なお、図６に示す内容を、簡易な式で表すと次の通りとなる。
【００６４】
（本実施形態の認証タグ生成方法）
［初期化処理］
Ｚ［１］＝０
Ｚ［２］＝０
Ｚ［３］＝０
［第１のハッシュ関数適用処理］
・ｊ＝１
ｂｕｆ＝Ｈ（ｍ［ｊ］）
Ｚ［１］＜＝Ｚ［１］｜｜ｂｕｆ
Ｚ［２］＜＝Ｚ［２］｜｜ｂｕｆ
Ｚ［３］＜＝Ｚ［３］｜｜ｂｕｆ
・ｊ＝２
ｂｕｆ＝Ｈ（ｍ［ｊ］）
Ｚ［１］＜＝Ｚ［１］｜｜ｂｕｆ
Ｚ［２］＜＝Ｚ［２］｜｜ｂｕｆ
・ｊ＝３
ｂｕｆ＝Ｈ（ｍ［ｊ］）
Ｚ［１］＜＝Ｚ［１］｜｜ｂｕｆ
Ｚ［３］＜＝Ｚ［３］｜｜ｂｕｆ
・ｊ＝４
ｂｕｆ＝Ｈ（ｍ［ｊ］）
Ｚ［１］＜＝Ｚ［１］｜｜ｂｕｆ
・ｊ＝５
ｂｕｆ＝Ｈ（ｍ［ｊ］）
Ｚ［２］＜＝Ｚ［２］｜｜ｂｕｆ
Ｚ［３］＜＝Ｚ［３］｜｜ｂｕｆ
・ｊ＝６
ｂｕｆ＝Ｈ（ｍ［ｊ］）
Ｚ［２］＜＝Ｚ［２］｜｜ｂｕｆ
・ｊ＝７
ｂｕｆ＝Ｈ（ｍ［ｊ］）
Ｚ［３］＜＝Ｚ［３］｜｜ｂｕｆ
［第２のハッシュ関数適用処理］
Ｔ［１］＝Ｈ’（Ｚ［１］）
Ｔ［２］＝Ｈ’（Ｚ［２］）
Ｔ［３］＝Ｈ’（Ｚ［３］）
【００６５】
これにより、ＴＬ＝（Ｔ［１］，Ｔ［２］，Ｔ［３］）を得る。
【００６６】
愚直な方法では、図４に示すように、認証タグリストＴＬを得るための第１のハッシュ関数Ｈ（）の呼び出し回数が約アイテム数ｍ×テスト数ｓのｍ・ｓ回必要となる（図中の破線内を参照）。これに対して、本実施形態の認証タグ生成方法は、図５および図６に示すように、認証タグリストＴＬを得るための第１のハッシュ関数Ｈ（）の呼び出し回数がアイテム数ｍと同じ７回で済む（図中の破線内を参照）。
【００６７】
なお、仮に単純ＣＧＴ−ｔａｇ法を用いた場合、すなわち部分系列に対してハッシュ値を計算する方法の場合、ＳＨＡ−２などの一般的なハッシュ関数では、語頭が同じ部分を除けば計算を共有できないため、全体の計算量が大きくなる。グループテストにおける各テストの部分系列における語頭の一致する部分は大きいとは限らず、従って大部分は共有不可能であると考えられる。
【００６８】
なお、ブロックスライス２層ハッシュ木構造を利用して認証タグを生成する場合、Ｈ’（）の計算回数は計算方法によらず、ｓ回である。各テストにおけるＨ’（）の入力長は、Ｈ’（）を適用する直前の状態変数Ｚ［ｉ］の長さ、すなわち当該テストの部分系列に対する第１のハッシュ関数の適用による各出力値の連結後の長さとなるが、これはグループテスト行列Ｗの列重みとＨ（）の出力長の積と等しい。列重みの最大値はｍであるので、ｉ個の状態変数全体の長さはオーダ記法を用いるとＯ（ｍ・ｓ）となる。
【００６９】
しかし、Ｈ’（）は一般的なハッシュ関数であれば、圧縮関数（compression function）と呼ばれる固定長入出力の関数を繰り返して処理を行うことになり、その場合、Ｈ’（)の入力が全て定まってからＨ’（）を適用するのではなく、入力すべきデータ（本例でいえば、Ｚ［ｉ］）をブロックごと（例えば、１回のＨ（）の出力値ごと）にとりこみ、Ｈ’（）の圧縮関数を適用することが可能である。このとき、圧縮関数の出力値（たとえば、２５６ビットの定数長）を保持しておけば、１つのテストに対応する計算が可能となる。全体の実行に関しては、ｓ個の圧縮関数の出力値を保持しておけばよく、結果として本実施形態のタグ計算処理に必要なメモリ量はＯ（ｓ）とすることができる。
【００７０】
以上をまとめると、愚直な方法ではＨ（）の呼び出し回数がＯ（ｍｓ）、Ｈ’（）の呼び出し回数がｓ回、必要なメモリ量がＯ（ｍ・ｓ）となるところ、本実施形態の認証タグ生成方法によれば、Ｈ（）の呼び出し回数をｍ回、Ｈ’（）の呼び出し回数をｓ回、必要なメモリ量をＯ（ｓ）とすることができる。例えば、データのアイテムの長さｎがＨ（）の出力長よりも大幅に長い場合、愚直な方法ではＨ（）の計算量が支配的になるが、本実施形態の認証タグ生成方法によれば、この部分を大きく削減する効果がある。
【００７１】
認証タグ出力手段１０４は、２層ハッシュ木適用手段１０３が生成した認証タグリストＴＬを出力する。認証タグ出力手段１０４は、例えば、ディスプレイ装置やプリンタ装置や所定のネットワークノード（データベースや管理サーバなど）等へ認証タグリストを出力してもよい。
【００７２】
次に、本実施形態の動作を説明する。図７は、本実施形態の認証タグ生成装置１０の動作の一例を示すフローチャートである。図７に示す例では、まず、メッセージ入力手段１０１が、改ざん検出の対象とされるメッセージＭを入力する（ステップＳ１０１）。本例では、メッセージ入力手段１０１は、ｍ個のアイテムからなるメッセージＭ＝（Ｍ［１］〜Ｍ［ｍ］）を入力する。
【００７３】
次に、グループテスト生成手段１０２が、入力されたメッセージＭのアイテム数ｍ、および特定可能な改ざんアイテム数の最大値ｄに基づいて、グループテストの各テストに用いる部分系列を決定して、グループテスト行列Ｗを生成する（ステップＳ１０２）。グループテスト生成手段１０２は、例えば、ｍ個のアイテムからなるメッセージＭを、グループテスト理論に基づいて、互いに重なりを許す１つ以上のアイテムからなるｓ個の部分系列に分解し、得られたｓ個の部分系列を示すｓ行ｍ列の２値行列であるグループテスト行列Ｗを生成する。
【００７４】
次に、２層ハッシュ木適用手段１０３が、グループテスト行列Ｗを基に、可変長入力・固定長出力のハッシュ関数Ｈ（）およびＨ’（）を用いたブロックスライス２層ハッシュ木構造を、メッセージＭ（より具体的には、メッセージＭから生成される各テスト用の部分系列）に適用し、ｓ個の認証タグからなる認証タグリストＴＬを生成する（ステップＳ１０３）。
【００７５】
このとき、２層ハッシュ木適用手段１０３は、ハッシュ計算における部分データ間の類似性を利用しつつ、各テストの部分系列に対してブロックスライス２層ハッシュ木構造を適用する。より具体的には、グループ行列Ｗの列ベクトルの値に応じて、第１のハッシュ関数を適用する処理に代えて、他のテストで既に算出済みのハッシュ値を用いる。２層ハッシュ木適用手段１０３は、例えば、テスト数であるｓ個の状態変数Ｚ［］を用意し、メッセージの各アイテムを所定の順に第１のハッシュ関数Ｈ（）を適用して得えられた結果（ハッシュ値）を、当該アイテムを使用する他のテストに対応した状態変数Ｚ［］に反映（逐次連結）させることで、異なるテストにおける第１のハッシュ関数の結果を利用可能にしてもよい。また、例えば、２層ハッシュ木適用手段１０３は、ｓ個の状態変数Ｚ［］を用意し、メッセージの各アイテムを所定の順に第１のハッシュ関数Ｈ（）を適用して得られた結果（ハッシュ値）を、当該アイテムを使用するテストの各々における第２のハッシュ関数の圧縮関数に適用し、その出力値を、当該テストに対応する状態変数Ｚ［］に保持させることで、異なるテストにおける第１のハッシュ関数の結果を利用可能にしてもよい。
【００７６】
最後に、認証タグ出力手段１０４が、得られた認証タグリストＴＬを出力する（ステップＳ１０４）。
【００７７】
以上のように、本実施形態によれば、改ざん位置の特定ないし限定が可能な認証タグリストを効率よく生成することができる。より具体的には、改ざん位置の特定ないし限定が可能な認証タグリストを、必要なメモリ量を抑止しつつ、少ない計算量で生成することができる。したがって、改ざん位置の特定ないし限定が可能なデータの認証方式を効率よく構築することができる。
【００７８】
一般的なハッシュ関数を用いて１回のハッシュ関数の適用により認証タグを生成する（単純なＣＧＴ−ｔａｇ法）場合、メッセージがｍ個の同じ長さのアイテムから構成される場合に、列重みの最大値で考えると、ｍに比例した計算量を要する。また、グループテスト全体では（行列が十分密であると仮定して）ｓ×ｍに比例した計算量となる。これに対して、本実施形態の認証タグ生成方法によれば次に示すように大幅の計算量の削減が見込まれる。
【００７９】
すなわち、本実施形態の認証タグ生成方法は、２種類のハッシュ関数Ｈ（）とＨ’（）を組み合わせた２層のハッシュ木構造をテスト毎に適用するものであり、かつ、共通のアイテムを用いるテスト間で、当該アイテムを第１のハッシュ関数に与えた出力をともに内部の計算で用いる構成を採用している。このため、グループテストの組み合わせ内容にかかわらず、ｓ＋ｍに比例した計算量となる。ｓまたはｍが大きいとき、単純なＣＧＴ−ｔａｇ法に比べて大幅ま計算量の削減が可能である。
【００８０】
また、ｅａｃｈ−ｔａｇ法との比較においても、本実施形態の認証タグ生成方法は、ほぼ同等の計算量で、保存すべきデータ量をより少なくすることができる。
【００８１】
なお、本実施形態において、各アイテムの中間ハッシュ値は最後まで保持しておく必要はなく、関連するデータ処理（例えば、当該アイテムを利用するテストの状態変数Ｚに反映する処理や圧縮関数の実行処理）を行う間のみ保持されていればよい。
【００８２】
また、衝突困難性に関して、本実施形態では、ブロックスライス２層ハッシュ木構造を用いているため、Ｈ（）とＨ’（）とがそれぞれ衝突困難性を有する関数であれば、個々のテストにおいて出力を衝突させるような２つのデータを見つけるのは困難である。なお、異なるテスト同士での出力の衝突は作られる場合があるが、一般的な用途においてはそのような異なるテスト同士での出力の衝突は問題とならない。あるいは、状態変数Ｚ［ｉ］に、さらにテスト毎のインデックスｉ＝１〜ｓまたは該ｉに固有のデータを連結することにより、そのような異なるテスト間の出力衝突についても発見を困難にすることができる。
【００８３】
実施形態２．
次に、本発明の第２の実施形態について図面を参照して説明する。図８は、第２の実施形態の認証タグ検証装置の構成例を示すブロック図である。図８に示す認証タグ検証装置２０は、データ入力手段２０１と、２層ハッシュ木適用手段２０２と、認証タグ検証手段２０３と、検証結果出力手段２０４とを備える。
【００８４】
認証タグ検証装置２０は、認証タグ生成装置１０と同様、例えば、ＣＰＵと各種記憶装置（メモリやディスク等）と各種入出力装置（マウスやキーボード等）とを備えたコンピュータにより実現可能である。また、認証タグ検証装置の各手段は、プログラムを記憶装置に格納しておき、このプログラムをＣＰＵ上で動作させることにより実現することができる。
【００８５】
データ入力手段２０１は、改ざん検出の対象とされるメッセージＭと、メッセージＭに対して既に生成されている認証タグリストＴＬと、認証タグリストＴＬの生成に用いたグループテストの部分系列を示す情報としてのグループテスト行列Ｗとを入力する。なお、データ入力手段２０１に入力される、認証タグリストＴＬおよびグループテスト行列Ｗは、例えば、第１の実施形態の認証タグ生成装置１０が当該メッセージＭに対して生成した認証タグリストＴＬおよびグループテスト行列Ｗである。データ入力手段２０１は、例えば、キーボードなどの文字入力装置により実現される。
【００８６】
第１の実施形態と同様、以下では、メッセージＭがｍ個の個別のアイテムより構成されているものとする。すなわち、Ｍ＝（Ｍ［１］，．．．，Ｍ［ｍ］）とする。
【００８７】
２層ハッシュ木適用手段２０２は、改ざん検出の対象とされるメッセージＭに対して、入力されたグループテスト行列Ｗを基に、可変長入力・固定長出力のハッシュ関数Ｈ（）およびＨ’（）を用いたブロックスライス２層ハッシュ木構造を適用し、ｓ個の検証用認証タグを含む検証用認証タグリストを生成する。なお、２層ハッシュ木適用手段２０２による検証用認証タグの生成方法は、２層ハッシュ木適用手段１０３による認証タグの生成方法と同じである。以下、２層ハッシュ木適用手段２０２により生成されたｓ個の検証用認証タグをＴ’［１］，．．．，Ｔ’［ｓ］と記し、ｓ個の検証用認証タグＴ’［１］，．．．，Ｔ’［ｓ］を含む検証用認証タグリストを、ＴＬ’と記す。なお、ＴＬ’＝（Ｔ’［１］，．．．，Ｔ’［ｓ］）である。
【００８８】
認証タグ検証手段２０３は、入力された認証タグリストＴＬと、２層ハッシュ木適用手段２０２により生成された検証用認証タグリストＴＬ’とを比較し、メッセージＭに対する改ざんの有無を判定するとともに、改ざん有りと判定された場合には改ざん位置（本例の場合、改ざんされたアイテム）を特定ないし限定する。また、認証タグ検証手段２０３は、改ざんの有無および改ざん位置を示す情報を出力する。認証タグ検証手段２０３は、改ざん位置を示す情報として、例えば、改ざんされたアイテムのインデックス等を出力してもよい。なお、改ざん無しの場合に改ざん位置を示す情報を無効値に設定するなどして、該情報で改ざんの有無をも示すようにしてもよい。
【００８９】
認証タグ検証手段２０３は、例えば、次のようにして改ざん有無の判定および改ざん位置の特定ないし限定することができる。すなわち、ＴＬとＴＬ’とに対して、エントリごと（例えば、Ｔ［ｉ］とＴ’［ｉ］等。ただし、ｉ＝１，．．．，ｓ）の差をとり、当該エントリのインデックスｉに対応する要素ｂとして、差がゼロの場合に０、差が非ゼロの場合に１をとる２値ベクトルＢ＝（ｂ［１］，．．．，ｂ［ｓ］）を生成してもよい。そして、生成された２値ベクトルＢに対し、所定の手続き（復号。より具体的にはグループテストにおける解の解法処理等）を行い、その結果を出力してもよい。
【００９０】
具体例として、認証タグ検証手段２０３は、２値ベクトルＢのエントリがすべて０であった場合には改ざんなしと判定してもよい。また、認証タグ検証手段２０３は、それ以外の場合にはメッセージ全体において、少なくとも１つのアイテムに改ざんがあると判定してもよい。後者の場合（いずれかのエントリが１であった場合）、さらに認証タグ検証手段２０３は、ｂ［ｉ］＝０となる、すべてのｉ（ただし、ｉ＝１，．．．，ｓ）について、入力されたグループテスト行列Ｗのｉ行目の行ベクトルｒＷｉ＝（ｗｉ１，．．．，ｗｉｋ）を取り出し、ｒＷｉ中、ｗｉｊ＝１となるすべてのｊについて、ｍ［ｊ］を改ざんなしと判定してもよい。以上の処理を行い、改ざんなしと判定されなかったアイテムすべてを改ざん有りとする。
【００９１】
グループテスト行列Ｗがｄ−ｄｉｓｊｕｎｃｔｉｖｅと呼ばれる性質を満たす場合、上記の手続きにより、もし改ざんされたアイテムの数がｄ以下の場合、すべての改ざんされたアイテムを特定することが可能である。また、入力された認証タグリストＴＬに改ざんが行われていないもとでは、改ざんなしと判定されたアイテムが実際は改ざんされていたということは起きないため、ｄ−ｄｉｓｊｕｎｃｔｉｖｅであるか否かに関わらず、一般的に、改ざんの可能性がある範囲を狭める効果がある。
【００９２】
検証結果出力手段２０４は、認証タグ検証手段２０３による検証結果を示す情報、より具体的には、改ざんの有無および改ざんがあった場合の改ざん位置を示す情報、を出力する。検証結果出力手段２０４は、例えば、ディスプレイ装置やプリンタ装置や所定のネットワークノード（データベースや管理サーバなど）等へ検証結果を示す情報を出力してもよい。
【００９３】
図９は、本実施形態の認証タグ検証装置２０の動作の一例を示すフローチャートである。図９に示す例では、まず、データ入力手段２０１が、改ざん検出の対象とされるメッセージＭと、メッセージＭに対して生成された認証タグリストＴＬと、ｓ行ｍ列のグループテスト行列Ｗとを入力する（ステップＳ２０１）。
【００９４】
次に、２層ハッシュ木適用手段２０２が、入力されたグループテスト行列Ｗに基づいて、メッセージＭから、ｓ個の検証用認証タグからなる検証用認証タグリストＴＬ’＝（Ｔ’［１］，．．．，Ｔ’［ｓ］）を生成する（ステップＳ２０２）。
【００９５】
次に、認証タグ検証手段２０３が、生成された検証用認証タグリストＴＬ’と、ステップＳ２０１で入力された認証タグリストＴＬとを比較し、改ざんの有無、および改ざんされていた場合には改ざんされたアイテムを特定し、検証結果とする（ステップＳ２０３）。
【００９６】
最後に、検証結果出力手段２０４が、認証タグ検証手段２０３による検証結果（改ざんの有無および改ざんされたアイテムの特定結果）を示す情報を出力する（ステップＳ２０４）。
【００９７】
以上のように、本実施形態によれば、改ざん位置の特定ないし限定をするための検証用認証タグリストを効率よく生成することができる。これは、検証用認証タグリストも、第１の実施形態と同様の方法を用いて生成されるためである。
【００９８】
実施形態３．
図１０は、本実施形態のデータ認証システムの構成例を示すシステム構成図である。図１０に示すように、本実施形態のデータ認証システム１は、認証タグ生成装置１０と、認証タグ検証装置２０と、認証タグ記憶装置３０とを備えている。
【００９９】
認証タグ生成装置１０および認証タグ検証装置２０は、上記の実施形態のそれと同様である。認証タグ記憶装置３０は、認証タグ生成装置１０が生成した認証タグリストＴＬを記憶する。認証タグ記憶装置３０は、例えば、認証タグリストＴＬとともに、当該認証タグリストの生成対象とされたメッセージＭの識別子と、該認証タグリストの生成に用いたグループテスト行列Ｗとを記憶してもよい。
【０１００】
なお、認証タグ記憶装置３０は、認証タグ生成時に用いるハッシュ関数Ｈ（）およびＨ’（）として、鍵付きのハッシュ関数を用いる場合などには、省略されてもよい。その場合、認証タグ生成装置１０により生成された認証タグリストＴＬは、メッセージＭとともに、認証タグ検証装置２０もしくはメッセージＭの宛て先とされる任意の装置に送付されてもよい。
【０１０１】
また、認証タグ生成装置１０と認証タグ検証装置２０とは、１つの装置によって実現されてもよい。すなわち、１つの装置が、認証タグ生成装置１０の機能（各手段）と認証タグ検証装置２０の機能（各手段）とを有していてもよい。そのような場合、該装置において、２層ハッシュ木適用手段１０３が検証用認証タグリストを生成することも可能である。なお、その場合において２層ハッシュ木適用手段２０２は省略可能である。また、認証タグ生成装置１０と認証タグ検証装置２０とを特に区別せずに、データ認証装置と呼んでもよい。
【０１０２】
また、図１１は、ストレージシステムに本実施形態のデータ認証システムを適用した場合の各装置における処理例を示す説明図である。図１１に示す例は、データベース（図中のLarge storage）に記憶されている８個のアイテムからなるメッセージＭを改ざん検出の対象とする場合の例である。本例において、ｍ＝８である。
【０１０３】
本例では、まず、認証タグ生成装置１０が、所定のタイミング（所定周期やユーザ等から検証指示があったとき等）で、ストレージに記憶されているメッセージＭに対して、認証タグリストＴＬを生成する処理を行う。認証タグ生成装置１０のメッセージ入力手段１０１は、例えば、ユーザから検証指示があった場合に、ストレージに記憶されているメッセージＭを読み込む。
【０１０４】
そして、認証タグ生成装置１０のグループテスト生成手段１０２が、改ざん検出の対象とされるメッセージＭ＝（Ｍ［１］，．．．，Ｍ［８］）に対して、改ざん検出用のグループテストに用いる部分系列を決定して、ｓ行ｍ列のグループテスト行列Ｗを生成する（図中の（１）参照）。本例では、２個のテストが必要であるとして、２つのテストの各々について、用いる部分系列が決定されたとする。以下、本例において、ｓ＝２である。なお、部分系列の具体例は記載省略する。
【０１０５】
次に、認証タグ生成装置１０の２層ハッシュ木適用手段１０３が、メッセージＭに含まれる、グループテスト行列Ｗが示す各テストの部分系列に対して、２層ハッシュ木構造を適用して、ｓ個の認証タグＴ［１］，Ｔ［２］からなる認証タグリストＴＬ’を生成する（図中の（２）参照）。なお、上述したように、テスト毎の部分系列に２層ハッシュ木構造を適用する際に、各アイテムに対する第１のハッシュ関数の結果を、ｍ個の状態変数に保持して、他のテストでも利用する。
【０１０６】
生成された認証タグリストＴＬ＝（Ｔ［１］，Ｔ［２］）は、例えば、認証タグ用のストレージ（図中のSmall storage）に、メッセージＭの識別情報と対応づけて記憶される（図中の（３）参照）。
【０１０７】
今、改ざん者（Adbersary）が、ストレージに記憶されているメッセージＭの任意のアイテムを改ざんしたとする（図中の（４）参照）。本例では、アイテムＭ［３]がアイテムＭ’［３］に変更されたものとする。
【０１０８】
また、本例の認証タグ検証装置２０は、例えば、任意のタイミング（所定周期やユーザ等から検証指示があったとき等）で、ストレージに記憶されているメッセージＭについて、改ざん有無の検証を行う。認証タグ検証装置２０のデータ入力手段２０１が、例えば、ユーザから検証指示があった場合に、ストレージに記憶されているメッセージＭと、該メッセージＭに対して生成された認証タグリストＴＬと、認証タグリストＴＬの生成に用いたグループテスト行列Ｗを読み込む。
【０１０９】
そして、改ざん有無の検証処理として、認証タグ検証装置２０の２層ハッシュ木適用手段２０２が、ストレージに記憶されているメッセージＭと、該メッセージＭの認証タグ生成に用いたグループテスト行列Ｗとを用いて、検証用認証タグリストＴＬ’＝（Ｔ’［１］，Ｔ’［２］）を生成する（図中の（５）参照）。なお、図中では、“CGT-based Hash”の後に“Verification”と記載されているが、検証用に認証タグリストを生成することを表しているだけであって、検証用認証タグリストＴＬ’の生成方法は、認証タグリストＴＬの生成方法と同じである。
【０１１０】
次に、認証タグ検証手段２０３が、認証タグ用のストレージ（Small storage）に記憶されている認証タグリストＴＬ＝（Ｔ［１］，Ｔ［２]）と、生成された検証用認証タグリストＴＬ’＝（Ｔ’［１］，Ｔ’［２］）とを比較し、メッセージＭに対する改ざんの有無を判定するとともに、改ざん有りと判定された場合には改ざん位置（本例の場合、改ざんされたアイテム）を特定ないし限定する（図中の（６）参照）。本例では、上述したようにアイテムＭ［３］が改ざんされており、上記の比較処理で、Ｔ［１］≠Ｔ’［１］および／またはＴ［２］≠Ｔ’［２］となる。また、その結果から、グループテストアルゴリズムに基づき、改ざんされたアイテムとしてＭ［３］が特定されるものとする。
【０１１１】
最後に、検証結果出力手段２０４が、検証結果を示す情報として、改ざん有りの旨およびアイテムＭ［３］が改ざんされた旨を示す情報を出力する（図中の（７）参照）。
【０１１２】
なお、図１１では、本実施形態のデータ認証システムを、ストレージシステムに適用する例を示したが、データ認証システムは、例えば、ストレージシステム以外にも、無線もしくは有線のデータ通信や、ファイルシステムや、ウィルススキャンや、バージョン管理システムに対しても適用可能である。
【０１１３】
次に、本発明の概要を説明する。図１２は、本発明によるデータ認証装置の他の構成例を示すブロック図である。図１２に示すように、本発明によるデータ認証装置５０は、２層ハッシュ木適用手段５０１を備える。
【０１１４】
２層ハッシュ木適用手段５０１は、改ざん検出の対象とされるメッセージに含まれるアイテムからなる部分系列であって、組み合わせグループテストに基づき生成された１つ以上の部分系列の各々に対して、ブロックスライス２層ハッシュ木構造を適用して、メッセージに対応する複数の認証タグであってテストの数に応じた複数の認証タグを生成する。
【０１１５】
２層ハッシュ木適用手段５０１は、このとき、複数のテストに共通に用いられるアイテムについて、１度の第１のハッシュ関数の適用処理により得られた出力値を、複数のテストに対応する認証タグの生成処理で共用する。
【０１１６】
２層ハッシュ木適用手段５０１は、例えば、改ざん検出の対象とされるメッセージを、Ｍ＝（Ｍ［１］，．．．，Ｍ［ｍ］）、（ただしｍはアイテム数）とし、組み合わせグループテストの数をｓとした場合、ｓ個の初期化済みの状態変数Ｚ［１］，．．．，Ｚ［ｓ］を用意し、ｊ＝１，．．．，ｍについて、ｊ番目のアイテムＭ［ｊ］を第１のハッシュ関数Ｈ（）に適用し、中間ハッシュ値Ｈ（Ｍ［ｊ］）を得て、当該アイテムを使用するテストｉ（ただし、ｉ＝１，．．．，ｓ）がある場合に、状態変数Ｚ［ｉ］に中間ハッシュ値Ｈ（Ｍ［ｊ］）を連結する処理を、ｊの全てに対して行い、最終的に得られた状態変数Ｚ［１］，．．．，Ｚ［ｓ］の各々に対して第２のハッシュ関数Ｈ（）に適用して、ｓ個の認証タグまたはｓ個の検証用の認証タグを生成してもよい。
【０１１７】
また、２層ハッシュ木適用手段５０１は、例えば、改ざん検出の対象とされるメッセージを、Ｍ＝（Ｍ［１］，．．．，Ｍ［ｍ］）、（ただしｍはアイテム数）とし、組み合わせグループテストの数をｓとした場合、ｓ個の初期化済みの状態変数Ｚ［１］，．．．，Ｚ［ｓ］を用意し、ｊ＝１，．．．，ｍについて、ｊ番目のアイテムＭ［ｊ］を第１のハッシュ関数Ｈ（）に適用し、中間ハッシュ値Ｈ（Ｍ［ｊ］）を得て、当該アイテムを使用するテストｉ（ただし、ｉ＝１，．．．，ｓ）がある場合に、状態変数Ｚ［ｉ］に、中間ハッシュ値Ｈ（Ｍ［ｊ］）を第２のハッシュ関数の圧縮関数に適用して得られた結果を記憶させる処理を、所定の順番でｊの全てに対して行い、ｓ個の認証タグまたはｓ個の検証用の認証タグを生成してもよい。
【０１１８】
また、データ認証装置５０は、改ざん検出の対象とされるメッセージについて、メッセージに含まれるアイテムに対する組み合わせグループテストに用いる１つ以上の部分系列であって、互いに重複を許す１つ以上のアイテムからなる１つ以上の部分系列を生成するグループテスト生成手段（図示省略）を備えていてもよい。
【０１１９】
また、図１３は、本発明によるデータ認証装置の他の構成例を示すブロック図である。図１３に示すように、本発明によるデータ認証装置５０は、２層ハッシュ木適用手段５０２と、認証タグ検証手段５０３とを備えていてもよい。
【０１２０】
２層ハッシュ木適用手段５０２は、上記の２層ハッシュ木適用手段５０１と同様の方法により、改ざん検出の対象とされるメッセージに対応する複数の検証用の認証タグであってテストの数に応じた複数の検証用の認証タグを生成する。
【０１２１】
認証タグ検証手段５０３は、メッセージに予め対応づけられている複数の認証タグと、生成された複数の検証用の認証タグとを比較して、メッセージに対する改ざんの有無および改ざんがあった場合にその範囲を特定ないし限定する。
【０１２２】
また、図１４は、本発明によるデータ認証システムの概要を示すブロック図である。図１４に示すように、本発明によるデータ認証システム６は、認証タグ生成装置６１と、認証タグ検証装置６２とを備えていてもよい。
【０１２３】
認証タグ生成装置６１は、グループテスト生成手段６０１と、２層ハッシュ木適用手段６０２とを含んでいてもよい。
【０１２４】
グループテスト生成手段６０１は、改ざん検出の対象とされるメッセージについて、メッセージに含まれるアイテムに対するグループテストに用いる１つ以上の部分系列であって、互いに重複を許す１つ以上のアイテムからなる１つ以上の部分系列を生成する。
【０１２５】
２層ハッシュ木適用手段６０２の構成および機能は、上記の２層ハッシュ木適用手段５０１と同様でよい。
【０１２６】
また、認証タグ検証装置６２は、第２の２層ハッシュ木適用手段６０３と、認証タグ検証手段６０４とを含んでいてもよい。
【０１２７】
第２の２層ハッシュ木適用手段６０３の構成および機能は、上記の２層ハッシュ木適用手段５０２と同様でよい。
【０１２８】
認証タグ検証手段６０４の構成および機能は、上記の認証タグ検証手段５０３と同様でよい。
【０１２９】
このような構成によれば、改ざん位置の特定ないし限定が可能なデータの認証方式を効率よく構築することができる。
【０１３０】
以上、本実施形態及び実施例を参照して本願発明を説明したが、本願発明は上記実施形態および実施例に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【産業上の利用可能性】
【０１３１】
本発明は、例えば、ストレージシステムや、無線もしくは有線のデータ通信や、ファイルシステムや、ウィルススキャンや、バージョン管理システム等におけるデータの改ざん検出および改ざん位置の特定ないし限定用途に好適に適用可能である。
【符号の説明】
【０１３２】
１、６  データ認証システム
１０、６１  認証タグ生成装置
１０１  メッセージ入力手段
１０２  グループテスト生成手段
１０３  ２層ハッシュ木適用手段
１０４  認証タグ出力手段
２０、６２  認証タグ検証装置
２０１  データ入力手段
２０２  ２層ハッシュ木適用手段
２０３  認証タグ検証手段
２０４  検証結果出力手段
３０  認証タグ記憶装置
５０  データ認証装置
５０１、５０２、６０２  ２層ハッシュ木適用手段
５０３、６０４  認証タグ検証手段
６０１  グループテスト生成手段
６０３  第２の２層ハッシュ木適用手段
【図１】
2017005409.tif 000004
【図２】
2017005409.tif 000005
【図３】
2017005409.tif 000006
【図４】
2017005409.tif 000007
【図５】
2017005409.tif 000008
【図６】
2017005409.tif 000009
【図７】
2017005409.tif 000010
【図８】
2017005409.tif 000011
【図９】
2017005409.tif 000012
【図１０】
2017005409.tif 000013
【図１１】
2017005409.tif 000014
【図１２】
2017005409.tif 000015
【図１３】
2017005409.tif 000016
【図１４】
2017005409.tif 000017