以下に、図面を参照して、本発明にかかるブロックチェーン生成システム、ブロックチェーン生成方法、および、ブロックチェーン生成プログラムの実施の形態を詳細に説明する。
(実施の形態にかかるブロックチェーン生成方法の一実施例)
図1は、実施の形態にかかるブロックチェーン生成方法の一実施例を示す説明図である。ブロックチェーン生成装置100は、ブロックチェーンを管理するコンピュータである。
ブロックチェーンは、データを管理するためのリストである。ブロックチェーンは、1以上のブロックを連結させたリストである。ブロックチェーンは、例えば、何らかの組織において生成され、記憶される。何らかの組織内の1以上のノードは、同一のブロックチェーンを共通して記憶し、管理する。ブロックは、1以上のデータをまとめたデータ集合である。
ここで、複数の組織のそれぞれの組織においてブロックチェーンが記憶されている状況において、複数の組織を合併しようとする場合がある。この場合、合併した後の複数の組織の状態に合うように、それぞれの組織におけるブロックチェーンを管理することが望まれる。
例えば、複数の組織が合併した後では、それぞれの組織におけるブロックチェーンに、同一のブロックが追加されていくように、それぞれの組織において生成されているブロックチェーンを管理しようとする要望がある。換言すれば、複数の組織が合併した後では、それぞれの組織におけるブロックチェーンを、組織間で共通化しようとする要望がある。
一方で、複数の組織が合併する前に、いずれかの組織におけるブロックチェーンに追加されていたブロックについては、複数の組織が合併した後でも、他の組織から参照されないようにしようとする要望がある。しかしながら、合併した後の複数の組織の状態に合わせて、上述した要望を満たすように、それぞれの組織におけるブロックチェーンを管理することは難しい。
例えば、複数の組織が合併する際、それぞれの組織におけるブロックチェーンを、所定のアプリケーションで監視し、所定のアプリケーションで一括して管理する場合が考えられる。この場合、アプリケーションを導入し、運用するコストがかかり、アプリケーションがセキュリティ上の脆弱性になりうる。
具体的には、所定のアプリケーションが、複数の組織が合併する前にブロックチェーンに追加されたブロックについて、それぞれの組織からのアクセスの制限を管理することになる。また、所定のアプリケーションが、合併時のブロックの正当性を保証することになる。このため、所定のアプリケーションのセキュリティを強化することが好ましく、所定のアプリケーションの運用にかかるコストの増大化を招く。
そこで、本実施の形態では、ブロックチェーンの仕組みを利用し、所定のタイミング以降には、それぞれの組織におけるブロックチェーンに、同一のブロックが追加されていくようにすることができるブロックチェーン生成方法について説明する。これによれば、ブロックチェーン生成方法は、合併した後の複数の組織の状態に合わせて、それぞれの組織におけるブロックチェーンを管理しやすくすることができる。
図1の例では、2つの組織においてブロックチェーンが記憶されている。具体的には、組織Aにおいては、ブロックチェーン110が記憶されている。ブロックチェーン110は、ブロック111,112を含む。組織Bにおいては、ブロックチェーン120が記憶されている。ブロックチェーン120は、ブロック121,122を含む。
ブロックチェーン生成装置100は、組織ごとに1以上含まれる。ブロックチェーン生成装置100は、いずれかの組織内のノードとして、いずれかの組織におけるブロックチェーンを管理する。以下の説明では、ブロックチェーン生成装置100が、組織A内のノードとして、組織Aにおけるブロックチェーン110を管理する場合について説明する。
ブロックチェーン生成装置100は、自装置が管理するブロックチェーンの最新のブロックに対応する第1のハッシュ値を取得する。最新のブロックに対応する第1のハッシュ値は、例えば、最新のブロックを所定の関数に代入することにより算出される、最新のブロックを示すハッシュ値である。最新のブロックに対応する第1のハッシュ値は、例えば、最新のブロックに設定されたハッシュ値をコピーしたハッシュ値であってもよい。ブロックチェーン生成装置100は、例えば、ブロックチェーン110の最新のブロック112に設定された第1のハッシュ値を取得する。
また、ブロックチェーン生成装置100は、自装置が管理するブロックチェーン以外の、他装置が管理するブロックチェーンの最新のブロックに対応する第2のハッシュ値を取得する。最新のブロックに対応する第2のハッシュ値は、例えば、最新のブロックを所定の関数に代入することにより算出される、最新のブロックを示すハッシュ値である。最新のブロックに対応する第2のハッシュ値は、例えば、最新のブロックに設定されたハッシュ値をコピーしたハッシュ値であってもよい。ブロックチェーン生成装置100は、例えば、ブロックチェーン120の最新のブロック122に設定された第2のハッシュ値を、他装置から受信する。
そして、ブロックチェーン生成装置100は、自装置が管理するブロックチェーンについて、第1のハッシュ値と、第2のハッシュ値とを有する中間ブロックを追加する。ブロックチェーン生成装置100は、例えば、ブロックチェーン110について、取得した第1のハッシュ値と、受信した第2のハッシュ値とを有する中間ブロック113を追加する。一方で、他装置も、同様に、ブロックチェーン120について、中間ブロック123を追加する。
次に、ブロックチェーン生成装置100は、自装置が管理するブロックチェーンに追加された中間ブロックが有する第1のハッシュ値と第2のハッシュ値とに基づき、所定の関数を用いて、第3のハッシュ値を算出する。所定の関数は、複数のブロックチェーンに共通する第3のハッシュ値を算出可能な関数である。
そして、ブロックチェーン生成装置100は、自装置が管理するブロックチェーンについて、第3のハッシュ値を有するブロックを追加する。ブロックチェーン生成装置100は、例えば、ブロックチェーン110について、ブロックチェーン110,120で共通する第3のハッシュ値を有するブロック114を追加する。一方で、他装置も、同様に、ブロックチェーン120について、ブロックチェーン110,120で共通する第3のハッシュ値を有するブロック124を追加する。
これにより、ブロックチェーン生成装置100は、所定の関数により、複数のブロックチェーンに共通する第3のハッシュ値が算出されるように、自装置が管理するブロックチェーンに、中間ブロックを追加することができる。そして、ブロックチェーン生成装置100は、自装置が管理するブロックチェーンに、複数のブロックチェーンに共通する第3のハッシュ値を有するブロックを追加することができる。結果として、それぞれのブロックチェーンに、中間ブロックの次に追加されるブロックが一致することになる。
このため、以降では、それぞれのブロックチェーンに、同一のブロックが追加されていくようになり、ブロックチェーン生成装置100は、ブロックチェーンの仕組みを利用して、複数のブロックチェーンを組織間で共通化することができる。このように、ブロックチェーン生成装置100は、自装置が管理するブロックチェーンを、合併した複数の組織の状態に合うように管理することができる。また、ブロックチェーン生成装置100は、ブロックチェーンの仕組みを利用して、合併前後でのブロックの整合性を保証することができる。
ブロックチェーン生成装置100は、自装置が管理するブロックチェーンについて、中間ブロック、および、中間ブロックに基づき生成された中間ブロックの次のブロックなどのような、特殊なブロックを残しておくことができる。このため、ブロックチェーン生成装置100は、後々、自装置が管理するブロックチェーンを共通化したタイミングを判別可能にすることができる。
一方で、ブロックチェーン生成装置100は、自装置が管理するブロックチェーンに、中間ブロックより前に追加されていたブロックについては、自装置で記憶しておけばよく、他装置に参照させなくてもよい。このため、ブロックチェーン生成装置100は、自装置が管理するブロックチェーンに、中間ブロックより前に追加されていたブロックに含まれる取引情報や個人情報や社外秘情報などがあれば保護することができ、セキュリティの向上を図ることができる。
また、ブロックチェーン生成装置100は、それぞれのブロックチェーンを管理するアプリケーションなどを導入しなくてもよく、アプリケーションの導入や運用による、人的または金銭的なコストの増大化を抑制することができる。また、ブロックチェーン生成装置100は、アプリケーションがセキュリティ上の脆弱性になることがないため、セキュリティの向上を図ることができる。
(ブロックチェーン生成システム200の一例)
次に、図2を用いて、図1に示したブロックチェーン生成装置100を適用した、ブロックチェーン生成システム200の一例について説明する。
図2は、ブロックチェーン生成システム200の一例を示す説明図である。図2において、ブロックチェーン生成システム200は、第1の組織における1以上のノード201と、第2の組織における1以上のノード202とを含む。
第1の組織において、1以上のノード201は、有線または無線のネットワーク211を介して接続される。ネットワーク211は、例えば、LAN(Local Area Network)やWAN(Wide Area Network)などである。
第2の組織において、1以上のノード202は、有線または無線のネットワーク212を介して接続される。ネットワーク212は、例えば、LANやWANなどである。
ブロックチェーン生成システム200において、第1の組織における1以上のノード201と、第2の組織における1以上のノード202とは、第1の組織と第2の組織が合併したことに応じて、有線または無線のネットワーク210を介して接続される。ネットワーク210は、例えば、インターネットなどである。
ノード201は、第1の組織におけるブロックチェーンを管理するコンピュータである。ノード201は、図1に示したブロックチェーン生成装置100によって実現される。ノード201は、例えば、サーバ、PC(Personal Computer)、タブレット端末、スマートフォン、ウェアラブル端末などである。
ノード202は、第2の組織におけるブロックチェーンを管理するコンピュータである。ノード202は、図1に示したブロックチェーン生成装置100によって実現される。ノード202は、例えば、サーバ、PC、タブレット端末、スマートフォン、ウェアラブル端末などである。
(ブロックチェーン生成装置100のハードウェア構成例)
次に、図3を用いて、ブロックチェーン生成装置100のハードウェア構成例について説明する。
図3は、ブロックチェーン生成装置100のハードウェア構成例を示すブロック図である。図3において、ブロックチェーン生成装置100は、CPU(Central Processing Unit)301と、メモリ302と、ネットワークI/F(Interface)303と、記録媒体I/F304と、記録媒体305とを有する。また、各構成部は、バス300によってそれぞれ接続される。
ここで、CPU301は、ブロックチェーン生成装置100の全体の制御を司る。メモリ302は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU301のワークエリアとして使用される。メモリ302に記憶されるプログラムは、CPU301にロードされることで、コーディングされている処理をCPU301に実行させる。メモリ302は、例えば、ブロックチェーンを記憶する。
ネットワークI/F303は、通信回線を通じて、ネットワーク210,211,212などに接続され、ネットワーク210,211,212などを介して、他のコンピュータに接続される。そして、ネットワークI/F303は、ネットワーク210,211,212などと内部とのインターフェースを司り、他のコンピュータからのデータの入出力を制御する。ネットワークI/F303には、例えば、モデムやLANアダプタなどを採用することができる。
記録媒体I/F304は、CPU301の制御に従って記録媒体305に対するデータのリード/ライトを制御する。記録媒体I/F304は、例えば、ディスクドライブ、SSD(Solid State Drive)、USB(Universal Serial Bus)ポートなどである。記録媒体305は、記録媒体I/F304の制御で書き込まれたデータを記憶する不揮発メモリである。記録媒体305は、例えば、ディスク、半導体メモリ、USBメモリなどである。記録媒体305は、ブロックチェーン生成装置100から着脱可能であってもよい。
ブロックチェーン生成装置100は、上述した構成部のほか、例えば、キーボード、マウス、ディスプレイ、プリンタ、スキャナ、マイク、スピーカーなどを有してもよい。また、ブロックチェーン生成装置100は、記録媒体I/F304や記録媒体305を複数有していてもよい。また、ブロックチェーン生成装置100は、記録媒体I/F304や記録媒体305を有していなくてもよい。
(ブロック400の記憶内容)
次に、図4を用いてブロックチェーンに含まれるブロックの一例として、ブロック400の記憶内容について説明する。ブロック400は、例えば、図3に示したブロックチェーン生成装置100のメモリ302や記録媒体305などの記憶領域により実現される。
図4は、ブロック400の記憶内容の一例を示す説明図である。図4に示すように、ブロック400は、直前ハッシュ値と、ナンス(Nonce)と、取引IDリストとのフィールドを有する。ブロック400は、各フィールドに情報を設定することにより、生成される。
直前ハッシュ値のフィールドには、ブロック400の直前にブロックチェーンに追加された直前ブロックに対応するハッシュ値が設定される。直前ブロックに対応するハッシュ値は、例えば、直前ブロックを所定の関数に代入することにより算出される、直前ブロックを示すハッシュ値である。ナンスのフィールドには、ナンスと呼ばれる、自由に設定可能な値が設定される。取引IDリストのフィールドには、過去の取引(transaction)に関する情報が設定される。取引に関する情報は、例えば、取引を特定するIDである。
(ブロックチェーン生成システム200の機能的構成例)
次に、ブロックチェーン生成システム200の機能的構成例について説明する。ブロックチェーン生成システム200は、第1追加部と、第2追加部とを有する。
第1追加部は、複数のブロックチェーンそれぞれに中間ブロックを追加する。第1追加部は、例えば、第1の組織における1以上のノード201を実現するブロックチェーン生成装置100の図5に示す各機能部と、第2の組織における1以上のノード202を実現するブロックチェーン生成装置100の図5に示す各機能部とによって実現される。
第2追加部は、複数のブロックチェーンそれぞれに共通する第3のハッシュ値を有するブロックを、複数のブロックチェーンそれぞれに追加する。第2追加部は、例えば、第1の組織における1以上のノード201を実現するブロックチェーン生成装置100の図5に示す各機能部と、第2の組織における1以上のノード202を実現するブロックチェーン生成装置100の図5に示す各機能部とによって実現される。
(ブロックチェーン生成装置100の機能的構成例)
次に、図5を用いて、ブロックチェーン生成装置100の機能的構成例について説明する。
図5は、ブロックチェーン生成装置100の機能的構成例を示すブロック図である。ブロックチェーン生成装置100は、記憶部500と、取得部501と、追加部502と、出力部503とを含む。
記憶部500は、例えば、図3に示したメモリ302や記録媒体305などの記憶領域によって実現される。以下では、記憶部500が、ブロックチェーン生成装置100に含まれる場合について説明するが、これに限らない。例えば、記憶部500が、ブロックチェーン生成装置100とは異なる装置に含まれ、記憶部500の記憶内容がブロックチェーン生成装置100から参照可能である場合があってもよい。
取得部501〜出力部503は、制御部となる機能である。取得部501〜出力部503は、具体的には、例えば、図3に示したメモリ302や記録媒体305などの記憶領域に記憶されたプログラムをCPU301に実行させることにより、または、ネットワークI/F303により、その機能を実現する。各機能部の処理結果は、例えば、図3に示したメモリ302や記録媒体305などの記憶領域に記憶される。
記憶部500は、ブロックチェーンを記憶する。ブロックチェーンは、1以上のブロックを連結したリストである。ブロックは、データをまとめたデータ集合である。ブロックの一例は、図4に示したブロック400である。ブロックは、複数の項目を有する。ブロックは、例えば、第1の項目と、第2の項目とを有する。ブロックが有する第1の項目は、例えば、ブロックの直前に連結されたブロックを示すハッシュ値が設定される、直前ハッシュ値の項目である。また、第1の項目は、ナンスの項目、または、取引IDリストの項目であってもよい。ブロックが有する第2の項目は、例えば、ナンスの項目である。また、第2の項目は、直前ハッシュ値の項目、または、取引IDリストの項目であってもよい。これにより、記憶部500は、ブロックチェーンを参照可能にすることができる。
また、記憶部500は、各機能部の処理に用いられる各種情報を記憶する。記憶部500は、例えば、所定の関数を記憶する。所定の関数は、ブロックに基づき、ブロックを示すハッシュ値を算出するハッシュ関数である。所定の関数は、例えば、ブロックが有する複数の項目の値に基づき、第3のハッシュ値を算出する関数である。所定の関数は、具体的には、ブロックが有する複数の項目のうち第1の項目の値と第2の項目の値とが入れ替わっても、算出される第3のハッシュ値が同一になる関数である。これにより、記憶部500は、各機能部の処理に用いられる各種情報を、各機能部に参照可能にすることができる。
取得部501は、自装置が管理するブロックチェーンの最新のブロックに対応するハッシュ値を取得する。最新のブロックに対応するハッシュ値は、例えば、最新のブロックに設定されたハッシュ値をコピーしたハッシュ値である。最新のブロックに対応するハッシュ値は、例えば、最新のブロックを所定の関数に代入することにより算出された、最新のブロックを示すハッシュ値である。取得部501は、例えば、自装置が管理するブロックチェーンの最新のブロックに対応するハッシュ値を自装置で算出しない場合に、自装置が管理するブロックチェーンの最新のブロックに対応するハッシュ値を、他装置から受信する。これにより、取得部501は、中間ブロックの生成に用いる情報を取得し、追加部502に提供することができる。
取得部501は、他装置が管理するブロックチェーンの最新のブロックに対応するハッシュ値を取得する。最新のブロックに対応するハッシュ値は、例えば、最新のブロックに設定されたハッシュ値をコピーしたハッシュ値である。最新のブロックに対応するハッシュ値は、例えば、最新のブロックを所定の関数に代入することにより算出された、最新のブロックを示すハッシュ値である。取得部501は、他装置が管理するブロックチェーンの最新のブロックに対応するハッシュ値を、他装置から受信する。これにより、取得部501は、中間ブロックの生成に用いる情報を取得し、追加部502に提供することができる。
追加部502は、自装置が管理するブロックチェーンについて、中間ブロックを追加する。ここで、複数のブロックチェーンのそれぞれのブロックチェーンに追加される中間ブロックは、同一でなくてもよいが、所定の関数に代入された場合には、所定の関数から算出される第3のハッシュ値を同一にすることができる。
自装置が管理するブロックチェーンに追加される中間ブロックは、例えば、自装置が管理するブロックチェーンの最新のブロックに対応する第1のハッシュ値と、他装置が管理するブロックチェーンの最新のブロックに対応する第2のハッシュ値とを有する。自装置が管理するブロックチェーンに追加される中間ブロックは、例えば、第1のハッシュ値が第1の項目の値に設定され、第2のハッシュ値が第2の項目の値に設定される。
中間ブロックは、具体的には、第1のハッシュ値が、直前ハッシュ値の項目の値に設定され、第2のハッシュ値が、ナンスの項目の値に設定される。また、中間ブロックは、具体的には、第1のハッシュ値が、直前ハッシュ値の項目の値に設定され、第2のハッシュ値が、取引IDリストの項目の値に設定されてもよい。また、中間ブロックは、具体的には、第1のハッシュ値が、ナンスの項目の値に設定され、第2のハッシュ値が、取引IDリストの項目の値に設定されてもよい。
追加部502は、具体的には、自装置が管理するブロックチェーンの最新のブロックに設定された第1のハッシュ値と、他装置が管理するブロックチェーンの最新のブロックに設定された第2のハッシュ値とを有する中間ブロックを追加する。追加部502は、図7〜図18に後述する動作例1、または、図20に後述する動作例2などのように、自装置が管理するブロックチェーンについて、中間ブロックを追加する。これにより、追加部502は、算出済みのハッシュ値を利用し、処理量の低減化を図ることができる。
追加部502は、具体的には、自装置が管理するブロックチェーンの最新のブロックを示す第1のハッシュ値と、他装置が管理するブロックチェーンの最新のブロックを示す第2のハッシュ値とを有する中間ブロックを追加してもよい。追加部502は、図21および図22に後述する動作例3などのように、自装置が管理するブロックチェーンについて、中間ブロックを追加する。これにより、追加部502は、第1のハッシュ値に基づいて、自装置が管理するブロックチェーンに中間ブロックの直前に追加されたブロックの改ざんの有無を判定可能にすることができる。また、追加部502は、第2のハッシュ値に基づいて、他装置が管理するブロックチェーンに中間ブロックの直前に追加されたブロックの改ざんの有無を判定可能にすることができる。
追加部502は、中間ブロックを追加した後、自装置が管理するブロックチェーンについて、共通ブロックを追加する。共通ブロックは、それぞれのブロックチェーンに共通して追加されるブロックである。共通ブロックは、第3のハッシュ値を有する。共通ブロックは、第3のハッシュ値を、第1の項目の値に設定される。第3のハッシュ値は、中間ブロックを示すハッシュ値である。
追加部502は、例えば、自装置が管理するブロックチェーンに追加された中間ブロックが有する第1のハッシュ値と第2のハッシュ値とに基づき、所定の関数を用いて、第3のハッシュ値を算出する。そして、追加部502は、自装置が管理するブロックチェーンについて、第3のハッシュ値を有する共通ブロックを追加する。これにより、追加部502は、以降、それぞれのブロックチェーンに同一のブロックが追加されていくようにすることができ、複数のブロックチェーンを共通化することができる。
追加部502は、例えば、第3のハッシュ値のほか、それぞれのブロックチェーンに中間ブロックの直前に追加されたブロックを示す第4のハッシュ値を算出してもよい。そして、追加部502は、自装置が管理するブロックチェーンについて、第3のハッシュ値のほか、第4のハッシュ値をさらに有する共通ブロックを追加する。これにより、追加部502は、第4のハッシュ値に基づいて、それぞれのブロックチェーンに中間ブロックの直前に追加されたブロックの改ざんの有無を判定可能にすることができる。
出力部503は、各機能部の処理結果を出力する。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、ネットワークI/F303による外部装置への送信、または、メモリ302や記録媒体305などの記憶領域への記憶である。これにより、出力部503は、各機能部の処理結果を利用者に通知可能にし、ブロックチェーン生成装置100の管理や運用、例えば、ブロックチェーン生成装置100の設定値の更新などを支援することができる。そして、出力部503は、ブロックチェーン生成装置100の利便性の向上を図ることができる。
ここでは、ブロックチェーン生成装置100が、単独で、各機能部を実現する場合について説明したが、これに限らない。例えば、図6に後述するように、ブロックチェーン生成システム200において、複数のブロックチェーン生成装置100が、協働して、各機能部を実現する場合があってもよい。
(ブロックチェーン生成システム200の機能的構成例)
次に、図6を用いて、ブロックチェーン生成システム200の機能的構成例について説明する。
図6は、ブロックチェーン生成システム200の機能的構成例を示すブロック図である。ブロックチェーン生成システム200は、例えば、ハッシュ値算出部601とブロック生成部602とを含むブロックチェーン生成装置100を有する。
また、ブロックチェーン生成システム200は、例えば、統合準備部603を含むブロックチェーン生成装置100を有する。また、ブロックチェーン生成システム200は、例えば、統合部604を含むブロックチェーン生成装置100を有する。
ハッシュ値算出部601は、自装置が管理するブロックチェーンに直前に追加されたブロックを示すハッシュ値を算出する。ブロック生成部602は、ハッシュ値算出部601が算出したハッシュ値がハッシュ値の項目の値として設定されたブロックを生成し、自装置が管理するブロックチェーンに追加する。
統合準備部603は、中間ブロックを生成する。統合準備部603は、自装置のメモリ302に記憶された、自装置が管理するブロックチェーンについて、生成した中間ブロックを追加する。統合準備部603は、追加部502の一部の動作を実現する。統合部604は、共通ブロックを生成する。統合部604は、自装置のメモリ302に記憶された、自装置が管理するブロックチェーンについて、生成した共通ブロックを追加する。統合部604は、追加部502の一部の動作を実現する。
(ブロックチェーン生成装置100の動作例1)
次に、図7〜図18を用いて、ブロックチェーン生成装置100の動作例1について説明する。
図7〜図18は、ブロックチェーン生成装置100の動作例1を示す説明図である。図7は、具体的には、複数の組織のそれぞれの組織におけるブロックチェーンを、組織間で共通化しようとする状況の一例を示す。
図7に示すように、A社においてA社ブロックチェーンが記憶されている。B社においてB社ブロックチェーンが記憶されている。ここで、A社とB社とが、合併や提携する状況において、A社ブロックチェーンとB社ブロックチェーンとを共通化し、AB社ブロックチェーンとして利用しようとする場合がある。
ここで、A社ブロックチェーンとB社ブロックチェーンとを共通化した場合でも、A社従業員が、A社ブロックチェーンと、AB社ブロックチェーンとを参照可能であるが、B社ブロックチェーンを参照可能ではないようにすることが望まれる。一方で、B社従業員が、B社ブロックチェーンと、AB社ブロックチェーンとを参照可能であるが、A社ブロックチェーンを参照可能ではないようにすることが望まれる。
以下の説明では、A社ブロックチェーンを「チェーンA」と表記する場合がある。以下の説明では、B社ブロックチェーンを「チェーンB」と表記する場合がある。次に、図8の説明に移行し、A社やB社における、ブロックチェーンに対するブロックの追加の流れについて説明する。
図8は、具体的には、ブロックチェーンに対するブロックの追加の流れを示す。図8に示すように、ブロックチェーン生成装置100は、一定時間ごとに、ブロックチェーンに新たなブロックを追加していく。ここでは、ブロックチェーンに、ブロック1が追加された後における、ブロックチェーン生成装置100の動作について説明する。
ブロックチェーン生成装置100は、具体的には、ブロックチェーンの最新のブロック1をハッシュ関数に代入し、最新のブロック1を示すハッシュ値「hash1」を算出する。次に、ブロックチェーン生成装置100は、算出したハッシュ値「hash1」を直前ハッシュ値の項目の値に設定した新たなブロック2を生成する。そして、ブロックチェーン生成装置100は、ブロックチェーンに、生成したブロック2を追加する。
ハッシュ関数は、直前ハッシュ値の項目の値、ナンスの項目の値、取引IDリストの項目の値が代入され、ハッシュ値を算出する。ハッシュ関数は、例えば、直前ハッシュ値の項目の値と、ナンスの項目の値とが入れ替わっても、同一のハッシュ値を算出する。ハッシュ関数は、例えば、下記式(1)または下記式(2)で表される。
ハッシュ値=f(直前ハッシュ値の項目の値*ナンスの項目の値*取引IDリストの項目の値) ・・・(1)
ハッシュ値=f(直前ハッシュ値の項目の値)*f(ナンスの項目の値)−f(取引IDリストの項目の値) ・・・(2)
ここで、f()は、SHA−256ハッシュ関数である。*は、乗算を示す。−は、減算を示す。上記式(1)および上記式(2)において、*の代わりに、A@B=B@Aを満たす任意の演算子@が利用されてもよい。上記式(1)および上記式(2)において、例えば、*の代わりに+が利用されてもよい。上記式(2)において、−の代わりに、任意の演算子@が利用されてもよい。
同様に、ブロックチェーン生成装置100は、ブロックチェーンの最新のブロック2をハッシュ関数に代入してハッシュ値「hash2」を算出し、算出したハッシュ値「hash2」を直前ハッシュ値の項目の値に設定した新たなブロック3を生成する。ブロックチェーン生成装置100は、ブロックチェーンに、生成したブロック3を追加する。
このように、ブロックチェーン生成装置100は、ブロックチェーンに新たなブロックを追加していく。ブロックチェーン生成装置100は、ブロックを追加する際、直前ブロックを示すハッシュ値を算出し、追加するブロックに含めることにより、ブロックチェーンの連結を実現する。次に、図9の説明に移行し、ブロックが追加されるブロックチェーンの共通化の流れについて説明する。
図9は、ブロックチェーンの共通化の流れを示す。図9に示すように、A社とB社とが合併するタイミングで、チェーンAとチェーンBとを共通化し、A社とB社とが合併するタイミング以降は、チェーンAにもチェーンBにも同一のブロックが追加されるようにする。これにより、A社とB社とが合併するタイミング以降は、A社においてもB社においても、同一のブロックを記憶していくことになる。
図9の例では、具体的には、チェーンAには、ブロック911〜913以降、ブロック931,932が追加されていくようにする。一方で、チェーンBには、ブロック921〜923以降、チェーンAと同じブロック931,932が追加されていくようにする。次に、図10の説明に移行し、ブロックチェーンの共通化の具体例について説明する。
図10は、ブロックチェーンの共通化の具体例を示す。図10の例では、A社とB社とが合併する前、A社におけるチェーンAには、ブロック1011,1012が含まれている。ここで、図11の説明に移行し、チェーンAにおける最新のブロック1012の具体例について説明する。
図11は、チェーンAにおける最新のブロック1012の具体例を示す。図11に示すように、ブロック1012は、直前ハッシュ値の項目に「A11..11」が設定される。ブロック1012は、ナンスの項目に「A22..22」が設定される。ブロック1012は、取引IDリストの項目に「A33..33, A44..44, ...」が設定される。直前ハッシュ値と、ナンスとは、例えば、256ビットである。
図10の説明に戻り、A社とB社とが合併する前、B社におけるチェーンBには、ブロック1021,1022が含まれている。ここで、図12の説明に移行し、チェーンBにおける最新のブロック1022の具体例について説明する。
図12は、チェーンBにおける最新のブロック1022の具体例を示す。図12に示すように、ブロック1022は、直前ハッシュ値の項目に「B55..55」が設定される。ブロック1022は、ナンスの項目に「B66..66」が設定される。ブロック1022は、取引IDリストの項目に「B77..77, B88..88, ...」が設定される。直前ハッシュ値と、ナンスとは、例えば、256ビットである。
図10の説明に戻り、A社側のブロックチェーン生成装置100は、例えば、A社とB社とが合併したことに応じて、中間ブロックとなるブロック1013を生成する。以下の説明では、A社側のブロックチェーン生成装置100を「ブロックチェーン生成装置100A」と表記する場合がある。
ブロックチェーン生成装置100Aは、ブロック1013の直前ハッシュ値の項目の値に、直前のブロック1012に設定されたハッシュ値「hashA」を設定する。また、ブロックチェーン生成装置100Aは、ブロック1013のナンスの項目の値に、チェーンBのブロック1022に設定されたハッシュ値「hashB」を設定する。ブロック1013の取引IDリストの項目は空である。
ここでは、ブロックチェーン生成装置100Aが、ブロック1013のナンスの項目の値に、チェーンBのブロック1022に設定されたハッシュ値「hashB」を設定する場合について説明したが、これに限らない。例えば、ブロックチェーン生成装置100Aが、ブロック1013の取引IDリストの項目の値に、チェーンBのブロック1022に設定されたハッシュ値「hashB」を設定する場合があってもよい。
ブロックチェーン生成装置100Aは、生成したブロック1013を、チェーンAに追加する。ここで、図13の説明に移行し、ブロック1013の具体例について説明する。
図13は、ブロック1013の具体例を示す。図13に示すように、ブロック1013は、直前ハッシュ値の項目に、ブロック1012からコピーした「A11..11」が設定される。ブロック1013は、ナンスの項目に、ブロック1022からコピーした「B55..55」が設定される。ブロック1013は、取引IDリストの項目に「0」が設定される。直前ハッシュ値と、ナンスとは、例えば、256ビットである。
図10の説明に戻り、B社側のブロックチェーン生成装置100は、例えば、A社とB社とが合併したことに応じて、中間ブロックとなるブロック1023を生成する。以下の説明では、B社側のブロックチェーン生成装置100を「ブロックチェーン生成装置100B」と表記する場合がある。
ブロックチェーン生成装置100Bは、ブロック1023の直前ハッシュ値の項目の値に、直前のブロック1022に設定されたハッシュ値「hashB」を設定する。また、ブロックチェーン生成装置100Bは、ブロック1023のナンスの項目の値に、チェーンAのブロック1012に設定されたハッシュ値「hashA」を設定する。ブロック1023の取引IDリストの項目は空である。
ここでは、ブロックチェーン生成装置100Bが、ブロック1023のナンスの項目の値に、チェーンAのブロック1012に設定されたハッシュ値「hashA」を設定する場合について説明したが、これに限らない。例えば、ブロックチェーン生成装置100Bが、ブロック1023の取引IDリストの項目の値に、チェーンAのブロック1012に設定されたハッシュ値「hashA」を設定する場合があってもよい。
ブロックチェーン生成装置100Bは、生成したブロック1023を、チェーンBに追加する。ここで、図14の説明に移行し、ブロック1023の具体例について説明する。
図14は、ブロック1023の具体例を示す。図14に示すように、ブロック1023は、直前ハッシュ値の項目に、ブロック1022からコピーした「B55..55」が設定される。ブロック1023は、ナンスの項目に、ブロック1012からコピーした「A11..11」が設定される。ブロック1023は、取引IDリストの項目に「0」が設定される。直前ハッシュ値と、ナンスとは、例えば、256ビットである。
このように、ブロックチェーン生成装置100Aと、ブロックチェーン生成装置100Bとは、ハッシュ関数に代入した場合に、同一のハッシュ値が算出されるような、ブロック1013と、ブロック1023とを生成することができる。これにより、ブロックチェーン生成装置100Aと、ブロックチェーン生成装置100Bとは、次に、チェーンAと、チェーンBとに追加されるブロックが、同一になるようにすることができる。次に、図15の説明に移行する。
図15に示すように、ブロックチェーン生成装置100Aは、例えば、チェーンAにブロック1013を追加すると、ブロック1013に基づいて、新たなブロック1511を生成する。
ブロックチェーン生成装置100Aは、ブロック1511の直前ハッシュ値の項目の値に、直前のブロック1013をハッシュ関数に代入することにより算出されたハッシュ値「hashAB」を設定する。また、ブロックチェーン生成装置100Aは、ブロック1511のナンスの項目の値に「nonceAB」を設定する。ブロック1511の取引IDリストの項目は空である。
ハッシュ関数は、直前ハッシュ値の項目の値、ナンスの項目の値、取引IDリストの項目の値が代入され、ハッシュ値を算出する。ハッシュ関数は、例えば、直前ハッシュ値の項目の値と、ナンスの項目の値とが入れ替わっても、同一のハッシュ値を算出する。ハッシュ関数は、例えば、上記式(1)または上記式(2)で表される。
ブロックチェーン生成装置100Aは、生成したブロック1511を、チェーンAに追加する。ここで、図16の説明に移行し、ブロック1511の具体例について説明する。
図16は、ブロック1511の具体例を示す。図16に示すように、ブロック1511は、直前ハッシュ値の項目に、ブロック1013から算出したハッシュ値「h(A11..11,B55..55,0)」が設定される。h(p,n,t)は、直前ハッシュ値pと、ナンスnと、取引IDリストtとに基づいて算出されるハッシュ値を示す。ブロック1511は、ナンスの項目に「AB99..99」が設定される。ブロック1511は、取引IDリストの項目に「0」が設定される。直前ハッシュ値と、ナンスとは、例えば、256ビットである。
図15の説明に戻り、ブロックチェーン生成装置100Bは、例えば、チェーンBにブロック1023を追加すると、ブロック1023に基づいて、新たなブロック1521を生成する。
ブロックチェーン生成装置100Bは、ブロック1521の直前ハッシュ値の項目の値に、直前のブロック1023をハッシュ関数に代入することにより算出されたハッシュ値「hashAB」を設定する。また、ブロックチェーン生成装置100Bは、ブロック1521のナンスの項目の値に「nonceAB」を設定する。ブロック1521の取引IDリストの項目は空である。
ハッシュ関数は、直前ハッシュ値の項目の値、ナンスの項目の値、取引IDリストの項目の値が代入され、ハッシュ値を算出する。ハッシュ関数は、例えば、直前ハッシュ値の項目の値と、ナンスの項目の値とが入れ替わっても、同一のハッシュ値を算出する。ハッシュ関数は、例えば、上記式(1)または上記式(2)で表される。
ブロックチェーン生成装置100Bは、生成したブロック1521を、チェーンBに追加する。ここで、図17の説明に移行し、ブロック1521の具体例について説明する。
図17は、ブロック1521の具体例を示す。図17に示すように、ブロック1521は、直前ハッシュ値の項目に、ブロック1023から算出したハッシュ値「h(B55..55,A11..11,0)」が設定される。ブロック1521は、ナンスの項目に「AB99..99」が設定される。ブロック1521は、取引IDリストの項目に「0」が設定される。直前ハッシュ値と、ナンスとは、例えば、256ビットである。
ここで、上述したように、ハッシュ関数は、例えば、直前ハッシュ値の項目の値と、ナンスの項目の値とが入れ替わっても、同一のハッシュ値を算出する。このため、h(A11..11,B55..55,0)=h(B55..55,A11..11,0)である。結果として、ブロック1511と、ブロック1521とが同一になる。これにより、以降は、ブロックチェーン生成装置100Aと、ブロックチェーン生成装置100Bとは、チェーンAと、チェーンBとを共通化することができる。次に、図18の説明に移行する。
図18に示すように、チェーンAにブロック1511が追加され、かつ、チェーンBにブロック1521が追加された後、ブロックチェーン生成装置100Aと、ブロックチェーン生成装置100Bとが、ネットワーク210を介して接続される。そして、ブロックチェーン生成装置100Aと、ブロックチェーン生成装置100Bとが、ネットワーク210を介して、取引に関する情報などを共有する。
これにより、以降では、チェーンAと、チェーンBとに、同一のブロックが追加されていくようになり、チェーンAと、チェーンBとは、チェーンABとして共通化され、利用される。また、チェーンAと、チェーンBとを共通化した形跡が、チェーンAと、チェーンBとに残っているため、後々に、チェーンAと、チェーンBとが共通化されたタイミングが判別可能になる。
ここで、チェーンAに追加されたブロック1511と、チェーンBに追加されたブロック1521とは、さらに、ブロック1012を示すハッシュ値と、ブロック1022を示すハッシュ値とを有するようにしてもよい。これにより、後々、ブロック1012と、ブロック1022とについて、改ざんの有無が判定可能になる。
(動作例1におけるブロックチェーン管理処理手順の一例)
次に、図19を用いて、動作例1におけるブロックチェーン管理処理手順の一例について説明する。
図19は、動作例1におけるブロックチェーン管理処理手順の一例を示すフローチャートである。ブロックチェーン生成装置100は、自装置が管理するブロックチェーンにおける直前ブロックのハッシュ値の項目の値に設定されたハッシュ値を取得する(ステップS1901)。
次に、ブロックチェーン生成装置100は、他装置が管理するブロックチェーンにおける直前ブロックのハッシュ値の項目の値に設定されたハッシュ値を、他装置から受信する(ステップS1902)。そして、ブロックチェーン生成装置100は、ハッシュ値の項目に、取得したハッシュ値を設定し、かつ、ナンスの項目に、受信したハッシュ値を設定した新たなブロックを生成し、自装置が管理するブロックチェーンに追加する(ステップS1903)。
次に、ブロックチェーン生成装置100は、追加したブロックを示すハッシュ値を算出する(ステップS1904)。そして、ブロックチェーン生成装置100は、ハッシュ値の項目に、算出したハッシュ値を設定した新たなブロックを生成し、自装置が管理するブロックチェーンに追加する(ステップS1905)。
次に、ブロックチェーン生成装置100は、他装置との協調動作を開始する(ステップS1906)。そして、ブロックチェーン生成装置100は、ブロックチェーン管理処理を終了する。これにより、ブロックチェーン生成装置100は、複数のブロックチェーンを共通化することができる。
(ブロックチェーン生成装置100の動作例2)
次に、図20を用いて、ブロックチェーン生成装置100の動作例2について説明する。動作例1は、ブロックチェーン生成システムにおいて、2つのブロックチェーンを共通化する場合についての動作例である。これに対し、動作例2は、ブロックチェーン生成システムにおいて、3以上のブロックチェーンを共通化する場合についての動作例である。
図20は、ブロックチェーン生成装置100の動作例2を示す説明図である。図20の例は、A社とB社とC社とが合併する際、A社におけるチェーンAと、B社におけるチェーンBと、C社におけるチェーンCとが共通化される場合についての一例である。
合併前では、A社におけるチェーンAには、ブロック2011,2012が含まれている。合併前では、B社におけるチェーンBには、ブロック2021,2022が含まれている。合併前では、C社におけるチェーンCには、ブロック2031,2032が含まれている。
A社側のブロックチェーン生成装置100は、例えば、合併に応じて、ブロック2013を生成する。以下の説明では、A社側のブロックチェーン生成装置100を「ブロックチェーン生成装置100A」と表記する場合がある。ブロックチェーン生成装置100Aは、ブロック2013の直前ハッシュ値の項目の値に、直前のブロック2012に設定されたハッシュ値「hashA」を設定する。
また、ブロックチェーン生成装置100Aは、チェーンBのブロック2022に設定されたハッシュ値「hashB」と、チェーンCのブロック2032に設定されたハッシュ値「hashC」を乗算する。ブロックチェーン生成装置100Aは、ブロック2013のナンスの項目の値に、乗算結果「hashB*hashC」を設定する。ブロック2013の取引IDリストの項目は空である。ブロックチェーン生成装置100Aは、生成したブロック2013を、チェーンAに追加する。
B社側のブロックチェーン生成装置100は、例えば、合併に応じて、ブロック2023を生成する。以下の説明では、B社側のブロックチェーン生成装置100を「ブロックチェーン生成装置100B」と表記する場合がある。ブロックチェーン生成装置100Bは、ブロック2023の直前ハッシュ値の項目の値に、直前のブロック2022に設定されたハッシュ値「hashB」を設定する。
また、ブロックチェーン生成装置100Bは、チェーンAのブロック2012に設定されたハッシュ値「hashA」と、チェーンCのブロック2032に設定されたハッシュ値「hashC」とを乗算する。ブロックチェーン生成装置100Bは、ブロック2023のナンスの項目の値に、乗算結果「hashA*hashC」を設定する。ブロック2023の取引IDリストの項目は空である。ブロックチェーン生成装置100Bは、生成したブロック2023を、チェーンBに追加する。
C社側のブロックチェーン生成装置100は、例えば、合併に応じて、ブロック2033を生成する。以下の説明では、C社側のブロックチェーン生成装置100を「ブロックチェーン生成装置100C」と表記する場合がある。ブロックチェーン生成装置100Cは、ブロック2033の直前ハッシュ値の項目の値に、直前のブロック2032に設定されたハッシュ値「hashC」を設定する。
また、ブロックチェーン生成装置100Cは、チェーンAのブロック2012に設定されたハッシュ値「hashA」と、チェーンBのブロック2022に設定されたハッシュ値「hashB」とを乗算する。ブロックチェーン生成装置100Cは、ブロック2033のナンスの項目の値に、乗算結果「hashA*hashB」を設定する。ブロック2033の取引IDリストの項目は空である。ブロックチェーン生成装置100Cは、生成したブロック2033を、チェーンCに追加する。
このように、ブロックチェーン生成装置100A〜100Cは、ハッシュ関数に代入した場合に、同一のハッシュ値が算出されるような、ブロック2013と、ブロック2023と、ブロック2033とを生成することができる。これにより、ブロックチェーン生成装置100Aと、ブロックチェーン生成装置100Bと、ブロックチェーン生成装置100Cとは、次に、チェーンAと、チェーンBと、チェーンCとに追加されるブロックが、同一になるようにすることができる。
ブロックチェーン生成装置100Aは、例えば、チェーンAにブロック2013を追加すると、ブロック2013に基づいて、新たなブロック2014を生成する。ブロックチェーン生成装置100Aは、ブロック2014の直前ハッシュ値の項目の値に、直前のブロック2013をハッシュ関数に代入することにより算出されたハッシュ値「hashABC」を設定する。
また、ブロックチェーン生成装置100Aは、ブロック2014のナンスの項目の値に「nonceABC」を設定する。ブロック2014の取引IDリストの項目は空である。ハッシュ関数は、例えば、上記式(1)で表される。ブロックチェーン生成装置100Aは、生成したブロック2014を、チェーンAに追加する。
ブロックチェーン生成装置100Bは、例えば、チェーンBにブロック2023を追加すると、ブロック2023に基づいて、新たなブロック2024を生成する。ブロックチェーン生成装置100Bは、ブロック2024の直前ハッシュ値の項目の値に、直前のブロック2023をハッシュ関数に代入することにより算出されたハッシュ値「hashABC」を設定する。
また、ブロックチェーン生成装置100Bは、ブロック2024のナンスの項目の値に「nonceABC」を設定する。ブロック2024の取引IDリストの項目は空である。ハッシュ関数は、例えば、上記式(1)で表される。ブロックチェーン生成装置100Bは、生成したブロック2024を、チェーンBに追加する。
ブロックチェーン生成装置100Cは、例えば、チェーンCにブロック2033を追加すると、ブロック2033に基づいて、新たなブロック2034を生成する。ブロックチェーン生成装置100Cは、ブロック2034の直前ハッシュ値の項目の値に、直前のブロック2033をハッシュ関数に代入することにより算出されたハッシュ値「hashABC」を設定する。
また、ブロックチェーン生成装置100Cは、ブロック2034のナンスの項目の値に「nonceABC」を設定する。ブロック2034の取引IDリストの項目は空である。ハッシュ関数は、例えば、上記式(1)で表される。ブロックチェーン生成装置100Cは、生成したブロック2034を、チェーンCに追加する。
ここで、上記式(1)で表されるハッシュ関数は、例えば、直前ハッシュ値の項目の値と、ナンスの項目の値とに設定される、hashAとhashBとhashCとが入れ替わっても、同一のハッシュ値を算出することができる。結果として、ブロック2014と、ブロック2024と、ブロック2034とが同一になる。これにより、以降は、ブロックチェーン生成装置100Aと、ブロックチェーン生成装置100Bと、ブロックチェーン生成装置100Cとは、チェーンAと、チェーンBと、チェーンCとを共通化することができる。
(動作例2におけるブロックチェーン管理処理手順の一例)
動作例2におけるブロックチェーン管理処理手順の一例は、図19に示した動作例1におけるブロックチェーン管理処理手順の一例と同様であるため、説明を省略する。
(ブロックチェーン生成装置100の動作例3)
次に、図21および図22を用いて、ブロックチェーン生成装置100の動作例3について説明する。動作例1は、ブロックチェーン生成装置100が、中間ブロックを生成する際、直前ブロックのハッシュ値を中間ブロックにコピーする場合についての動作例である。これに対し、動作例3は、ブロックチェーン生成装置100が、中間ブロックを生成する際、直前ブロックを示すハッシュ値を算出して、中間ブロックに含める場合についての動作例である。
図21および図22は、ブロックチェーン生成装置100の動作例3を示す説明図である。図21の例は、A社とB社とが合併する際、A社におけるチェーンAと、B社におけるチェーンBとが共通化される場合についての一例である。
合併前では、A社におけるチェーンAには、ブロック2111,2112が含まれている。合併前では、B社におけるチェーンBには、ブロック2121,2122が含まれている。
A社側のブロックチェーン生成装置100は、例えば、合併に応じて、ブロック2113を生成する。以下の説明では、A社側のブロックチェーン生成装置100を「ブロックチェーン生成装置100A」と表記する場合がある。
ブロックチェーン生成装置100Aは、ハッシュ関数を用いて直前のブロック2112を示すハッシュ値「hashA’」を算出する。ハッシュ関数は、例えば、上記式(1)または上記式(2)で表される。ブロックチェーン生成装置100Aは、算出したハッシュ値「hashA’」を、ブロック2113の直前ハッシュ値の項目の値に設定する。
ブロックチェーン生成装置100Aは、ブロックチェーン生成装置100Bがハッシュ関数を用いて算出した、チェーンBのブロック2122を示すハッシュ値「hashB’」を、ブロックチェーン生成装置100Bから受信する。ブロックチェーン生成装置100Aは、受信したハッシュ値「hashB’」を、ブロック2113のナンスの項目の値に設定する。ブロック2113の取引IDリストの項目は空である。ブロックチェーン生成装置100Aは、生成したブロック2113を、チェーンAに追加する。
B社側のブロックチェーン生成装置100は、例えば、合併に応じて、ブロック2123を生成する。以下の説明では、B社側のブロックチェーン生成装置100を「ブロックチェーン生成装置100B」と表記する場合がある。
ブロックチェーン生成装置100Bは、ハッシュ関数を用いて直前のブロック2122を示すハッシュ値「hashB’」を算出する。ハッシュ関数は、例えば、上記式(1)または上記式(2)で表される。ブロックチェーン生成装置100Bは、算出したハッシュ値「hashB’」を、ブロック2123の直前ハッシュ値の項目の値に設定する。
ブロックチェーン生成装置100Bは、ブロックチェーン生成装置100Aがハッシュ関数を用いて算出した、チェーンAのブロック2112を示すハッシュ値「hashA’」を、ブロックチェーン生成装置100Aから受信する。ブロックチェーン生成装置100Bは、受信したハッシュ値「hashA’」を、ブロック2123のナンスの項目の値に設定する。ブロック2123の取引IDリストの項目は空である。ブロックチェーン生成装置100Bは、生成したブロック2123を、チェーンBに追加する。
このように、ブロックチェーン生成装置100Aと、ブロックチェーン生成装置100Bとは、ハッシュ関数に代入した場合に、同一のハッシュ値が算出されるような、ブロック2113と、ブロック2123とを生成することができる。これにより、ブロックチェーン生成装置100Aと、ブロックチェーン生成装置100Bとは、次に、チェーンAと、チェーンBとに追加されるブロックが、同一になるようにすることができる。
ブロックチェーン生成装置100Aは、例えば、チェーンAにブロック2113を追加すると、ブロック2113に基づいて、新たなブロック2211を生成する。ブロックチェーン生成装置100Aは、ブロック2211の直前ハッシュ値の項目の値に、直前のブロック2113をハッシュ関数に代入することにより算出されたハッシュ値「hashAB」を設定する。
また、ブロックチェーン生成装置100Aは、ブロック2211のナンスの項目の値に「nonceAB」を設定する。ブロック2211の取引IDリストの項目は空である。ハッシュ関数は、例えば、上記式(1)または上記式(2)で表される。ブロックチェーン生成装置100Aは、生成したブロック2211を、チェーンAに追加する。
ブロックチェーン生成装置100Bは、例えば、チェーンBにブロック2123を追加すると、ブロック2123に基づいて、新たなブロック2221を生成する。ブロックチェーン生成装置100Bは、ブロック2221の直前ハッシュ値の項目の値に、直前のブロック2123をハッシュ関数に代入することにより算出されたハッシュ値「hashAB」を設定する。
また、ブロックチェーン生成装置100Bは、ブロック2221のナンスの項目の値に「nonceAB」を設定する。ブロック2221の取引IDリストの項目は空である。ハッシュ関数は、例えば、上記式(1)または上記式(2)で表される。ブロックチェーン生成装置100Bは、生成したブロック2221を、チェーンBに追加する。
ここで、ハッシュ関数は、例えば、直前ハッシュ値の項目の値と、ナンスの項目の値が入れ替わっても、同一のハッシュ値を算出することができる。結果として、ブロック2211と、ブロック2221とが同一になる。これにより、以降は、ブロックチェーン生成装置100Aと、ブロックチェーン生成装置100Bとは、チェーンAと、チェーンBとを共通化することができる。
(動作例3におけるブロックチェーン管理処理手順の一例)
次に、図23を用いて、動作例3におけるブロックチェーン管理処理手順の一例について説明する。
図23は、動作例3におけるブロックチェーン管理処理手順の一例を示すフローチャートである。ブロックチェーン生成装置100は、自装置が管理するブロックチェーンにおける直前ブロックを示すハッシュ値を算出する(ステップS2301)。
次に、ブロックチェーン生成装置100は、他装置が管理するブロックチェーンにおける直前ブロックを示すハッシュ値を、他装置から受信する(ステップS2302)。そして、ブロックチェーン生成装置100は、ハッシュ値の項目に、算出したハッシュ値を設定し、かつ、ナンスの項目に、受信したハッシュ値を設定した新たなブロックを生成し、自装置が管理するブロックチェーンに追加する(ステップS2303)。
次に、ブロックチェーン生成装置100は、追加したブロックを示すハッシュ値を算出する(ステップS2304)。そして、ブロックチェーン生成装置100は、ハッシュ値の項目に、算出したハッシュ値を設定した新たなブロックを生成し、自装置が管理するブロックチェーンに追加する(ステップS2305)。
次に、ブロックチェーン生成装置100は、他装置との協調動作を開始する(ステップS2306)。そして、ブロックチェーン生成装置100は、ブロックチェーン管理処理を終了する。これにより、ブロックチェーン生成装置100は、複数のブロックチェーンを共通化することができる。
以上説明したように、ブロックチェーン生成装置100によれば、自装置が管理するブロックチェーンの最新のブロックに対応する第1のハッシュ値と、他装置が管理するブロックチェーンの最新のブロックに対応する第2のハッシュ値とを取得することができる。ブロックチェーン生成装置100によれば、自装置が管理するブロックチェーンに、第1のハッシュ値と第2のハッシュ値とを有する中間ブロックを追加することができる。ブロックチェーン生成装置100によれば、所定の関数を用いて、自装置が管理するブロックチェーンに、複数のブロックチェーンで共通するハッシュ値を有するブロックを追加することができる。これにより、ブロックチェーン生成装置100は、自装置が管理するブロックチェーンに、複数のブロックチェーンに共通する第3のハッシュ値を有するブロックを追加することができ、それぞれのブロックチェーンを組織間で共通化することができる。
ブロックチェーン生成装置100によれば、所定の関数として、ブロックが有する複数の項目のうち第1の項目の値と第2の項目の値とが入れ替わっても、算出されるハッシュ値が同一になる関数を用いることができる。ブロックチェーン生成装置100によれば、第1のハッシュ値が第1の項目の値に設定され、かつ、第2のハッシュ値が第2の項目の値に設定された中間ブロックを生成することができる。これにより、ブロックチェーン生成装置100は、それぞれのブロックチェーンに追加された中間ブロックから算出される第3のハッシュ値が同一になるようにすることができる。
ブロックチェーン生成装置100によれば、第1のハッシュ値を、ブロックの直前に連結されたブロックを示すハッシュ値が設定される第1の項目の値に設定し、第2のハッシュ値を、ナンスが設定される第2の項目の値に設定することができる。これにより、ブロックチェーン生成装置100は、それぞれのブロックチェーンに追加された中間ブロックから算出される第3のハッシュ値が同一になるようにすることができる。
ブロックチェーン生成装置100によれば、第1のハッシュ値として、自装置が管理するブロックチェーンに中間ブロックの直前に追加されたブロックに設定されたハッシュ値をコピーしたハッシュ値を用いることができる。ブロックチェーン生成装置100によれば、第2のハッシュ値として、他装置が管理するブロックチェーンに中間ブロックの直前に追加されたブロックに設定されたハッシュ値をコピーしたハッシュ値を用いることができる。これにより、ブロックチェーン生成装置100は、算出済みのハッシュ値をコピーし、処理量の低減化を図ることができる。
ブロックチェーン生成装置100によれば、自装置が管理するブロックチェーンに、第3のハッシュ値のほか、それぞれのブロックチェーンに中間ブロックの直前に追加されたブロックを示す第4のハッシュ値をさらに有するブロックを追加することができる。これにより、ブロックチェーン生成装置100は、第4のハッシュ値に基づいて、それぞれのブロックチェーンに中間ブロックの直前に追加されたブロックの改ざんの有無を判定可能にすることができる。このため、ブロックチェーン生成装置100は、ブロックチェーン生成システム200におけるセキュリティの向上を図ることができる。
ブロックチェーン生成装置100によれば、第1のハッシュ値として、自装置が管理するブロックチェーンに中間ブロックの直前に追加されたブロックを示すハッシュ値を用いることができる。ブロックチェーン生成装置100によれば、第2のハッシュ値として、他装置が管理するブロックチェーンに中間ブロックの直前に追加されたブロックを示すハッシュ値を用いることができる。これにより、ブロックチェーン生成装置100は、第1のハッシュ値に基づいて、自装置が管理するブロックチェーンに中間ブロックの直前に追加されたブロックの改ざんの有無を判定可能にすることができる。また、ブロックチェーン生成装置100は、第2のハッシュ値に基づいて、他装置が管理するブロックチェーンに中間ブロックの直前に追加されたブロックの改ざんの有無を判定可能にすることができる。このため、ブロックチェーン生成装置100は、ブロックチェーン生成システム200におけるセキュリティの向上を図ることができる。
ブロックチェーン生成装置100によれば、第3のハッシュ値として、中間ブロックを示すハッシュ値を用いることができる。これにより、ブロックチェーン生成装置100は、第3のハッシュ値に基づいて、中間ブロックの改ざんの有無を判定可能にすることができる。このため、ブロックチェーン生成装置100は、ブロックチェーン生成システム200におけるセキュリティの向上を図ることができる。
なお、本実施の形態で説明したブロックチェーン生成方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本実施の形態で説明したブロックチェーン生成プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本実施の形態で説明したブロックチェーン生成プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)1以上のブロックを連結する第1のブロックチェーンと第2のブロックチェーンのそれぞれに対して、前記第1のブロックチェーンの最新のブロックに対応する第1のハッシュ値と、前記第2のブロックチェーンの最新のブロックに対応する第2のハッシュ値とを有する中間ブロックを追加する第1追加部と、
前記第1および前記第2のブロックチェーンにそれぞれ追加された前記中間ブロックが有する前記第1のハッシュ値と前記第2のハッシュ値とに基づき、前記第1および前記第2のブロックチェーンに共通する第3のハッシュ値を算出可能な関数を用いて、前記第1および前記第2のブロックチェーンに対して、前記第3のハッシュ値を有するブロックを追加する第2追加部と、
を有することを特徴とするブロックチェーン生成システム。
(付記2)前記ブロックは、複数の項目を有し、
前記関数は、前記複数の項目の値に基づき、前記第3のハッシュ値を算出する関数であり、かつ、前記複数の項目のうち第1の項目の値と第2の項目の値とが入れ替わっても、算出される前記第3のハッシュ値が同一になる関数であり、
前記第1追加部は、
前記第1のブロックチェーンと前記第2のブロックチェーンのそれぞれについて、当該ブロックチェーンの最新のブロックに対応する第1のハッシュ値が前記第1の項目の値に設定され、かつ、当該ブロックチェーン以外の他のブロックチェーンの最新のブロックに対応する第2のハッシュ値が前記第2の項目の値に設定された前記中間ブロックを追加する、ことを特徴とする付記1に記載のブロックチェーン生成システム。
(付記3)前記ブロックが有する前記第1の項目は、前記ブロックの直前に連結されたブロックを示すハッシュ値が設定される項目であり、
前記ブロックが有する前記第2の項目は、ナンスが設定される項目である、ことを特徴とする付記2に記載のブロックチェーン生成システム。
(付記4)前記第1追加部は、
前記第1のブロックチェーンと前記第2のブロックチェーンのそれぞれについて、当該ブロックチェーンの最新のブロックに設定された第1のハッシュ値と、当該ブロックチェーン以外の他のブロックチェーンの最新のブロックに設定された第2のハッシュ値とを有する前記中間ブロックを追加する、ことを特徴とする付記1〜3のいずれか一つに記載のブロックチェーン生成システム。
(付記5)前記第2追加部は、
前記第1のブロックチェーンと前記第2のブロックチェーンのそれぞれについて、前記第3のハッシュ値のほか、前記第1のブロックチェーンと前記第2のブロックチェーンのそれぞれに中間ブロックの直前に追加されたブロックを示す第4のハッシュ値をさらに有するブロックを追加する、ことを特徴とする付記4に記載のブロックチェーン生成システム。
(付記6)前記第1追加部は、
前記第1のブロックチェーンと前記第2のブロックチェーンのそれぞれについて、当該ブロックチェーンの最新のブロックを示す第1のハッシュ値と、当該ブロックチェーン以外の他のブロックチェーンの最新のブロックを示す第2のハッシュ値とを有する前記中間ブロックを追加する、ことを特徴とする付記1に記載のブロックチェーン生成システム。
(付記7)前記第3のハッシュ値は、前記中間ブロックを示すハッシュ値である、ことを特徴とする付記1〜6のいずれか一つに記載のブロックチェーン生成システム。
(付記8)1以上のブロックを連結する第1のブロックチェーンと第2のブロックチェーンのそれぞれに対して、前記第1のブロックチェーンの最新のブロックに対応する第1のハッシュ値と、前記第2のブロックチェーンの最新のブロックに対応する第2のハッシュ値とを有する中間ブロックを追加し、
前記第1および前記第2のブロックチェーンにそれぞれ追加された前記中間ブロックが有する前記第1のハッシュ値と前記第2のハッシュ値とに基づき、前記第1および前記第2のブロックチェーンに共通する第3のハッシュ値を算出可能な関数を用いて、前記第1および前記第2のブロックチェーンに対して、前記第3のハッシュ値を有するブロックを追加する、
ことを特徴とするブロックチェーン生成方法。
(付記9)コンピュータに、
1以上のブロックを連結する第1のブロックチェーンと第2のブロックチェーンのうち前記第1のブロックチェーンに対して、前記第1のブロックチェーンの最新のブロックに対応する第1のハッシュ値と、前記第2のブロックチェーンの最新のブロックに対応する第2のハッシュ値とを有する中間ブロックを追加し、
前記第1のブロックチェーンに追加された中間ブロックが有する第1のハッシュ値と第2のハッシュ値とに基づき、前記第1および前記第2のブロックチェーンに共通する第3のハッシュ値を算出可能な関数を用いて、前記第1のブロックチェーンに対して、前記第3のハッシュ値を有するブロックを追加する、
処理を実行させることを特徴とするブロックチェーン生成プログラム。