プロキシと準同型暗号化による再暗号化

データの使用とデータのプライバシーはしばしば対立しています。 たとえば、私たち全員が自分の健康データを研究者と公然と共有した場合、新しい医療技術と治療法の作業がスピードアップします。 しかし、私たちは、悪意のある攻撃者が私たちの生の健康データで何ができるかを当然のことながら恐れています。 そこで、暗号化の分野が救いの手を差し伸べることができます。プロキシによる再暗号化そして準同型暗号化データの使用とデータのプライバシーに関しては、私たちがケーキを保管して食べることを可能にするツールです。

プロキシによる再暗号化により、データ所有者はデータを1回暗号化し、その後、サードパーティのサービスを使用して、購入者と何度でも安全に共有できます。 準同型暗号化により、データ購入者は、信頼できないサードパーティによって保存および計算された暗号化データに対して計算を実行し、暗号化されていない形式で個人のデータを公開することなく、そのデータに関する結果または洞察を得ることができます。

これらの手法は、より複雑な暗号システムの構成要素として機能します(たとえばUnlynx EPFLによって開発された、現在の作業の理論的インスピレーション)。 したがって、私たちの計画は次のとおりです 1)高度な暗号化プリミティブ用の使いやすく実用的なライブラリを構築する 2)これらのライブラリは、開発者が高度なプリミティブを作成および組み合わせて、より安全なデータ共有を可能にする複雑な暗号システムを作成するのに役立ちます 3)より安全で有用なデータ共有により、癌や糖尿病の研究などの重要な問題に関する研究の速度が10倍になります。 4)世界を救え:-)。

まず、概念実証のアルファ版を開発しました図書館。 以下のコードは、そのライブラリを使用して、所有者からユーザーへの安全で便利なデータフローを可能にするためにこれらのテクノロジーを適用する方法の例を提供します。

プロキシによる再暗号化

プロキシによる再暗号化は、プロキシと呼ばれるサードパーティが、あるパーティによって暗号化された暗号文を、別のパーティによって復号化されるように変更するプロセスです。

Nebulaのプラットフォームでは、プロキシは暗号化されたゲノムデータの管理者として機能し、所有者に代わって購入者によるそのデータへのアクセスを管理します。 プロキシは基になる生データにアクセスできませんが、プロキシは(所有者の許可を得て)暗号化されたデータを変更して、ユーザーが後で復号化できるようにすることができます。 したがって、データ所有者は、プレーンテキスト情報をプロキシと共有することなく、このタスクをプロキシに委任できます。 この委任のもう1つの結果は、データの所有者も受信者もオンラインである必要がないことです。

この例では、プロキシが分散型の集合機関として機能するサーバーのセットであると想定しています。 それでは、プロキシによる再暗号化の例を見ていきましょう。ここでは、データ所有者のアリスが、プロキシを介してデータユーザーのボブとゲノムデータを共有しています。

まず、上記のライブラリをインストールしましょう。

これで、星雲パッケージをインポートできます。

それでは、共有プロセスについて見ていきましょう。 最初のステップは、アリスがデータを暗号化することです。 彼女が使用する対称鍵を生成しますChaCha20 + Poly1305

(<umbral.point.Point at 0x10389fe10>, b'\x10\x91Y\xb1*\x8c\xf0\x7f@=\xefx\xe9\xf6\x12\xf3W\xbd\xdel\xc4\x06{\xae\x05%\x1b\x89U\xf9eN\xe5e\x1a\xe71xn\xac@v\xf4')

集合権限プロキシには、構成サーバーの公開鍵の合計である独自の公開鍵があります。

アリスは、データに使用した暗号化キーを取得し、集合機関の公開キーで暗号化します。 使用しているので注意してください楕円曲線暗号その2つの暗号文ElGamal暗号化生成は、選択した楕円曲線上の点です。 以下の出力に表示されるのは、(x、y)形式の2点の座標です。

((35632791306511153190425382918654119432212363349182003014749353343128802126727, 64242079364444117954338938658093117507689717419524224721788857406414950009581), (97847103734799578346073884785318736156070617710068604497289838935308031857554, 100772267217308028038724925681024365362775942293927562577198462564518506731626))

