(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-24
(45)【発行日】2024-08-01
(54)【発明の名称】生成プログラム、生成方法、および生成装置
(51)【国際特許分類】
H04L 9/32 20060101AFI20240725BHJP
【FI】
H04L9/32 200A
(21)【出願番号】P 2020119370
(22)【出願日】2020-07-10
【審査請求日】2023-04-07
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100104190
【氏名又は名称】酒井 昭徳
(72)【発明者】
【氏名】小櫻 文彦
【審査官】青木 重徳
(56)【参考文献】
【文献】米国特許出願公開第2010/0106976(US,A1)
【文献】特開平03-151738(JP,A)
【文献】特開2007-172450(JP,A)
【文献】特開2020-047107(JP,A)
【文献】特開2005-051734(JP,A)
【文献】米国特許出願公開第2012/0124381(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/32
(57)【特許請求の範囲】
【請求項1】
所定のルールを記憶する記憶部を参照して、前記所定のルールに従って、対象のコンテンツの先頭の情報が、異なるブロックに分散するよう、前記対象のコンテンツを複数のブロックに分割し、
分割した前記複数のブロックのそれぞれのブロックに対応するハッシュ値を生成し、
生成した前記ハッシュ値を統合した統合ハッシュ値を生成し、
分割した前記複数のブロックを連結して、シャッフリングコンテンツを生成し、
生成した前記統合ハッシュ値を、生成した前記シャッフリングコンテンツに合成し、
前記統合ハッシュ値を合成した前記シャッフリングコンテンツに対応するハッシュ値を、前記対象のコンテンツ全体に対応する全体ハッシュ値として生成し、
生成した前記
全体ハッシュ値を出力する、
処理をコンピュータに実行させることを特徴とする生成プログラム。
【請求項2】
前記所定のルールは、前記対象のコンテンツを指定長単位に区切った場合の、前記対象のコンテンツに含まれる前記指定長のデータのそれぞれを、前記複数のブロックのそれぞれのブロックに、所定の順番に従って割り当てることにより、前記対象のコンテンツを、前記複数のブロックに分割するルールである、ことを特徴とする請求項1に記載の生成プログラム。
【請求項3】
前記所定の順番は、シードに基づく疑似乱数機によって規定される順番である、ことを特徴とする請求項2に記載の生成プログラム。
【請求項4】
前記統合ハッシュ値を生成する処理は、
EOR演算により、前記統合ハッシュ値を生成する、ことを特徴とする請求項1~3のいずれか一つに記載の生成プログラム。
【請求項5】
前記統合ハッシュ値を生成する処理は、
生成した前記ハッシュ値よりデータ長が大きい前記統合ハッシュ値を生成する、ことを特徴とする請求項1~4のいずれか一つに記載の生成プログラム。
【請求項6】
所定のルールを記憶する記憶部を参照して、前記所定のルールに従って、対象のコンテンツの先頭の情報が、異なるブロックに分散するよう、前記対象のコンテンツを複数のブロックに分割し、
分割した前記複数のブロックのそれぞれのブロックに対応するハッシュ値を生成し、
生成した前記ハッシュ値を統合した統合ハッシュ値を生成し、
分割した前記複数のブロックを連結して、シャッフリングコンテンツを生成し、
生成した前記統合ハッシュ値を、生成した前記シャッフリングコンテンツに合成し、
前記統合ハッシュ値を合成した前記シャッフリングコンテンツに対応するハッシュ値を、前記対象のコンテンツ全体に対応する全体ハッシュ値として生成し、
生成した前記全体ハッシュ値を出力する、
処理をコンピュータが実行することを特徴とする生成方法。
【請求項7】
所定のルールに従って、対象のコンテンツの先頭の情報が、異なるブロックに分散するよう、前記対象のコンテンツを複数のブロックに分割し、
分割した前記複数のブロックのそれぞれのブロックに対応するハッシュ値を生成し、
生成した前記ハッシュ値を統合した統合ハッシュ値を生成し、
分割した前記複数のブロックを連結して、シャッフリングコンテンツを生成し、
生成した前記統合ハッシュ値を、生成した前記シャッフリングコンテンツに合成し、
前記統合ハッシュ値を合成した前記シャッフリングコンテンツに対応するハッシュ値を、前記対象のコンテンツ全体に対応する全体ハッシュ値として生成し、
生成した前記全体ハッシュ値を出力する、
制御部を有することを特徴とする生成装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、生成プログラム、生成方法、および生成装置に関する。
【背景技術】
【0002】
従来、元となるデータから生成され、元となるデータを識別する情報として用いられるハッシュ値と呼ばれる値が存在する。ハッシュ値は、例えば、データの暗号化、データの認証、データの検索、または、データの比較などの処理に活用される。
【0003】
先行技術としては、例えば、コンテンツを分割した複数の部分データのそれぞれから生成された複数の第1ハッシュ値と、複数の部分データのうちN個の部分データのそれぞれから生成された第2ハッシュ値とに基づいて、コンテンツを検証するものがある。また、電子文書を構成要素に分割し、構成要素各々に対してハッシュ値を計算し、計算されたハッシュ値を結合したデータに対して署名を付与する技術がある。また、例えば、メッセージに基づいて、あるプロセスを用いて、無作為に現れる要素を生成し、生成した要素とメッセージとを組み合わせる技術がある。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2018-196108号公報
【文献】特開2007-143184号公報
【文献】特表2008-545163号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来技術では、それぞれ異なるコンテンツから生成された2つのハッシュ値が同一の値になる、いわゆるハッシュ値の衝突が発生してしまうという問題がある。
【0006】
1つの側面では、本発明は、ハッシュ値の衝突を回避し易くすることを目的とする。
【課題を解決するための手段】
【0007】
1つの実施態様によれば、所定のルールに従って、対象のコンテンツの先頭の情報が、異なるブロックに分散するよう、前記対象のコンテンツを複数のブロックに分割し、分割した前記複数のブロックのそれぞれのブロックに対応するハッシュ値を生成し、生成した前記ハッシュ値を統合した統合ハッシュ値を生成し、生成した前記統合ハッシュ値を出力する生成プログラム、生成方法、および生成装置が提案される。
【発明の効果】
【0008】
一態様によれば、ハッシュ値の衝突を回避し易くすることが可能になる。
【図面の簡単な説明】
【0009】
【
図1】
図1は、実施の形態にかかる生成方法の一実施例を示す説明図である。
【
図2】
図2は、ブロックチェーン管理システム200の一例を示す説明図である。
【
図3】
図3は、ブロックチェーン管理システム200の利用例を示す説明図である。
【
図4】
図4は、生成装置100のハードウェア構成例を示すブロック図である。
【
図5】
図5は、生成装置100の機能的構成例を示すブロック図である。
【
図6】
図6は、生成装置100の動作の一例を示す説明図(その1)である。
【
図7】
図7は、生成装置100の動作の一例を示す説明図(その2)である。
【
図8】
図8は、生成装置100の動作の一例を示す説明図(その3)である。
【
図9】
図9は、生成装置100の動作の一例を示す説明図(その4)である。
【
図10】
図10は、生成装置100の動作の一例を示す説明図(その5)である。
【
図11】
図11は、生成装置100の動作の具体例を示す説明図(その1)である。
【
図12】
図12は、生成装置100の動作の具体例を示す説明図(その2)である。
【
図13】
図13は、生成装置100の動作の具体例を示す説明図(その3)である。
【
図14】
図14は、生成装置100の動作の具体例を示す説明図(その4)である。
【
図15】
図15は、生成装置100の動作の具体例を示す説明図(その5)である。
【
図16】
図16は、生成装置100の動作の具体例を示す説明図(その6)である。
【
図17】
図17は、生成装置100の動作の具体例を示す説明図(その7)である。
【
図18】
図18は、生成装置100の動作の別の具体例を示す説明図である。
【
図19】
図19は、全体処理手順の一例を示すフローチャートである。
【
図20】
図20は、分割処理手順の一例を示すフローチャートである。
【
図21】
図21は、コンテンツ統合処理手順の一例を示すフローチャートである。
【
図22】
図22は、生成処理手順の一例を示すフローチャートである。
【
図23】
図23は、ハッシュ値統合処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0010】
以下に、図面を参照して、本発明にかかる生成プログラム、生成方法、および生成装置の実施の形態を詳細に説明する。
【0011】
(実施の形態にかかる生成方法の一実施例)
図1は、実施の形態にかかる生成方法の一実施例を示す説明図である。生成装置100は、対象のコンテンツについてハッシュ値を生成するコンピュータである。生成装置100は、例えば、サーバ、または、PC(Personal Computer)などである。
【0012】
ハッシュ値は、例えば、データの暗号化、データの認証、データの検索、または、データの比較などの処理に活用される。具体的には、同一のコンテンツから生成されるハッシュ値が、常に同一の値になることを利用して、2つのコンテンツが一致するか否かを、2つのコンテンツのそれぞれのコンテンツから生成されるハッシュ値が一致するか否かに基づいて判定することが考えられる。
【0013】
より具体的には、ハッシュ値を、ブロックチェーン技術に活用する場合が考えられる。この場合、ブロックチェーンネットワークに含まれるノードは、ブロックチェーンのブロックに、コンテンツから生成されたハッシュ値を記録することにより、ブロックチェーンのブロックに、コンテンツが登録されていると扱うことにする。
【0014】
しかしながら、従来では、それぞれ異なるコンテンツから生成された2つのハッシュ値が同一の値になってしまい、2つのハッシュ値が衝突してしまうことがある。
【0015】
このため、例えば、データの暗号化、データの認証、データの検索、または、データの比較などの処理を、適切に実施することが難しくなってしまうことがある。具体的には、それぞれ異なるコンテンツから生成された2つのハッシュ値が一致してしまい、それぞれ異なるコンテンツを、誤って同一のコンテンツと扱ってしまうことがある。
【0016】
より具体的には、ブロックチェーンのブロックに、コンテンツAのハッシュ値が記録されているものの、コンテンツAのハッシュ値が、コンテンツBのハッシュ値と同一の値になっている場合がある。この場合、コンテンツAと、コンテンツBとのいずれを、ブロックチェーンのブロックに記録されたハッシュ値が示し、ブロックチェーンのブロックに登録されたコンテンツと扱えばよいのかを判別することができない。このため、攻撃者が、ブロックチェーンのブロックに登録されたコンテンツAを、コンテンツBに置き換えることが可能になるという問題がある。
【0017】
それぞれ異なるコンテンツから生成された2つのハッシュ値が同一の値になってしまい、2つのハッシュ値が衝突してしまうことは、偶然に起こり得る。さらに、意図的に、それぞれ異なるコンテンツから生成された2つのハッシュ値を衝突させることが可能であると、googleとオランダの研究機関CWiにより証明されている。
【0018】
例えば、証明された内容は、それぞれ異なる2つのコンテンツのうち、前方の情報で同一のハッシュ値を生成可能であり、かつ、当該情報以降に続く後方の情報が共通していれば、2つのコンテンツのハッシュ値を衝突させることができるという性質を利用する。証明された内容については、例えば、下記URL(uniform resource locator)に公開されたCWiのプレスリリースを参考にすることができる。
【0019】
https://www.cwi.nl/news/2017/cwi-and-google-announce-first-collision-industry-security-standard-sha-1
【0020】
一方で、ハッシュ値が衝突する確率の低減化を図る手法として、例えば、2種類のハッシュアルゴリズムを用いて、コンテンツから2種類のハッシュ値を生成して組み合わせるという手法が考えられる。この手法では、上述した性質への対策を行うことができず、それぞれ異なるコンテンツから生成された2つのハッシュ値を衝突させる攻撃を防御することができないという問題がある。
【0021】
また、ハッシュ値が衝突する確率の低減化を図る手法として、例えば、コンテンツから生成したハッシュ値をキーとして、改めて、コンテンツについてキー付きハッシュ値を生成するという手法が考えられる。この手法は、具体的には、EOR演算(Exclusive OR operation)により、コンテンツに、キーを合成し、キーを合成したコンテンツについてハッシュ値を生成する。この手法では、上述した性質への対策を行うことができず、それぞれ異なるコンテンツから生成された2つのハッシュ値を衝突させる攻撃を防御することができないという問題がある。
【0022】
そこで、本実施の形態では、対象のコンテンツについてハッシュ値を生成するにあたり、上述した性質を考慮して、今回生成するハッシュ値が、他のコンテンツから生成されるハッシュ値と衝突することを回避し易くすることができる生成方法について説明する。
【0023】
図1において、生成装置100は、所定のルールを記憶する。所定のルールは、コンテンツを複数のブロックに分割するやり方を規定する。分割するブロックの数は、例えば、素数であることが好ましい。所定のルールは、コンテンツ前方の情報が、異なるブロックに分散するよう、コンテンツを、複数のブロックに分割するルールである。生成装置100は、ハッシュ関数を記憶する。ハッシュ関数は、例えば、SHA(Secure Hash Algorithm)-1、または、SHA-2などに規定される。
【0024】
(1-1)生成装置100は、対象のコンテンツ110を取得する。生成装置100は、例えば、利用者の操作入力に基づき、対象のコンテンツ110の入力を受け付けることにより、対象のコンテンツ110を取得する。生成装置100は、例えば、対象のコンテンツ110を、他のコンピュータから受信することにより取得してもよい。
【0025】
(1-2)生成装置100は、所定のルールに従って、対象のコンテンツ110を複数のブロックに分割する。生成装置100は、例えば、対象のコンテンツ110の先頭から指定長単位に区切った複数の部分データを、所定の順番に従って、複数のブロックのそれぞれのブロックに割り当てることにより、対象のコンテンツ110を、複数のブロックに分割する。
図1の例では、生成装置100は、対象のコンテンツ110を、ブロック1と、ブロック2と、ブロック3とに分割する。
【0026】
(1-3)生成装置100は、分割した複数のブロックのそれぞれのブロックに対応するハッシュ値を生成する。生成装置100は、ハッシュ関数を用いて、分割した複数のブロックのそれぞれのブロックに対応するハッシュ値を生成する。
図1の例では、生成装置100は、ブロック1に対応するハッシュ値1と、ブロック2に対応するハッシュ値2と、ブロック3に対応するハッシュ値3とを生成する。
【0027】
(1-4)生成装置100は、生成したハッシュ値を統合した統合ハッシュ値を生成する。生成装置100は、例えば、EOR演算により、生成したハッシュ値を統合した統合ハッシュ値を生成する。生成装置100は、例えば、加算、または、減算などの演算により、生成したハッシュ値を統合した統合ハッシュ値を生成してもよい。
図1の例では、生成装置100は、ブロック1に対応するハッシュ値1と、ブロック2に対応するハッシュ値2と、ブロック3に対応するハッシュ値3とをEOR演算し、統合ハッシュ値を生成する。
【0028】
(1-5)生成装置100は、生成した統合ハッシュ値を出力する。生成装置100は、例えば、生成した統合ハッシュ値を、対象のコンテンツ110を識別する情報として出力する。これにより、生成装置100は、ハッシュ値の衝突を回避し易くすることができる。生成装置100は、例えば、対象のコンテンツ110の先頭の情報を、複数のブロックに分散させた上で、対象のコンテンツ110についてハッシュ値を生成することができる。このため、生成装置100は、意図的に、ハッシュ値を衝突させようとする攻撃を防御し易くすることができる。
【0029】
ここでは、生成装置100が、統合ハッシュ値を、対象のコンテンツ110を識別する情報として出力する場合について説明したが、これに限らない。例えば、生成装置100が、統合ハッシュ値をキーとして、対象のコンテンツ110についてキー付きハッシュ値を生成し、対象のコンテンツ110を識別する情報として出力する場合があってもよい。
【0030】
生成装置100は、例えば、ブロックチェーンネットワークに適用することができる。生成装置100を、ブロックチェーンネットワークに適用する一例については、具体的には、
図2および
図3を用いて後述する。
【0031】
(ブロックチェーン管理システム200の一例)
次に、
図2を用いて、
図1に示した生成装置100を適用した、ブロックチェーン管理システム200の一例について説明する。
【0032】
図2は、ブロックチェーン管理システム200の一例を示す説明図である。
図2において、ブロックチェーン管理システム200は、1以上の生成装置100と、複数のノード端末201とを含む。
【0033】
ブロックチェーン管理システム200において、ノード端末201と生成装置100とは、有線または無線のネットワーク210を介して接続される。ネットワーク210は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどである。
【0034】
ブロックチェーン管理システム200は、例えば、パブリック型、コンソーシアム型、または、プライベート型のブロックチェーンを実現するために形成される。ここでは、ブロックチェーン管理システム200が、例えば、パブリック型のブロックチェーンを実現するために形成されたとする。
【0035】
生成装置100は、対象のコンテンツについてハッシュ値を生成する。生成装置100は、対象のコンテンツについて生成したハッシュ値を、ノード端末201に送信し、ブロックチェーンのブロックに記録させることにより、対象のコンテンツを、ブロックチェーンのブロックに登録させる。生成装置100は、例えば、サーバ、または、PCなどである。
【0036】
ノード端末201は、ブロックチェーン基盤220を形成するコンピュータである。それぞれのノード端末201は、同一のブロックチェーン230を記憶する。ブロックチェーン230は、例えば、取引情報が登録されたブロックを連結することにより、取引情報を管理する分散台帳となるリストである。ノード端末201は、対象のコンテンツについて生成されたハッシュ値を、生成装置100から受信し、ブロックチェーン230のブロックに記録する。ノード端末201は、例えば、サーバ、または、PCなどである。
【0037】
ここでは、生成装置100が、対象のコンテンツについてハッシュ値を生成し、ノード端末201に送信する場合について説明したが、これに限らない。例えば、生成装置100が、対象のコンテンツを、そのまま、ノード端末201に送信する場合があってもよい。この場合、ノード端末201が、生成装置100としての機能を有し、受信した対象のコンテンツについてハッシュ値を生成することになる。
【0038】
ここでは、ブロックチェーン管理システム200が、パブリック型のブロックチェーンを実現するために形成される場合について説明したが、これに限らない。例えば、ブロックチェーン管理システム200が、コンソーシアム型、または、プライベート型のブロックチェーンを実現するために形成される場合があってもよい。この場合、ブロックチェーン管理システム200は、ノード端末201を管理するリーダー端末202を含んでいてもよい。
【0039】
(ブロックチェーン管理システム200の利用例)
次に、
図3を用いて、ブロックチェーン管理システム200の利用例について説明する。
【0040】
図3は、ブロックチェーン管理システム200の利用例を示す説明図である。
図3において、生成装置100は、コンテンツAのハッシュ値Aを、他のコンテンツのハッシュ値と衝突しないように生成し、ノード端末201を介して、ブロックチェーン230に記録させる。これにより、生成装置100は、コンテンツAが、ブロックチェーン230に登録されたものと、他のコンテンツと混同せずに判別可能にすることができる。
【0041】
例えば、生成装置100が、コンテンツAがブロックチェーン230に登録されたコンテンツであるか否かを判別しようとする場合が考えられる。この場合、生成装置100は、コンテンツAについてハッシュ値Aを生成し、ブロックチェーン230に記録されたハッシュ値Aと比較する。生成装置100は、生成したハッシュ値Aが、ブロックチェーン230に記録されたハッシュ値Aと一致するため、コンテンツAが、ブロックチェーン230に登録されたコンテンツであると判別することができる。
【0042】
また、例えば、生成装置100が、コンテンツBがブロックチェーン230に登録されたコンテンツであるか否かを判別しようとする場合が考えられる。この場合、生成装置100は、コンテンツBについてハッシュ値Bを生成し、ブロックチェーン230に記録されたハッシュ値Aと比較する。生成装置100は、生成したハッシュ値Bが、ブロックチェーン230に記録されたハッシュ値Aと一致しないため、コンテンツBが、ブロックチェーン230に登録されたコンテンツではないと判別することができる。
【0043】
(生成装置100のハードウェア構成例)
次に、
図4を用いて、生成装置100のハードウェア構成例について説明する。
【0044】
図4は、生成装置100のハードウェア構成例を示すブロック図である。
図4において、生成装置100は、CPU(Central Processing Unit)401と、メモリ402と、ネットワークI/F(Interface)403と、記録媒体I/F404と、記録媒体405とを有する。また、各構成部は、バス400によってそれぞれ接続される。
【0045】
ここで、CPU401は、生成装置100の全体の制御を司る。メモリ402は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU401のワークエリアとして使用される。メモリ402に記憶されるプログラムは、CPU401にロードされることにより、コーディングされている処理をCPU401に実行させる。
【0046】
ネットワークI/F403は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して他のコンピュータに接続される。そして、ネットワークI/F403は、ネットワーク210と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。ネットワークI/F403は、例えば、モデムやLANアダプタなどである。
【0047】
記録媒体I/F404は、CPU401の制御に従って記録媒体405に対するデータのリード/ライトを制御する。記録媒体I/F404は、例えば、ディスクドライブ、SSD(Solid State Drive)、USB(Universal Serial Bus)ポートなどである。記録媒体405は、記録媒体I/F404の制御で書き込まれたデータを記憶する不揮発メモリである。記録媒体405は、例えば、ディスク、半導体メモリ、USBメモリなどである。記録媒体405は、生成装置100から着脱可能であってもよい。
【0048】
生成装置100は、上述した構成部のほか、例えば、キーボード、マウス、ディスプレイ、プリンタ、スキャナ、マイク、スピーカーなどを有してもよい。また、生成装置100は、記録媒体I/F404や記録媒体405を複数有していてもよい。また、生成装置100は、記録媒体I/F404や記録媒体405を有していなくてもよい。
【0049】
(生成装置100の機能的構成例)
次に、
図5を用いて、生成装置100の機能的構成例について説明する。
【0050】
図5は、生成装置100の機能的構成例を示すブロック図である。生成装置100は、記憶部500と、取得部501と、分割部502と、第1生成部503と、第1統合部504と、第2統合部505と、第2生成部506と、出力部507とを含む。
【0051】
記憶部500は、例えば、
図4に示したメモリ402や記録媒体405などの記憶領域によって実現される。以下では、記憶部500が、生成装置100に含まれる場合について説明するが、これに限らない。例えば、記憶部500が、生成装置100とは異なる装置に含まれ、記憶部500の記憶内容が生成装置100から参照可能である場合があってもよい。
【0052】
取得部501~出力部507は、制御部の一例として機能する。取得部501~出力部507は、具体的には、例えば、
図4に示したメモリ402や記録媒体405などの記憶領域に記憶されたプログラムをCPU401に実行させることにより、または、ネットワークI/F403により、その機能を実現する。各機能部の処理結果は、例えば、
図4に示したメモリ402や記録媒体405などの記憶領域に記憶される。
【0053】
記憶部500は、各機能部の処理において参照され、または更新される各種情報を記憶する。記憶部500は、ハッシュ値を生成する方法を記憶する。記憶部500は、例えば、ハッシュ関数を記憶する。ハッシュ関数は、例えば、SHA-1、または、SHA-2などに規定される。
【0054】
記憶部500は、所定のルールを記憶する。所定のルールは、コンテンツを複数のブロックに分割するやり方を規定する。分割するブロックの数は、例えば、素数であることが好ましい。所定のルールは、例えば、コンテンツを、素数である個数のブロックに分割するやり方を規定する。所定のルールは、例えば、利用者によって設定される。所定のルールは、例えば、コンテンツを、所定の分割数分の複数のブロックに分割するやり方を規定する。分割数は、例えば、利用者によって設定される。分割数は、例えば、素数であることが好ましい。
【0055】
所定のルールは、コンテンツ先頭の情報が、異なるブロックに分散するよう、コンテンツを、複数のブロックに分割するやり方を規定することが好ましい。所定のルールは、例えば、コンテンツの先頭にある所定長のデータがそのまま含まれるブロックが発生しないよう、コンテンツを複数のブロックに分割するやり方を規定することが好ましい。所定長は、コンテンツのハッシュ値を、他のコンテンツのハッシュ値と衝突させることが可能になる長さである。所定のルールは、例えば、コンテンツの先頭にある所定長のデータが、複数のブロックのそれぞれのブロックに分散するよう、コンテンツを複数のブロックに分割するやり方を規定することが好ましい。
【0056】
所定のルールは、例えば、ブロックに、元のコンテンツでは不連続な2以上のデータを含むよう、コンテンツを複数のブロックに分割するやり方を規定することが好ましい。換言すれば、所定のルールは、例えば、元のコンテンツで連続するデータのみを含むブロックが発生しないよう、コンテンツを複数のブロックに分割するやり方を規定することが好ましい。所定のルールは、例えば、コンテンツを先頭から、所定の分割数分に等分するルールではないことが好ましい。
【0057】
所定のルールは、具体的には、コンテンツに含まれる指定長のデータごとに、複数のブロックのそれぞれのブロックに、所定の順番に従って割り当てることにより、コンテンツを、複数のブロックに分割するルールである。指定長は、素数であることが好ましい。指定長は、コンテンツのハッシュ値を、他のコンテンツのハッシュ値と衝突させることが可能になる所定長よりも小さいことが好ましい。
【0058】
分割数、または、指定長が素数であれば、コンテンツを、8バイトなどの単位長さに分けた際、それぞれの8バイト分のデータ内で、同一の位置に存在するデータが、すべて、同一のブロックに割り当てられてしまうといった状況を回避し易くすることができる。このため、攻撃者が、意図的にハッシュ値を衝突させる攻撃を行い辛くすることができる。
【0059】
所定のルールは、より具体的には、対象のコンテンツを指定長単位に区切った場合の、対象のコンテンツに含まれる指定長のデータのそれぞれを、複数のブロックのそれぞれのブロックに、所定の順番に従って割り当てるルールである、また、指定長が、可変である場合があってもよい。指定長は、例えば、コンテンツの先頭側では比較的短く、コンテンツの末尾側では比較的長い場合があってもよい。
【0060】
所定の順番は、例えば、ブロックに割り振られた番号に沿った順番である。所定の順番は、シードに基づく疑似乱数機によって規定される順番であってもよい。シードは、コンテンツのうちの所定の箇所に基づいて生成される。シードは、例えば、コンテンツの先頭の箇所に基づいて生成される。シードは、具体的には、コンテンツの先頭の箇所から生成されたハッシュ値であってもよい。
【0061】
取得部501は、各機能部の処理に用いられる各種情報を取得する。取得部501は、取得した各種情報を、記憶部500に記憶し、または、各機能部に出力する。また、取得部501は、記憶部500に記憶しておいた各種情報を、各機能部に出力してもよい。取得部501は、例えば、利用者の操作入力に基づき、各種情報を取得する。取得部501は、例えば、生成装置100とは異なる装置から、各種情報を受信してもよい。
【0062】
取得部501は、ハッシュ値を生成する対象のコンテンツを取得する。取得部501は、例えば、利用者の操作入力に基づき、対象のコンテンツの入力を受け付けることにより、対象のコンテンツを取得する。取得部501は、例えば、対象のコンテンツを、生成装置100とは異なる装置から受信することにより取得してもよい。
【0063】
取得部501は、いずれかの機能部の処理を開始する開始トリガーを受け付けてもよい。開始トリガーは、例えば、利用者による所定の操作入力があったことである。開始トリガーは、例えば、他のコンピュータから、所定の情報を受信したことであってもよい。開始トリガーは、例えば、いずれかの機能部が所定の情報を出力したことであってもよい。
【0064】
分割部502は、所定のルールに従って、対象のコンテンツを複数のブロックに分割する。分割部502は、例えば、対象のコンテンツに含まれる指定長のデータごとに、複数のブロックのそれぞれのブロックに、所定の順番に従って割り当てることにより、対象のコンテンツを、複数のブロックに分割する。分割部502は、具体的には、対象のコンテンツの先頭から指定長単位に区切った複数の部分データを、所定の順番に従って、複数のブロックのそれぞれのブロックに割り当てることにより、対象のコンテンツを、複数のブロックに分割する。
【0065】
分割部502は、より具体的には、対象のコンテンツの先頭から指定長単位に区切った複数の部分データを、ブロックに割り振られた番号に沿った順番に従って、複数のブロックのそれぞれのブロックに割り当てる。これにより、分割部502は、対象のコンテンツの先頭の情報を、複数のブロックに分散させることができ、衝突し辛いハッシュ値を生成可能にすることができる。
【0066】
分割部502は、より具体的には、対象のコンテンツのうちの所定の箇所に基づいて、シードを生成する。シードは、例えば、所定の箇所から生成されるハッシュ値である。そして、分割部502は、より具体的には、対象のコンテンツの先頭から指定長単位に区切った複数の部分データを、シードに基づく疑似乱数機によって規定される順番に従って、複数のブロックのそれぞれのブロックに割り当てる。これにより、分割部502は、対象のコンテンツの先頭の情報を、複数のブロックに分散させることができ、衝突し辛いハッシュ値を生成可能にすることができる。
【0067】
第1生成部503は、分割した複数のブロックのそれぞれのブロックに対応するハッシュ値を生成する。第1生成部503は、ハッシュ関数を用いて、分割した複数のブロックのそれぞれのブロックに対応するハッシュ値を生成する。これにより、第1生成部503は、対象のコンテンツを識別する情報を生成可能にすることができる。
【0068】
第1統合部504は、生成したハッシュ値を統合した統合ハッシュ値を生成する。第1統合部504は、例えば、EOR演算により、それぞれのブロックに対応するハッシュ値を統合し、統合ハッシュ値を生成する。これにより、第1統合部504は、対象のコンテンツを識別する情報となり得る統合ハッシュ値を生成することができる。この際、第1統合部504は、対象のコンテンツの先頭の情報を、複数のブロックに分散させた上で生成した、それぞれのブロックのハッシュ値を利用するため、衝突し辛い統合ハッシュ値を生成することができる。
【0069】
第1統合部504は、例えば、それぞれのブロックに対応するハッシュ値よりデータ長が大きい、それぞれのブロックに対応するハッシュ値を統合した統合ハッシュ値を生成してもよい。第1統合部504は、具体的には、それぞれのブロックに対応するハッシュ値を統合した統合ハッシュ値を生成してもよい。
【0070】
第1統合部504は、より具体的には、初期化した規定長の記憶領域の先頭からi×nバイトの位置に、i番目のハッシュ値をEOR演算により統合することにより、規定長の統合ハッシュ値を生成する。規定長は、ハッシュ値のデータ長より大きい長さである。これにより、第1統合部504は、対象のコンテンツを識別する情報となり得る統合ハッシュ値を生成することができる。この際、第1統合部504は、対象のコンテンツの先頭の情報を、複数のブロックに分散させた上で生成した、それぞれのブロックのハッシュ値を利用するため、衝突し辛い統合ハッシュ値を生成することができる。
【0071】
第2生成部506は、生成した統合ハッシュ値をキーとして、対象のコンテンツ全体に対応する全体ハッシュ値を生成する。第2生成部506は、例えば、EOR演算により、キーとなる統合ハッシュ値を対象のコンテンツに合成し、ハッシュ関数を用いて、合成後のコンテンツに対応するハッシュ値を、全体ハッシュ値として生成する。これにより、第2生成部506は、対象のコンテンツを識別する情報として、全体ハッシュ値を生成することができる。この際、第2統合部505は、対象のコンテンツの先頭の情報を、複数のブロックに分散させた上で生成した統合ハッシュ値をキーとして利用するため、衝突し辛い統合ハッシュ値を生成することができる。
【0072】
第2生成部506は、例えば、生成した統合ハッシュ値をキーとして、分割した複数のブロックを統合した、対象のコンテンツとは異なる統合データに基づいて、全体ハッシュ値を生成してもよい。第2生成部506は、具体的には、複数のブロックを連結し、統合データを生成し、EOR演算により、キーとなる統合ハッシュ値を合成する。そして、第2生成部506は、具体的には、ハッシュ関数を用いて、合成後の統合データに対応するハッシュ値を、全体ハッシュ値として生成する。これにより、第2生成部506は、対象のコンテンツを識別する情報として、全体ハッシュ値を生成することができる。この際、第2生成部506は、対象のコンテンツの先頭の情報を、複数のブロックに分散させた上で生成した統合データを利用するため、衝突し辛い全体ハッシュ値を生成することができる。
【0073】
第2生成部506は、例えば、分割した複数のブロックを統合した統合データに基づいて、対象のコンテンツ全体に対応する全体ハッシュ値を生成してもよい。第2生成部506は、具体的には、複数のブロックを連結し、統合データを生成する。そして、第2生成部506は、具体的には、ハッシュ関数を用いて、生成した統合データに対応するハッシュ値を、全体ハッシュ値として生成する。これにより、第2生成部506は、対象のコンテンツを識別する情報として、全体ハッシュ値を生成することができる。この際、第2生成部506は、対象のコンテンツの先頭の情報を、複数のブロックに分散させた上で生成した統合データを利用するため、衝突し辛い全体ハッシュ値を生成することができる。
【0074】
出力部507は、少なくともいずれかの機能部の処理結果を出力する。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、ネットワークI/F403による外部装置への送信、または、メモリ402や記録媒体405などの記憶領域への記憶である。これにより、出力部507は、少なくともいずれかの機能部の処理結果を利用者に通知可能にし、生成装置100の利便性の向上を図ることができる。
【0075】
出力部507は、生成した統合ハッシュ値を出力する。出力部507は、例えば、生成した統合ハッシュ値を、対象のコンテンツを識別する情報として出力する。出力部507は、具体的には、生成した統合ハッシュ値を、対象のコンテンツを識別する情報として、ノード端末201に送信する。これにより、出力部507は、衝突し辛く、対象のコンテンツを識別する情報となるハッシュ値を利用可能にすることができる。
【0076】
出力部507は、生成した全体ハッシュ値を出力する。出力部507は、例えば、生成した全体ハッシュ値を、対象のコンテンツを識別する情報として出力する。出力部507は、具体的には、生成した全体ハッシュ値を、対象のコンテンツを識別する情報として、ノード端末201に送信する。これにより、出力部507は、衝突し辛く、対象のコンテンツを識別する情報となるハッシュ値を利用可能にすることができる。
【0077】
(生成装置100の動作の一例)
次に、
図6~
図10を用いて、生成装置100の動作の一例について説明する。
【0078】
図6~
図10は、生成装置100の動作の一例を示す説明図である。
図6において、生成装置100は、コンテンツ600を取得する。
【0079】
生成装置100は、コンテンツ600を、所定数のブロック610に分割する。所定数は、素数であることが好ましい。
図6の例では、所定数は、3である。生成装置100は、例えば、コンテンツ600のうち、指定長のデータごとに、3つのブロック610に割り当てることにより、コンテンツ600を、3つのブロック610に分割する。指定長は、素数であることが好ましい。指定長は、例えば、予め利用者によって指定される。
【0080】
生成装置100は、ハッシュ関数を用いて、3つのブロック610のそれぞれのブロック610に対応するハッシュ値を生成する。
図6の例では、生成装置100は、ハッシュ値Aと、ハッシュ値Bと、ハッシュ値Cとを生成する。
【0081】
生成装置100は、EOR演算により、ハッシュ値Aと、ハッシュ値Bと、ハッシュ値Cとを統合した統合ハッシュ値を、キー620として生成する。統合ハッシュ値の長さは、例えば、ハッシュ値Aと、ハッシュ値Bと、ハッシュ値Cとのそれぞれの長さと同一である。ハッシュ値Aと、ハッシュ値Bと、ハッシュ値Cとのそれぞれの長さは、例えば、32バイトである。そして、統合ハッシュ値の長さは、例えば、32バイトである。
【0082】
生成装置100は、例えば、EOR演算により、初期化した統合ハッシュ値に、ハッシュ値Aと、ハッシュ値Bと、ハッシュ値Cとのそれぞれを統合することにより、統合ハッシュ値を生成する。初期化は、例えば、各ビットを0に設定することである。生成装置100は、加算、または、減算などの演算により、ハッシュ値Aと、ハッシュ値Bと、ハッシュ値Cとを統合した統合ハッシュ値を、キー620として生成してもよい。
【0083】
これにより、生成装置100は、コンテンツ600の先頭の情報を、3つのブロック610に分散させ、今回生成したキー620と衝突するキーを、攻撃者が生成困難にすることができる。生成装置100は、例えば、コンテンツ600の部分的な変更が、3つのブロック610のそれぞれのブロック610に、全体的に影響するようにすることができる。このため、攻撃者が、コンテンツ600を部分的に変更し、今回生成したキー620と衝突するキーを生成することは、実現困難になる。
【0084】
そして、生成装置100は、生成したキー620を、コンテンツ600に合成し、合成後のコンテンツ600に対応するハッシュ値を、全体ハッシュ値として生成する。生成装置100は、生成した全体ハッシュ値を出力する。
【0085】
これにより、生成装置100は、衝突し辛い全体ハッシュ値を生成することができる。生成装置100は、衝突し辛いキー620を利用するため、攻撃者が、意図的に、コンテンツ600に対応する全体ハッシュ値に、他のコンテンツに対応する全体ハッシュ値を衝突させることを困難にすることができる。
【0086】
次に、
図7の説明に移行し、生成装置100が、コンテンツ600を、3つのブロック610に分割する一例について、具体的に説明する。
【0087】
図7において、生成装置100は、分割数を取得する。分割数は、素数であることが好ましい。生成装置100は、例えば、分割数とする素数を求めるルールに従って、ブロック610の大きさの目安に基づいて、コンテンツ600の大きさを、ブロック610の大きさの目安で除算した結果に近い素数を、分割数に採用する。ここで、分割数とする素数を求めるルールは、同一の大きさのコンテンツ600に対しては、同一の素数を分割数として求める。ここで、生成装置100は、分割数とする素数を求めるルールを1つ有し、分割数とする素数を求めるルールを変更しないことが好ましい。生成装置100は、具体的には、ブロック610の大きさの目安が1MBであり、コンテンツ600の大きさが16MBであれば、16MB/1MB=16に近い素数17を、分割数に採用する。
図7の例では、生成装置100は、分割数3を採用する。
【0088】
生成装置100は、コンテンツ600を先頭から区切り、それぞれ指定長単位である複数の部分データを特定する。指定長は、例えば、1ビットである。生成装置100は、所定の順番に従って、それぞれの部分データを、3つのブロック610に割り当てて追加していくことにより、コンテンツ600を、3つのブロック610に分割する。
【0089】
生成装置100は、例えば、コンテンツ600の先頭の箇所からハッシュ値を生成し、生成したハッシュ値をシードとする疑似乱数機により規定される順番に従って、それぞれの部分データを、3つのブロック610に割り当てていく。生成装置100は、例えば、ブロックに割り振られた番号の順番に従って、それぞれの部分データを、3つのブロック610に割り当てていってもよい。
【0090】
ここでは、指定長が固定である場合について説明したが、これに限らない。例えば、指定長が可変である場合があってもよい。具体的には、指定長が、コンテンツ600の先頭側を区切る際には比較的短くなり、コンテンツ600の末尾側を区切る際には比較的長くなる場合があってもよい。次に、
図8の説明に移行し、分割した結果について説明する。
【0091】
図8において、コンテンツ600を分割した結果、コンテンツ600に含まれる部分データが、いずれのブロック610に割り当てられたのかを示す。
図8に示すように、分割数が、素数となる3であるため、生成装置100は、コンテンツ600に含まれる部分データが、いずれのブロック610に割り当てられるのかを、恣意的にコントロールし辛くすることができる。
【0092】
図6の例では、生成装置100が、キー620をコンテンツ600に合成し、合成後のコンテンツ600に対応する全体ハッシュ値を生成して出力する場合について説明したが、これに限らない。例えば、生成装置100が、キー620をコンテンツ600に合成し、合成後のコンテンツ600に対応する全体ハッシュ値を生成し、キー620と併せて出力する場合があってもよい。これにより、生成装置100は、生成した全体ハッシュ値と、キー620とを併せて利用可能にすることができる。このため、生成装置100は、全体ハッシュ値に基づくコンテンツ600の一致判定の精度向上を図ることができる。
【0093】
図6の例では、生成装置100が、EOR演算により、ハッシュ値Aと、ハッシュ値Bと、ハッシュ値Cとのそれぞれの長さと同一の長さである統合ハッシュ値を生成する場合について説明したが、これに限らない。例えば、生成装置100が、EOR演算により、ハッシュ値Aと、ハッシュ値Bと、ハッシュ値Cとのいずれの長さよりも大きい長さである統合ハッシュ値を生成する場合があってもよい。ここで、
図9の説明に移行し、この場合に対応する具体例について説明する。
【0094】
図9において、生成装置100は、EOR演算により、初期化した統合ハッシュ値に、それぞれのブロック610のハッシュ値を、シフトしながら統合していく。シフトの大きさは、例えば、16バイトである。
図9の例では、それぞれのブロック610のハッシュ値の長さが、32バイトである。統合ハッシュ値の長さが、64バイトである。
【0095】
生成装置100は、具体的には、初期化した統合ハッシュ値の先頭から32バイト分を、統合箇所に設定し、EOR演算により、設定した統合箇所に対してハッシュ値1を統合する。次に、生成装置100は、具体的には、統合箇所を末尾側に16バイトシフトし、EOR演算により、シフトした統合箇所に対してハッシュ値2を統合する。次に、生成装置100は、具体的には、統合箇所を末尾側に16バイトシフトした後、EOR演算により、シフトした統合箇所に対してハッシュ値3を統合する。
【0096】
次に、生成装置100は、具体的には、統合箇所を末尾側に16バイトシフトする。この際、生成装置100は、統合箇所のうち、末尾からはみ出した16バイト分は、先頭に設定する。生成装置100は、EOR演算により、シフトした統合箇所に対してハッシュ値4を統合する。次に、生成装置100は、具体的には、統合箇所を末尾側に16バイトシフトする。この際、生成装置100は、統合箇所が、すべて末尾からはみ出すため、コンテンツ600の先頭に、統合箇所を設定する。生成装置100は、EOR演算により、シフトした統合箇所に対してハッシュ値5を統合する。
【0097】
以降、生成装置100は、同様に、統合ハッシュ値に、ブロック610のハッシュ値を統合していくことにより、統合ハッシュ値を生成する。これにより、生成装置100は、統合ハッシュ値の衝突を回避し易くすることができる。生成装置100は、例えば、攻撃者が、意図的に、コンテンツ600に対応する統合ハッシュ値に、他のコンテンツに対応する統合ハッシュ値を衝突させることを困難にすることができる。
【0098】
図6の例では、生成装置100が、生成したキー620を、コンテンツ600に合成し、合成後のコンテンツ600について全体ハッシュ値を生成する場合について説明したが、これに限らない。例えば、生成装置100が、生成したキー620を、それぞれのブロック610を統合した統合データに合成し、合成後の統合データについて全体ハッシュ値を生成する場合があってもよい。ここで、
図10の説明に移行し、この場合に対応する具体例について説明する。
【0099】
図10において、生成装置100は、複数のブロック610を連結することにより、複数のブロック610を統合した統合コンテンツ1000を生成する。生成装置100は、生成したキー620を、統合コンテンツ1000に合成し、ハッシュ関数を用いて、合成後の統合コンテンツ1000について全体ハッシュ値1010を生成する。これにより、生成装置100は、全体ハッシュ値1010の衝突を回避し易くすることができる。生成装置100は、例えば、攻撃者が、意図的に、コンテンツ600に対応する全体ハッシュ値1010に、他のコンテンツに対応する全体ハッシュ値を衝突させることを困難にすることができる。
【0100】
(生成装置100の動作の具体例)
次に、
図11~
図17を用いて、生成装置100の動作の具体例について説明する。
【0101】
図11~
図17は、生成装置100の動作の具体例を示す説明図である。
図11において、生成装置100は、ハッシュ値生成部1100と、同一性判定部1110とを有する。
【0102】
ハッシュ値生成部1100は、例えば、コンテンツAのハッシュ値Aを生成し、コンテンツBのハッシュ値Bを生成する。同一性判定部1110は、コンテンツAのハッシュ値Aと、コンテンツBのハッシュ値Bとが同一の値であるか否かを判定する。ここで、同一性判定部1110は、同一の値であれば、コンテンツAとコンテンツBとが同一のコンテンツであると判定する。一方で、同一性判定部1110は、同一の値でなければ、コンテンツAとコンテンツBとが同一のコンテンツではないと判定する。
【0103】
同一性判定部1110は、同一性判定結果1120として、コンテンツAとコンテンツBとが同一のコンテンツであるか否かを判定した結果を出力する。これにより、生成装置100は、コンテンツの同一性を判定可能にすることができる。次に、
図12の説明に移行し、ハッシュ値生成部1100の具体的な内容について説明する。
【0104】
図12において、生成装置100は、コンテンツ分割部1210と、ハッシュ関数1220と、統合部1230と、統合部1240と、ハッシュ関数1250とを有する。ハッシュ値生成部1100は、例えば、コンテンツ分割部1210と、ハッシュ関数1220と、統合部1230と、統合部1240と、ハッシュ関数1250とによって実現される。
【0105】
生成装置100は、コンテンツ1200を取得する。生成装置100は、コンテンツ分割部1210により、コンテンツ1200を、3つのブロック1211~1213に分割する。生成装置100は、ハッシュ関数1220を用いて、それぞれのブロック1211~1213に対応するハッシュ値1221~1223を生成する。生成装置100は、統合部1230により、EOR演算により、ハッシュ値1221~1223を統合した統合ハッシュ値を、キー1231として生成する。
【0106】
生成装置100は、統合部1240により、3つのブロック1211~1213を順番に連結し、シャッフリングコンテンツ1241を生成する。生成装置100は、キー1231を、シャッフリングコンテンツ1241に合成し、ハッシュ関数1250を用いて、合成後のシャッフリングコンテンツ1241に対応するハッシュ値1251を生成する。これにより、生成装置100は、衝突が発生し辛いハッシュ値1251を生成することができる。次に、
図13~
図17の説明に移行し、生成装置100が、ハッシュ値1251を生成する具体例について説明する。
【0107】
図13において、生成装置100は、コンテンツ1200を、1バイト単位で、3つのブロック1211~1213に割り当てる。
【0108】
生成装置100は、例えば、空にした3つのブロック1211~1213を用意する。生成装置100は、例えば、コンテンツ1200の先頭から1バイト目を、ブロック1211の1バイト目に割り当てて、ブロック1211に追加する。生成装置100は、例えば、コンテンツ1200の先頭から2バイト目を、ブロック1212の1バイト目に割り当てて、ブロック1212に追加する。生成装置100は、例えば、コンテンツ1200の先頭から3バイト目を、ブロック1213の1バイト目に割り当てて、ブロック1213に追加する。
【0109】
以降、生成装置100は、同様に、コンテンツ1200のそれぞれの1バイト単位のデータを、ブロック1211~1213のいずれかに割り当てていく。これにより、生成装置100は、コンテンツ1200を、3つのブロック1211~1213に分割することができる。この際、生成装置100は、コンテンツ1200の先頭の情報が、3つのブロック1211~1213に分散するようにすることができる。次に、
図14の説明に移行する。
【0110】
図14において、生成装置100は、ハッシュ関数1220を用いて、それぞれのブロック1211~1213に対応するハッシュ値1221~1223を生成する。次に、
図15の説明に移行する。
【0111】
図15において、生成装置100は、統合部1230により、EOR演算を用いて、ハッシュ値1221~1223を統合し、ハッシュ値1221~1223のそれぞれの長さと同一の長さである統合ハッシュ値を、キー1231として生成する。これにより、生成装置100は、コンテンツ1200の先頭の情報が分散された、3つのブロック1211~1213に基づいて、衝突し辛いキー1231を生成することができる。次に、
図16の説明に移行する。
【0112】
図16において、生成装置100は、統合部1240により、3つのブロック1211~1213を順番に連結し、シャッフリングコンテンツ1241を生成する。これにより、生成装置100は、コンテンツ1200の先頭の情報が、シャッフリングコンテンツ1241の複数の箇所に分散するようにすることができる。次に、
図17の説明に移行する。
【0113】
図17において、生成装置100は、キー1231を、シャッフリングコンテンツ1241に合成し、ハッシュ関数1250を用いて、合成後のシャッフリングコンテンツ1241に対応するハッシュ値1251を生成する。これにより、生成装置100は、衝突が発生し辛いハッシュ値1251を生成することができる。
【0114】
生成装置100は、例えば、衝突し辛いキー1231を利用するため、衝突し辛いハッシュ値1251を生成することができる。また、生成装置100は、例えば、コンテンツ1200の先頭の情報が分散されたシャッフリングコンテンツ1241を利用するため、衝突し辛いハッシュ値1251を生成することができる。生成装置100は、具体的には、攻撃者が、ハッシュ値1251と同一の値を、ハッシュ値として生成可能な、コンテンツ1200とは異なる他のコンテンツを発見することを困難にすることができる。
【0115】
より具体的には、生成装置100は、コンテンツ1200の先頭の情報を、複数のブロック1211~1213に分散させ、かつ、シャッフリングコンテンツ1241内で分散させることになる。このため、攻撃者は、コンテンツ1200の先頭の情報を頼りに、ハッシュ値1251と同一の値を、ハッシュ値として生成可能な、コンテンツ1200とは異なる他のコンテンツを発見することができない。
【0116】
(生成装置100の動作の別の具体例)
次に、
図18を用いて、生成装置100の動作の別の具体例について説明する。
【0117】
図18は、生成装置100の動作の別の具体例を示す説明図である。
図18において、生成装置100は、コンテンツ分割部1810と、統合部1820と、ハッシュ関数1830とを有する。
【0118】
生成装置100は、コンテンツ1800を取得する。生成装置100は、コンテンツ分割部1810により、コンテンツ1800を、3つのブロック1811~1813に分割する。生成装置100は、統合部1820により、3つのブロック1811~1813を順番に連結し、シャッフリングコンテンツ1821を生成する。生成装置100は、ハッシュ関数1830を用いて、生成したシャッフリングコンテンツ1821に対応するハッシュ値1831を生成する。
【0119】
これにより、生成装置100は、衝突が発生し辛いハッシュ値1831を生成することができる。生成装置100は、コンテンツ1800の先頭の情報を、シャッフリングコンテンツ1821内に分散させた状態で、ハッシュ値1831を生成することができる。このため、攻撃者は、コンテンツ1800の先頭の情報を頼りに、ハッシュ値1831と同一の値を、ハッシュ値として生成可能な、コンテンツ1800とは異なる他のコンテンツを発見することができない。
【0120】
(全体処理手順)
次に、
図19を用いて、生成装置100が実行する、全体処理手順の一例について説明する。全体処理は、例えば、
図4に示したCPU401と、メモリ402や記録媒体405などの記憶領域と、ネットワークI/F403とによって実現される。
【0121】
図19は、全体処理手順の一例を示すフローチャートである。
図19において、生成装置100は、コンテンツの入力を受け付ける(ステップS1901)。
【0122】
次に、生成装置100は、
図20に後述する分割処理を実行し、コンテンツを複数のブロックに分割する(ステップS1902)。そして、生成装置100は、
図21に後述するコンテンツ統合処理を実行し、分割した複数のブロックを統合した統合データを生成する(ステップS1903)。
【0123】
次に、生成装置100は、
図22に後述する生成処理を実行し、ブロックごとのハッシュ値を生成する(ステップS1904)。そして、生成装置100は、
図23に後述するハッシュ値統合処理を実行し、キーとして、生成したハッシュ値を統合した統合ハッシュ値を生成する(ステップS1905)。
【0124】
次に、生成装置100は、生成した統合ハッシュ値をキーとして、生成した統合データに対応する全体ハッシュ値を生成する(ステップS1906)。そして、生成装置100は、生成した全体ハッシュ値を出力する(ステップS1907)。その後、生成装置100は、全体処理を終了する。
【0125】
(分割処理手順)
次に、
図20を用いて、生成装置100が実行する、分割処理手順の一例について説明する。分割処理は、例えば、
図4に示したCPU401と、メモリ402や記録媒体405などの記憶領域と、ネットワークI/F403とによって実現される。
【0126】
図20は、分割処理手順の一例を示すフローチャートである。
図20において、生成装置100は、分割数分のバケットを生成する(ステップS2001)。
【0127】
次に、生成装置100は、コンテンツの先頭から指定長単位に区切った複数の部分データのうち、コンテンツの先頭からの順序に従って、まだ読み出していない指定長のデータを読み出す(ステップS2002)。そして、生成装置100は、バケットの順序に従って、分割数分のバケットのいずれかのバケットを選択し、読み出したデータを、選択したバケットに追加する(ステップS2003)。
【0128】
次に、生成装置100は、コンテンツの中に、まだ読み出していない指定長のデータが残っているか否かを判定する(ステップS2004)。ここで、まだ読み出していない指定長のデータが残っている場合(ステップS2004:Yes)、生成装置100は、ステップS2002の処理に戻る。一方で、すべての指定長のデータを読み出している場合(ステップS2004:No)、生成装置100は、ステップS2005の処理に移行する。
【0129】
ステップS2005では、生成装置100は、それぞれのバケットに格納されたデータを、ブロックとして出力する(ステップS2005)。そして、生成装置100は、分割処理を終了する。
【0130】
(コンテンツ統合処理手順)
次に、
図21を用いて、生成装置100が実行する、コンテンツ統合処理手順の一例について説明する。コンテンツ統合処理は、例えば、
図4に示したCPU401と、メモリ402や記録媒体405などの記憶領域と、ネットワークI/F403とによって実現される。
【0131】
図21は、コンテンツ統合処理手順の一例を示すフローチャートである。
図21において、生成装置100は、複数のブロックと出力ファイルとを取得する(ステップS2101)。
【0132】
次に、生成装置100は、ブロックの順序に従って、複数のブロックのうち、まだ選択していないいずれかのブロックを選択する(ステップS2102)。そして、生成装置100は、選択したブロックの内容を出力ファイルに追加する(ステップS2103)。
【0133】
次に、生成装置100は、すべてのブロックを選択したか否かを判定する(ステップS2104)。ここで、まだ選択していないブロックが残っている場合(ステップS2104:No)、生成装置100は、ステップS2102の処理に戻る。一方で、すべてのブロックを選択している場合(ステップS2104:Yes)、生成装置100は、ステップS2105の処理に移行する。
【0134】
ステップS2105では、生成装置100は、出力ファイルを、統合データとして出力する(ステップS2105)。そして、生成装置100は、コンテンツ統合処理を終了する。
【0135】
(生成処理手順)
次に、
図22を用いて、生成装置100が実行する、生成処理手順の一例について説明する。生成処理は、例えば、
図4に示したCPU401と、メモリ402や記録媒体405などの記憶領域と、ネットワークI/F403とによって実現される。
【0136】
図22は、生成処理手順の一例を示すフローチャートである。
図22において、生成装置100は、複数のブロックを取得する(ステップS2201)。
【0137】
次に、生成装置100は、ブロックの順序に従って、複数のブロックのうち、まだ選択していないいずれかのブロックを選択する(ステップS2202)。そして、生成装置100は、ハッシュ関数を用いて、選択したブロックのハッシュ値を生成する(ステップS2203)。
【0138】
次に、生成装置100は、すべてのブロックを選択したか否かを判定する(ステップS2204)。ここで、まだ選択していないブロックが残っている場合(ステップS2204:No)、生成装置100は、ステップS2202の処理に戻る。一方で、すべてのブロックを選択している場合(ステップS2204:Yes)、生成装置100は、ステップS2205の処理に移行する。
【0139】
ステップS2205では、生成装置100は、ブロックごとのハッシュ値を出力する(ステップS2205)。そして、生成装置100は、生成処理を終了する。
【0140】
(ハッシュ値統合処理手順)
次に、
図23を用いて、生成装置100が実行する、ハッシュ値統合処理手順の一例について説明する。ハッシュ値統合処理は、例えば、
図4に示したCPU401と、メモリ402や記録媒体405などの記憶領域と、ネットワークI/F403とによって実現される。
【0141】
図23は、ハッシュ値統合処理手順の一例を示すフローチャートである。
図23において、生成装置100は、ブロックごとのハッシュ値を取得する(ステップS2301)。
【0142】
次に、生成装置100は、統合ハッシュ値を初期化する(ステップS2302)。そして、生成装置100は、ブロックの順序に従って、ブロックごとのハッシュ値のうち、まだ選択していないいずれかのブロックのハッシュ値を選択する(ステップS2303)。
【0143】
次に、生成装置100は、EOR演算を用いて、統合ハッシュ値に、選択したハッシュ値を合成する(ステップS2304)。そして、生成装置100は、すべてのブロックのハッシュ値を選択したか否かを判定する(ステップS2305)。
【0144】
ここで、まだ選択していないブロックのハッシュ値が残っている場合(ステップS2305:No)、生成装置100は、ステップS2303の処理に戻る。一方で、すべてのブロックのハッシュ値を選択している場合(ステップS2305:Yes)、生成装置100は、ステップS2306の処理に移行する。
【0145】
ステップS2306では、生成装置100は、統合ハッシュ値を、キーとして出力する(ステップS2306)。そして、生成装置100は、ハッシュ値統合処理を終了する。
【0146】
ここで、生成装置100は、
図19~
図23の各フローチャートの一部ステップの処理の順序を入れ替えて実行してもよい。例えば、ステップS1903と、ステップS1904,S1905の処理との順序は入れ替え可能である。また、生成装置100は、
図19~
図23の各フローチャートの一部ステップの処理を省略してもよい。例えば、ステップS1905の処理は省略可能である。
【0147】
以上説明したように、生成装置100によれば、所定のルールに従って、対象のコンテンツを複数のブロックに分割することができる。生成装置100によれば、分割した複数のブロックのそれぞれのブロックに対応するハッシュ値を生成することができる。生成装置100によれば、生成したハッシュ値を統合した統合ハッシュ値を生成することができる。生成装置100によれば、生成した統合ハッシュ値を出力することができる。これにより、生成装置100は、対象のコンテンツに対応するハッシュ値に関し、衝突が発生する確率の低減化を図ることができる。
【0148】
生成装置100によれば、生成した統合ハッシュ値をキーとして、対象のコンテンツ全体に対応する全体ハッシュ値を生成することができる。生成装置100によれば、生成した全体ハッシュ値を出力することができる。これにより、生成装置100は、対象のコンテンツに対応するハッシュ値に関し、衝突が発生する確率の低減化を図ることができる。生成装置100は、キーに基づくハッシュ値を利用可能にすることができる。
【0149】
生成装置100によれば、生成した統合ハッシュ値をキーとして、分割した複数のブロックを統合した統合データに基づいて、全体ハッシュ値を生成することができる。これにより、生成装置100は、対象のコンテンツに対応するハッシュ値に関し、衝突が発生する確率の更なる低減化を図ることができる。
【0150】
生成装置100によれば、対象のコンテンツを指定長単位に区切った場合の、対象のコンテンツに含まれる指定長のデータのそれぞれを、複数のブロックのそれぞれのブロックに、所定の順番に従って割り当てるルールを利用することができる。これにより、生成装置100は、コンテンツの先頭の情報が、複数のブロックのそれぞれのブロックに分散するようにすることができる。このため、生成装置100は、対象のコンテンツに対応するハッシュ値に関し、衝突が発生する確率の更なる低減化を図ることができる。
【0151】
生成装置100によれば、所定の順番に、シードに基づく疑似乱数機によって規定される順番を採用することができる。これにより、生成装置100は、乱数により、コンテンツの先頭の情報が、複数のブロックのそれぞれのブロックに分散する規則を解析し辛くすることができる。このため、生成装置100は、対象のコンテンツに対応するハッシュ値に関し、衝突が発生する確率の更なる低減化を図ることができる。
【0152】
生成装置100によれば、シードに、対象のコンテンツのうちの所定の箇所に基づいて生成される値を採用することができる。これにより、生成装置100は、シードを固定せず、対象のコンテンツに対応するハッシュ値に関し、衝突が発生する確率の更なる低減化を図ることができる。
【0153】
生成装置100によれば、指定長に、素数を採用することができる。これにより、生成装置100は、対象のコンテンツに対応するハッシュ値に関し、衝突が発生する確率の更なる低減化を図ることができる。
【0154】
生成装置100によれば、EOR演算により、統合ハッシュ値を生成することができる。これにより、生成装置100は、統合ハッシュ値を生成する際にかかる処理量の低減化を図ることができる。
【0155】
生成装置100によれば、生成したハッシュ値よりデータ長が大きい統合ハッシュ値を生成することができる。これにより、生成装置100は、対象のコンテンツに対応するハッシュ値に関し、衝突が発生する確率の更なる低減化を図ることができる。
【0156】
生成装置100によれば、複数のブロックに、素数である個数のブロックを採用することができる。これにより、生成装置100は、対象のコンテンツに対応するハッシュ値に関し、衝突が発生する確率の更なる低減化を図ることができる。
【0157】
生成装置100によれば、所定のルールに従って、対象のコンテンツを複数のブロックに分割することができる。生成装置100によれば、分割した複数のブロックを統合した統合データに基づいて、対象のコンテンツ全体に対応する全体ハッシュ値を生成することができる。これにより、生成装置100は、対象のコンテンツに対応するハッシュ値に関し、衝突が発生する確率の低減化を図ることができる。
【0158】
生成装置100によれば、対象のコンテンツを指定長単位に区切った場合の、対象のコンテンツに含まれる指定長のデータのそれぞれを、複数のブロックのそれぞれのブロックに、所定の順番に従って割り当てるルールを利用することができる。これにより、生成装置100は、コンテンツの先頭の情報が、複数のブロックのそれぞれのブロックに分散するようにすることができる。このため、生成装置100は、対象のコンテンツに対応するハッシュ値に関し、衝突が発生する確率の更なる低減化を図ることができる。
【0159】
なお、本実施の形態で説明した生成方法は、予め用意されたプログラムをPCやワークステーションなどのコンピュータで実行することにより実現することができる。本実施の形態で説明した生成プログラムは、コンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。記録媒体は、ハードディスク、フレキシブルディスク、CD(Compact Disc)-ROM、MO(Magneto Optical disc)、DVD(Digital Versatile Disc)などである。また、本実施の形態で説明した生成プログラムは、インターネットなどのネットワークを介して配布してもよい。
【0160】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0161】
(付記1)所定のルールに従って、対象のコンテンツの先頭の情報が、異なるブロックに分散するよう、前記対象のコンテンツを複数のブロックに分割し、
分割した前記複数のブロックのそれぞれのブロックに対応するハッシュ値を生成し、
生成した前記ハッシュ値を統合した統合ハッシュ値を生成し、
生成した前記統合ハッシュ値を出力する、
処理をコンピュータに実行させることを特徴とする生成プログラム。
【0162】
(付記2)生成した前記統合ハッシュ値をキーとして、前記対象のコンテンツ全体に対応する全体ハッシュ値を生成し、
生成した前記全体ハッシュ値を出力する、
処理を前記コンピュータに実行させることを特徴とする付記1に記載の生成プログラム。
【0163】
(付記3)前記全体ハッシュ値を生成する処理は、
生成した前記統合ハッシュ値をキーとして、分割した前記複数のブロックを統合した統合データに基づいて、前記全体ハッシュ値を生成する、ことを特徴とする付記2に記載の生成プログラム。
【0164】
(付記4)前記所定のルールは、前記対象のコンテンツを指定長単位に区切った場合の、前記対象のコンテンツに含まれる前記指定長のデータのそれぞれを、前記複数のブロックのそれぞれのブロックに、所定の順番に従って割り当てることにより、前記対象のコンテンツを、前記複数のブロックに分割するルールである、ことを特徴とする付記1~3のいずれか一つに記載の生成プログラム。
【0165】
(付記5)前記所定の順番は、シードに基づく疑似乱数機によって規定される順番である、ことを特徴とする付記4に記載の生成プログラム。
【0166】
(付記6)前記シードは、前記対象のコンテンツのうちの所定の箇所に基づいて生成される、ことを特徴とする付記5に記載の生成プログラム。
【0167】
(付記7)前記指定長は、素数である、ことを特徴とする付記4~6のいずれか一つに記載の生成プログラム。
【0168】
(付記8)前記統合ハッシュ値を生成する処理は、
EOR演算により、前記統合ハッシュ値を生成する、ことを特徴とする付記1~7のいずれか一つに記載の生成プログラム。
【0169】
(付記9)前記統合ハッシュ値を生成する処理は、
生成した前記ハッシュ値よりデータ長が大きい前記統合ハッシュ値を生成する、ことを特徴とする付記1~8のいずれか一つに記載の生成プログラム。
【0170】
(付記10)前記複数のブロックは、素数となる個数のブロックである、ことを特徴とする付記1~9のいずれか一つに記載の生成プログラム。
【0171】
(付記11)所定のルールに従って、対象のコンテンツの先頭の情報が、異なるブロックに分散するよう、前記対象のコンテンツを複数のブロックに分割し、
分割した前記複数のブロックを統合した、前記対象のコンテンツとは異なる統合データに基づいて、前記対象のコンテンツ全体に対応する全体ハッシュ値を生成し、
生成した前記全体ハッシュ値を出力する、
処理をコンピュータに実行させることを特徴とする生成プログラム。
【0172】
(付記12)前記所定のルールは、前記対象のコンテンツを指定長単位に区切った場合の、前記対象のコンテンツに含まれる前記指定長のデータのそれぞれを、前記複数のブロックのそれぞれのブロックに、所定の順番に従って割り当てることにより、前記対象のコンテンツを、前記複数のブロックに分割するルールである、ことを特徴とする付記11に記載の生成プログラム。
【0173】
(付記13)所定のルールに従って、対象のコンテンツの先頭の情報が、異なるブロックに分散するよう、前記対象のコンテンツを複数のブロックに分割し、
分割した前記複数のブロックのそれぞれのブロックに対応するハッシュ値を生成し、
生成した前記ハッシュ値を統合した統合ハッシュ値を生成し、
生成した前記統合ハッシュ値を出力する、
処理をコンピュータが実行することを特徴とする生成方法。
【0174】
(付記14)所定のルールに従って、対象のコンテンツの先頭の情報が、異なるブロックに分散するよう、前記対象のコンテンツを複数のブロックに分割し、
分割した前記複数のブロックのそれぞれのブロックに対応するハッシュ値を生成し、
生成した前記ハッシュ値を統合した統合ハッシュ値を生成し、
生成した前記統合ハッシュ値を出力する、
制御部を有することを特徴とする生成装置。
【符号の説明】
【0175】
100 生成装置
110,600,1200,1800 コンテンツ
200 ブロックチェーン管理システム
201 ノード端末
202 リーダー端末
210 ネットワーク
220 ブロックチェーン基盤
230 ブロックチェーン
400 バス
401 CPU
402 メモリ
403 ネットワークI/F
404 記録媒体I/F
405 記録媒体
500 記憶部
501 取得部
502 分割部
503 第1生成部
504 第1統合部
505 第2統合部
506 第2生成部
507 出力部
610,1211,1212,1213,1811,1812,1813 ブロック
620,1231 キー
1000 統合コンテンツ
1010 全体ハッシュ値
1100 ハッシュ値生成部
1110 同一性判定部
1120 同一性判定結果
1210,1810 コンテンツ分割部
1220,1250,1830 ハッシュ関数
1221,1222,1223,1251,1831 ハッシュ値
1230,1240,1820 統合部
1241,1821 シャッフリングコンテンツ