IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ スペース アンド タイム ラブス インコーポレイテッドの特許一覧

特許7561398データベースクエリ結果を検証するための方法及びそのデバイス
<>
  • 特許-データベースクエリ結果を検証するための方法及びそのデバイス 図1
  • 特許-データベースクエリ結果を検証するための方法及びそのデバイス 図2
  • 特許-データベースクエリ結果を検証するための方法及びそのデバイス 図3
  • 特許-データベースクエリ結果を検証するための方法及びそのデバイス 図4
  • 特許-データベースクエリ結果を検証するための方法及びそのデバイス 図5
  • 特許-データベースクエリ結果を検証するための方法及びそのデバイス 図6
  • 特許-データベースクエリ結果を検証するための方法及びそのデバイス 図7
  • 特許-データベースクエリ結果を検証するための方法及びそのデバイス 図8
  • 特許-データベースクエリ結果を検証するための方法及びそのデバイス 図9
  • 特許-データベースクエリ結果を検証するための方法及びそのデバイス 図10
  • 特許-データベースクエリ結果を検証するための方法及びそのデバイス 図11
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-26
(45)【発行日】2024-10-04
(54)【発明の名称】データベースクエリ結果を検証するための方法及びそのデバイス
(51)【国際特許分類】
   G06F 16/27 20190101AFI20240927BHJP
   G06F 21/64 20130101ALI20240927BHJP
