(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-06-02
(45)【発行日】2023-06-12
(54)【発明の名称】元帳の証明可能プルーニングシステム
(51)【国際特許分類】
H04L 9/32 20060101AFI20230605BHJP
【FI】
H04L9/32 200Z
(21)【出願番号】P 2022503829
(86)(22)【出願日】2020-07-21
(86)【国際出願番号】 KR2020009588
(87)【国際公開番号】W WO2021020794
(87)【国際公開日】2021-02-04
【審査請求日】2022-01-18
(31)【優先権主張番号】10-2019-0093684
(32)【優先日】2019-08-01
(33)【優先権主張国・地域又は機関】KR
(73)【特許権者】
【識別番号】518235631
【氏名又は名称】ブルーム・テクノロジー・インコーポレイテッド
【氏名又は名称原語表記】Bloom Technology, INC.
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ジュ,ヨンヒョン
【審査官】行田 悦資
(56)【参考文献】
【文献】国際公開第2019/032891(WO,A1)
【文献】特開2015-180097(JP,A)
【文献】国際公開第2008/026238(WO,A1)
【文献】米国特許出願公開第2017/0236123(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/32
(57)【特許請求の範囲】
【請求項1】
元帳の証明可能プルーニングシステムにおいて、
連結リスト方式に従って
、以前サーブツリーのルートハッシュ値R
n‐1を
データブロックT
nに含ませ、前記ルートハッシュ値R
n‐1が含まれ
る前記データブロックT
nをハッシュしてh(T
n)を算出し、算出されたh(T
n)と
前記以前サーブツリーの
前記ルートハッシュ値R
n‐1を合算した後、ハッシュしてh(h(T
n)|R
n‐1)を算出し、算出されたh(h(T
n)|R
n‐1)をバイナリマークルツリー構造の各ノードに順次追加してスキュードマークルツリーを拡張生成するスキュードマークルツリー生成モジュール、
を含む元帳の証明可能プルーニングシステム。
【請求項2】
過去
の所定のデータブロックT
kが前記スキュードマークルツリーに含まれているか
否かを検証するために、前記T
kと前記スキュードマークルツリーの所定
のルートハッシュ値h(T
i)(ここで、k<i<=n)を利用して順次ハッシュ値を演算して前記スキュードマークルツリーの最新ルートハッシュ値を算出し、算出された最新ルートハッシュ値が予め知っている最新ルートハッシュ値R
nと一致するか対比して前記
データブロックT
kの真偽可否を検証するノード真偽証明モジュールをさらに含むことを特徴とする請求項1に記載の元帳の証明可能プルーニングシステム。
【請求項3】
元帳の証明可能プルーニングシステムにおいて、
連結リスト方式に従って、
以前サーブツリーのルートハッシュ値R
n‐1を
データブロックT
nに含ませ、前記ルートハッシュ値R
n‐1が含まれ
る前記データブロックT
nをハッシュしてh(T
n)を算出し、算出されたh(T
n)と
前記以前サーブツリーの
前記ルートハッシュ値R
n‐1とジャンプリンクR
n‐(ベース^オフセット)を合算した後、ハッシュしてh(h(T
n)|R
n‐1|R
n‐(ベース^オフセット))を算出し、算出されたh(h(T
n)|R
n‐1|R
n‐(ベース^オフセット))をバイナリマークルツリー構造の各ノードに順次追加して、h‐スキュード(hierarchical‐skewed)マークルツリーを拡張生成するh‐スキュードマークルツリー生成モジュールを含み、
前記ジャンプリンクR
n‐(ベース^オフセット)は、前記h‐スキュードマークルツリー上の所定の過去時点のノード上のルートハッシュ値であり、
前記ベースは、所定間隔ごとにジャンプリンクを割り当てるために
所定のジャンプリンクの最短距離で
あり、
前記オフセットは、現在ノードの位置n
を前記ベースに分けた値の残りの値で
あり、
前記ジャンプリンクの距離は、ベース
オフセット(base
offset)値で算出されるように構成される、
ことを特徴とする元帳の証明可能プルーニングシステム。
【請求項4】
前記h‐スキュードマークルツリー生成モジュールは、
オフセット+(ベース
オフセット)*kのノードごとに前記ジャンプリンクを割り当てるように構成され、
前記kは
正の整数で構成されることを特徴とする請求項3に記載の元帳の証明可能プルーニングシステム。
【請求項5】
過去の所定のデータブロックT
kが前記h‐スキュードマークルツリーに含まれているか否かを検証するために前記T
kと前記h‐スキュードマークルツリーの所定
のルートハッシュ値h(T
i)(ここで、k<i<=n)を利用して順次ハッシュ値を演算して前記h‐スキュードマークルツリーの最新ルートハッシュ値を算出し、算出された最新ルートハッシュ値が予め知っている最新ルートハッシュ値R
nと一致するかを対比して前記
データブロックT
kの真偽可否を検証するノード真偽証明モジュールをさらに含むように構成されることを特徴とする請求項3に記載の元帳の証明可能プルーニングシステム。
【請求項6】
前記ノード真偽証明モジュールは、
下記手続きに従って前記h‐スキュードマークルツリーにハッシュ値R
yまたはデータブロックT
yが存在するのか否かを証明するように構成され、
1)最新ルートハッシュ値R
headから過去時点方向の所定距離内のリンク(ノード)を基準にしてR
yの時点と同一であるか、または未来にあるリンク(ノード)のうち、最も過去の時点に存在するジャンプリンクまたはリンク(ノード)を検索し、
2)前記検索された最も過去の時点に存在するジャンプリンクまたはリンクのハッシュ値から過去時点方向の所定距離内のリンク(ノード)を基準にしてR
yの時点と同一であるか、または未来にあるリンク(ノード)のうち、最も過去の時点に存在するジャンプリンクまたはリンク(ノード)を検索し、
3)2)過程を前記R
yに到逹するまで繰り返して、
4)前記T
yを利用して前記2)及び3)で繰り返して検索されたジャンプリンクまたはリンク(ノード)の集合に対して順次未来方向に向かうルートハッシュを計算し、
5)最終的に算出されたルートハッシュ値が前記R
headと同一であるかを対比し、その対比結果が同一であれば前記ハッシュ値R
yまたは
前記データブロックT
yが
前記h‐スキュードマークルツリーに存在すると証明されることを特徴とする請求項5に記載の元帳の証明可能プルーニングシステム。
【請求項7】
前記所定距離は、
ベースであることを特徴とする請求項6に記載の元帳の証明可能プルーニングシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、元帳(ledger)のプルーニング(pruning)システムに係り、具体的には、元帳の証明可能プルーニング(verifiable pruning)システムに関する。
【背景技術】
【0002】
既存のブロックチェーン(blockchain)やDAG(directed acyclic graph)のような分散元帳は、時間が経つにつれ元帳の大きさが大きくなって、ストレージ(storage)不足が大きい問題として台頭されている。
【0003】
高速化技術が発展するほどストレージ容量の不足現象はより大きい問題となっている。
【0004】
現在イーサリアム(ethereum)の場合は、20トランザクション(Tx)/秒(sec)、ビットコイン(bitcoin)は7Tx/secの処理速度を持っている。イーサリアムの場合は、1年間250GBのデータが蓄積されている。
【0005】
今後はさらに高いトランザクション処理速度も持つことができる。例えば、ブロックチェーンよりトランザクションの処理速度がずっと高いDAG(directed acyclic graph)‐AWTC(account‐wise transaction chain)元帳方式では、今後4kTx/secの目標設定も可能である。
【0006】
4kTx/secのトランザクション処理速度では、一日に生成される分散元帳の大きさが0.5kByte/Tx×4kTx/sec×60sec/min×60min/hour×24hours/dayであって、172.8GB/dayになる。
【0007】
全てのノードで毎日172.8GBのデータが積もるようになったら、時間がたつほど無数に多い容量のストレージが確保されなければならない問題点がある。
【0008】
高いトランザクション処理速度を持つ元帳構造では、元帳大きさの累積増加によるストレージ活用度の問題がより一層大きい問題となるしかない。
【0009】
処理速度が低いイーサリアム(ethereum)の場合も何年前の時点以前のデータを削除するプルーニング(pruning)をしていて、各ノードではその何年前の時点以後のデータのみを保有するようにしている。プルーニングしたデータは、古いデータは財団で別途管理しながら依頼が入ってくる度に配布する方式で利用されている。
【0010】
ここで、単純に既存のプルーニング(pruning)だけでも効率的に元帳を管理することに限界があると見られる。
【発明の概要】
【発明が解決しようとする課題】
【0011】
本発明の目的は、元帳の証明可能プルーニングシステムを提供することにある。
【課題を解決するための手段】
【0012】
第1実施例による元帳の証明可能プルーニングシステムは、連結リスト(linked list)方式に従って前記以前サーブツリーのルートハッシュ(root hash)値Rn‐1を前記データブロック(data block)Tnに含ませ、前記ルートハッシュ値Rn‐1が含まれたデータブロックTnをハッシュしてh(Tn)を算出し、算出されたh(Tn)と以前サーブツリーのルートハッシュ値Rn‐1を合算した後、ハッシュしてh(h(Tn)|Rn‐1)を算出し、算出されたh(h(Tn)|Rn‐1)をバイナリマークルツリー(binary merkle tree)構造の各ノードに順次追加してスキュードマークルツリー(skewed merkle tree)を拡張生成するスキュードマークルツリー生成モジュールを含むように構成されることができる。
【0013】
ここで、過去所定のデータブロックTkが前記スキュードマークルツリーに含まれているかを検証するために、前記Tkと前記スキュードマークルツリーの所定ルートハッシュ値h(Ti)(ここで、k<i<=n)を利用して順次ハッシュ値を演算して前記スキュードマークルツリーの最新ルートハッシュ値を算出し、算出された最新ルートハッシュ値が予め知っている最新ルートハッシュ値Rnと一致するか対比して前記ブロックTkの真偽可否を検証するノード真偽証明モジュールをさらに含むように構成されることができる。
【0014】
第2実施例による元帳の証明可能プルーニングシステムは、連結リスト(linked list)方式に従って前記以前サーブツリーのルートハッシュ(root hash)値Rn‐1を前記データブロック(data block)Tnに含ませ、前記ルートハッシュ値Rn‐1が含まれたデータブロックTnをハッシュしてh(Tn)を算出し、算出されたh(Tn)と以前サーブツリーのルートハッシュ値Rn‐1とジャンプリンク(jump link)Rn‐(ベース^オフセット)を合算した後、ハッシュしてh(h(Tn)|Rn‐1|Rn‐(ベース^オフセット))を算出し、算出されたh(h(Tn)|Rn‐1|Rn‐(ベース^オフセット))をバイナリマークルツリー(binary merkle tree)構造の各ノードに順次追加して、h‐スキュードマークルツリー(hierarchical‐skewed merkle tree)を拡張生成するh‐スキュードマークルツリー(hierarchical‐skewed merkle tree)生成モジュールを含むように構成されることができる。
【0015】
ここで、前記ジャンプリンクRn‐(ベース^オフセット)は、前記h‐スキュードマークルツリー上の所定過去時点のノード上のルートハッシュ値で、前記ベース(base)は、所定間隔ごとにジャンプリンクを割り当てるために予め決まったジャンプリンクの最短距離であって、前記オフセット(offset)は、現在ノードの位置n%ベースで構成されることができる。
【0016】
そして、前記ジャンプリンクの距離(dist)は、ベースオフセット(baseoffset)値に算出されるように構成されることができる。
【0017】
一方、前記h‐スキュードマークルツリー生成モジュールは、オフセット+(ベースオフセット)*kのノードごとに前記ジャンプリンクを割り当てるように構成されることができる。
【0018】
この時、前記kは、陽の整数で構成されることができる。
【0019】
一方、過去所定のデータブロックTkが前記h‐スキュードマークルツリーに含まれているか否かを検証するために前記Tkと前記h‐スキュードマークルツリーの所定ルートハッシュ値h(Ti)(ここで、k<i<=n)を利用して順次ハッシュ値を演算して前記h‐スキュードマークルツリーの最新ルートハッシュ値を算出し、算出された最新ルートハッシュ値が予め知っている最新ルートハッシュ値Rnと一致するかを対比して前記ブロックTkの真偽可否を検証するノード真偽証明モジュールをさらに含むように構成されることができる。
【0020】
ここで、前記ノード真偽証明モジュールは、下記の手続きにしたがって前記h‐スキュードマークルツリーにハッシュ値RyまたはデータブロックTyが存在するのか否かを証明するように構成され、1)最新ルートハッシュ値Rheadから過去時点方向の所定距離内のリンク(ノード)を基準にしてRyの時点と同一であるか、または未来にあるリンク(ノード)のうち、最も過去の時点に存在するジャンプリンクまたはリンク(ノード)を検索し、2)前記検索された最も過去の時点に存在するジャンプリンクまたはリンクのハッシュ値から過去時点方向の所定距離内のリンク(ノード)を基準にしてRyの時点と同一であるか、または未来にあるリンク(ノード)のうち、最も過去の時点に存在するジャンプリンクまたはリンク(ノード)を検索し、3)前記2)過程を前記Ryに到逹するまで繰り返して、4)前記Tyを利用して前記2)及び3)で繰り返して検索されたジャンプリンクまたはリンク(ノード)の集合に対して順次未来方向に向かうルートハッシュを計算し、5)最終的に算出されたルートハッシュ値が前記Rheadと同一であるかを対比し、その対比結果が同一であれば前記ハッシュ値RyまたはデータブロックTyがh‐スキュードマークルツリーに存在すると証明されることができる。
【0021】
ここで、前記所定距離はベースになれる。
【発明の効果】
【0022】
前述した元帳の証明可能プルーニングシステムによれば、元帳構造をスキュードマークルツリーで構成し、最新データのみを貯蔵して管理し、他のノードで提出するトランザクションの真偽を検証するように構成されることで、元帳の大きさの増加を最小化して維持することができる効果がある。
【0023】
特に、スキュードマークルツリーからアップグレードされたh‐スキュードマークルツリーに変換して元帳を管理するように構成されることで、時間がたつほど大きくなる証明用データ(proof)の大きさを画期的に減らすことができる効果がある。プルーフの大きさの縮小とともに数年前以上の古いデータの真偽検証をより少ない回数の演算ステップでもできるようにして、検証速度をさらに高められる効果がある。
【0024】
同時に、h‐スキュードマークルツリーでは、2つ以上の演算経路によって計算されたハッシュ値を相互対比して同一可否を確認するように構成されることで、新たに加えられるジャンプリンクの偽造可否を確認することができる効果がある。
【図面の簡単な説明】
【0025】
【
図1】本発明の実施例による元帳の証明可能プルーニングシステムのブロック構成図である。
【
図3】本発明の実施例によるスキュードマークルツリー生成アルゴリズムの概念図である。
【
図4】本発明の実施例によるスキュードマークルツリー生成アルゴリズムの概念図である。
【
図5】本発明の実施例によるh‐スキュードマークルツリー生成アルゴリズムの概念図である。
【
図6】本発明の実施例によるh‐スキュードマークルツリー生成アルゴリズムの概念図である。
【
図7】本発明の実施例によるh‐スキュードマークルツリー生成アルゴリズムの概念図である。
【
図8】本発明の実施例によるh‐スキュードマークルツリー生成アルゴリズムの概念図である。
【
図9】本発明の実施例によるh‐スキュードマークルツリー生成アルゴリズムの概念図である。
【
図10】本発明の実施例によるh‐スキュードマークルツリー生成アルゴリズムの概念図である。
【発明を実施するための形態】
【0026】
本発明は、多様な変更を加えることができ、様々な実施例を持つことができるところ、特定実施例を図面に例示して発明を実施するための具体的な内容について詳細に説明する。しかし、これは本発明を特定実施形態に対して限定しようとするものではなく、本発明の思想及び技術範囲に含まれる全ての変更、均等物ないし代替物を含むものとして理解しなければならない。各図面を説明しながら類似な参照符号を類似な構成要素に対して使用した。
【0027】
第1、第2、A、Bなどの用語は多様な構成要素を説明するために使われることができるが、前記構成要素は前記用語によって限定されてはならない。前記用語は一つの構成要素を他の構成要素から区別する目的のみに使われる。例えば、本発明の権利範囲を脱せずに第1構成要素は第2構成要素と命名されることができるし、同様に第2構成要素も第1構成要素と命名されることができる。及び/またはという用語は、複数の係る記載された項目の組み合わせまたは複数の係る記載された項目のいずれかの項目を含む。
【0028】
とある構成要素が他の構成要素に「連結されて」いたり「接続されて」いると言及された時は、その他の構成要素に直接連結されていたり、または接続されていることもできるが、中間に他の構成要素が存在することもできると理解しなければならない。一方、とある構成要素が他の構成要素に「直接連結されて」いたり「直接接続されて」いると言及された時は、中間に他の構成要素が存在しないものとして理解しなければならない。
【0029】
本出願で使用した用語は、単に特定実施例を説明するために使われたもので、本発明を限定しようとする意図ではない。単数の表現は文脈上明らかに違うことを意味しない限り、複数の表現を含む。本出願において、「含む」または「持つ」などの用語は、明細書上に記載された特徴、数字、段階、動作、構成要素、部品またはこれらを組み合わせたものが存在することを指定しようとするものであって、一つまたはそれ以上の他の特徴や数字、段階、動作、構成要素、部品またはこれらを組み合わせたものなどの存在または付加可能性を予め排除しないものとして理解しなければならない。
【0030】
他に断らない限り、技術的や科学的用語を含んで、ここで使われる全ての用語は、本発明が属する技術分野における通常の知識を有する者によって一般的に理解されるものと同一な意味を持っている。一般的に使われる辞典に定義されているもののような用語は、関連技術が文脈上持つ意味と一致する意味を持つものとして解釈しなければならず、本出願で明らかに定義しない限り、理想的や過度に形式的な意味で解釈されない。
【0031】
以下、本発明による好ましい実施例を添付の図面を参照して詳細に説明する。
【0032】
図1は本発明の実施例による元帳の証明可能プルーニングシステムのブロック構成図で、
図2は既存マークルツリーの構造図で、
図3及び
図4は本発明の実施例によるスキュードマークルツリー生成アルゴリズムの概念図で、
図5ないし
図10は本発明の実施例によるh‐スキュードマークルツリー生成アルゴリズムの概念図である。
【0033】
先ず、
図1を参照すれば、本発明の実施例による元帳の証明可能プルーニングシステムは、スキュードマークルツリー(skewed merkle tree)生成モジュール110またはh‐スキュードマークルツリー(hierarchical‐skewed merkle tree)生成モジュール120と、ノード真偽証明モジュール130を含むように構成されることができる。
【0034】
一般に、マークルツリー(merkle tree)は、ハッシュツリー(hash tree)ともいい、暗号学的ハッシュ値で構成されるツリーデータ構造を持つ。
【0035】
図2で見るように、マークルツリーは、とあるデータ(例えば、H
1、H
2、H
3、H
4、H
5)に対するハッシュ値(例えば、H
6、H
7、H
8、root)がマークルツリーに含まれていたことを証明するために使われる。すなわち、ルートノード(root node)までの経路に沿ってハッシュ値を計算して検証すればよい。最終計算値がルートハッシュ値と一致すれば証明される。例えば、H
1を検証するためには、H
2とH
8を利用して経路に沿ってハッシュ値を計算検証した結果がルートハッシュ値と一致すれば証明される。
【0036】
しかし、このようなマークルツリーを利用した証明方式を利用するにあたり、ハッシュ値(H6、H7、H8、root)のデータの大きさは小さい方だが、元々のデータ(H1、H2、H3、H4、H5)は相対的にデータの大きさがとても大きいしかない。
【0037】
元帳の証明可能プルーニングシステムは、このような既存の一般的なマークルツリー構造ではなく、これよりアップグレードされたスキュードマークルツリー構造と、スキュードマークルツリー構造からさらにアップグレードされたh‐スキュードマークルツリー構造を利用して古いデータを削除するプルーニング(pruning)をすると同時に、このようなアップグレードされたマークルツリー構造だけでも古いデータの真偽可否を完璧に証明できるように構成される。
【0038】
スキュードマークルツリー構造では、各ノードは最近のデータ、例えば、一日程度のデータのみを保有したまま全てのデータの真偽可否を検証することができる。
【0039】
分散元帳システムが一日4kTx/secのトランザクション処理速度を持つと仮定すれば、一日に蓄積されるデータである172.8GBのデータのみノードに保管して、残りの以前のデータは全てプルーニングし、プルーニングされたデータは保管されたデータ、すなわち、スキュードマークルツリーのルートハッシュ値を利用して真偽可否を完璧に検証するように構成される。
【0040】
これに加え、h‐スキュードマークルツリー構造では数年以上の非常に古いデータに対してスキュードマークルツリー構造よりずっと短いプルーフ(proof)長さを持つようになる。このような証明用データ(proof)の大きさは、時間がたつにつれ大きくなるが、本発明ではプルーフの大きさ自体を縮めて検証にかかる演算負担を減らし、検証にかかる時間も減らすことができる。
【0041】
また、
図1及び
図3を参照すれば、スキュードマークルツリー生成モジュール110は、データブロック(data block)を利用してバイナリマークルツリー(binary merkle tree)構造のスキュードマークルツリーを生成するように構成されることができる。
【0042】
スキュードマークルツリー生成モジュール110は、データブロック(data block)Tnと以前サーブツリーのルートハッシュ値Rn‐1が対を成すバイナリマークルツリー(binary merkle tree)構造の形態を持つスキュードマークルツリーを生成するように構成されることができる。
【0043】
スキュードマークルツリーの各ノードには初期データブロックT1とルートハッシュ値Rn‐1が貯蔵される。
【0044】
スキュードマークルツリー生成モジュール110は、各ノードのルートハッシュ値をh(h(Tn)|Rn‐1)によって算出して各ノードに順次貯蔵し、スキュードマークルツリーを拡張生成するように構成されることができる。
【0045】
スキュードマークルツリー生成モジュール110は、先ず新たに生成されるデータブロックTnに連結リスト(linked list)方式に従ってそれ以前のサーブツリーのルートハッシュ(root hash)値Rn‐1を含ませるように構成されることができる。
【0046】
そして、Tnをハッシュしてh(Tn)を算出し、その算出されたh(Tn)と以前サーブツリーのルートハッシュ値Rn‐1を合算した後、再びハッシュしてh(h(Tn)|Rn‐1)を算出するように構成されることができる。スキュードマークルツリーには、h(h(Tn)|Rn‐1)が順次貯蔵される。
【0047】
すなわち、スキュードマークルツリーは連結リストとバイナリマークルツリーの組み合わせと見られる。
【0048】
図3において、ハッシュ値R
1は一番目のデータブロックであるT
1とルートハッシュ初期値R
0を合わせてハッシュした値である。そして、ハッシュ値R
2は二番目のデータブロックであるT
2と一番最近のルートハッシュ値R
1をハッシュした値である。T
2には連結リスト方式によって一番最近のルートハッシュ値R
1が含まれているので、T
2とR
1をハッシュしてR
2を算出することができる。このような方式でT
3データブロックにはR
2を追加して前記過程を繰り返してスキュードマークルツリーを拡張生成するように構成される。
【0049】
一方、
図1のノード真偽証明モジュール130は、スキュードマークルツリー上の過去の特定ノードに対してその真偽可否を検証するように構成されることができる。
【0050】
図4において、T
2がスキュードマークルツリーに含まれていたのか否かを検証するためには、スキュードマークルツリーの最新データブロックであるT
4からこれに含まれたR
4を取得する。そして、検証のために与えられたT
2からその中に含まれたR
1を取得する。そして、T
2をハッシュしてh(T
2)を算出し、そしてR
1とh(T
2)を合わせてハッシュすればR
2を算出することができる。
【0051】
ここで、もし、T3のハッシュ値h(T3)を予め知っていたら、同一な方式でR3を計算することができるし、h(T4)も予め知っていたら、R3を利用してR4を計算することができる。このように計算されたR4が取得したR4と同一であれば、検証対象であるT2がスキュードマークルツリーに含まれているノードであることを証明することができる。
【0052】
すなわち、T2の検証はスキュードマークルツリーでh(T3)とh(T4)さえ知っていれば可能になる。
【0053】
これを一般化して適用すれば、ノード真偽証明モジュール130はスキュードマークルツリーで特定ノードのデータブロックTkを証明するために最新のルートハッシュ値Rnと中間段階のデータブロックのハッシュ値h(Ti)(ここで、k<i<=n)さえ予め知っていればTkの真偽証明ができると見られる。
【0054】
この時、中間段階の他のデータブロックを予め知っている必要がなく、Tk以前のとあるデータブロックやハッシュ値に対しては知らなくてもよい。
【0055】
スキュードマークルツリー構造では、全てのデータブロックを各ノードが直接全部保有しなくても、いくつかの小さなハッシュ値だけでもデータの真偽検証が可能である。これはネットワークの負荷減少にも多く寄与するようになる。
【0056】
しかし、スキュードマークルツリーもやはり短所がある。スキュードマークルツリーの各ノードは、連結リスト方式によって直ぐ以前のサーブツリーのハッシュ値のみ保有しているので、検証プロセスでは
図4のように全てのノードに対して一つずつ計算して演算しなければならない。スキュードマークルツリーは最近のデータに対する検証には有利であるが、数年単位の数千億トランザクションに対しては演算ステップが多くなって計算負荷が増加する短所がある。これを補完するために、h‐スキュードマークルツリーが利用されることができる。
【0057】
図1のh‐スキュードマークルツリー生成モジュール120は、
図5で見るように各ノードが直前のルートハッシュ値を保有することに加え、それよりずっと以前のノードのルートハッシュ値に対する情報をさらに保有するように構成される。ずっと以前のノードのルートハッシュ値を過去ツリーを参照するリンクとしてジャンプリンク(jump link)と定義する。すなわち、ジャンプリンクは過去のルートハッシュ値である。
【0058】
図5で見るように、ジャンプリンクは指数関数的なノード間の距離を持つようになるが、検証にかかる長い演算ステップを省略し、直ぐ過去ジャンプリンクのデータブロックに対して検証することができるようにする。すなわち、プルーフの大きさが減って演算ステップの回数も著しく減って、数年前のノードに対しても早く検証できるようにする。
【0059】
図5のジャンプリンクをさらに保有するh‐スキュードマークルツリーの各ノード値R
nは、h(h(T
n)|R
n‐1|R
n‐(ベース^オフセット))で整理されることができる。
【0060】
ここで、Rn‐(ベース^オフセット)は過去のある時点のノードのハッシュ値であるジャンプリンクである。
【0061】
ジャンプリンクでベース(base)は、所定間隔ごとにジャンプリンクを割り当てるために予め決まったジャンプリンクの最短距離である。ベースが3であれば3個のノード間隔でジャンプリンクが割り当てられる。
【0062】
そして、オフセット(offset)は現在ノードの位置nをベースに分けた値の残りの値、すなわち、n%ベースである。
【0063】
そして、現在ノードの位置nからジャンプリンクまでの距離(dist)はベースオフセット(baseoffset)値で算出されることができる。
【0064】
図5でベースが3でオフセットが1のジャンプリンクを例示している。
【0065】
図5を参照すれば、ジャンプリンクの距離はベース
オフセットすなわち、3
1として3である。
【0066】
ノードR4をよく見れば、R4の値はT4のハッシュ値と直ぐ前のハッシュ値R3、そしてジャンプリンクR1を合算した後でハッシュして得られることができることが分かる。
【0067】
図6はベースが3でオフセットが2のジャンプリンクを例示している。
【0068】
図6ではジャンプリンクの距離が3
2として9になることが分かる。
【0069】
しかし、オフセットが2である全てのノードにジャンプリンクを割り当てる必要はない。
図7のようにノード位置nでオフセット+(ベース
オフセット)*kのノードのみに割り当てることができる。ここで、kは陽の整数である。上記ノード以外のノードにはジャンプリンクを割り当てないこともある。
【0070】
図7で見るようにベースが1でオフセットが1であれば、1+3
1*kになってR
19、R
13、R
10、R
7、R
4、R
1にジャンプリンクが割り当てられている。そして、ベースが3でオフセットが2であれば、2+3
2*kになってR
20、R
11、R
2にジャンプリンクが割り当てられている。ベースが3でオフセットが3であれば、R
57、R
30、R
3にジャンプリンクが割り当てられる。
【0071】
図8は、
図7のジャンプリンクの割り当てが完了された状態を示している。ジャンプリンクの割り当ては、各オフセットがベースに至るまで繰り返し遂行されることを示す。
【0072】
一方、ブロックの検証は次のように行われることができる。
【0073】
h‐スキュードマークルツリーでルートハッシュ値Rxを持っていて、ある中間ハッシュ値にアクセスできる状況において、データブロックTyまたはその上位ノードRyがh‐スキュードマークルツリーに含まれていたか否かを検証するためには次の手続きにしたがう。
【0074】
1)最新のルートハッシュ値から過去時点方向の適切な距離(例えば、ベース)分のリンク(ノード)を基準にしてRyと同一であるか、未来にある一番過去のジャンプリンクまたは一般リンクを検索する。
【0075】
2)検索された過去のジャンプリンクまたは一般リンクのハッシュ値からまた過去時点方向の適切な距離(例えば、ベース)分をリンク(ノード)を基準にしてRyと同一であるか、未来にある一番過去のジャンプリンク或いは一般リンクを検索する。この過程をRyに到逹するまで繰り返す。
【0076】
3)Tyを利用して上記検索されたリンクの集合に対して順に未来方向に向かうルートハッシュを計算する。もし、最終計算結果がRheadと同一であれば、検証が完了されてh‐スキュードマークルツリーに存在することが証明される。
【0077】
図9は、R
59で始めてT
8を検証するためにR
8を捜すことを例示している。
【0078】
図9を参照すれば、R
headはR
59であり、R
59から適切な距離、すなわち、ベース3の距離分のリンク(ノード)R
58、R
57を値を参照し、R
57からオフセット3の距離、すなわち3
3のジャンプリンクの中でR
8よりは未来にある一番過去のリンクR
30を検索して照会する。
【0079】
ここで、また適切な距離、すなわち、ベース3の距離分のリンク(ノード)R29を照会する。R29でまたオフセット2の距離、すなわち、32のジャンプリンクR20とジャンプリンクR20のジャンプリンクR11を検索して照会する。ジャンプリンクR11はR29を基準にしてオフセット2のジャンプリンクの中でR8よりは未来にある一番過去のリンクになる。
【0080】
そして、R11でまた適切な距離内のリンクR10、R9、R8をそれぞれ検索して、最終的にR8に至る。
【0081】
そして、上記検証対象であるT8を利用して、また未来方向にルートハッシュ値を順次算出していく。最終算出されたルートハッシュ値がh‐スキュードマークルツリー上のR59と一致すれば、T8がh‐スキュードマークルツリー上に存在することが証明される。
【0082】
この過程で、R8からR9、R10、R11、R20、R29、R30、R57、R58、R59に至るまで、総9回の演算ステップが要求される。しかし、ジャンプリンクを利用しない場合は、R8からR59まで全てのノードを全て演算しなければならないので、総51演算ステップが要求される。著しく演算ステップが減ることが分かるし、元帳の大きさが大きくなれば相当な演算量と演算時間が減少されることができる。
【0083】
図10は実際の具現事例であって、ベースが10であるh‐スキュードマークルツリーを示す。ジャンプリンクは10
オフセットなので、10、10
2、10
3とジャンプリンクの距離が増え、距離が1999の場合、28ステップだけでも到達可能である。
【0084】
このように、元帳の証明可能プルーニングシステムは、全てのデータブロックを直接保有しなくてもハッシュ値のみでデータ検証が完璧に可能であるため、データの貯蔵量を大幅に減らすことができる。元帳も時間が経てばその大きさが顕著に大きくなるので、ジャンプリンクを利用した検索と演算が切実に必要となる。
【0085】
以上、実施例を参照して説明したが、該当技術分野における熟練された当業者は下記特許請求範囲に記載された本発明の思想及び領域から脱しない範囲内で本発明を多様に修正及び変更させることができることを理解することができる。