(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-07-27
(54)【発明の名称】準群演算を含む暗号化データに対して等価演算および未満演算を実行するシステムおよび方法
(51)【国際特許分類】
G09C 1/00 20060101AFI20220720BHJP
【FI】
G09C1/00 650Z
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2021568119
(86)(22)【出願日】2020-05-07
(85)【翻訳文提出日】2021-11-12
(86)【国際出願番号】 US2020031967
(87)【国際公開番号】W WO2020231762
(87)【国際公開日】2020-11-19
(32)【優先日】2019-05-14
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】521477156
【氏名又は名称】バッフル インコーポレイテッド
(74)【代理人】
【識別番号】100094569
【氏名又は名称】田中 伸一郎
(74)【代理人】
【識別番号】100103610
【氏名又は名称】▲吉▼田 和彦
(74)【代理人】
【識別番号】100109070
【氏名又は名称】須田 洋之
(74)【代理人】
【識別番号】100067013
【氏名又は名称】大塚 文昭
(74)【代理人】
【識別番号】100086771
【氏名又は名称】西島 孝喜
(74)【代理人】
【識別番号】100109335
【氏名又は名称】上杉 浩
(74)【代理人】
【識別番号】100120525
【氏名又は名称】近藤 直樹
(74)【代理人】
【識別番号】100139712
【氏名又は名称】那須 威夫
(74)【代理人】
【識別番号】100170209
【氏名又は名称】林 陽和
(72)【発明者】
【氏名】コルテ プリヤダーシャン
(72)【発明者】
【氏名】ジャクソン スペンス
(72)【発明者】
【氏名】シャンムガヴェラユサム パラニヴェル ラジャン
(72)【発明者】
【氏名】ベラレ ミヒール
(72)【発明者】
【氏名】シュネット ナタン
(57)【要約】
パブリッククラウドにおけるプライベート計算に対応し、(等価決定、および未満の比較演算を含む)暗号化データの演算を実行する能力を提供する暗号化システムおよび方法が提供される。
【選択図】
図1
【特許請求の範囲】
【請求項1】
第1の暗号データ項目および第2の暗号データ項目を生成するために、Q群暗号化を使用して、クライアントからの第1の平文データ項目および第2の平文データ項目を暗号化することと、
第1の暗号文および第2の暗号文を生成するために各暗号データ項目のメッセージ認証コードを生成することと、
前記暗号化されたデータに対して演算を実行するための前記第1および第2の暗号文に対する演算要求を前記クライアントから受け取ることと、
セキュアマルチパーティ計算(SMPC)クラスタの第1および第2のコンピュータを使用して、演算結果を生成するために前記第1および第2の暗号文に対して前記演算を実行することと、
前記クライアントに前記演算結果を戻すことと、
を含む、方法。
【請求項2】
前記暗号化されたデータに対する前記演算は、暗号化等価演算および暗号化未満演算の一方をさらに含む、
請求項1に記載の方法。
【請求項3】
前記第1および第2の平文データ項目を暗号化することは、暗号化鍵、擬似ランダムパッドによるQ群減算演算、および前記平文データ項目を使用して、前記第1のデータ項目および前記第2のデータ項目の各々の前記暗号データを生成することをさらに含む、
請求項1に記載の方法。
【請求項4】
前記第1および第2の平文データ項目を暗号化することは、前記暗号化鍵、擬似ランダム関数、ノンス、および前記平文データの長さを使用して、各平文データ項目について前記擬似ランダムパッドを生成することをさらに含む、
請求項3に記載の方法。
【請求項5】
前記擬似ランダム関数は、暗号化法および暗号メッセージダイジェストの一方である、
請求項4に記載の方法。
【請求項6】
各暗号データ項目の前記メッセージ認証コードを生成することは、認証鍵を使用して各暗号データ項目の前記メッセージ認証コードを生成することをさらに含む、
請求項3に記載の方法。
【請求項7】
演算結果を生成するために前記第1および第2の暗号文に対して前記演算を実行することは、前記第1および第2の平文データ項目の各々の前記暗号化鍵を前記SMPCクラスタの前記第1のコンピュータに提供することと、前記第1および第2の平文データ項目の各々の前記認証鍵を前記SMPCクラスタの前記第2のコンピュータに提供することと、をさらに含む、
請求項6に記載の方法。
【請求項8】
演算結果を生成するために前記第1および第2の暗号文に対して前記演算を実行することは、前記SMPCクラスタの前記第1のコンピュータ上で、前記第1の暗号文の第1の共有と前記第2の暗号文の第1の共有との間の差分を計算することと、前記SMPCクラスタの前記第2のコンピュータ上で、前記第1および第2の暗号文の完全性を検証することと、前記SMPCクラスタの前記第2のコンピュータ上で、前記第1の暗号文の第2の共有と前記第2の暗号文の第2の共有との間の差分を計算することと、をさらに含む、
請求項7に記載の方法。
【請求項9】
演算結果を生成するために前記第1および第2の暗号文に対して前記演算を実行することは、前記SMPCクラスタの前記第1のコンピュータと第2のコンピュータとの間で秘密鍵およびカウンタ値を共有することをさらに含む、
請求項8に記載の方法。
【請求項10】
前記第1および第2の平文データ項目を暗号化することは、暗号化鍵、擬似ランダムパッドによるQ群減算演算、および前記平文データ項目を使用して、前記第1のデータ項目および前記第2のデータ項目の各々の前記暗号データを生成することをさらに含み、各暗号データ項目の前記メッセージ認証コードを生成することは、認証鍵を使用して各暗号データ項目の前記メッセージ認証コードを生成することをさらに含み、前記方法は、前記SMPCクラスタの前記第1のコンピュータと前記第2のコンピュータとの間で秘密鍵およびカウンタ値を共有することをさらに含む、
請求項1に記載の方法。
【請求項11】
前記暗号化されたデータに対して前記演算を実行することは、前記第1および第2の暗号データ項目に対して暗号化等価演算を実行することをさらに含む、
請求項10に記載の方法。
【請求項12】
前記第1および第2の暗号データ項目に対して前記暗号化等価演算を実行することは、前記SMPCクラスタの前記第2のコンピュータ上で、前記第1および第2の暗号文の前記メッセージ認証コードを再計算することと、前記SMPCクラスタの前記第2のコンピュータ上で、前記秘密鍵および前記カウンタ値に基づいて乱数値を生成することと、前記SMPCクラスタの前記第2のコンピュータ上で、前記第1および第2の暗号文間の差分を生成することと、前記SMPCクラスタの前記第2のコンピュータ上で、前記生成された前記第1および第2の暗号文間の差分および前記乱数値に基づいて等価暗号化値を計算することと、をさらに含む、
請求項11に記載の方法。
【請求項13】
前記第1および第2の暗号データ項目に対して前記暗号化等価演算を実行することは、前記SMPCクラスタの前記第1のコンピュータによって、前記秘密鍵および前記カウンタ値に基づいて乱数値を生成することと、前記SMPCクラスタの前記第1のコンピュータによって、前記第1の暗号文の前記暗号化鍵を使用した前記第1の暗号文の第1の共有の擬似ランダム関数と、前記第2の暗号文の前記暗号化鍵を使用した前記第2の暗号文の第1の共有の擬似ランダム関数と、の間の差分を計算することと、前記SMPCクラスタの前記第1のコンピュータ上で、前記生成された前記第1および第2の暗号文間の差分および前記乱数値に基づいて等価暗号化値を計算することと、をさらに含む、
請求項12に記載の方法。
【請求項14】
前記演算結果を生成することは、前記第1の平文データ項目および第2の平文データ項目が等しいかどうかを判定するために、データベースコンピュータにおいて、前記SMPCクラスタの前記第1のコンピュータの前記等価暗号化値および前記SMPCクラスタの前記第2のコンピュータの前記等価暗号化値の排他的論理和を生成することをさらに含む、
請求項13に記載の方法。
【請求項15】
前記暗号化されたデータに対して前記演算を実行することは、前記SMPCクラスタを使用して、前記第1および第2の暗号データ片に対して暗号化未満演算を実行することをさらに含む、
請求項10に記載の方法。
【請求項16】
前記第1および第2の暗号データ項目に対して前記暗号化未満演算を実行することは、前記SMPCクラスタの前記第2のコンピュータ上で、前記第1および第2の暗号文の前記メッセージ認証コードを再計算することと、前記SMPCクラスタの前記第2のコンピュータ上で、前記秘密鍵および前記カウンタ値に基づいて乱数値を生成することと、前記SMPCクラスタの前記第2のコンピュータ上で、前記第1および第2の暗号文間の差分を生成することと、前記SMPCクラスタの前記第2のコンピュータ上で、前記生成された前記第1および第2の暗号文間の差分および前記乱数値に基づいて順序開示暗号化値を計算することと、をさらに含む、
請求項15に記載の方法。
【請求項17】
前記第1および第2の暗号データ項目に対して前記暗号化未満演算を実行することは、前記SMPCクラスタの前記第1のコンピュータによって、前記秘密鍵および前記カウンタ値に基づいて乱数値を生成することと、前記SMPCクラスタの前記第1のコンピュータによって、前記第1の暗号文の前記暗号化鍵を使用した前記第1の暗号文の第1の共有の擬似ランダム関数と、前記第2の暗号文の前記暗号化鍵を使用した前記第2の暗号文の第1の共有の擬似ランダム関数と、の間の差分を計算することと、前記SMPCクラスタの前記第1のコンピュータ上で、前記生成された前記第1および第2の暗号文間の差分および前記乱数値に基づいて順序開示暗号化値を計算することと、をさらに含む、
請求項16に記載の方法。
【請求項18】
前記演算結果を生成することは、データベースコンピュータにおいて、前記第1の暗号文と前記第2の暗号文との間の差分値を生成することと、前記データベースコンピュータにおいて、前記第1のコンピュータからの前記順序開示暗号化値および前記第2のコンピュータからの前記順序開示暗号化値の排他的論理和値を生成することと、前記データベースコンピュータによって、前記排他的論理和値と前記差分値との間の比較値を生成することと、をさらに含み、前記比較値は、前記第1の平文データ項目が前記第2の平文データ項目未満であるかどうかを示す、
請求項17に記載の方法。
【請求項19】
サーバと、
前記サーバに接続し、暗号化されたデータに対する演算を前記サーバに発行することができるクライアントと、
前記サーバによって受け取られる第1の暗号データ項目および第2の暗号データ項目を生成するために前記クライアントからの第1および第2の平文データ項目を暗号化し、第1の暗号文および第2の暗号文を生成するために各暗号データ項目のメッセージ認証コードを生成する、前記クライアントと前記サーバとの間に接続された暗号化エンジンと、
前記第1および第2の暗号データ項目を受け取り、暗号化されたデータに対する前記演算に応じて演算結果を生成する、前記サーバに接続された第1のコンピュータおよび第2のコンピュータを有するセキュアマルチパーティ計算(SMPC)クラスタと、
を備え、
前記サーバは、前記結果を前記クライアントに戻す、
システム。
【請求項20】
前記暗号化されたデータに対する前記演算は、暗号化等価演算および暗号化未満演算の一方をさらに含む、
請求項19に記載のシステム。
【請求項21】
前記暗号化エンジンは、暗号化鍵、擬似ランダムパッドによるQ群減算演算、および前記平文データ項目を使用して、前記第1のデータ項目および前記第2のデータ項目の各々の前記暗号データを生成するようにさらに構成される、
請求項19に記載のシステム。
【請求項22】
前記暗号化エンジンは、前記暗号化鍵、擬似ランダム関数、ノンス、および前記平文データの長さを使用して、各平文データ片について前記擬似ランダムパッドを生成するようにさらに構成される、
請求項21に記載のシステム。
【請求項23】
前記擬似ランダム関数は、暗号化法および暗号メッセージダイジェストの一方である、
請求項22に記載のシステム。
【請求項24】
前記暗号化エンジンは、認証鍵を使用して各暗号データ項目の前記メッセージ認証コードを生成するようにさらに構成される、
請求項21に記載のシステム。
【請求項25】
前記SMPCクラスタの前記第1のコンピュータは、前記第1および第2の平文データ項目の各々の前記暗号化鍵を受け取り、前記SMPCクラスタの前記第2のコンピュータは、前記第1および第2の平文データ項目の各々の前記認証鍵を受け取る、
請求項24に記載のシステム。
【請求項26】
前記SMPCクラスタの前記第1のコンピュータは、前記第1の暗号文の第1の共有と前記第2の暗号文の第1の共有との間の差分を計算するようにさらに構成され、前記SMPCの前記第2のコンピュータは、前記第1および第2の暗号文の完全性を検証し、前記第1の暗号文の第2の共有と前記第2の暗号文の第2の共有との間の差分を計算する、ようにさらに構成される、
請求項25に記載のシステム。
【請求項27】
前記SMPCクラスタの前記第1および第2のコンピュータは、それぞれ秘密鍵およびカウンタ値を共有する、
請求項26に記載のシステム。
【請求項28】
前記暗号化エンジンは、暗号化鍵、擬似ランダムパッドによるQ群減算演算、および前記平文データ項目を使用して前記第1のデータ項目および前記第2のデータ項目の各々の前記暗号データを生成し、認証鍵を使用して各暗号データ項目の前記メッセージ認証コードを生成する、ようにさらに構成され、前記SMPCクラスタの前記第1のコンピュータと前記第2のコンピュータとの間で秘密鍵およびカウンタ値が共有される、
請求項19に記載のシステム。
【請求項29】
前記SMPCクラスタの前記第1および第2のコンピュータは、前記第1および第2の暗号データ項目に対して暗号化等価演算を実行する、
請求項28に記載のシステム。
【請求項30】
前記SMPCクラスタの前記第2のコンピュータは、前記第1および第2の暗号文の前記メッセージ認証コードを再計算し、前記秘密鍵および前記カウンタ値に基づいて乱数値を生成し、前記第1および第2の暗号文間の差分を生成し、前記生成された前記第1および第2の暗号文間の差分および前記乱数値に基づいて等価暗号化値を計算する、ようにさらに構成される、
請求項29に記載のシステム。
【請求項31】
前記SMPCクラスタの前記第1のコンピュータは、前記秘密鍵および前記カウンタ値に基づいて乱数値を生成し、前記第1の暗号文の前記暗号化鍵を使用した前記第1の暗号文の第1の共有の擬似ランダム関数と、前記第2の暗号文の前記暗号化鍵を使用した前記第2の暗号文の第1の共有の擬似ランダム関数と、の間の差分を計算し、前記生成された前記第1および第2の暗号文間の差分および前記乱数値に基づいて等価暗号化値を計算する、ようにさらに構成される、
請求項30に記載のシステム。
【請求項32】
前記サーバは、前記第1の平文データ項目および第2の平文データ項目が等しいかどうかを判定するために、前記SMPCクラスタの前記第1のコンピュータの前記等価暗号化値および前記SMPCクラスタの前記第2のコンピュータの前記等価暗号化値の排他的論理和を生成するようにさらに構成される、
請求項31に記載のシステム。
【請求項33】
前記SMPCクラスタの前記第1および第2のコンピュータは、前記第1および第2の暗号データ片に対して暗号化未満演算を実行する、
請求項28に記載のシステム。
【請求項34】
前記SMPCクラスタの前記第2のコンピュータは、前記第1および第2の暗号文の前記メッセージ認証コードを再計算し、前記秘密鍵および前記カウンタ値に基づいて乱数値を生成し、前記第1および第2の暗号文間の差分を生成し、前記生成された前記第1および第2の暗号文間の差分および前記乱数値に基づいて順序開示暗号化値を計算する、ようにさらに構成される、
請求項33に記載のシステム。
【請求項35】
前記SMPCクラスタの前記第1のコンピュータは、前記秘密鍵および前記カウンタ値に基づいて乱数値を生成し、前記第1の暗号文の前記暗号化鍵を使用した前記第1の暗号文の第1の共有の擬似ランダム関数と、前記第2の暗号文の前記暗号化鍵を使用した前記第2の暗号文の第1の共有の擬似ランダム関数と、の間の差分を計算し、前記生成された前記第1および第2の暗号文間の差分および前記乱数値に基づいて順序開示暗号化値を計算する、ようにさらに構成される、
請求項34に記載のシステム。
【請求項36】
前記サーバコンピュータは、前記第1の暗号文と前記第2の暗号文との間の差分値を生成し、前記第1のコンピュータからの前記順序開示暗号化値および前記第2のコンピュータからの前記順序開示暗号化値の排他的論理和値を生成し、前記排他的論理和値と前記差分値との間の比較値を生成する、ようにさらに構成され、前記比較値は、前記第1の平文データ項目が前記第2の平文データ項目未満であるかどうかを示す、
請求項35に記載のシステム。
【請求項37】
平文文字列を暗号化するためのランダム文字列生成方法であって、
ランダム文字列の第1のランダムビットブロックを生成するために、秘密鍵、カウンタ、第1のノンスおよび第2のノンスを使用してメッセージ認証コードプロセスを実行することと、
前記平文文字列の直前のインデックスにおける文字を、前記秘密鍵、前記ランダム文字列の前記直前のビットブロックおよび前記ランダム文字列の長さを含む擬似ランダム関数で排他的論理和をとることによって、ランダム文字列の各後続ランダムビットブロックを生成することと、
を含む、方法。
【請求項38】
前記メッセージ認証コードプロセスを実行することは、暗号ベースのメッセージ認証コードプロセスを使用することをさらに含む、
請求項37に記載の方法。
【請求項39】
前記擬似ランダム関数は、暗号化法および暗号メッセージダイジェストの一方である、
請求項38に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般に暗号法に関し、具体的にはコンピュータデータ機密性のために使用される暗号法に関する。
【背景技術】
【0002】
現在のNIST標準AESカウンタモード(CTR-XOR)対称鍵暗号化スキームでデータが暗号化されている場合、暗号化データに対して実行できる唯一の演算は復号である。とりわけ、最初に両暗号文を復号することなく、2つの暗号化された整数を(未満(Less Than)について)加算または比較することは不可能である。従って、データセキュリティを提供しながらも暗号化データに対する(等価検出(Equality detection)および未満決定(less than determinations)を含む)有用な演算を可能にする暗号化技術を提供することが望ましい。
【0003】
上記の問題は、パブリッククラウドにおけるプライベート計算の文脈で特に深刻であるが、他の領域にも存在する。等価についての比較では、既知のシステムおよび方法は、決定論的暗号化(DE)、またはSHAなどのハッシュを比較する方法を使用する。しかしながら、決定論的暗号化(DE)は安全性が低いことが知られている。大きなハッシュの比較には時間がかかるのに対し、小さなハッシュの比較では、衝突に起因して不正確な結果が得られることがある。
【0004】
未満の比較演算(compare for less than operation)では、既知のシステムは、順序保存暗号化(Order Preserving Encryption:OPE)および順序開示暗号化(Order Revealing Encryption:ORE)のための方法、Cybernetica社のSharemindなどのセキュアマルチパーティ計算(secure Multiparty Computation:SMPC)スキーム、または秘匿回路(Garbled Circuits:GC)を使用する方法を使用する。しかしながら、隔離(isolation)において使用される順序保存暗号化(OPE)および順序開示暗号化(ORE)は安全性が低いことが知られている。未満比較(Compare Less Than)のための文献におけるSMPCプロトコルは、パーティ間の通信を何回も必要とし、従って非常に時間がかかる。秘匿回路(GC)は高い機密性を提供する可能性があるが、計算コストが高く、パーティ間で大量の暗号文が通信されることを必要とする。
【0005】
従って、パブリッククラウドにおけるプライベート計算に対応し、暗号化データに対して演算(等価決定(equality determination)および未満の比較演算(compare for less than operation))を実行する能力を提供する暗号化システムおよび方法を提供することが望ましく、これを本開示の目的とする。
【図面の簡単な説明】
【0006】
【
図1】暗号化データに対して様々な演算を実行するために使用できるシステムの実施形態例を示す図である。
【
図2】
図1のシステムを使用して実行できる(暗号化およびメッセージ認証コードを含む)暗号化法を示す図である。
【
図3】
図1のシステムを使用して実行できる復号方法を示す図である。
【
図4】暗号化等価演算のための暗号化法の例を示す図である。
【
図5】暗号化等価演算のさらなる詳細を示す図である。
【
図6】暗号化未満演算のための暗号化法の例を示す図である。
【
図7】暗号化未満演算のさらなる詳細を示す図である。
【発明を実施するための形態】
【0007】
本開示は、パブリッククラウド内のデータに対する演算中にデータの機密性が維持されるようにプライベート計算をパブリッククラウドに外部委託するシステムにとりわけ適用可能であり、この文脈で本開示を説明する。しかしながら、このシステムおよび方法は、セキュリティのための暗号化を提供する一方で暗号化データに対して演算が実行されることも可能にすることが望ましいあらゆるシステムのために/と共に使用できるので、非常に有用であると理解されるであろう。実施形態では、暗号化および復号プロセスが、攻撃者が暗号化値を偽造して積極的攻撃を開始するのを防ぐメッセージ認証コードを含む。後述するシステムおよび方法は、パブリッククラウドにおける機密性を維持するために復号なしで実行できる計算を可能にする(Q群(QGroup)として短縮する)準群暗号化およびメッセージ認証コード(MAC)プロセスを使用した暗号化データの等価検出または暗号化データに対する未満演算のために使用することができる。このシステムおよび方法は、SMPCシステムを活用することもできる。
【0008】
図1に、暗号化データに対して様々な演算を実行するために使用できるシステム100の実施形態例を示す。この実施形態例には、互いに通信するクライアント102およびサーバ104を示しているが、システムは、互いに通信する複数のクライアントおよび複数のサーバを使用して実装することもできる。各クライアント102は、プロセッサ、メモリ、I/O装置およびディスプレイを有するとともに、暗号化データに対して等価検出演算または未満のための比較演算などの1または2以上の演算が実行されるように要求している複数行の命令/コンピュータコード(アプリケーション、コードの一部、モバイルアプリケーションなど)を実行できるコンピュータ装置とすることができる。たとえば、各クライアント102のコンピュータ装置は、パーソナルコンピュータ、ラップトップコンピュータ、タブレットコンピュータおよび端末などとすることができる。以下の図では、クライアントが、クライアントの一部であって演算コマンドを発行してサーバ104から結果を受け取るアプリケーション112を含むことができる。各サーバ104は、プロセッサ、メモリ、I/O装置およびディスプレイを有するとともに、1または2以上の演算を要求したクライアントを管理して暗号化データに対する演算を容易にする複数行の命令/コンピュータコード(アプリケーション、コードの一部、モバイルアプリケーションなど)を実行できるコンピュータとすることができる。たとえば、各サーバ104のコンピュータは、サーバコンピュータ、1または2以上のクラウドコンピューティングリソース、1または2以上の仮想コンピュータリソース、1または2以上のブレードサーバなどとすることができる。サーバ104には、暗号化データを記憶するデータベース114が付属することができ、システムは、データベース114上の暗号化データに対して演算を実行する。1つの実施形態では、データベース114が、暗号化データの記憶を必要として暗号化データに対して演算を実行するパブリッククラウド内にホストされ/存在することができる。1つの実施形態では、データベースサーバを使用してデータベース114を実装することができる。
【0009】
システム100は、各クライアントと各サーバとの間に接続されて後述する暗号化および復号演算を管理するQ群および順序開示暗号化(ORE)暗号化/復号部106をさらに含むことができる。暗号化/復号部106は、少なくとも1つのプロセッサ、メモリ、I/O装置を有するとともに、後述するような各クライアント102とサーバ104との間の暗号化および復号演算を実行する複数行の命令/コンピュータコード(1または2以上のアプリケーション、コードの一部、モバイルアプリケーションなど)を実行できる1または2以上のコンピュータシステムとして実装することができる。
【0010】
システムは、以下でさらに詳細に説明するような暗号化データに対する要求された演算の実行を支援する、サーバ104に接続された既知のセキュアマルチパーティ計算(SMPC)クラスタ108をさらに含むことができる。SMPCクラスタ108は、少なくとも1つのプロセッサ、メモリ、I/O装置を有するとともに、以下でさらに詳細に説明するような暗号化データに対する要求された演算の実行を支援する複数行の命令/コンピュータコード(1または2以上のアプリケーション、コードの一部、モバイルアプリケーションなど)を実行できる1または2以上のコンピュータシステムとして実装することができる。暗号化/復号部106およびSMPCクラスタ108は、それぞれ互いに同じまたは異なるコンピュータ上に実装することができる。より詳細には、暗号化部106は、クライアント102と同じシステム上または別のシステム上に実装することができるが、サーバ104上で暗号化鍵が利用可能になるという理由で決してサーバ104と同じシステム上には実装されない。さらに、暗号化/復号部106およびSMPCクラスタ108の各々は、サーバ104と同じまたは異なるコンピュータ上に実装することもできる。
図1に示すように、暗号化/復号部106およびSMPCクラスタ108の各々には、暗号化データに対して暗号化/復号および演算を実行するように時々暗号化鍵110を提供することができる。各クライアントは、暗号化データに対する1または2以上の演算111を生成することができ、サーバ104は、後述するようにこれらの演算の結果113をクライアントに戻す。
【0011】
図2に、暗号化法200を示し、
図3に、
図1に示すシステムが実行できる検証および復号演算法300を示す。これらのプロセスの各々は、
図1に示すシステム要素100~114のうちの1つまたは2つ以上を使用してプロセスを実行することができる。
【0012】
暗号化演算200に戻ると、(1つの実施形態では
図1の暗号化要素106によって実行できる)暗号化は、(暗号化スキームを使用して以前に生成された、または暗号化時点で生成される)2つの秘密鍵を使用して暗号化を実行する。一方の秘密鍵は、クライアント/アプリケーション102、112からの平文データDを暗号化するために使用される暗号化鍵Keであり、他方の秘密鍵は、秘密鍵Keを使用した暗号化によって生成された暗号データ(cipher data)Cに対してメッセージ認証コード(MAC)プロセスを実行するために使用される認証鍵Kaである。1つの実施形態では、既知のQ群暗号化プロセスを使用して暗号化/復号プロセスを実行することができる。
【0013】
図2に示すように、暗号化法200は、AES暗号化またはHMAC-SHAメッセージダイジェストなどの暗号関数である擬似ランダム関数(Prf)を使用して擬似ランダムパッドPを生成し(プロセス202)、その後にQ群減算演算(QGroup subtract operation)204を使用してこれをクライアント/アプリケーション102、112からの平文データDと組み合わせる。より詳細には、プロセス202は、1回だけ使用される乱数であるノンスN、平文テキストデータのビット数である長さL、およびパッドPを生成するためにPrfによって使用される暗号化秘密鍵Keを利用する。NIST標準AESカウンタモード(CTR-XOR)は、PrfとしてAES暗号化関数を使用し、Q群演算としてXor関数を使用する。NIST標準は、CTR-XOR暗号化が長さLビットの平文データM、ノンスNおよび秘密鍵Kを利用して、最初にm=それぞれがN、N+1、...、N+m-1から導出された128ビットの天井(L/128)入力ブロックの集合を生成し、その後にAES暗号化を使用して各入力ブロックを鍵Keで暗号化してm個の出力ブロックを生成し、最後に全てのm個の出力ブロックを連結させて長さLビットの擬似ランダムパッドPを生成する方法を記述する。暗号化の第2段階(プロセス204)では、擬似ランダムパッドPを平文データDでXOR演算して暗号データCを生成する。
【0014】
Q群Gは、長さLの全ての2進列と、G.Add、G.LsubおよびG.Rsubという3つの演算とを含む集合G.Sから成る。G.Add演算は、集合G.Sから2つの要素AおよびBを取り出して集合G.S内の別の要素Cを生成する。G.Lsub演算は、集合G.Sからいずれか2つの要素AおよびCを取り出して、G.Add(A,B)=Cであるように集合から一意的な要素Bを生成する。G.Rsub演算は、集合G.Sからいずれか2つの要素BおよびCを取り出して、G.Add(A,B)=Cであるように集合内の一意的な要素Aを生成する。G.Lsub演算は、G.Add演算の左逆元(left-inverse)として知られており、G.Rsub演算は、右逆元(right-inverse)として知られている。
【0015】
1つの実施形態では、Q群Gを、G.Add(P,D)=(P-D) mod 2LおよびG.Lsub(P,C)=(P-C) mod 2Lであるように選択することができる。この選択により、減算演算204は、C=(P-D) mod 2LにするG.Add(P,D)となり、減算演算306は、D=(P-C) mod 2LにするG.Lsub(P,C)となる。他のQ群演算の選択も可能である。
【0016】
暗号化プロセスの一部として、暗号データCをメッセージ認証コード(MAC)プロセス206に供給することができる。MACプロセス206は、認証鍵Kaも受け取って暗号文を生成し、この暗号文は、ノンスNおよびMAC(M)と共に暗号文(K、N、C、M)としてデータベース114に記憶することができる。MACプロセス206は、攻撃者が暗号化値を偽造して積極的攻撃を開始するのを防ぐために減算プロセス204の後に使用される。
図2~
図3に示す1つの実施形態では、既知の暗号ベースのMAC(CMAC)を使用することもできるが、このシステムおよび方法では、いずれかの鍵付きの暗号ハッシュ関数を使用することができる。
【0017】
復号方法300中には、減算復号プロセス306に入力できる暗号データを生成するための入力として、暗号ベースのMACプロセス302に認証鍵Kaと共に暗号文を供給することができる。従って、MAC結果(ハッシュ)は、復号中に認証鍵Kaを使用して再計算され検証され、MAC検証によって暗号化後に暗号文が改竄されていないことが確認された場合にのみ暗号化鍵Keを使用した実際の復号が開始されるようになる。復号中には、(暗号文と共に記憶された)ノンスNおよび長さL、並びに暗号化鍵Keを擬似ランダム関数304に入力することができ、これにより再びパッドPが生成されて減算復号プロセス306に供給される。減算復号プロセス306は、暗号データおよびパッドを使用して減算演算を実行して平文データを生成することができ、その後にこれをクライアント/アプリケーション102、112に戻すことができる。
【0018】
上記の暗号化および復号方法200、300を使用して、暗号化データに対して複数の異なる演算を実行することができる。具体的には、(
図4~
図5に示す)例示的な暗号化等価演算および(
図6~
図7に示す)例示的な暗号化未満演算を実行することができる。なお、暗号化データに対するこれらの演算は、従来のシステムおよびプロセスを使用して行うことができず、従ってこのシステムおよび方法は、暗号化データに対して演算を実行できるという技術的課題に対する技術的解決策を提供する。
【0019】
<暗号化等価演算>
図4に、暗号化等価演算500のための暗号化法400の例を示し、
図5に、暗号化等価演算500のさらなる詳細を示す。暗号化等価演算500は、2つのSMPCコンピュータ(たとえば、
図5に示すようなSMPCサーバ1 108AおよびSMPCサーバ2 108B)と共に既知のSMPCプロトコルを使用することができる。第1のSMPCコンピュータ108Aは、暗号化鍵(等価演算において使用されるデータ項目(D1、D2)の各々のためのK1e、K2e)にアクセスできるのに対し、第2のコンピュータ108Bは、認証鍵(等価演算において使用されるデータ項目(D1、D2)の各々のためのK1a、K2a)にアクセスすることができる。暗号化鍵は、第1のコンピュータ108A上の第1の共有の差分を計算するために使用されるのに対し、認証鍵は、第2のコンピュータ108B上の第2の共有の差分を計算する前に暗号データの完全性を検証するために使用され、これらについては以下でさらに詳細に説明する。データベース114は、いずれの鍵にもアクセスすることができない。
【0020】
第1および第2のコンピュータ108A、108Bは、データベース114には公開されない共有秘密鍵を確立するようにディフィー・ヘルマンなどの鍵交換プロトコルを使用して1回設定される秘密鍵Kfおよびカウンタ値CTRfを互いに共有する。CTRfは、毎回の等価暗号化演算後に増分されるカウンタであり、Kfは、CTRfを暗号化して等価暗号化に使用すべき乱数セットを生成するために使用される鍵である。
【0021】
等価暗号化関数は、3つの利点を活用して効率的に暗号化を行う。第1に、後述するような復号関数が必要でない。第2に、後述するように2つのSMPCコンピュータ108A、108B間に乱数の同期ストリームが存在する。第3に、後述するように各乱数が一対のオペランドにつき1回のみ使用され、従って演算のセキュリティが高まる。
【0022】
暗号化法および暗号化等価方法400、500は、
図4~
図5に示すような以下のプロセスを含むことができる。
a.アプリケーション112は、以下のプロセスを実行する。
i.暗号化鍵K1eを使用してノンスN1で平文データD1を暗号化した後に、MACが認証鍵K1aを使用して暗号文(K1、N1、C1、M1)を生成して(プロセス402)データベース114に記憶する。
ii.暗号化鍵K2eおよび認証鍵K2aを使用してノンスN2で平文データD2を暗号化して暗号文(K2、N2、C2、M2)を生成して(プロセス402)データベース114に記憶する。
iii.データベース114上の2つの暗号文の等価演算(
図5に示すようなEqualTo演算)を開始する。
b.データベース114(およびデータベース114をホストするコンピュータまたはデータベースサーバ)は、以下の2つのプロセスを並行して実行する。
i.暗号文(K1、N1、C1、M1)および(K2、N2、C2、M2)を第2のコンピュータ108Bに送信して、第2のコンピュータ108Bからの応答Wがデータベース114に戻されるのを待つ。
ii.各暗号文の第1の共有(K1、N1)および(K2、N2)を第1のコンピュータ108Aに送信して、第1のコンピュータ108Aからの応答Yがデータベース114に戻されるのを待つ。
b.第2のコンピュータ108Bは、以下のプロセスを実行する。
i.データベース114から暗号文(K1、N1、C1、M1)および(K2、N2、C2、M2)を受け取る。
ii.受け取られた暗号文のMACとしてM1およびM2を再計算する。検証に成功した場合、その後のプロセスにおいて正しいN1およびN2の値を使用し、検証に失敗した場合、代わりにN1およびN2に乱数値Rを使用する。
iii.鍵Kfを使用してCTRfを暗号化した後にN1およびN2を暗号化して乱数値Rを生成する。
iv.V=(C2-C1) mod 2
Lを計算する。
v.W=EqualityEncryption(V,R)を以下のように計算する。
i.Rから非ゼロの乱数値Aを抽出する。
ii.Rから異なる乱数値Bを抽出する。
iii.A、BおよびVを有限フィールドDの要素として処理し、フィールド乗算および加算を使用してW=A*V+Bを計算する。
vi.Wをデータベース114に送信する。
c.第1のSMPCコンピュータ108Aは、以下のプロセスを実行する。
i.データベース114から(K1、N1)および(K2、N2)を受け取る。
ii.鍵Kfを使用してCTRfを暗号化した後にN1およびN2を暗号化して乱数値Rを生成する。
iii.X=(Prf(K2e,N2,L)-Prf(K1e,N1,L)) mod 2
Lを計算する。
iv.Y=EqualityEncryption(X,R)を以下のように計算する。
a.Rから非ゼロの乱数値Aを抽出する。
b.Rから異なる乱数値Bを抽出する。
c.A、BおよびXを有限フィールドDの要素として処理し、フィールド乗算および加算を使用してY=A*X+Bを計算する。
v.Yをデータベース114に送信する。
d.データベース114は、以下のプロセスを実行する。
i.第2のコンピュータ108BからWを受け取る。
ii.第1のコンピュータ108AからYを受け取る。
iii.Z=Xor(W,Y)を計算する。
iv.D1=D2の結果としてZ=0を使用する。
【0023】
<暗号化未満演算>
図6に、1つの実施形態では
図1に示すシステムを使用して実行できるが他のシステムを使用して実装することもできる暗号化未満演算700のための暗号化法600の例を示す。この演算を使用して、Q群暗号化スキームによって生成されたL-1ビット整数の暗号文D1およびD2を、以下のSMPCプロトコルによってLessThanについて比較することができる。このプロトコルは、2016年にNathan Chenette他によって教示された「漏洩を制限した実用的順序開示暗号化(Practical Order-Revealing Encryption with Limited Leakage)」などの順序開示暗号化(ORE)スキームに依拠する。この方法は、
図7に示すようなSMPCクラスタにおいて第1および第2のコンピュータ108A、108Bを使用するOREスキームを組み込む。第1のコンピュータ108Aは、暗号化鍵(データ項目(D1、D2)の各々のためのK1e、K2e)にアクセスできるのに対し、第2のサーバは、認証鍵(データ項目(D1、D2)の各々のためのK1a、K2a)にアクセスすることができる。暗号化鍵は、第1のコンピュータ108A上の第1の共有の差分を計算するために使用されるのに対し、認証鍵は、第2のコンピュータ108B上の第2の共有の差分を計算する前に暗号データの完全性を検証するために使用される。データベース114は、等価演算に関してはいずれの鍵にもアクセスすることができない。
【0024】
コンピュータ108A、108Bは、データベース114には公開されない共有秘密鍵を確立するようにディフィー・ヘルマンなどの鍵交換プロトコルを使用して1回設定される秘密鍵Koおよびカウンタ値CTRoも互いに共有する。CTRoは、毎回のORE演算後に増分されるカウンタであり、Koは、CTRoを暗号化してOREに使用すべき乱数セットを生成するために使用される鍵である。
【0025】
ORE関数は、4つの利点を活用して効率的に暗号化を行う。第1に、この演算は、暗号化データに関する結果を戻すために復号関数を必要としない。第2に、2つのコンピュータ108A、108B間に乱数の同期ストリームが存在する。第3に、各乱数が一対のオペランドについて1回だけ使用される。第4に、第2の共有の明白な差分(plain differences)をデータベース114において再計算することができる。
【0026】
未満演算および暗号化600、700は、以下のプロセスを含むことができる。
a.アプリケーション112は、以下のプロセスを実行する。
i.暗号化鍵K1eを使用してノンスN1で平文データD1を暗号化した後に、MACが認証鍵K1aを使用して暗号文(K1、N1、C1、M1)を生成して(プロセス602)データベース114に記憶する。
ii.暗号化鍵K2eおよび認証鍵K2aを使用してノンスN2で平文データD2を暗号化して暗号文(K2、N2、C2、M2)を生成して(プロセス602)データベース114に記憶する。
iii.データベース114上の2つの暗号文のLessThan演算を開始する。
b.データベース114(および/またはデータベースをホストするコンピュータまたはデータベースサーバ)は、以下の2つのプロセスを並行して実行する。
i.暗号文(K1、N1、C1、M1)および(K2、N2、C2、M2)を第2のコンピュータ108Bに送信して、第2のコンピュータ108Bからの応答Wを待つ。
ii.第1の共有(K1、N1)および(K2、N2)をサーバ1に送信して、第1のコンピュータ108Aからの応答Yを待つ。
c.第2のコンピュータ108Bは、以下のプロセスを実行する。
i.データベース114から暗号文(K1、N1、C1、M1)および(K2、N2、C2、M2)を受け取る。
ii.受け取られた暗号文のMACとしてM1およびM2を再計算する。検証に成功した場合、その後のステップにおいて正しいN1およびN2の値を使用する。検証に失敗した場合、代わりにN1およびN2に乱数値を使用する。
iii.鍵Koを使用してCTRoを暗号化した後にN1およびN2を暗号化して乱数値Rを生成する。
iv.V=(C2-C1) mod 2Lを計算する。
v.W=OrderRevealingEncryption(V,R)を以下のように計算する。
i.ランダムパッドを使用してXORによって暗号化符号ビットをW[0]=R[0][+]V[0]として計算する(なお、ここでは、排他的論理和を[+]で表している。以下同じ。)。
ii.異なるランダムパッドを使用してXORによって大きさの暗号化最上位ビットをW[1]=R[1][+]V[1]として計算する。
iii.(符号ビットV[0]を除く)先行するプレフィックスの(等価暗号化などの)暗号化である新たなランダムパッドを使用してXORによって大きさの各後続ビットをW[i]=V[i][+]EqualityEncryption(V[1]||V[2]||...||V[i-1],R) mod 2として暗号化する。
vi.Wをデータベース114に送信する。
d.SMPC第1のコンピュータ108Aは、以下のプロセスを実行する。
i.データベース114から(K1、N1)および(K2、N2)を受け取る。
ii.鍵Koを使用してCtroを暗号化した後にN1およびN2を暗号化して乱数値Rを生成する。
iii.X=(Prf(K2e,N2,L)-Prf(K1e,N1,L)) mod 2Lを計算する。
iv.Y=OrderRevealingEncryption(X,R)を以下のように計算する。
a.ランダムパッドを使用してXORによって暗号化符号ビットをY[0]=R[0][+]X[0]として計算する。
b.異なるランダムパッドを使用してXORによって大きさの暗号化最上位ビットをY[1]=R[1][+]X[1]として計算する。
c.(符号ビットX[0]を除く)先行するプレフィックスの(等価暗号化などの)暗号化である新たなランダムパッドを使用してXORによって大きさの各後続ビットをY[i]=X[i][+]EqualityEncryption(X[1]||X[2]||...||X[i-1],R) mod 2として暗号化する。
v.Yをデータベース114に送信する。
e.データベース114は、以下のプロセスを実行する。
i.第2のコンピュータ108BからWを受け取る。
ii.第1のコンピュータ108AからYを受け取る。
iii.Z=Xor(W,Y)を計算する。
iv.Z=0である場合、値D1およびD2は等しく、そうでなければ次のステップに進む。
v.V=(C2-C1) mod 2Lを計算する。
vi.L=OreCompare(Z,V)を以下のように計算する。
i.Zのビットが、0が最上位ビットであって1が次の最上位ビットであるように付番されている場合、ビットZ[0]は、符号ビットC1[0]およびC2[0]の差分である。
ii.Z[i]がゼロでないように、iを0の後の(最上位ビットの)最下位インデックス(least index)とする。
iii.ビットV[i]をビットZ[0]と比較し、V[i]=Z[0]である場合には指標L=1を設定し、そうでなければL=0を設定する。
vii.D1<D2の結果としてLを使用する。
【0027】
暗号化文字列を比較する際には、2つの暗号化文字列をLessThanについて比較できるように、各文字を個別に暗号化することが必要である。文字列SおよびTの比較方法は、最初の文字S[0]およびT[0]を比較することから開始して、一方の文字列に文字がなくなるまで、または比較によって何らかの文字S[i]がT[i]に等しくないことが見つかるまでその後の文字を比較する。たとえばSなどの一方の文字列に文字がなくなった場合、文字列Sの全ての文字は他方の文字列Tのプレフィックスに等しく、方法はS<Tであることを宣言するようになる。方法は、同じでない文字を含むインデックスiを発見すると、S[i]<T[i]であるかどうかをチェックして文字列S<文字列Tであるかどうかを判定する。
【0028】
0~i-1のインデックスにおける2つの文字列内の全ての文字が等しいと判定され、インデックスiにおける文字の順序が明らかになったとしても、文字列内のその後の文字(インデックスi+1から文字列の最後まで)の機密性は以下の方法を使用して保持される。EqualityEncryptionおよびOrderRevealingEncryption関数は、いずれも2つのSMPCサーバ上の乱数の同期ストリームを使用する。両サーバ上の文字が等しく暗号化されるようにインデックス0~iの全ての文字を暗号化するには、2つのストリームが同一であることが重要であるが、インデックスi後の文字についてもストリームが同様であることが必要である。
【0029】
文字S[j]を暗号化するために使用されるn個のランダムビットの組をRjとし、文字T[j]を暗号化するために使用されるn個のランダムビットの組をPjとする。すると、以下の方法によってRjはプレフィックスS[0]S[1]...S[j-1]に依存し、PjはプレフィックスT[0]T[1]...T[j-1]に依存するようになる。
R0=CMAC(Ko,Ctro||Ni||N2)
Rj=S[j-1][+]PRF(Ko,Rj-1,n)
P0=CMAC(Ko,Ctro||Ni||N2)
Pj=T[j-1][+]PRF(Ko,Pj-1,n)
【0030】
このランダムビット生成方法は、KoおよびCtroが共通することによって第1のランダムビットの組R0=P0であることを保証する。プレフィックスS[0]...S[j-1]=T[0]]...T[j-1]である限り、Ri=Piとなる。しかしながら、S[i]≠T[i]の場合のインデックスiにおける最初の異なる文字の後には、その後の全ての文字についてR[i+j]≠P[i+j]となり、j>0である。このランダムビットの相違により、その後の全ての文字がランダムに暗号化されて機密性を維持するようになる。
【0031】
<結果>
開示したSMPC EqualityおよびLessThanプロトコルは、サーバとSMPCクラスタコンピュータとの間の複数回の通信を1回に減少させるので、これまでに公開されたSharemindシステムなどのプロトコルよりもはるかに高速である。さらに、MACプロセスは、暗号化されたリテラル値(literal values)を攻撃者が偽造するのを防ぐ。上述したシステムおよび方法は、Amazon Web ServicesおよびMicrosoft Azureなどのパブリッククラウドで展開されているCassandra、MySQL、MariaDB、Postgres、MongoDB、OracleおよびMicrosoft SQLサーバなどの商用データベースのための暗号化を提供する。
【0032】
以上、特定の実施形態を参照しながら説明目的で解説を行った。しかしながら、上記の例示的な説明は、完全であることまたは開示した厳密な形に本開示を限定することを意図したものではない。上記の教示に照らして多くの修正および変形が可能である。これらの実施形態は、本開示の原理およびその実際の応用を最良に説明することにより、他の当業者が検討する特定の用途に適した形で本開示および様々な実施形態を様々に修正して最良に利用できるように選択し説明したものである。
【0033】
本明細書に開示したシステムおよび方法は、1または2以上のコンポーネント、システム、サーバ、機器またはその他のサブコンポーネントを通じて実装することができ、或いはこのような要素間で分散することもできる。システムとして実装する場合、このようなシステムは、とりわけ汎用コンピュータで見られるソフトウェアモジュール、汎用CPU、RAMなどのコンポーネントを含み、および/または伴うことができる。サーバに革新性が存在する実装では、このようなサーバが、汎用コンピュータで見られるようなCPU、RAMなどのコンポーネントを含み、および/または伴うことができる。
【0034】
また、本明細書におけるシステムおよび方法は、上述した以外の異種のまたは完全に異なるソフトウェアコンポーネント、ハードウェアコンポーネントおよび/またはファームウェアコンポーネントを含む実装を通じて実現することもできる。このような他のコンポーネント(たとえば、ソフトウェア、処理コンポーネントなど)、および/または本発明に関連するまたは本発明を具体化するコンピュータ可読媒体については、たとえば本明細書における革新性の態様を数多くの汎用または専用コンピュータシステムまたは構成と調和させて実装することができる。本明細書における革新性との併用に適することができる様々な例示的なコンピュータシステム、環境および/または構成としては、以下に限定されるわけではないが、パーソナルコンピュータ、ルーティング/接続性コンポーネントなどのサーバまたはサーバコンピュータ装置、ハンドヘルドまたはラップトップ装置、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、消費者電子装置、ネットワークPC、他の既存のコンピュータプラットフォーム、上記のシステムまたは装置のうちの1つまたは2つ以上を含む分散型コンピュータ環境などの内部のまたはこれらに組み込まれたソフトウェアまたはその他のコンポーネントを挙げることができる。
【0035】
場合によっては、システムおよび方法の態様を、たとえばこのようなコンポーネントまたは回路に関連して実行されるプログラムモジュールを含む論理回路および/または論理命令を介して実現し、或いはこのような論理回路および/または論理命令によって実行することもできる。一般に、プログラムモジュールは、本明細書における特定のタスクまたは特定の命令を実行するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含むことができる。また、本発明は、通信バス、通信回路または通信リンクを介して回路が接続された分散ソフトウェア、分散コンピュータまたは分散回路環境を背景として実施することもできる。分散環境では、メモリストレージデバイスを含むローカルコンピュータ記憶媒体および遠隔コンピュータ記憶媒体の両方から制御/命令を行うことができる。
【0036】
本明細書におけるソフトウェア、回路およびコンポーネントは、1または2以上のタイプのコンピュータ可読媒体を含みおよび/または利用することもできる。コンピュータ可読媒体は、このような回路および/またはコンピュータコンポーネント上に存在する、これらに関連する、またはこれらがアクセスできるいずれかの利用可能な媒体とすることができる。一例として、限定するわけではないが、コンピュータ可読媒体としてはコンピュータ記憶媒体および通信媒体を挙げることができる。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュールまたはその他のデータなどの情報を記憶するためのいずれかの方法または技術で実装された揮発性および不揮発性の取り外し可能および取り外し不能媒体を含む。コンピュータ記憶媒体は、以下に限定するわけではないが、RAM、ROM、EEPROM、フラッシュメモリまたはその他のメモリ技術、CD-ROM、デジタル多用途ディスク(DVD)またはその他の光学ストレージ、磁気テープ、磁気ディスクストレージまたはその他の磁気記憶装置、或いは所望の情報を記憶するために使用できるとともにコンピュータコンポーネントがアクセスできる他のいずれかの媒体を含む。通信媒体は、コンピュータ可読命令、データ構造、プログラムモジュールおよび/またはその他のコンポーネントを含むことができる。さらに、通信媒体は、有線ネットワークまたは直接有線接続などの有線媒体を含むことができるが、本明細書におけるこのようなタイプの媒体は、いずれも一時的媒体を含まない。また、上記のいずれかの組み合わせもコンピュータ記憶媒体の範囲に含まれる。
【0037】
本明細書におけるコンポーネント、モジュール、装置などの用語は、様々な形で実装できるあらゆるタイプの論理的または機能的ソフトウェア要素、回路、ブロックおよび/またはプロセスを意味することができる。たとえば、様々な回路および/またはブロックの機能を互いに組み合わせて他のあらゆる数のモジュールにすることができる。各モジュールは、中央処理装置に読み取られて本明細書における革新性の機能を実行できる、有形メモリ(たとえば、ランダムアクセスメモリ、リードオンリメモリ、CD-ROMメモリ、ハードディスクドライブなど)に記憶されたソフトウェアプログラムとして実装することもできる。或いは、これらのモジュールは、汎用コンピュータに送信される、または送信搬送波を介して処理/グラフィックスハードウェアに送信されるプログラミング命令を含むこともできる。また、モジュールは、本明細書における革新性に含まれる機能を実装するハードウェア論理回路として実装することもできる。最後に、これらのモジュールは、専用命令(SIMD命令)、フィールドプログラマブルロジックアレイ、または所望のレベルの性能およびコストをもたらすこれらのいずれかの混合物を用いて実装することもできる。
【0038】
本明細書に開示したように、本開示による機能は、コンピュータハードウェア、ソフトウェアおよび/またはファームウェアを通じて実装することができる。たとえば、本明細書で開示したシステムおよび方法は、たとえばデータベース、デジタル電子回路、ファームウェア、ソフトウェアまたはこれらの組み合わせも含むコンピュータなどのデータプロセッサを含む様々な形態で具体化することができる。さらに、開示した実装の一部では、特定のハードウェアコンポーネントについて説明しているが、本明細書における革新性によるシステムおよび方法は、ハードウェア、ソフトウェアおよび/またはファームウェアのあらゆる組み合わせを用いて実装することもできる。さらに、上述した機能およびその他の態様、並びに本明細書における革新性の原理は、様々な環境で実装することができる。このような環境および関連する用途は、本発明による様々なルーチン、プロセスおよび/または動作を実行するように特別に構成することも、或いは汎用コンピュータ、または必要な機能を提供するようにコードによって選択的に有効化または再構成されたコンピュータプラットフォームを含むこともできる。本明細書で開示したプロセスは、本質的にいずれかの特定のコンピュータ、ネットワーク、アーキテクチャ、環境またはその他の装置に関連するものではなく、ハードウェア、ソフトウェアおよび/またはファームウェアの好適な組み合わせによって実装することができる。たとえば、本発明の教示に従って書かれたプログラムと共に様々な汎用機械を使用することもでき、或いは必要な方法および技術を実行するように特殊な装置またはシステムを構成する方が便利な場合もある。
【0039】
本明細書で説明したロジックなどの方法およびシステムの態様は、フィールドプログラマブルゲートアレイ(「FPGA」)、プログラマブルアレイロジック(「PAL」)デバイス、電気的にプログラム可能なロジックなどのプログラマブルロジックデバイス(「PLD」)、メモリデバイスおよび標準的なセルベースの装置、並びに特定用途向け集積回路を含む様々な回路のいずれかにプログラムされる機能として実装することもできる。態様を実装するための他のいくつかの可能性としては、メモリデバイス、(EEPROMなどの)メモリ付きマイクロコントローラ、内蔵マイクロプロセッサ、ファームウェア、ソフトウェアなどが挙げられる。さらに、ソフトウェアベースの回路エミュレーション、個別ロジック(順序ロジックおよび組み合わせロジック)、カスタムデバイス、ファジー(ニューラル)ロジック、量子デバイス、およびこれらのデバイスタイプのいずれかの混成を有するマイクロプロセッサにおいて態様を具体化することもできる。たとえば、金属酸化物半導体電界効果トランジスタ(「MOSFET」)技術に似た相補型金属酸化物半導体(「CMOS」)、バイポーラ技術に似たエミッタ結合型論理回路(「ECL」)、ポリマー技術(たとえば、シリコン共役ポリマーおよび金属共役ポリマー金属構造体)、混合アナログおよびデジタルなどの基礎デバイス技術を様々なコンポーネントタイプで提供することができる。
【0040】
また、本明細書で開示した様々なロジックおよび/または機能は、挙動特性、レジスタ転送特性、論理コンポーネント特性および/またはその他の特性の観点から、ハードウェア、ファームウェアのあらゆる数の組み合わせを使用して、および/または機械可読またはコンピュータ可読媒体に具体化されたデータおよび/または命令として有効にすることができる。このようなフォーマットデータおよび/または命令を具体化できるコンピュータ可読媒体は、限定的な意味ではなく様々な形態の不揮発性記憶媒体(たとえば、光学記憶媒体、磁気記憶媒体または半導体記憶媒体)を含むことができるが、ここでも一時的媒体は含まない。本明細書全体を通じ、「備える(comprise、comprising)」などの用語は、文脈上明らかに他の意味を必要としない限り、排他的または網羅的な意味の対語である包括的な意味で、すなわち「~を含むけれどもそれに限定されない(including,but not limited to)」という意味で解釈されたい。また、単数または複数を用いた単語は、それぞれ複数または単数も含む。また、「本明細書において(herein)」、「本明細書に従って(hereunder)」、「上記の(above)」、「以下の(below)」、および同様の意味の単語は、本出願のいずれかの特定の部分ではなく本出願全体を示す。2または3以上の項目のリストへの言及において「または(or)」という単語を使用している場合、この単語は、リスト内のいずれかの項目、リスト内の全ての項目、およびリスト内の項目のいずれかの組み合わせ、という解釈を全て含む。
【0041】
本明細書では、本発明の現在のところ好ましいいくつかの実装について具体的に説明したが、本発明に関連する当業者には、本発明の趣旨および範囲から逸脱することなく、本明細書で図示し説明した様々な実装の変形および変更を行えることが明らかであろう。従って、本発明は、適用される法の原則によって定められる範囲のみに限定されるように意図されている。
【0042】
上記では、本開示の特定の実施形態について言及したが、当業者であれば、本開示の原理および趣旨から逸脱することなく実施形態に変更を行うことができ、本開示の範囲は添付の特許請求の範囲によって定められると理解するであろう。
【国際調査報告】