AI・機械学習
Stoffel MPCでプライベートなゲノム研究を構築しました
I Built a Private Genomics Study with Stoffel MPC (vishakh.blog)
要約
この記事は、Stoffel MPCプラットフォームを使用して、参加者のゲノムデータを収集せずにプライベートなゲノム研究を構築した実証実験について説明しています。100人のシミュレートされた参加者が、個々のゲノムを見ることなく集計されたアレル数を計算することに成功しました。
全文翻訳
Stoffel MPCでプライベートなゲノム研究を構築しました2026年7月21日暗号化、ゲノム、MPCゲノム、MPCほとんどのゲノム研究は、参加者に彼らが所有する最も識別可能で取り返しのつかないデータの一つであるDNAのアップロードを求めることから始まります。私は、研究が、参加者のゲノムを誰も収集することなく有用な結果を生み出すことができる別のモデルを、マルチパーティ計算(MPC)が提供できるかどうかを引き続き調査しています。その問いが、Stoffel MPCで概念実証を構築するに至りました。100人のシミュレートされた参加者が、誰も完全なデータセットを見ることなく、集計されたアレル数を計算することに成功しました。この記事では、私が構築したもの、そのパフォーマンス、そして学んだことを説明します。Stoffel MPCがローンチしましたStoffelは最近、プライバシーを保護するアプリケーションを、暗号学の専門家チームだけでなく、一般の開発者でも利用できるようにするという野心的な目標を掲げ、マルチパーティ計算(MPC)プラットフォームのバージョン0.1.0をローンチしました。MPCを使用すると、複数のコンピュータが、いずれかのコンピュータが完全な入力を受け取ることなく、プライベートデータ上で計算を実行できます。MPCシステムは従来構築が困難でしたが、Stoffelはテクノロジーを親しみやすい開発者プラットフォームとして提示しています。アプリケーションは、Pythonに似たStoffelLangで記述され、バイトコードにコンパイルされ、Stoffel VMによって複数のMPCパーティ間で実行されます。私たちはもはや、より堅牢なプライバシーポリシーや、より安全な中央データベースに依存する必要はありません。単に、生データを一箇所に収集することを避けることができます。当然、Monadic DNAで試してみたくなりましたMonadic DNAでの継続的な作業から、ゲノム解析は明らかなテストケースでした。以前の実験では、私の同僚と私はNillionと30人の参加者からの実際の遺伝子型データを使用して、プライベートDNA分析を調査しました。遺伝子データは、プライバシーシステムの異常に良いテストです。それは高度に識別可能であり、親戚に関する情報を提供でき、侵害後に変更することはできません。同時に、多くの有用なゲノム研究では、個々の記録を調べる必要はありません。研究者は、コホートレベルのバリアント数やグループ全体で計算されたスコアのみを必要とする場合があります。私が探求した具体的なユースケースは、改良されたMonadic DNAモバイルアプリでした。Monadic DNAユーザーは、自分の遺伝子型データを携帯電話に保存し、多くのユーザーにわたる集計統計を必要とする研究(おそらく報酬と引き換えに)に参加することを選択できます。問題は、アプリがユーザーの完全な遺伝子型をMonadic DNA、研究者、またはその他の信頼できる中央サービスにアップロードする前に、そのデータを安全に貢献できるかどうかでした。全員の遺伝子型データがそれを保護する必要のある中央サービスにアップロードされるという従来の設計ではなく、Stoffelが各Monadic DNAアプリが共同計算に直接貢献できるようにするかどうかを確認したかったのです。その設計では、コーディネーター、アプリケーションサーバー、または個々のMPCパーティは完全なデータセットを受け取りません。実験のソースコードはgithub.com/vishakh/stoffel-testで入手できます。概念実証がやろうとしていること概念実証は、ゲノム集計研究に参加する100人のMonadic DNAモバイルアプリユーザーをシミュレートします。各ユーザーは、Monadic DNA、23andMe、またはその他のサービスから取得した可能性のある6つの合成SNP値を提供します。研究は、各ターゲットアレルとコホート全体の単純な加重スコアの合計数を計算します。重要なのは信頼の境界です。各シミュレートされたユーザーは、個別のクライアントIDと、そのユーザーの6つの値のみを含むプロセスを持っています。クライアントはローカルでシェアを作成し、各MPCパーティに異なるシェアを直接送信します。集計されたカウントとスコアのみが公開されます。これは、100件のレコードすべてをサーバーサイドクライアントに入れることとは意図的に異なります。それはMPCネットワーク内のプライベートな算術を実証しますが、クライアントはすべての遺伝子型を見たり漏洩したりできる信頼されたデータコレクターのままになります。意図されたMonadic DNAフローでは、ユーザーはモバイルアプリで研究を確認し、同意します。アプリは、承認された計算に必要なDNA値のみを選択し、電話でシェアを作成し、MPCパーティに直接送信します。完全なDNAデータは、Monadic DNAのサーバーまたは他のセントラル取り込みサービスを通過すべきではありません。承認された集計結果のみがMPC計算から離れるべきです。MPCと完全準同型暗号の比較マルチパーティ計算(MPC)と完全準同型暗号(FHE)は、どちらも基になる入力を公開せずにデータを計算できるようにしますが、異なるモデルを使用します。FHEでは、各ユーザーは通常、公開鍵で自分の遺伝子型を暗号化し、サーバーが暗号文上で直接計算します。MPCでは、各ユーザーは入力をシェアに分割し、複数のコンピューティングパーティに異なるシェアを送信します。これらのアプローチは、信頼と運用上の複雑さを異なる場所に配置します。FHEシステムは、結果を復号できる人に関するポリシーが必要です。これには、1つのキーホルダーまたは複数のパーティ間で共有されるしきい値キーが含まれる場合があります。MPCは1つの復号キーホルダーに依存しませんが、複数の十分に独立したパーティが通信し、計算中に利用可能であることを必要とします。パフォーマンス特性もワークロードと実装によって異なります。FHEは、非対話的な暗号化された入力と単一サービスによる計算をサポートしますが、暗号文操作は計算コストが高くなる可能性があります。MPCはパーティ間の通信を導入しますが、この実験の合計のような単純な集計算術は、自然なMPCワークロードです。ゲノム解析において、どちらのアプローチも普遍的に優れているわけではありません。適切な選択は、計算、信頼仮定、展開制約、および望ましい対話モデルに依存します。このPoCは、FHEに対する一般的な優位性を確立しようとするのではなく、Stoffelを介したMPCオプションを探求します。消費者向けアプリケーションの構築におけるFHEの使用について詳しくは、https://vishakh.blog/2025/08/06/lessons-from-using-fhe-to-build-a-secure-consumer-app/をご覧ください。2026年8月には、HOPE 26カンファレンスでFHEに関する講演も行います。https://schedule.hope.net/hope26/talks#Using-Fully-Homomorphic-Encryption-to-Build-Real-World-Software技術詳細ローカルセットアップには3種類のコンポーネントがあります。100個のネイティブクライアントプロセスは、独立したユーザーまたはモバイルデバイスを表します。それぞれがユニークで一時的なIDと、そのユーザー自身の6つの合成SNP値のみを受け取ります。4つのStoffel MPCパーティは、すべてのクライアントからシェアを受け取り、プライベートな計算を共同で実行します。コーディネーターは参加者を承認し、ディスカバリを処理します。遺伝子型値を受け取ったり、ゲノム計算を実行したりしません。コーディネーターと4つのMPCパーティはDockerで実行されます。クライアントはDockerネットワーク外で独立したネイティブプロセスとして実行され、公開されたローカルアドレスを介して接続します。これにより、ユーザー側のクライアントは、MPCインフラストラクチャと並んで実行する必要がないことが実証されます。プライベートな計算はStoffelLangで記述されています。秘密としてマークされた値は、プログラムがそれらを操作している間、共有されたままになります。コアの集計関数は、各ユーザーの入力スロットから1つのプライベート値を取得し、それらを合計します。def sum_snp(snp_index: int64, user_count: int64) -> secret int64: var acc: secret int64 = Share.from_clear(0) var user_index: int64 = 0 while user_index < user_count: var value: secret int64 = ClientStore.take_share(user_index, snp_index) acc = acc + value user_index += 1 return accプログラムはこれを6つのSNPすべてに対して繰り返します。コホートの合計のみを公開し、その後、加重コホートスコアを計算します。個々の貢献を意図的に公開することはありません。4つのパーティは、BLS12-381スカラーフィールド上のStoffelのHoneyBadgerバックエンドを使用します。開発者の用語では、HoneyBadgerはStoffelの汎用的なプライベート算術エンジンです。構成は4つのパーティと1つのしきい値を使用しており、HoneyBadgerのn >= 3t + 1要件を満たし、1つの障害のある部分を許容します。