2024年8月23日〜25日に開催されたETH Tokyoのハッカソンに、チームで参加しました。結果として、Main Track (Infrastructure and Tooling) 1st placeをはじめとする複数の賞を受賞することができました🎉
@wasabijiro くんにお誘いいただき、zkTLSとzkMLを組み合わせたプロダクトの開発に取り組みました。当初はzkTLSもzkMLも知識がなく理解が難しかったのですが、ハッカソン期間中に開発しながら学んでいくうちにこれらが非常に興味深く、大きな可能性を秘めた技術だと感じました。今回は特にzkTLSに焦点を当てて解説してみます。
zkTLSとは?
zkTLS は、Web2 のプライベートデータを Web3 に安全に接続するプロトコルです。Web2のデータをWeb3に接続する方法というと、多くの人はオラクルを思い浮かべるでしょう。しかし、オラクルにはデータの拡張性の課題があります。
- オラクルの利用にはコストがかかります。
- そのため経済性が合うデータしか提供されません。主に通貨やトークンなどの価格情報に限定されています。
Defiプロジェクトには適していますが、プライベートなデータを用いたい場合には適していません。
zkTLSはゼロ知識証明(ZKP)を活用し、ユーザーがウェブサイトからデータを安全かつ検証可能な形でエクスポートできるようにします。従来のオラクルの限界を克服し、以下のような応用が期待されています。
- プライバシー保護認証
- データの移行
- Web3 アプリケーション向けの安全な証明作成
実現できること
zkTLSの可能性をより具体的に理解していただくため、まずユースケースの例を1つ紹介します。
ユースケース例: 新規ライドシェアサービス「Ponber」の立ち上げ
あなたが新しいライドシェアサービス「Ponber」(Uberの架空の競合サービス)を立ち上げようとしているとします。ドライバーを獲得するための戦略として、Uberの優良ドライバーがPonberに登録すると特典を提供するキャンペーンを実施したいと考えています。これは、Web3の世界で「ヴァンパイアアタック」と呼ばれる手法に似ています。
zkTLSを使用したフローは以下のようになります:
- UberドライバーにUberのマイページにログインしてもらう
- Uberのサーバーからフロントエンドへの通信(TLS通信)からzkProof(ゼロ知識証明)を作成
- 作成されたproofをPonber側に提出
- Ponber側で、新規登録者が優良Uberドライバーであることを検証
(注:この図はTLSNotaryチームがETH Tokyoで発表した内容です)
このシステムの重要な特徴は次の2点です:
- Uberの協力を必要としない
- ドライバーは必要以上の個人データをPonberに提供する必要がない
以下では、この技術の詳細について深掘りしていきます。
TLSとは?
そもそもTLS(Transport Layer Security)とはインターネット上でデータを安全に送受信するためのプロトコルです。TLSは、通信経路上でデータが第三者に盗聴されたり改ざんされたりしないように暗号化を行います。これは、Webブラウザとサーバーの間で使われるHTTPS通信の基盤となっており、オンラインバンキングや電子メールなど、機密性の高い情報をやり取りする際に広く利用されています。
zkTLSの仕組み(TLSNotary)
TLSNotaryはPrivacy and Scaling Ethereum teamによって開発されているオープンソースのプロトコルです。TLS通信にVerifierを追加し、安全なマルチパーティ計算 (MPC) を用いることで、セキュリティやプライバシーを損なわずに他者とデータを共有するという課題を解決します。MPCにより、Verifierは外部の信頼や完全なデータの開示なしにTLSの記録を認証できます。
- Proverは、セキュアかつプライバシーを保護するマルチパーティ計算(MPC)でVerifierと協力しながら、サーバーに対してTLSを介してデータを要求します。
- Proverは、選択的にデータをVerifierに開示します。
- Verifierは、そのデータを検証します。
こちらのブラウザ拡張機能を使ってProofを作成してみるチュートリアルをやってみると、より具体的にイメージが掴めると思います。
https://docs.tlsnotary.org/quick_start/browser_extension.html
(注:この画像↑はTLSNotaryのチュートリアルの画像を転載しています)
TLS通信の情報が表示され、
パブリックにしたいデータだけを選択し、Notarizeボタンを押してProofを作成するという流れです。
TLSNotaryを使って開発されているプロダクト・ユースケース
TLSNotaryのページに想定されるユースケースが載っていたので、一部を紹介してみます。
TLSNotary は以下の用途に利用できます:
- 身分証明:オンラインの政府サービスからあなたの名前、年齢、または市民権を確認する
- 評価の確認:AirBnb、Uber、Strava などのプラットフォームでユーザーの経験や信頼性を確認する
- 実世界の資産所有確認:車両や不動産などの有形資産の所有権を確認する
- 健康情報の確認:MyHealth や HealthVault などのプラットフォームから個人の健康記録を確認する
- アカウント所有確認:Google、Microsoft、Apple、Twitter などのオンラインアカウントの管理権を確認する
- 財務確認:銀行やその他のサービスから財務状況を確認したり、財務取引を証明する
- ユーザー制限確認:特定のアプリケーションやサービスへのアクセスが制限されているかどうかを確認する
TLSNotary以外のプロジェクト
zkTLS = TLSNotaryという訳ではなく、他にもいくつかチームがあります。
Pado Labsはこの分野で開発を行っている別のチームです。彼らは香港を拠点とし、対話型ゼロ知識証明を用いたMPC-TLSの構築のために300万ドルを調達しました。また、完全準同型暗号化も利用しており、より複雑なゼロ知識スキーマの作成を可能にしています。現在、彼らは主にユーザーのための中央集権型取引所(CEX)の資産証明に焦点を当てているようで、これはChromeの拡張機能によって実現されています。
zkPassはSequoia、Binanceなどから250万ドルを調達し、TransGateというプロダクトの構築を進めています。これにより、ユーザーは任意のHTTPSウェブサイト上のデータをWeb3の世界に対して選択的かつプライベートに検証することができます。現在、彼らはプレアルファテストネットの段階にあり、UberやInstagram、Courseraなどのウェブサイトを組み込んだ50以上の検証済みスキーマを有しています。
我々がハッカソンで開発&提案したもの
いよいよ我々がハッカソンで開発したプロダクトの紹介です。
我々のチームは、zkTLSとzkMLを組み合わせた「zkCredit」を開発しました。zkMLの詳細については別の機会に解説する予定ですが、簡単に言えば推論の元となるインプットデータを秘匿した状態で計算結果が正しいことを証明する技術です。この部分の開発は@JunK先生に担当していただきました✨
zkCreditの特徴
- zkTLSを用いて各種Web2サービスからユーザー自身がプライベートなデータのzkpを複数取得
- これらのデータをzkMLにインプットとして入れ、信用スコアを計算
- zkMLの結果はさらにzkProofも生成され、オンチェーンで検証可能
応用例
- 信用スコアに応じた担保率のLending Protocolの開発
- web2ゲームの経歴スコアを活用したweb3ゲームのNFTのローンチパッド
2晩のハッカソンという短期間での開発だったため、以下のような課題があります:
- セキュリティ上クライアント側で計算しなければいけない処理を、一部サーバー側で処理
- MLのモデルは現段階では簡易的なもの
実用化には更なる開発が必要ですが、アイデアのポテンシャルを評価していただき、多くのPrizeを受賞することができました。とても楽しい2日間でした、運営や参加者の皆様、ありがとうございました!!
今後PontechではZKについて本格的に注力し、また技術的な解説の発信していく所存です。よければXをフォローして下さい。
参考記事