【FI】
G06F16/27
G06F21/64
【請求項の数】 20
(21)【出願番号】P 2023548199
(86)(22)【出願日】2022-12-12
(65)【公表番号】
(43)【公表日】2024-02-02
(86)【国際出願番号】 US2022081344
(87)【国際公開番号】W WO2023102574
(87)【国際公開日】2023-06-08
【審査請求日】2023-08-07
(31)【優先権主張番号】63/357,930
(32)【優先日】2022-07-01
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】17/897,102
(32)【優先日】2022-08-26
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】523299510
【氏名又は名称】スペース アンド タイム ラブス インコーポレイテッド
(74)【代理人】
【識別番号】100102978
【弁理士】
【氏名又は名称】清水 初志
(74)【代理人】
【識別番号】100205707
【弁理士】
【氏名又は名称】小寺 秀紀
(74)【代理人】
【識別番号】100160923
【弁理士】
【氏名又は名称】山口 裕孝
(74)【代理人】
【識別番号】100119507
【弁理士】
【氏名又は名称】刑部 俊
(74)【代理人】
【識別番号】100142929
【弁理士】
【氏名又は名称】井上 隆一
(74)【代理人】
【識別番号】100148699
【弁理士】
【氏名又は名称】佐藤 利光
(74)【代理人】
【識別番号】100188433
【弁理士】
【氏名又は名称】梅村 幸輔
(74)【代理人】
【識別番号】100128048
【弁理士】
【氏名又は名称】新見 浩一
(74)【代理人】
【識別番号】100129506
【弁理士】
【氏名又は名称】小林 智彦
(74)【代理人】
【識別番号】100114340
【弁理士】
【氏名又は名称】大関 雅人
(74)【代理人】
【識別番号】100214396
【弁理士】
【氏名又は名称】塩田 真紀
(74)【代理人】
【識別番号】100121072
【弁理士】
【氏名又は名称】川本 和弥
(74)【代理人】
【識別番号】100221741
【弁理士】
【氏名又は名称】酒井 直子
(74)【代理人】
【識別番号】100114926
【弁理士】
【氏名又は名称】枝松 義恵
(72)【発明者】
【氏名】ホワイト ジェイ トーマス
(72)【発明者】
【氏名】ダイクストラ スコット エドワード ダリー
【審査官】吉田 歩
(56)【参考文献】
【文献】国際公開第2021/041771(WO,A1)
【文献】米国特許出願公開第2019/0228086(US,A1)
【文献】Jiankuo Dong ほか,Towards High-performance X25519/448 Key Agreement in General Purpose GPUs,2018 IEEE Conference on Communications and Network Security (CNS),2018年08月13日,<URL https://ieeexplore.ieee.org/abstract/document/8433161>
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/27
G06F 21/64
(57)【特許請求の範囲】
【請求項1】
クエリ検証装置によって実行され、かつ、
受信データから第1のコミットメントを生成及び記憶し、少なくとも1つの証明デバイスによってホストされるデータベースのテーブルに挿入するために前記受信データを前記少なくとも1つの証明デバイスに送信することと、
受信クエリが前記少なくとも1つの証明デバイスに転送され、かつ少なくとも前記データベースの前記テーブルを含む1つまたは複数のテーブルに関連付けられることに応答して、前記少なくとも1つの証明デバイスからクエリ結果及び全体的な証明を受信することであって、前記全体的な証明が、前記少なくとも1つの証明デバイスの1つまたは複数のグラフィックス処理ユニット(GPU)を使用して1つまたは複数の中間値から生成された1つまたは複数の中間コミットメントを少なくとも部分的に含む1つまたは複数の部分的証明から生成される、前記受信することと、
前記第1のコミットメント及び前記全体的な証明を使用して生成された、前記クエリ結果に対する第2のコミットメントに基づいて前記クエリ結果を検証した後に、前記受信クエリに応答して、前記クエリ結果とともに成功フラグを返すことと
を含む、データベースクエリ結果を検証するための方法。
【請求項2】
前記受信クエリからクエリプランを生成することをさらに含み、
前記1つまたは複数の部分的証明のそれぞれが、前記クエリプランの少なくとも1つのノードに関連付けられる、
請求項1に記載の方法。
【請求項3】
前記データベースが構造化クエリ言語(SQL)データベースであり、前記方法が、SQLエンジンを用いて前記クエリプランを生成することをさらに含み、
前記クエリプランが、少なくとも1つのノードを含む有向非巡回グラフ(DAG)を含む、
請求項2に記載の方法。
【請求項4】
前記少なくとも1つの証明デバイスが複数の証明デバイスを含み、前記第1のコミットメントを生成及び記憶すること、前記クエリ結果を受信すること、ならびに前記成功フラグを返すことが、前記複数の証明デバイスとは別個の検証デバイスによって実行され、前記データベースが分散型データベースを含む、請求項1に記載の方法。
【請求項5】
前記データベースの前記テーブルにアペンドされる追加データの受信に続いて、前記記憶された第1のコミットメントを更新することと、
前記追加データを前記少なくとも1つの証明デバイスに送信することと
をさらに含む、請求項1に記載の方法。
【請求項6】
第1のプログラム命令を記憶した第1のメモリと、第1のプロセッサと、1つまたは複数のグラフィックス処理ユニット(GPU)とを備える証明デバイスを含む、クエリ検証装置であって、
前記第1のプロセッサが、前記記憶された第1のプログラム命令を実行して、
検証デバイスからデータを受信し、前記受信したデータをデータベースのテーブルに保存し、前記検証デバイスから、少なくともデータベーステーブルを含む1つまたは複数のテーブルに関連付けられるクエリを受信することと、
前記クエリに対するクエリプラン及びクエリ結果と、1つまたは複数のコミットメントからの1つまたは複数の部分的証明と、前記1つまたは複数の部分的証明からの全体的な証明とを生成することであって、前記1つまたは複数の部分的証明のそれぞれが前記クエリプランの少なくとも1つのノードに関連付けられる、前記生成することと、
前記クエリ結果の検証を容易にするために、前記クエリに応答して前記クエリ結果とともに前記全体的な証明を返すことであって、前記1つまたは複数のGPUが、前記記憶された第1のプログラム命令を実行して、前記1つまたは複数のコミットメントを生成するように構成される、前記返すことと
を行うように構成される、
前記クエリ検証装置。
【請求項7】
前記第1プロセッサが、前記記憶された第1のプログラム命令を実行して1つまたは複数の中間値を生成するようにさらに構成される、請求項6に記載のクエリ検証装置。
【請求項8】
前記1つまたは複数のGPUが、前記記憶された第1のプログラム命令を実行して、前記1つまたは複数の中間値から前記1つまたは複数のコミットメントを生成するようにさらに構成される、請求項7に記載のクエリ検証装置。
【請求項9】
前記第1のプロセッサが、前記記憶された第1のプログラム命令を実行して、前記1つまたは複数のコミットメントから前記1つまたは複数の部分的証明を生成するようにさらに構成される、請求項8に記載のクエリ検証装置。
【請求項10】
検証デバイスをさらに含み、
前記検証デバイスが、第2のプログラム命令を記憶した第2のメモリと、第2のプロセッサとを備え、
前記第2のプロセッサが、前記記憶された第2のプログラム命令を実行して、
第1のクライアントデバイスからデータを受信し、前記受信したデータから第1のコミットメントを生成及び記憶し、前記受信したデータを前記証明デバイスに送信することと、
第2のクライアントデバイスからクエリを受信し、前記クエリを前記証明デバイスに転送し、前記クエリに応答して前記証明デバイスから前記クエリ結果及び前記全体的な証明を受信することと、
前記第1のコミットメント及び前記全体的な証明を使用して生成された、前記クエリ結果に対する第2のコミットメントに基づいて、前記クエリ結果を検証することと、
前記クエリに応答して、前記クエリ結果とともに成功フラグを前記第2のクライアントデバイスに返すことと
を行うように構成される、
請求項6に記載のクエリ検証装置。
【請求項11】
前記第2のプロセッサが、前記記憶された第2のプログラム命令を実行して、
前記データベーステーブルにアペンドされる追加データの受信に続いて、前記記憶された第1のコミットメントを更新することと、
前記追加データを前記証明デバイスに送信することと
を行うようにさらに構成される、請求項10に記載のクエリ検証装置。
【請求項12】
前記データベースが構造化クエリ言語(SQL)データベースであり、前記第1のプロセッサが、前記記憶された第1のプログラム命令を実行してSQLエンジンを用いて前記クエリプランを生成するようにさらに構成され、
前記クエリプランが、少なくとも1つのノードを含む有向非巡回グラフ(DAG)を含む、
請求項6に記載のクエリ検証装置。
【請求項13】
前記証明デバイスが、前記データベースをホストする複数の証明デバイスを含み、前記検証デバイスが、前記複数の証明デバイスとは別個であり、前記データベースが、分散型データベースを含む、請求項6に記載のクエリ検証装置。
【請求項14】
実行可能コードを含む、クエリ結果を検証するための命令を記憶した、非一時的なコンピュータ可読媒体であって、
前記実行可能コードが、1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに、
受信データから第1のコミットメントを生成及び記憶し、少なくとも1つの証明デバイスによってホストされるデータベースの少なくとも1つのテーブルに挿入するために前記受信データを前記少なくとも1つの証明デバイスに送信することと、
受信クエリが前記少なくとも1つの証明デバイスに転送され、かつ少なくとも前記データベースの前記少なくとも1つのテーブルを含む1つまたは複数のテーブルに関連付けられることに応答して、前記少なくとも1つの証明デバイスからクエリ結果及び全体的な証明を受信することであって、前記全体的な証明が、1つまたは複数の部分的証明から生成され、前記部分的証明のそれぞれが、前記受信クエリから生成されたクエリプランの少なくとも1つのノードに関連付けられる、前記受信することと、
前記第1のコミットメント及び前記全体的な証明を使用して生成された、前記クエリ結果に対する第2のコミットメントに基づいて前記クエリ結果を検証した後に、前記受信クエリに応答して、前記クエリ結果とともに成功フラグを返すことと
を行わせる、
前記非一時的なコンピュータ可読媒体。
【請求項15】
前記1つまたは複数の部分的証明が、1つまたは複数のグラフィックス処理ユニット(GPU)を使用して1つまたは複数の中間値から生成された1つまたは複数のコミットメントから生成される、請求項14に記載の非一時的なコンピュータ可読媒体。
【請求項16】
前記データベースが構造化クエリ言語(SQL)データベースであり、前記実行可能コードが、前記1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに、SQLエンジンを介して前記クエリプランを生成させる、請求項14に記載の非一時的なコンピュータ可読媒体。
【請求項17】
前記クエリプランが、少なくとも1つのノードを含む有向非巡回グラフ(DAG)を含む、請求項14に記載の非一時的なコンピュータ可読媒体。
【請求項18】
前記少なくとも1つの証明デバイスが複数の証明デバイスを含み、前記データベースが分散型データベースを含む、請求項14に記載の非一時的なコンピュータ可読媒体。
【請求項19】
前記少なくとも1つの証明デバイスとは別個の検証デバイスによって、前記第1のコミットメントが生成及び記憶され、前記クエリ結果が受信され、前記成功フラグが返される、請求項14に記載の非一時的なコンピュータ可読媒体。
【請求項20】
前記実行可能コードが、前記1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに、
前記データベースの前記少なくとも1つのテーブルにアペンドされる追加データの受信に続いて、前記記憶された第1のコミットメントを更新することと、
前記追加データを前記少なくとも1つの証明デバイスに送信することと
を行わせる、
請求項14に記載の非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、2022年8月26日に出願された米国特許出願第17/897,102号に対する優先権を主張し、同出願は2022年7月1日に出願された米国仮特許出願第63/357,930号に対する優先権を主張し、それぞれ参照により、その全体が本明細書に組み込まれる。
【0002】
分野
本技術は一般に、アウトソーシングされたデータベースのセキュリティに関し、より詳細には、アウトソーシングされたデータベースのクエリ結果を改ざん軽減のために検証する方法及びデバイスに関する。
【背景技術】
【0003】
背景
データの保存及び取得のために、アウトソーシングされたデータベースが、ますます利用されるようになっている。集中型データベースを含め、データベースは任意の数のトポロジを持つことができるが、アウトソーシングされたデータベースのユビキタスな展開タイプの1つは、(クラウドネットワークなどで)複数のサーバ、他のコンピューティングデバイス、または他のハードウェアリソースにわたってホストされる分散型データベースである。一例として、ブロックチェーンネットワークは、ブロックチェーンネットワーク上に保存されたデータをカプセル化する分散型台帳の形式でデータベースを維持する分散ノードを含む。
【0004】
しかしながら、アウトソーシングされたデータベースをホストしているリソースの所有者は、保存されているデータや、ホストされているデータベースから送信されたクエリの結果を改ざんする能力を有し得る。ブロックチェーンネットワークでは、分散型データベースを構成するノードは一般に信頼できず、特に保存されたデータ(例えば、暗号通貨データ)の性質によって悪意のある者が動機付けられている場合、改ざんやその他の悪意のある行動の影響を受けやすい。集中型データベースと分散型データベースはどちらも信頼できない可能性があるが、完全に分散型のトポロジでは誰でもデータベースホストとして行動する能力を有するため、改ざんのリスクが増し、データベースから返されるクエリ結果の信頼性が低下する。
【0005】
残念ながら、現在、信頼できないサードパーティのネットワーク参加者(複数可)が提供するリソース上でホストされているアウトソーシングされたデータベースによって維持されているデータに対して実行されたデータベースクエリ結果を証明する効率的な方法は無い。より具体的には、データベースクエリ結果を検証する現在の試みでは、データベースクエリ自体に大量の計算と関連するオーバーヘッドが追加され、データベースのスケーラビリティが制限される。
【発明の概要】
【0006】
概要
クエリ検証装置によって実行され、かつ、受信データから第1のコミットメントを生成及び記憶することと、少なくとも1つの証明デバイスがホストするデータベースのテーブルに挿入するために受信データを少なくとも1つの証明デバイスに送信することとを含む、データベースクエリ結果を検証するための方法が開示される。クエリ結果及び全体的な証明は、受信クエリが少なくとも1つの証明デバイスに転送され、かつ少なくともデータベーステーブルを含む1つまたは複数のテーブルに関連付けられることに応答して、少なくとも1つの証明デバイスから受信される。全体的な証明は、少なくとも1つの証明デバイスの1つまたは複数のグラフィックス処理ユニット(GPU)を使用して1つまたは複数の中間値から生成された1つまたは複数の中間コミットメントを少なくとも部分的に含む1つまたは複数の部分的証明から生成される。第1のコミットメント及び全体的な証明を使用して生成された、クエリ結果に対する第2のコミットメントに基づいてクエリ結果を検証した後に、クエリに応答して、クエリ結果とともに成功フラグが返される。
【0007】
第1のプログラム命令が記憶されている第1のメモリと、第1のプロセッサと、1つまたは複数のGPUとを備える証明デバイスを含む、クエリ検証装置も開示される。第1のプロセッサは、記憶された第1のプログラム命令を実行して、検証デバイスからデータを受信し、受信したデータをデータベースのテーブルに保存し、検証デバイスからクエリを受信するように構成される。クエリは、少なくともデータベーステーブルを含む1つまたは複数のテーブルに関連付けられる。クエリプランとクエリ結果がクエリに対して生成され、1つまたは複数の部分的証明が1つまたは複数のコミットメントから生成され、全体的な証明が1つまたは複数の部分的証明から生成される。1つまたは複数の部分的証明のそれぞれは、クエリプランの少なくとも1つのノードに関連付けられる。全体的な証明は、クエリ結果の検証を容易にするために、クエリに応答してクエリ結果とともに返される。この例では、1つまたは複数のGPUは、記憶された第1のプログラム命令を実行して、1つまたは複数のコミットメントを生成するように構成される。
【0008】
さらに、データベースクエリ結果を検証するための命令を記憶した非一時的なコンピュータ可読媒体が開示される。この媒体は、実行可能コードを含み、実行可能コードは、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、受信データから第1のコミットメントを生成及び記憶させ、少なくとも1つの証明デバイスがホストするデータベースの少なくとも1つのテーブルに挿入するために受信データを少なくとも1つの証明デバイスに送信させる。クエリ結果及び全体的な証明は、受信クエリが少なくとも1つの証明デバイスに転送され、かつ少なくともデータベーステーブルを含む1つまたは複数のテーブルに関連付けられることに応答して、少なくとも1つの証明デバイスから受信される。全体的な証明は1つまたは複数の部分的証明から生成され、部分的証明のそれぞれは、受信クエリから生成されたクエリプランの少なくとも1つのノードに関連付けられる。第1のコミットメント及び全体的な証明を使用して生成された、クエリ結果に対する第2のコミットメントに基づいてクエリ結果を検証した後に、クエリに応答して、クエリ結果とともに成功フラグが返される。
【0009】
この技術は、信頼できない集中型及び分散型データベースホストから生成されたクエリ結果の信頼性を有利に促進する方法、非一時的なコンピュータ可読媒体、及びクエリ検証装置を含む多くの利点を提供する。いくつかの例では、この技術は、コミットメント、GPU、及び/またはクエリプランのうちの1つまたは複数を活用して、クエリ結果の精度を検証する。コミットメントは更新可能であり、クエリ結果は、データベースに保存されたデータにアクセスできないデバイス(クライアントデバイス、サードパーティの仲介者またはゲートウェイなど)によって検証される。したがって、この技術は、データベースのクエリをより効果的かつ効率的に検証し、スケーラビリティを大幅に向上させる。この大幅に向上したスケーラビリティにより、桁違いに大きなデータ量の処理など、この分野の技術の実用的な応用が促進される。
[本発明1001]
クエリ検証装置によって実行され、かつ、
受信データから第1のコミットメントを生成及び記憶し、少なくとも1つの証明デバイスによってホストされるデータベースのテーブルに挿入するために前記受信データを前記少なくとも1つの証明デバイスに送信することと、
受信クエリが前記少なくとも1つの証明デバイスに転送され、かつ少なくとも前記データベーステーブルを含む1つまたは複数のテーブルに関連付けられることに応答して、前記少なくとも1つの証明デバイスからクエリ結果及び全体的な証明を受信することであって、前記全体的な証明が、前記少なくとも1つの証明デバイスの1つまたは複数のグラフィックス処理ユニット(GPU)を使用して1つまたは複数の中間値から生成された1つまたは複数の中間コミットメントを少なくとも部分的に含む1つまたは複数の部分的証明から生成される、前記受信することと、
前記第1のコミットメント及び前記全体的な証明を使用して生成された、前記クエリ結果に対する第2のコミットメントに基づいて前記クエリ結果を検証した後に、前記受信クエリに応答して、前記クエリ結果とともに成功フラグを返すことと
を含む、データベースクエリ結果を検証するための方法。
[本発明1002]
前記受信クエリからクエリプランを生成することをさらに含み、
前記1つまたは複数の部分的証明のそれぞれが、前記クエリプランの少なくとも1つのノードに関連付けられる、
本発明1001の方法。
[本発明1003]
前記データベースが構造化クエリ言語(SQL)データベースであり、前記方法が、SQLエンジンを用いて前記クエリプランを生成することをさらに含み、
前記クエリプランが、少なくとも1つのノードを含む有向非巡回グラフ(DAG)を含む、
本発明1002の方法。
[本発明1004]
前記少なくとも1つの証明デバイスが複数の証明デバイスを含み、前記第1のコミットメントを生成及び記憶すること、前記クエリを受信すること、ならびに前記成功フラグを返すことが、前記複数の証明デバイスとは別個の検証デバイスによって実行され、前記データベースが分散型データベースを含む、本発明1001の方法。
[本発明1005]
前記データベーステーブルにアペンドされる追加データの受信に続いて、前記記憶された第1のコミットメントを更新することと、
前記追加データを前記少なくとも1つの証明デバイスに送信することと
をさらに含む、本発明1001の方法。
[本発明1006]
第1のプログラム命令を記憶した第1のメモリと、第1のプロセッサと、1つまたは複数のグラフィックス処理ユニット(GPU)とを備える証明デバイスを含む、クエリ検証装置であって、
前記第1のプロセッサが、前記記憶された第1のプログラム命令を実行して、
検証デバイスからデータを受信し、前記受信したデータをデータベースのテーブルに保存し、前記検証デバイスから、少なくともデータベーステーブルを含む1つまたは複数のテーブルに関連付けられるクエリを受信することと、
前記クエリに対するクエリプラン及びクエリ結果と、1つまたは複数のコミットメントからの1つまたは複数の部分的証明と、前記1つまたは複数の部分的証明からの全体的な証明とを生成することであって、前記1つまたは複数の部分的証明のそれぞれが前記クエリプランの少なくとも1つのノードに関連付けられる、前記生成することと、
前記クエリ結果の検証を容易にするために、前記クエリに応答して前記クエリ結果とともに前記全体的な証明を返すことであって、前記1つまたは複数のGPUが、前記記憶された第1のプログラム命令を実行して、前記1つまたは複数のコミットメントを生成するように構成される、前記返すことと
を行うように構成される、
前記クエリ検証装置。
[本発明1007]
前記第1プロセッサが、前記記憶された第1のプログラム命令を実行して1つまたは複数の中間値を生成するようにさらに構成される、本発明1006のクエリ検証装置。
[本発明1008]
前記1つまたは複数のGPUが、前記記憶された第1のプログラム命令を実行して、前記1つまたは複数の中間値から前記1つまたは複数のコミットメントを生成するようにさらに構成される、本発明1007のクエリ検証装置。
[本発明1009]
前記第1のプロセッサが、前記記憶された第1のプログラム命令を実行して、前記1つまたは複数のコミットメントから前記1つまたは複数の部分的証明を生成するようにさらに構成される、本発明1008のクエリ検証装置。
[本発明1010]
検証デバイスをさらに含み、
前記検証デバイスが、第2のプログラム命令を記憶した第2のメモリと、第2のプロセッサとを備え、
前記第2のプロセッサが、前記記憶された第2のプログラム命令を実行して、
第1のクライアントデバイスからデータを受信し、前記受信したデータから第1のコミットメントを生成及び記憶し、前記受信したデータを前記証明デバイスに送信することと、
第2のクライアントデバイスからクエリを受信し、前記クエリを前記証明デバイスに転送し、前記クエリに応答して前記証明デバイスから前記クエリ結果及び前記全体的な証明を受信することと、
前記第1のコミットメント及び前記全体的な証明を使用して生成された、前記クエリ結果に対する第2のコミットメントに基づいて、前記クエリ結果を検証することと、
前記クエリに応答して、前記クエリ結果とともに成功フラグを前記第2のクライアントデバイスに返すことと
を行うように構成される、
本発明1006のクエリ検証装置。
[本発明1011]
前記第2のプロセッサが、前記記憶された第2のプログラム命令を実行して、
前記データベーステーブルにアペンドされる追加データの受信に続いて、前記記憶された第1のコミットメントを更新することと、
前記追加データを前記証明デバイスに送信することと
を行うようにさらに構成される、本発明1010のクエリ検証装置。
[本発明1012]
前記データベースが構造化クエリ言語(SQL)データベースであり、前記第1のプロセッサが、前記記憶された第1のプログラム命令を実行してSQLエンジンを用いて前記クエリプランを生成するようにさらに構成され、
前記クエリプランが、少なくとも1つのノードを含む有向非巡回グラフ(DAG)を含む、
本発明1006のクエリ検証装置。
[本発明1013]
前記証明デバイスが、前記データベースをホストする複数の証明デバイスを含み、前記検証デバイスが、前記複数の証明デバイスとは別個であり、前記データベースが、分散型データベースを含む、本発明1006のクエリ検証装置。
[本発明1014]
実行可能コードを含む、クエリ結果を検証するための命令を記憶した、非一時的なコンピュータ可読媒体であって、
前記実行可能コードが、1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに、
受信データから第1のコミットメントを生成及び記憶し、少なくとも1つの証明デバイスによってホストされるデータベースの少なくとも1つのテーブルに挿入するために前記受信データを前記少なくとも1つの証明デバイスに送信することと、
受信クエリが前記少なくとも1つの証明デバイスに転送され、かつ少なくとも前記データベーステーブルを含む1つまたは複数のテーブルに関連付けられることに応答して、前記少なくとも1つの証明デバイスからクエリ結果及び全体的な証明を受信することであって、前記全体的な証明が、1つまたは複数の部分的証明から生成され、前記部分的証明のそれぞれが、前記受信クエリから生成されたクエリプランの少なくとも1つのノードに関連付けられる、前記受信することと、
前記第1のコミットメント及び前記全体的な証明を使用して生成された、前記クエリ結果に対する第2のコミットメントに基づいて前記クエリ結果を検証した後に、前記受信クエリに応答して、前記クエリ結果とともに成功フラグを返すことと
を行わせる、
前記非一時的なコンピュータ可読媒体。
[本発明1015]
前記1つまたは複数の部分的証明が、1つまたは複数のグラフィックス処理ユニット(GPU)を使用して1つまたは複数の中間値から生成された1つまたは複数のコミットメントから生成される、本発明1014の非一時的なコンピュータ可読媒体。
[本発明1016]
前記データベースが構造化クエリ言語(SQL)データベースであり、前記実行可能コードが、前記1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに、SQLエンジンを介して前記クエリプランを生成させる、本発明1014の非一時的なコンピュータ可読媒体。
[本発明1017]
前記クエリプランが、少なくとも1つのノードを含む有向非巡回グラフ(DAG)を含む、本発明1014の非一時的なコンピュータ可読媒体。
[本発明1018]
前記少なくとも1つの証明デバイスが複数の証明デバイスを含み、前記データベースが分散型データベースを含む、本発明1014の非一時的なコンピュータ可読媒体。
[本発明1019]
前記少なくとも1つの証明デバイスとは別個の検証デバイスによって、前記第1のコミットメントが生成及び記憶され、前記クエリが受信され、前記成功フラグが返される、本発明1014の非一時的なコンピュータ可読媒体。
[本発明1020]
前記実行可能コードが、前記1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに、
前記データベーステーブルにアペンドされる追加データの受信に続いて、前記記憶された第1のコミットメントを更新することと、
前記追加データを前記少なくとも1つの証明デバイスに送信することと
を行わせる、
本発明1014の非一時的なコンピュータ可読媒体。
【図面の簡単な説明】
【0010】
図1】検証デバイス及び証明デバイスを含むクエリ検証装置を有する例示的なネットワーク環境のブロック図である。
図2】例示的な検証デバイスのブロック図である。
図3】例示的な証明デバイスのブロック図である。
図4】データベースクエリ結果の検証を容易にするためにデータを取り込む例示的な方法のタイミング図である。
図5】新しいデータの取り込みに続いてコミットメントを更新する例示的な方法のタイミング図である。
図6】記憶されたコミットメントを使用してデータベースクエリ結果を検証する例示的な方法のタイミング図である。
図7】データベースクエリ結果の検証を容易にするためにグラフィックス処理ユニット(GPU)を使用する例示的な方法のタイミング図である。
図8】クエリ例に対するクエリ結果を生成するために使用される例示的なクエリプランのフロー図である。
図9】クエリ例に対する証明を生成するために使用される例示的な証明プランのフロー図である。
図10】並行して図9の証明プランが示されている、図8のクエリプランのフロー図である。
図11図9の証明プランによって生成された証明と図8のクエリプランによって生成された結果とを使用してクエリ例に対するクエリ結果を検証する例示的な方法のフロー図である。
【発明を実施するための形態】
【0011】
詳細な説明
図1を参照すると、通信ネットワーク(複数可)106(1)を介してクライアントデバイス108(1)~108(n)に結合され、通信ネットワーク(複数可)106(2)を介して、データベース112をホストする証明デバイス110(1)~110(n)に結合された検証デバイス104を有するクエリ検証装置102を含む例示的なネットワーク環境100が示されている。ネットワーク環境100は、例えば1つまたは複数のルータまたはスイッチなどの他のネットワークデバイスを含んでよく、これらは当技術分野で既知のため、本明細書では説明しない。この技術は、信頼できないアウトソーシングデータベースを信頼できるデータベースに効果的に変換するための、向上したセキュリティを有する、データを取り込み、クエリ結果を返す方法、非一時的なコンピュータ可読媒体、及びデバイスを含む、多くの利点を提供する。
【0012】
この特定の例では、クライアントデバイス108(1)~108(n)、検証デバイス104、及び証明デバイス110(1)~110(n)が、専用ハードウェアデバイスとして図1に開示されている。しかしながら、クライアントデバイス108(1)~108(n)、検証デバイス104、または証明デバイス110(1)~110(n)の1つまたは複数は、ネットワーク環境100の1つまたは複数の他のデバイス内のソフトウェアに実装することもできる。一例として、検証デバイス104、ならびにそのコンポーネントまたはアプリケーションのいずれかは、クライアントデバイス108(1)~108(n)の1つで実行されるソフトウェアとして実装することができ、他の例では、実装及びネットワークトポロジの他の多くの変更及びタイプも使用することができる。
【0013】
図1~2を参照すると、クエリ検証装置102の検証デバイス104は、証明デバイス110(1)~110(n)がホストするデータベース112に保存されるデータを取り込み、証明デバイス110(1)~110(n)からのクエリ結果を処理するために、クライアントデバイス108(1)~108(n)にインタフェースを提供することを含む任意の数の機能を実行することができる。この例における検証デバイス104は、バス206によって相互に結合された中央処理装置(CPU)(複数可)200、メモリ202、及び通信インタフェース204を含むが、他の構成では、検証デバイス104は他のタイプまたは数の要素を含み得る。
【0014】
検証デバイス104のCPU(複数可)200は、本明細書で説明及び図示される任意の数の機能について、検証デバイス104のメモリ202に記憶されたプログラム命令を実行し得る。CPU(複数可)200は、例えば、1つまたは複数の処理コアを備えた1つまたは複数の汎用プロセッサを含み得るが、他のタイプのプロセッサ(複数可)も使用することができる。他の例では、検証デバイス104は、証明デバイス110及び図3の対応するハードウェアを参照して以下でより詳細に説明する機能を実行するように構成された1つまたは複数のグラフィックス処理ユニット(GPU)を含み得る。
【0015】
メモリ202は、本明細書に説明及び図示される本技術の1つまたは複数の態様のために、これらのプログラム命令を記憶するが、プログラム命令の一部またはすべては、他の場所に記憶することができる。ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、ハードディスク、ソリッドステートドライブ、フラッシュメモリ、または、プロセッサ(複数可)に結合された、磁気的、光学的、または他の読み取り及び書き込みシステムによって読み取り及び書き込みが行われる他のコンピュータ可読媒体などの、様々な異なるタイプのメモリストレージデバイスを、メモリ202に使用することができる。
【0016】
したがって、メモリ202は、コンピュータ実行可能命令を含み得るアプリケーションを記憶することができ、コンピュータ実行可能命令は、CPU(複数可)200によって実行されると、検証デバイス104に、例えば、ネットワークメッセージ及び要求の送信、受信、またはその他の処理などのアクション、ならびに以下に説明及び図示されている他のアクションを実行させる。アプリケーション(複数可)は、例えば、他のアプリケーション、オペレーティングシステム拡張機能、及び/またはプラグインのコンポーネントとして実装することができる。
【0017】
さらに、アプリケーション(複数可)は、サービスとしてのソフトウェア(SaaS)モデルを介してアクセスが提供されるクラウドベースのコンピューティング環境で動作可能であってよい。アプリケーション(複数可)は、クラウドベースのコンピューティング環境で管理し得る仮想マシン(複数可)または仮想サーバ(複数可)内で、または仮想マシンまたは仮想サーバとして実行することができる。また、アプリケーション(複数可)、さらには検証デバイス104自体も、特定の物理ネットワークコンピューティングデバイスに結び付けられるのではなく、クラウドベースのコンピューティング環境で実行される仮想サーバ(複数可)に配置されてよい。また、アプリケーション(複数可)は、検証デバイス上で実行されかつハイパーバイザによって管理または監視される仮想マシン(VM)で実行されてよい。
【0018】
この特定の例では、メモリ202は、コミットメントデータ208及び検証モジュール210を含む。検証モジュール210は、以下でより詳細に説明及び図示されるように、データの取り込み時にコミットメントを生成するように構成される。コミットメントは、コミットメントデータ208に記録された列ごとの値であり、これらの値は、以下でより詳細に説明及び図示されるように、証明デバイス110(1)~110(n)から返されたクエリ結果を検証するために検証モジュール210によって使用される。他の例では、他の情報をメモリ202に記憶することができ、他の例では、他のデータストア及び/またはアプリケーションまたはモジュールも検証デバイス104によってホストすることができる。
【0019】
検証デバイス104の通信インタフェース204は、検証デバイス104、クライアントデバイス108(1)~108(n)、及び証明デバイス110(1)~110(n)の間を動作可能に結合し、通信する。これらは、この特定の例では、通信ネットワーク106(1)及び106(2)によって少なくとも部分的に一緒に結合されているが、他のデバイスまたは要素への他のタイプもしくは数の接続または構成を有する他のタイプもしくは数の通信ネットワークまたはシステムを使用することもできる。通信ネットワーク106(1)及び106(2)は、例えば、ワイドエリアネットワーク(WAN)(複数可)及び/またはローカルエリアネットワーク(LAN)(複数可)であってよく、イーサネット上のTCP/IP及び業界標準プロトコルを使用することができるが、他のタイプもしくは数のプロトコルまたは通信ネットワークを使用することもできる。通信ネットワーク(複数可)106は、例えばイーサネットベースのパケットデータネットワーク(PDN)を含む、任意の適切なインタフェース機構及びネットワーク通信技術を採用することができる。
【0020】
この例では、検証デバイス104は単一のデバイスを含むものとして示されているが、他の例では、検証デバイス104は、複数のデバイスを含んでよく、それらのそれぞれが、この技術の1つまたは複数のステップを実施する1つまたは複数のプロセッサ(各プロセッサは1つまたは複数の処理コアを有する)を有する。これらの例では、デバイスの1つまたは複数は、専用の通信インタフェースまたはメモリを有し得る。あるいは、デバイスの1つまたは複数は、検証デバイス104に含まれる1つまたは複数の他のデバイスのメモリ、通信インタフェース、または他のハードウェアもしくはソフトウェアコンポーネントを利用することができる。さらに、他の例では、まとまって検証デバイス104を構成するデバイスの1つまたは複数は、スタンドアロンデバイスであってもよいし、1つまたは複数の他のデバイスもしくは装置と統合されてもよい。
【0021】
より具体的に図1及び3を参照すると、クエリ検証装置102の証明デバイス110は、例えば、データベース112をホストすること、データベース112のコンテンツからクエリ結果を生成するようにクエリを処理すること、及び検証デバイス104によるクエリ結果の検証を容易にする証明を生成することを含む、任意の数の機能を実行し得る。この例の証明デバイス110は、バス308によって相互に結合されたCPU(複数可)300、GPU(複数可)302、メモリ304、及び通信インタフェース306を含むが、証明デバイス110は、他のタイプまたは数の要素を他の構成で含むことができる。
【0022】
証明デバイス110のCPU(複数可)300及びGPU(複数可)302は、本明細書で説明及び図示する任意の数の機能についてメモリ304に記憶されたプログラム命令を実行し得る。CPU(複数可)300は、例えば、1つまたは複数の処理コアを備えた1つまたは複数の汎用プロセッサを含み得るが、他のタイプのプロセッサ(複数可)も使用することができる。GPU(複数可)302は、特定の処理機能を加速するために、比較的大きなデータブロックを並行して処理するように構成することができる。以下でより詳細に説明及び図示するいくつかの例では、GPU(複数可)302はコミットメントを生成するために使用され、CPU(複数可)300は証明デバイス110の残りの機能を促進するが、他の実装も使用することができる。
【0023】
メモリ304は、本明細書に説明及び図示される本技術の1つまたは複数の態様のために、これらのプログラム命令を記憶するが、プログラム命令の一部またはすべてを他の場所に記憶することもできる。RAM、ROM、ハードディスク、ソリッドステートドライブ、フラッシュメモリ、または、CPU(複数可)300及び/またはGPU(複数可)302に結合された、磁気的、光学的、または他の読み取り及び書き込みシステムによって読み取り及び書き込みが行われる他のコンピュータ可読媒体などの、様々な異なるタイプのメモリストレージデバイスを、メモリ304に使用することができる。
【0024】
したがって、メモリ304は、コンピュータ実行可能命令を含み得るアプリケーションを記憶することができ、コンピュータ実行可能命令は、CPU(複数可)300及び/またはGPU(複数可)302によって実行されると、証明デバイス110に、例えば、ネットワークメッセージ及び要求の送信、受信、またはその他の処理などのアクション、ならびに以下に説明及び図示されている他のアクションを実行させる。アプリケーション(複数可)は、例えば、他のアプリケーション、オペレーティングシステム拡張機能、及び/またはプラグインのコンポーネントとして実装することができる。
【0025】
さらに、アプリケーション(複数可)は、サービスとしてのソフトウェア(SaaS)モデルを介してアクセスが提供されるクラウドベースのコンピューティング環境で動作可能であってよい。アプリケーション(複数可)は、クラウドベースのコンピューティング環境で管理できる仮想マシン(複数可)または仮想サーバ(複数可)内で、または仮想マシンまたは仮想サーバとして実行することができる。また、アプリケーション(複数可)、さらには証明デバイス110自体も、特定の物理ネットワークコンピューティングデバイスに結び付けられるのではなく、クラウドベースのコンピューティング環境で実行される仮想サーバ(複数可)に配置されてよい。また、アプリケーション(複数可)は、検証デバイス上で実行され、ハイパーバイザによって管理または監視されるVMで実行されてよい。
【0026】
この特定の例では、メモリ304は、クエリ実行エンジン310及び証明モジュール312を含む。クエリ実行エンジン310は、クライアントデバイス108(1)~108(n)から受信したクエリをデータベース112に対して実行し、クエリ結果を生成するように構成される。いくつかの例では、データベース112は構造化クエリ言語(SQL)データベースであってよく、したがってクエリ実行エンジン310はSQLエンジンであってよいが、本明細書で説明及び図示される技術は、以下でさらに詳細に説明するように、NoSQL及び他のタイプのデータベースと共に動作可能である。
【0027】
証明モジュール312は、以下にさらに詳細に説明及び図示するように、検証デバイス104によるクエリ結果の検証を容易にするために、クエリ結果とともに検証デバイス104に提供できる証明を生成するように構成される。他の例では、他の情報をメモリ304に記憶することができ、他の例では、他のデータストア及び/またはアプリケーションまたはモジュールも検証デバイス110によってホストすることができる。
【0028】
証明デバイス110の通信インタフェース306は、検証デバイス104及び証明デバイス110(1)~110(n)の別のものとの間を動作可能に結合及び通信する。証明デバイス110(1)~110(n)は、例えば、通信ネットワーク(複数可)(例えば、WANまたはLAN(複数可))(図示せず)または直接接続によって少なくとも部分的に互いに結合される。いくつかの例では、証明デバイス110(1)~110(n)は、分散型ネットワークに展開され、通信ネットワーク(複数可)を介して通信されるデータベースサーバであり、データベース112は分散型データベースであるが、他のタイプの実装も使用することができる。さらに、他の例では、他のタイプもしくは数のネットワーク、ならびに他のデバイスもしくは要素への他のタイプもしくは数の構成との接続も使用することができる。
【0029】
この例では、証明デバイス110は単一のデバイスを含むものとして示されているが、他の例では、検証デバイス110は、複数のデバイスを含んでよく、それらのそれぞれが、この技術の1つまたは複数のステップを実施する1つまたは複数のプロセッサ(各プロセッサは1つまたは複数の処理コアを有する)を有する。これらの例では、デバイスの1つまたは複数が専用の通信インタフェースまたはメモリを備えることができる。あるいは、デバイスのうちの1つまたは複数は、証明デバイス110に含まれる1つまたは複数の他のデバイスのメモリ、通信インタフェース、または他のハードウェアもしくはソフトウェアコンポーネントを利用することができる。さらに、他の例では、まとまって証明デバイス110を構成するデバイスの1つまたは複数は、スタンドアロンデバイスであってもよいし、1つまたは複数の他のデバイスもしくは装置と統合されてもよい。
【0030】
この例におけるネットワーク環境100のクライアントデバイス108(1)~108(n)のそれぞれは、モバイル、デスクトップ、ラップトップ、またはタブレットコンピューティングデバイス、仮想マシン(クラウドベースのコンピュータを含む)など、ネットワークデータを交換できる任意のタイプのコンピューティングデバイスを含む。この例におけるクライアントデバイス108(1)~108(n)のそれぞれは、プロセッサ、メモリ、及び通信インタフェースを含み、これらはバスまたは他の通信リンク(図示せず)によって一緒に結合されるが、他の数またはタイプのコンポーネントも使用することができる。
【0031】
クライアントデバイス108(1)~108(n)のそれぞれは、標準的なウェブブラウザまたはスタンドアロンアプリケーションなど、サービス及び/またはインタフェースアプリケーションを実行してよく、これらは、通信ネットワーク(複数可)106を介して検証デバイス104と通信するインタフェースを提供し得る。クライアントデバイス108(1)~108(n)のそれぞれは、例えば、ディスプレイスクリーンもしくはタッチスクリーンなどの表示デバイス、またはキーボードもしくはマウスなどの入力デバイスをさらに含み得る(図示せず)。
【0032】
クライアントデバイス108(1)~108(n)、検証デバイス104、証明デバイス110(1)~110(n)、ならびに通信ネットワーク106(1)及び106(2)を有する例示的なネットワーク環境100が、本明細書で説明及び図示されているが、他のトポロジにおける他のタイプもしくは数のシステム、デバイス、コンポーネント、または要素を使用することもできる。なお、本明細書にて説明されている例でのシステムは、例示目的のためであることが理解されるべきであり、関連する技術分野の当業者によって理解されるように、例を実施するために使用される特定のハードウェア及びソフトウェアの多くの変形形態が可能である。
【0033】
例えば、クライアントデバイス108(1)~108(n)、検証デバイス104、または証明デバイス110(1)~110(n)など、ネットワーク環境100に示されるコンポーネントの1つまたは複数は、同じ物理マシン上で仮想インスタンスとして動作するように構成されてよい。換言すれば、クライアントデバイス108(1)~108(n)、検証デバイス104、または証明デバイス110(1)~110(n)のうちの1つまたは複数は、通信ネットワーク106(1)及び/または106(2)を介して通信する別個のデバイスとしてではなく、同じ物理デバイス上で動作することができる。さらに、図1に示すより多くのまたは少ないクライアントデバイス、検証デバイス、または証明デバイスがあってもよい。
【0034】
この技術の例は、本明細書で例を挙げて説明及び図示するように、本技術の1つまたは複数の態様について、メモリ202及び/または304などに記憶された命令を有する1つまたは複数の非一時的なコンピュータ可読媒体として具体化することもできる。いくつかの例において、命令は、実行可能コードを含み、実行可能コードは、CPU(複数可)200及び/もしくは300ならびに/またはGPU(複数可)302などの1つまたは複数のプロセッサによって実行されると、プロセッサに、本技術の例での方法を実施するために必要なステップを実行させる。本明細書において、それについて、説明及び図に示す。
【0035】
ここで図4を参照すると、データベースクエリ結果の検証を容易にするためにデータを取り込む例示的な方法のタイミング図が示されている。この例のステップ400では、クライアントデバイス108は、要求と共に含まれるデータを、証明デバイス110によって少なくとも部分的にホストされるデータベース112に保存するために、通信ネットワーク(複数可)106を介して要求を送信する。したがって、この特定の例では、検証デバイス104は、事実上、クライアントデバイス108と証明デバイス110の間に配置されたゲートウェイである。
【0036】
ステップ402において、クエリ検証装置102の検証デバイスは、クライアントデバイス108からの要求を受信またはインターセプトし、データベース112に保存される、要求に関連付けられたデータ(例えば、データを保存する、データベース112におけるテーブル)に対するコミットメントを生成し、ローカルに(例えば、メモリ304に)記憶する。この例におけるコミットメントは、データの比較的小さな「ダイジェスト」であり、例示的なコミットメントスキームとともに以下でより詳細に説明及び図示するように、その後データが改ざんされていないことを保証するのに十分な情報を保持する。
【0037】
ステップ404において、検証デバイス104は、データベース112に保存するためにデータをクエリ検証装置102の証明デバイス110に送信する。ステップ406において、証明デバイス110はデータベース112(例えば、SQLデータベース、ただし任意の他のタイプのデータベースも使用可能)にテーブルを作成し、データをテーブル(または他のデータベースストレージ構造)に挿入する。ステップ408において、証明デバイス110は、任意選択で確認応答を検証デバイス104に送信し、検証デバイス104は、ステップ410において、任意選択で、データベース112への要求されたデータの保存が成功したことを示す別の確認応答をクライアントデバイス108に送信する。
【0038】
本明細書で説明及び図示する例では、コミットメントは、検証デバイス104が古い既存のデータにアクセスする必要なしに、検証デバイス104によって有利に更新可能である。図5を参照すると、新しいデータの取り込みに続いてコミットメントを更新するための例示的な方法のタイミング図が示されている。この例のステップ500では、クライアントデバイス108は、データベース112に向けられた保存要求の一部として新しいデータを送信する。この例では、新しいデータは、図4のステップ406で作成されたのと同じテーブルにアペンドされることになる。
【0039】
ステップ502において、検証デバイス104は、クライアントデバイス108から要求を受信し、関連データに対する記憶されたコミットメントを取得し、取得したコミットメントをステップ504において更新する。検証デバイス104が、テーブルに保存されている古い既存のデータにアクセスすることなしに、取得した古いコミットメントと受信する新しいデータと組み合わせて、更新されたテーブル全体に対する新しいコミットメントを作成できるようにするために、ペダーセンコミットメント及び関連するスキームが一部の例で使用できるが、他のタイプのアルゴリズムを使用して、例えばKZGコミットメントやFRIコミットメントなどの他のタイプのコミットメントを生成することもできる。
【0040】
ペダーセンコミットメントスキームは、開発の迅速化と市場投入までの時間の短縮に役立ち、有利な数学的特性を備えている。特定の一例では、
は、(例えば、データベーステーブルの)データの列であり、ペダーセンコミットメントは、
であり、ここで、Gのものは、他のコミットメントスキームで必要とされる、信頼できるセットアップフェーズを必要としない「ランダムな」パブリックで透過的なパラメータである。
【0041】
また、ペダーセンコミットメントは比較的簡単に更新できるため、コミットメントにアペンドするために必要なのは、新しいデータごとに上記の合計に追加の項を加えることだけである。さらに、ペダーセンコミットメントの計算速度は、楕円曲線としてCurve25519を使用し、並列処理のためにGPU(複数可)302を使用して向上させることができる。Curve25519については、Bernstein,Daniel,Curve25519:New Diffie-Hellman Speed Records、2016、3958、207-228.10.1007/11745853_14に記載されており、その全体が参照により本明細書に組み込まれる。ペダーセンコミットメントは、Pedersen,T.P.,「Non-Interactive and Information-Theoretic Secure Verifiable Secret Sharing」、Advances in Cryptology-CRYPTO’91(129~140ページ)、Springer Berlin Heidelbergにさらに記載されており、その全体が参照により本明細書に組み込まれる。
【0042】
したがって、ステップ504におけるコミットメントの更新に続いて、検証デバイス104は、ステップ506において新しいデータを証明デバイス110に送信する。ステップ508において、証明デバイス110は、データベース112の以前に作成された既存のテーブルに新しいデータをアペンドする。ステップ510において、証明デバイス110は任意選択で、確認応答を検証デバイス104に送信し、検証デバイス104は任意選択で、ステップ512において、要求された新しいデータのデータベース112への保存に成功したことを示す別の確認応答をクライアントデバイス108に送信する。
【0043】
図6を参照すると、記憶されたコミットメントを使用してデータベースクエリ結果を検証する例示的な方法のタイミング図が示されている。この例のステップ600では、クライアントデバイス108はデータベース112にクエリを送信して、例えば少なくとも1つのテーブルから保存されたデータを抽出する。ステップ602において、検証デバイス104は、クライアントデバイス108からクエリを受信し、データベース112の少なくとも一部をホストする証明デバイス110にクエリを転送する。
【0044】
ステップ604において、証明デバイス110は、クエリ実行エンジン310を使用して、検証デバイス104から受信したクエリをデータベース112に対して実行し、結果を生成する。ステップ606において、証明デバイス110は証明を生成する。この証明は、Bunz,Benediktの「Bulletproofs:Short Proofs for Confidential Transactions and More」(2018 IEEE Symposium on Security and Privacy(SP)、2018年5月20~24日)(これは、その全体が参照により本明細書に組み込まれる)に記載されているペダーセンコミットメントスキームと同様の方法を使用して生成することができるが、証明を生成するための他のスキーム及び方法も使用することができる。
【0045】
さらに、証明は、例えば、Fiat-Shamirヒューリスティックを使用して非対話型にすることができる。一例では、証明は、図7のステップ704~712を参照して以下でより詳細に説明及び図示するように、ステップ606で生成されるが、他の例では他の方法で証明を生成することができる。次に、ステップ608及び610で、証明デバイス110は、生成した結果及び証明をそれぞれ検証デバイス104に送信する。
【0046】
ステップ612で、検証デバイス104は、ステップ600で受信したクエリが向けられた少なくとも1つのテーブルについて記憶されたコミットメントを取得する。ステップ614において、検証デバイス104は、取得したコミットメントを使用して、ステップ610で証明デバイス110から受信した証明をステップ608で証明デバイスから受信した結果と照合し、それによって証明デバイス110がクエリに対して正しい結果を生成したかどうかを検証する。
【0047】
検証デバイス104が、証明デバイス110がクエリに対して正しい結果を生成したと判断した場合、検証デバイス104は、ステップ616で、クエリの発信元であるクライアントデバイス108に結果を送信する。任意選択で、検証デバイス104は、ステップ618で、ステップ616で送信された結果とともに、またはステップ616で送信された結果に続いて、改ざん防止成功フラグを送信する。改ざん防止成功フラグは、結果が検証され、したがってクエリが改ざんされていないことを示す印とすることができる。
【0048】
しかしながら、検証デバイス104がステップ614で証明が不合格であると判断した場合、検証デバイス104は結果をクライアントデバイス108にルーティングせず、代わりに失敗メッセージを送信する。他の例では、検証デバイス104は、改ざん防止失敗フラグを付けて結果をクライアントデバイスに送信することができ、さらに他の例では、検証デバイス104側の検証の成功及び/または失敗を示す他のタイプの通信も使用することができる。
【0049】
図7を参照すると、データベースクエリ結果の検証を容易にするためにGPU(複数可)302の少なくとも1つを使用する例示的な方法のタイミング図が示されている。この技術の計算コストのかなりの部分は、コミットメントを計算することに関係している。ただし、特にペダーセンコミットメントの構造は相対的に反復的であり、計算は並列化することができる。有利なことには、この技術はGPU302を活用して、コミットメント計算のためのハードウェア・アクセラレーションを提供し、それによってデータベース112のスケーラビリティを向上させる。この例ではGPU302がコミットメント計算に利用されているが、本明細書で説明及び図示される方法の1つまたは複数のうちの1つまたは複数の他の態様も、GPU302を使用して加速させることができる。
【0050】
この特定の例では、ステップ700及び702は、それぞれ、図6のステップ602及び604を参照して上で説明及び図示したように、CPU(複数可)300の少なくとも1つによって実行される。しかしながら、ステップ704では、証明デバイス110のCPU300は、ステップ706で中間値をGPU302に送信することによって証明の生成を開始する。GPU302は、ステップ708で中間値に基づいてコミットメントを計算する。
【0051】
証明デバイス110は、結果の証明を生成する際に、多くの中間列または中間値を計算する。場合によっては、これらの中間値に対するコミットメントを最初から計算する必要はないが、多くの場合、証明デバイス110は検証デバイス104に中間値に対するコミットメントを提供しなければならない。その結果、証明デバイス110は、ステップ708において、大規模なデータセットに対して一度に多くのコミットメントを計算することが必要な場合がある。
【0052】
ペダーセンコミットメントは、高度に並列性のある多重指数化(multi-exponentiation)として扱うことができる。さらに、いくつかのコミットメントを一緒に計算する必要があるため、これらの多重指数化も並行して実行することができる。いくつかの例では、GPU302は、単一のステップで多くの指数を計算し、次に、それらを所望のコミットメントに集約する。他の例では、最適化を使用することができる。
【0053】
例えば、Pippengerのアルゴリズムは、Pippenger,Nicholas、「On the Evaluation of Powers and Monomials」、SIAM Journal on Computing9.2(1980)、230~250ページ(その全体が参照により本明細書に組み込まれる)に記載されており、最適な漸近ランタイムを促進するために使用することができる。他の例では、スパースなデータセットを素朴なアルゴリズムを使用するよりも効率的に処理でき、データに小さな値が含まれている場合は、速度を高めるために、指数の計算を切り捨てることができる。さらに他の例では、他の最適化を使用することもできる。
【0054】
図7を参照すると、ステップ710で、証明デバイス110のGPU302は、コミットメントのセットをCPU300に返す。次に、ステップ712で、CPU300は証明の生成を完了し、それぞれ、図6のステップ608及び610を参照して上で説明及び図示したように、ステップ714及び716を実行する。
【0055】
ここで、証明を生成する例示的な方法について、図8~10を参照して説明及び図示する。この特定の例では、データベース112はSQLデータベースであり、クエリ実行エンジン310はSQLエンジンであり、クエリはSQLクエリであるが、他の例では、NoSQLデータベース、実行エンジン、及びクエリを含む、他のタイプのデータベース、実行エンジン、及び/またはクエリを使用することができる。クエリ実行エンジン310は、クエリを解析し、有向非巡回グラフ(DAG)であり得るクエリプランを作成することによって、クエリの実行を開始することができる(例えば、図6のステップ604及び/または図7のステップ702で)。以下に詳細に説明及び図示する例において、例示的なSQLクエリ(本明細書では「サンプルクエリ」と呼ぶ)を次のように提供する。
【0056】
また、本明細書で説明及び図示する例のために、以下のトランザクション及びユーザのテーブルをそれぞれテーブル1及びテーブル2として提供する。
【0057】
(表1)トランザクションテーブル
【0058】
(表2)ユーザテーブル
【0059】
より具体的に図8を参照すると、クエリ例に対するクエリ結果を生成するために使用される例示的なクエリプラン800のフロー図が示されている。クエリ例は、図8に示すように、2つのFILTERノードと1つのJOINノードからなるDAGに、クエリ実行エンジン310によって分解することができる。クエリ例の結果を計算するために、クエリ実行エンジン310は、2つのテーブルのそれぞれをFILTERノードに渡し、次に、それらのノードからの中間結果をJOINノードに渡す。JOINノードの出力がクエリの結果である。
【0060】
より具体的に図9を参照すると、クエリ例に対する証明を生成するために使用される例示的な証明プラン900のフロー図が示されている。クエリ例の証明は、この例では、クエリ実行エンジン310によって使用されるDAGをミラーリングする。したがって、各FILTERまたはJOIN操作には対応する証明が必要であるため、クエリプラン800のクエリ実行ノードごとに証明ノードが作成される。クエリの実行によって中間ステップがすでに計算されているため、証明ノードはそれらの中間結果を使用することができる。各証明ノードは部分的証明を生成し、その後、部分的証明は全体的な証明に集約される(例えば、図6のステップ606)。
【0061】
より具体的に図10を参照すると、並行して証明プラン900が示されているクエリプラン800のフロー図が示されている。図10に示される方法は、いくつかの例では証明デバイス110によって実行することができる。有利なことに、この例では、証明の生成は、クエリ実行エンジン310との統合に基づいて比較的効率が良く、クエリ例に基づいてクエリ実行エンジン310によって生成されるDAGのノードに対応する中間ノードは、部分的証明の生成に使用され、部分的証明が集約されて、検証デバイス104に返される証明を形成する。
【0062】
図11を参照すると、証明プラン900を介して生成された証明とクエリプラン800を介して生成された結果とを使用してクエリ例に対するクエリ結果を検証する例示的な方法のフロー図が示されている。図11に示す方法は、いくつかの例では、検証デバイス104によって実行することができる。この特定の例では、検証デバイス104は、クエリ例に基づいてクエリ実行エンジン310によって生成されたDAGもミラーリングする。しかしながら、検証デバイス104はデータベース112に保存されたデータにアクセスできないため、コミットメントに対してのみ機能することができる。
【0063】
より具体的には、検証デバイス104は、検証デバイス104がクエリ例の検証を試みるこの例では、トランザクションテーブル及びユーザテーブルに対して以前に生成された記憶済みのコミットメントを取得することから始める。証明デバイス110がクエリ例の1つのステップに応答してデータを変換するとき、検証デバイス104は、対応する変換を関連データのコミットメントに適用しなければならない。このアプローチでは、検証デバイス104によるコミットメントの計算は、証明デバイス110から検証デバイス104にデータを送信し、その後検証デバイス104が計算を実行することに比べて比較的効率が良い。
【0064】
検証デバイス104がコミットメントに関する計算を完了すると、結果に対するコミットメントが完了し、次に、結果が結果に対するそのコミットメントとマッチまたは合致するかどうかを判断することができる。合致する場合、検証デバイス104は、それが正しい結果であることを認識し、合致しない場合、検証デバイス104は、結果をリジェクトすることを認識する。いくつかの例では、計算能力が制約されている可能性がある検証デバイス104に必要な計算リソースを削減するために、証明の一部分(複数可)が任意選択で証明デバイス110によって検証デバイス104に提供される。
【0065】
本明細書で説明及び図示する技術に従ってデータベースクエリを検証する例示的な方法が次に説明される。この例では、クライアントデバイス108のユーザはテーブルを作成し、それにアペンドし、その後テーブルにクエリを実行する。したがって、クライアントデバイス108は、以下のテーブル3に示す従業員テーブルを作成する要求と共にデータを検証デバイス104に送信する。
【0066】
(表3)従業員テーブル例
【0067】
検証デバイス104は、このデータを受け入れ、各列へのコミットメントを計算する。この場合、これらのコミットメントは以下のようになる。
次に、検証器はこれらのコミットメントをローカルに記憶し、データを証明デバイス110に送信し、証明デバイス110はデータベース112に新しい従業員テーブルを作成する。
【0068】
この特定の例では、クライアントデバイス108は、次に、従業員テーブルにアペンドされる新しいデータ行を検証デバイス104に送信する。これを以下のテーブル4に示す。
【0069】
(表4)従業員テーブルにアペンドする行
【0070】
検証デバイス104は、このデータを受け入れ、各列へのコミットメントを更新する。この例では、新しいコミットメントは次のようになる。
次に、検証デバイス104は、新しい行を証明デバイス110に送信し、証明デバイス110は、それらをデータベース112内の従業員テーブルにアペンドする。
【0071】
この例のクライアントデバイス108は次に、総報酬を決定するために、データベース112にSQLクエリ:SELECT Pay*52+Bonus FROM Employeesを送信し、これを検証デバイス104が受信する。検証デバイス104は、クエリを証明デバイス110にルーティングし、証明デバイス110は、給料列を取得し、給料列に52を乗算し、ボーナス列を加算することによってクエリ実行エンジン310を介してクエリを実行して、クエリ結果を生成し、クエリ結果は、検証デバイス104に送り返され、以下のテーブル5に反映される。
【0072】
(表5)報酬総額を加えた従業員テーブル
【0073】
このクエリは比較的単純であるため、この特定の例における証明デバイス110は、追加の証明を検証デバイス104に送信する必要がなく、検証デバイス104は証明デバイス110からテーブル5の結果列のみを受信する。クエリ結果(すなわち、テーブル5の結果列)を検証するために、検証デバイス104は、給料コミットメントを取得し、それに52を乗算し、ボーナスコミットメントを加算することによって、証明デバイス110の計算をミラーリングする。これは、まさに、あるべき結果に対するコミットメントであり、すなわち、
である。
【0074】
次に、検証デバイス104は、証明デバイス110から送信されたクエリ結果に対するコミットメントを計算する。証明デバイス110が正しい結果を送信した場合、これは以下のようになる。
しかしながら、証明デバイス110が間違った結果を送信した場合、この計算は別の値を生み出すことになる。次に、検証デバイス104は、
のようになるかどうかを確認し、そうなる場合、検証デバイス104は、クエリ結果が正しいことを確認するフラグとともにクエリ結果をクライアントデバイス108に送信する。2つの値が等しくない場合、検証デバイス104は、例えばエラーがあったことを示す失敗メッセージをクライアントデバイス108に送信する。
【0075】
上記の例はSQL操作の証明に関するものであるが、この技術は任意のタイプのデータベースクエリに適用することができる。例えば、ニューヨーク州ニューヨーク市のMongoDB社が提供するMongoDBは、キー-バリューストアに構築されたNoSQLクエリ実行エンジンの一例である。キーと値のルックアップは、キーのフィルタとして扱うことができる。その結果、以下の例で説明するように、キーと値のルックアップを証明することができる。MongoDBは、条件に基づくフィルタリングもサポートしており、これは、以下で説明する例のように証明することもできる。これら2つの操作は最も一般的なMongoDBクエリをカバーするが、他のクエリや他のタイプのクエリ実行エンジンに関連付けられた他の操作も、本明細書で詳細に説明及び図示されている技術を使用して証明することができる。
【0076】
クエリ例、具体的にはクエリ例の、SELECT*FROM transactions WHERE amount>10000フィルタ操作の抜粋を再度参照すると、以下のテーブル6は、量>10000である述語(predicate)の評価を加えたトランザクションテーブル(つまり、上記のテーブル1)示しており、ここで、0は偽値を示し、1は真値を示す。
【0077】
(表6)述語付きのトランザクションテーブル
【0078】
クエリ例のこの抜粋に関連付けられたフィルタノードの証明は、(1)述語の評価の証明と(2)フィルタされた結果の証明の2つのコンポーネントに分けることができる。この場合、例えば、述語は範囲証明を使用して証明できるが、他の例では他の式を他の手法を使用して証明することができる。以下のテーブル7は、フィルタリングされた正しい結果を示す。
【0079】
(表7)インデックス付きのフィルタリングされた結果
【0080】
一例では、述語列と他の3つの列のそれぞれを乗算することで、上記の結果が正しいことが証明できる。この計算の結果は、削除する必要がある行をゼロに変換して、以下に示すテーブル8になる。
【0081】
(表8)述語を乗算したトランザクションテーブル
【0082】
テーブル8の列へのコミットメントは、フィルタの結果のデータに完全に依存する。フィルタがクエリ全体の最終結果である場合、証明デバイス110が、フィルタ結果を元のテーブル(すなわち、テーブル1)の各行のインデックスとともに検証デバイス104に送信するだけで十分となる。これにより、検証デバイス104がコミットメントを再構築し、それを証明された積と照合することができるようになる。
【0083】
本明細書の例によって説明及び図示するように、この技術は、信頼できない分散型データベースを含む信頼できないデータベースから生成されたクエリ結果の検証をより効果的かつ効率的に促進する。この技術は、コミットメント、GPU、及び/またはクエリプラン(例えば、SQLクエリ実行エンジンによって生成されたDAG)を活用して、データベースのスケーラビリティを向上させ、クエリ結果の精度を検証する。コミットメントは更新可能であり、クエリ結果は、データベースによってホストされるデータへのそのデバイスまたはサービスによるアクセスを必要とせずに、例えば、仲介デバイスまたはサービスによって検証される。
【0084】
このように、本発明の基本概念を説明したが、前述の詳細な開示は、単なる例として示すことを意図しており、これに限定されるものではないことは、当業者には明らかであろう。本明細書に明示的に述べられていないが、種々の変更、改良、及び修正が発生するだろう、かつそれらは当業者を対象としている。これらの変更、改良、及び修正は、本明細書により示唆されることを意図しており、かつそれらは本発明の趣旨及び範囲内である。さらに、処理要素もしくは順序の記載順序、または番号、文字、もしくは他の指定の使用は、特許請求の範囲で指定される場合を除き、特許請求したプロセスをいかなる順序にも限定することを意図していない。したがって、本発明は、以下の特許請求の範囲及びその均等物によってのみ制限される。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11