😸

TikTokがゼロ知識証明の開発を始めた話

に公開

はじめに

TikTokが今年に入ってから、TEE(Trusted Execution Environment)のRA(Remote Attestation)に、ゼロ知識証明(ZKP)を使った仕組みをOSSで公開していました。こちらがTikTokの記事Trustless Attestation Verification With Zero-Knowledge Proofs | TikTok for Developersです。TEEやRemote Attestationとは何か、どのような場面でゼロ知識証明が使われるのか、そしてTikTokがこのような最先端な暗号技術を積極的に取り入れようとしている理由を説明できたらと思います!

1. TEEって何?

TEE(Trusted Execution Environment)は、物理的なCPUチップ内に組み込まれた特別なセキュリティ機能によって、外部から隔離された安全な実行環境のことです。これは、ハッキングなどでOSや管理者権限を持つ攻撃者などが介入したとしても、中身の計算を守ることができます。

この図がわかりやすいです。

【技術】TEE(Trusted Execution Environment)とは?

1.1 クラウドサービス上のTEE

TEEの典型例としては、IntelのSGXという技術や、ARMのTrustZoneなどがあります。クラウドでもこの技術は使用されていて、GCPやAWS、Azureなど、TEEを使った「機密コンピューティング(Confidential Computing)」というサービスを提供しています。クラウド上のサーバーがTEEを搭載していれば、ユーザーがそのサーバーにデータを送っても、サーバー管理者やOSから内容をのぞかれたり改ざんされたりするリスクはないです。

2. Remote Attestationとは

日本語ではリモート認証と言われ、RAって略されたりもします。これは「クラウド側の環境が本当に信頼できるか確認する仕組み」のことです。

2.1 アテステーションの基本概念

ユーザー(データを送る側)が「本当に相手のTEEが正しく動作しているのか?」をチェックするために必要な仕組みをアテステーションと呼びます。サーバー側のハードウェアが正規のCPUであることや、ソフトウェアが改ざんされていないことなどを証明するというものです。

2.2 もう少し詳しく

TEEを持つサーバ側(例えばクラウド事業者)は、自分のTEEが正規のもので改ざんされていないと証明するための「証拠」を発行します。この証拠には例えば、下記が含まれます。

  • ハードウェアベンダ(IntelやAMDなど)によるデジタル署名付きの証明書
  • TEEのファームウェアバージョン(ハードウェアを動作させるためのソフトウェアのこと)
  • TEE内部で動かしているソフトウェアのハッシュ値(ソフトウェアの内容を一意に識別するためのもの)

要するに「このサーバのTEEは正規品で最新バージョンでっせ。中で動いているプログラムはこれでっせ」という情報です。

2.3 なぜRemote Attestationが必要か

サービスを利用する側(relying partyとも呼ばれる)は、直接サーバーのハードウェアに触れられれば、その場で「何が動いているか」を検証できますが、リモート環境(クラウドなど)では不可能です。そもそもAttestationの証拠を全部自分で検証(証明書が正しく署名されているかとか、ファームウェアが最新かどうか)などやってられないです。

そこで登場するのがRemote Attestation Service(リモート認証サービス)です。サーバー側はアテステーションレポートを生成し、ユーザーはそれをもとに「今、このTEEは安全に動いている」と判断できます。

2.4 Remote Attestationの一般的な仕組み

  1. サーバー(TEE) 側でハードウェアベンダーの証明書などを活用してアテステーションレポートを作成
  2. Remote Attestation Service(クラウドプロバイダや専用の検証サービス)が、ハードウェアベンダーに登録されている正しい証明書や最新のファームウェア情報などと照合
  3. 正しく照合できれば「OK」と判定し、ユーザーに報告する

このようにして、ユーザー側の手間を減らし、アテステーションをする仕組みです。

3. Remote Attestationの課題

しかし、このRemote Attestationに課題があります。ゼロ知識証明が必要になってくる所以にもなりますが、Trust Boundary(信頼すべき領域)が広がってしまうということです。

