JP ZK Learning Club
  • 貢献について
  • 前提知識
    • 暗号学
      • 決定問題
      • P/NP問題
      • 計算複雑性理論
    • 数学
      • 代数的構造
      • 離散対数問題 (DLP)
      • 楕円曲線
      • 算術回路
  • PSE-Core-Program
    • Week 1
    • Week 2 さらなる暗号技術とSNARKsとSTARKs
    • Week 5 Frontier
  • zkSNARKs
    • Spartan
  • Folding Scheme
    • Nova
    • SuperNova
    • HyperNova
    • NeutronNova
    • CycleFold
  • Lookup Argument
    • 概要とLasso以前の提案
    • Lasso
  • zkVM
    • Backgrounds
      • Multi Linear extension(MLE)
      • Folding scheme
      • Lookup Singularity
      • Cycle of Curves
      • Extension Field
      • Glossary
      • CCS
      • Switch-board (Nebula)
    • Building Blocks
      • Binius
      • GKR
      • Circle STARK
      • Sum-check Protocol
    • 動作概要
    • ゼロ知識証明
      • メモリ読み込み・書き込みの一貫性
        • Merkle-Tree
        • Spice
        • Jolt-Memory-Checking
        • Nebula
        • Proof-for-Deep-Though
      • 命令の実行
      • バイトコードから命令へのデコード
    • プロジェクト
      • SP1
      • RISC-Zero
      • Jolt
      • Valida
      • Nexus
Powered by GitBook
On this page
  • モチベーション
  • アイデア
  • Halo2
  • Nova
  • 参照資料
  1. zkVM
  2. Backgrounds

Cycle of Curves

PreviousLookup SingularityNextExtension Field

Last updated 7 months ago

モチベーション

楕円曲線のスカラー乗算は何度も加算を行う必要があり、スカラーのサイズが大きければ大きいほど計算コストが膨れてしまいます。ここでBase fieldをF_q、Scalar fieldをF_pとすると上記の演算ではF_p上でF_qを扱う必要が出てきます。しかしq>pであり、F_qによってF_pを表現することはできますがF_p​によってF_qを直接表現することは基本的に難しく実用的ではありません。

このように異なるFieldにまたがる計算をNon-Native Field Arithmeticと呼んだりします。

Pedersen Commitmentを使うSNARK、特にHalo2やNovaなどIVCを構成する際にはProver側で生成したF_p上のProofはVerifier側ではF_qも使って計算する必要があり、この部分の制約を減らすことが重要になってきます。

アイデア

この問題に対する「異なる二つの楕円曲線上で相互に証明・検証し合う」という解法がCycle of Curvesです

ここで二つの楕円曲線のペア(E1,E2)は以下のような特徴を有しています。

  • E1のBase FieldがFqであり、Scaler FieldがFpである。

  • E2のBase FieldがFpであり、Scaler FieldがFqである。

そしてE_1上の回路のverifierをE_2上に、E_2上の回路のverifierをE_1上に実装することで異なるFieldで発生するスカラー演算を回避しています。

元のアイデアはにて提唱されました。

Halo2

この手法はZcashのHalo2でも採用されており、Pallas curveとVesta curveという二つの楕円曲線を用いて実現されています。つまり、Pallas curveのScaler FieldがVesta curveのBase Field、Vesta curveのScaler FieldがPallas curveのBase Fieldになります。

todo: accumulatorについて言及する

以下のようなパラーメータになっています。

  • p = 2^254 + 45560315531419706090280762371685220353

  • q = 2^254 + 45560315531506369815346746415080538113

  • Ep : y^2 = x^3 + 5 over GF(p) of order q, called Pallas;

  • Eq : y^2 = x^3 + 5 over GF(q) of order p, called Vesta;

ちなみに二つの曲線を文字ってPasta Curvesと呼ばれています。

Nova

NovaでもPasta Curvesを用いたCycle of curvesを採用しています。

以下の図はNovaの表記をベースに抽象化したCycle of curvesのフローです。

参照資料

元々提案されていたは単一の楕円曲線上で構築されていましたが効率向上のためにCycle of Curvesを使用するように変更されました。当初この変更は実装内でのみ記述されていたため安全性は証明されておらずが指摘されました。現在では安全性証明が証明された上でCycle of Curvesを用いて効率性を獲得しています。

この脆弱性についてはにて解説されているので興味があればご覧ください。

Nova
脆弱性
こちらの記事
https://hackmd.io/@JkY-zACaSqerTtn_UwFjKg/SJZw6x75o
https://blog.icme.io/the-cost-of-recursion-explorations-in-the-state-of-the-art-of-foreign-arithmetic/
https://medium.com/delendum/field-selection-for-recursive-snarks-726ad56c3a3c
https://www.slideshare.net/slideshow/zkstudyclub-improving-performance-of-nonnative-arithmetic-in-snarks-ivo-kubjas-consensys-gnark/259623794#14
BCTV14
made by author
https://zcash.github.io/halo2/background/curves.html?highlight=curve#cycles-of-curves