集合権限内の各サーバーは、部分的に復号化してから、ボブのアリスのキーを再暗号化します。

  1. アリスの鍵を部分的に復号化するために、各サーバーはその秘密鍵を使用します
  2. ボブのアリスの鍵を部分的に再暗号化するために、各サーバーはボブの公開鍵を使用します
((77420738395268270953686214496801457604160876120513979866307802146750959593560, 54288930850798967899941066319180759019666461705141800680259295043110704970240), (43931260115404950504844368880031328989231014591201216806426924428987149667105, 90907867688890000833998990379245369153741769092073562236593684729778667077837))

ボブは自分の秘密鍵を使用してアリスの鍵を受信して復号化し、次にアリスの鍵を使用して元のデータを復号化します。

True
b'My genomic data'

この文字列だけでなく、ここで完全なゲノムを想像してみてください。

準同型暗号化

ElGamal暗号化は相加的に準同型、暗号文を合計した結果は、対応する平文を合計した結果を反映していることを意味します。 このため、暗号化された合計を復号化すると、結果は平文の合計になります。 準同型暗号化により、関係者は集約された情報のクエリを発行し、関連する回答を取得できますが、基になるデータポイントは表示されません。 (これは、指定されているように、他のいくつかの制約が満たされていることを前提としていますここに。)

以下は、私たちの集合的な権限/プロキシが、データセット内の特定の遺伝子バリアントを持つ人々の数に関するボブからのクエリにどのように答えることができるかを示す3つのステップの例です。

  1. 当局は、データセット内の暗号化されたデータに対して必要な計算を実行します。
  2. 当局はこの集計結果を取得し(バリアントがある場合は1、ない場合は0とマークされます)、ボブの公開鍵を使用して再暗号化します。
  3. ボブは自分の秘密鍵を使用して集計結果を復号化し、正しい合計を取得しましたが、個々のデータポイントは表示されません。

暗号化されたデータの合計

以下では、プラットフォームにゲノム情報を提供する1000人を「シミュレート」します。 合計で、この特定の遺伝子変異を持つ448人がいます。 一人一人のデータは暗号化され、安全に保管されます。

Number of people with 遺伝子変異体: 488 ((21226922480075498561329291252368547521899161064631964196023720750821691033728, 22373176000434530074330330136750061845273006440607485558527039957320386973412), (73527396063873421512162165532068395819931745318640280343429662961367630577212, 38439465994848418879243894553165852646308170673055923181635051985961737087067))

CAはBobの暗号化された合計を再暗号化します

ボブは先に進み、母集団の遺伝子変異頻度に関する情報を要求します。 CAはそれを合計し、データをボブに再暗号化します。 再暗号化された暗号の(x、y)座標は、上記の元の暗号の座標と等しくないことに注意してください。

((26066336990521229606715532856762274058860058654632118019680516577894483977430, 111016076743629331281471026942315236039952684121365861080441162051376755931177), (74777752915141648361212288792719003318012040162755253888817602184232651456038, 79121323403285772024091404265686004833455157263244527767410139385386809682035))

ボブは合計を復号化します

(488, 488)

ボブは、個々の所有者の情報についての洞察を得ることなく、データ全体についての洞察を得ることができます。 これにより、データを公開したくないデータ所有者は、引き続きプラットフォームに貢献できます。

プロキシによる再暗号化が、これをボブにとって便利にする上で重要な役割を果たしたことに注意してください。 各データ所有者はプロキシに委任されているため、ボブは1つのクエリを発行するだけで済みました。 プロキシがないと、必要なすべてのデータポイントに対してクエリを発行する必要があります。

プロキシによる再暗号化と準同型暗号化は、Nebulaがユーザーデータを保護し、データ購入者にデータへの便利なアクセスを提供し、データ購入者が個人のプライバシーを損なうことなく洞察を生成できるようにします。

アクションの呼び出し

Nebula Genomicsでは、プライバシーの懸念が生物医学データ共有の重大なハードルであると考えています。 これは医学研究と新しい治療法の開発を妨げます。 この課題を単独で解決することはできません。

コードに興味がある場合は、ライブラリを自由に試してみてください。ただし、安全を確保してください。この特定の実装はセキュリティ監査を受けておらず、現在は教育目的でのみ使用されています:-)

特に星雲ゲノミクスについてもっと探求することに興味があるなら、必ずTwitterでフォローします最新の状態に保つために。