3.1 Trust Boundaryの拡大

本来であれば、ユーザーはハードウェアベンダー(例: Intel, AMD など)のTEE技術さえ信頼すればOKでした。メーカーがきちんとTEEを安全に作っているという前提です。
(このハードウェアベンダを信頼する必要があるという議題は一旦ここでは置いておきます...)。

しかし、Remote Attestation Serviceを使うと、サービス提供者も信頼しなくてはいけないということになります。そこが新たな「信頼すべき対象」になってしまい、信頼の境界(Trust Boundary)が拡大してしまいます。

普段は大手クラウドなら無思考で信用してるし問題ないかもしれませんが、100%安心かというと、そうではないと思います。例えば認証サービス側のソフトウェアにバグがあって、不正なTEEを信頼してしまったり、信頼すべき対象が増えるということは、それだ攻撃の余地が増えることでもあるわけです。攻撃者から見ると、本来なら突破すべき壁がハードウェア1つだけだったのが、認証サービスという別のレイヤーも狙えるようになるわけです。

やっときました。ここで登場するのがゼロ知識証明です。

4. ゼロ知識証明を使ってRemote Attestationの課題を解決する

4.1 ゼロ知識証明のおさらい

ゼロ知識証明 (Zero-Knowledge Proof) は、ある主張が「正しい」ことだけを証明して、その中身を一切明かさないというものです。たとえば、ある数式が正しく計算されたことを証明したい場合、「計算結果の詳細」や「途中経過」を示さずに、「正しく計算した」という事実だけを証明できます。

このZKPを使うと、Remote Attestation Serviceに対する信頼の問題を解決できます。

4.2 ZKPを使ってRemote Attestationでできること

端的にいうとTEEの証拠を確認したということをゼロ知識証明で示せば良い。

  1. TikTok(またはクラウド運営者)はTEEの検証プロセスを行いますが、その結果を証明書の形ではなくZKPの「証明」の形でユーザに提供
  2. ユーザ側はそのZKPの証明を検証するだけで、TEEの実行が正しく行われていると納得できる

ここで重要なのは、ユーザはサービス提供者を信頼する必要はなく、数学的な証明の正しさだけを信じればよいという点です。なので、信頼の境界(Trust boundary)を縮小でき、ユーザは「ハードウェアベンダ(Intelなど)さえ信じればOK」となり、Attestationの部分は、数学で保証済みということにできます。

5. TikTokの具体的な取り組み

本題のTikTokの取り組みですが、このTEEのRemote Attestationの信頼性問題をゼロ知識証明で解決するために、OSSを公開しています。
https://github.com/tiktok-privacy-innovation/trustless-attestation-verification-circom

技術的な柱はCircomというツールとzkSNARKsです。

zkSNARKs (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)

コンパクトな証明サイズでオフチェーン証明・オンチェーン検証が可能になる。Groth16やPlonkといったプロトコルがある。

Circom

ZK-SNARKsを扱うためのドメイン特化言語(DSL)。論理回路(Arithmetic circuits)を記述することで、ZK回路を比較的直感的に書けるようになっている。

5.1 システムモデル

具体的な仕組みをTikTokの説明に沿って追ってみましょう!

  1. 回路化:まずTEEの証明書検証アルゴリズムをCircomで記述
  2. 鍵生成:その回路に対して証明鍵検証鍵を生成
  3. クラウド側のRemote Attestation Service:証明鍵を使ってアテステーション報告をZKP証明として生成
  4. ユーザ側(Relying Parties):検証鍵を用いてZKPの証明を検証し、「本当に正しいアテステーションが行われたか」を判定

こうすることで、ユーザーはクラウドプロバイダを数理的な証明で信頼性を不要にできます。

5.2 TikTokの実装の現在

TikTokはこのプロトタイプ実装をまずTEE Attestationレポート内の証明書チェーンを検証する回路を提供しています。証明書チェーンというのは、TEEが持つ証明書がたとえばIntelのルート証明書からどのように署名されているか、といった一連の証明書の繋がりのことです。これが有効なら「正規のTEEです」と言えるので、まずはそこを回路でチェックできるようにしているとのことです。

技術的なポイントをまとめると

  • Circomを使ってTEE検証ロジックを回路化
  • zkSNARKs(具体的にはGroth16やPLONKなどのプロトコル)でその回路に対する証明/検証鍵を作成
  • クラウド側RAサービスが証明鍵でZKのProofを生成
  • ユーザ側が検証鍵でProofをチェックすることで、TEEの健全性を確認

となります。

5. TikTokが最先端暗号技術を採用している背景

なぜTikTokがここまでしてTEE+ZKPの組み合わせに力を入れているのか考えると2つの大きな理由があると思います。それは技術的な課題社会的な信用問題です。

技術的課題

こちらは先ほど述べたRemote Attestation Serviceへの信頼問題です。TEEではハードウェアベンダだけを信頼すればよいはずですが、RAサービスを導入することでTrust Bounty(信頼の境界)が広がってしまいます。いかに「信頼すべき対象」を減らすことを考えた結果の技術選定なのだと思います。

社会的・政治的な背景

TikTokは全世界で膨大なユーザデータを扱うプラットフォームです。アメリカでは「中国政府にデータを渡すのではないか」という懸念から、最悪国内のTikTokの禁止もありうると宣言しています。

TikTok CEO: App has never shared US data with Chinese government
https://www.reuters.com/technology/tiktok-ceo-app-has-never-shared-us-data-with-chinese-goverment-2023-03-22
2023年にはTikTok CEOが米議会で「中国政府からデータ提供の要求を受けたこともなければ、要求があっても応じない」と証言もしたりしていますが、中国の法律には、企業が政府の調査に協力しデータ提供する義務があると解釈される法律が存在するみたいですね。TikTok側は「ByteDance(TikTokの親会社)はどこの政府にも支配されていないし、中国のエージェントでもない」と否定していますが。この発言自体はTikTokに好感が持てます。

こういったアメリカをはじめとした各国の不安を払拭するために、TikTokは色々な試作を打ち出しています。例えば、アメリカ向けには、「プロジェクト・テキサス」と称して、アメリカ人ユーザーデータを米国内(オラクル社)に保存・管理させる計画を進めていたり、ヨーロッパ向けには、「プロジェクト・クローバー」という取り組みがあって、ヨーロッパのユーザーデータをヨーロッパ内のデータセンターに移管しつつ、NCCグループという独立機関による監査の下で「セキュアなエンクレーブ(強化された保護環境)」にデータを置く計画が進んでいます。

Setting a new standard in European data security with Project Clover
https://newsroom.tiktok.com/en-ie/project-clover-ireland
かなり奮闘して各国の信頼を得ようと頑張ってるみたいですね。

今回のTEE+ZKP技術の採用も、こうした流れの一環と考えられます。TikTokにとっては、利用制限されないためにも各国政府の信頼を得ることが重要ですよね。そのために、技術的に証明可能なプライバシー保護によって周囲の評価を得ようということなのだと思います。

まとめ

今回は、TEEとは何かから始まり、ゼロ知識証明でどうその認証の信頼を不要にしているか、そしてそれをTikTokがなぜ採用したのかについて書いていきました。
今までゼロ知識証明というと、ブロックチェーン界隈や学術分野の話と思われがちだったのが、TikTokのような一般向けのサービスがZKPを使うとなると今後のZKPの広がりに期待できるなと思っています。もし、TikTokがこのプロトタイプを実運用していくとなれば「うちはTEEとZKPで証明可能なセキュリティを提供してまっせ!」SNS業界だけでなく他の業界でも、プライバシーや信用という面により光が当たって、ZKPなどの技術の使用が広がるのではないでしょうか。

参考資料・URL

GitHubで編集を提案

Discussion