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
  • 数学の楕円曲線
  • 有限体上の楕円曲線の整数点の集合 (Elliptic Curve over Finite Fields)
  1. 前提知識
  2. 数学

楕円曲線

Previous離散対数問題 (DLP)Next算術回路

Last updated 7 months ago

楕円曲線の歴史は非常に長くて、第二世紀で既にDiophantusの本に記載されています。暗号学に楕円曲線を利用するのは20世紀の話です。

数学の楕円曲線

楕円曲線は y2=x3+ax+by^2=x^3+ax+by2=x3+ax+b で表現されます。

注意すべき点は、 Δ=4a3+27b2≠0\Delta = 4a^3+27b^2 \neq 0Δ=4a3+27b2=0 が必要であります。

楕円曲線自体は滑らかで、 a,ba,ba,b の値でさまざまな形になりますが、暗号学で楕円曲線を利用する場合は、有限体上の楕円曲線の点の集合を利用します。

有限体上の楕円曲線の整数点の集合 (Elliptic Curve over Finite Fields)

暗号学で利用するときは精度を重視するため、整数有限体上の楕円曲線を利用します。 p>3p>3p>3 を素数とする。有限体 FpF_pFp​ 上の楕円曲線 EEE: y2=x3+ax+b(modp)y^2=x^3+ax+b \pmod py2=x3+ax+b(modp) の点の集合は下記の性質を満たします:

群の性質

元 (Element)

単位元 (Identity Element)

逆元 (Inverse Element)

加算

二倍算

スカラー倍算

マルチスカラー倍算

参考資料

の解 全体の集合

無限遠点(point at infinity) について、 と定義する

についての逆元を とする

を 上の点とする もし かつ ならば でなければ とする:

の場合は若干特殊で で計算します

の場合、スカラー倍算と呼びます。 が知っている上で、 を満たす を求める問題を、楕円曲線離散対数問題と呼びます。 を 回足し算するより、 をの倍数に変改して加算した方が効率的です 例 の場合:

で計算できます

を楕円曲線の点、 を有限体の点としたとき を求めることをマルチスカラー倍算と呼びます。 SNARKなどで頻繁的に利用されているが、計算量は多いです。効率化に関する研究は現在進行形です。

y2=x3+ax+b(modp)y^2=x^3+ax+b \pmod py2=x3+ax+b(modp)
(x,y)∈Zp×Zp(x,y) \in \mathbb Z_p \times \mathbb Z_p(x,y)∈Zp​×Zp​
OOO
P∈EP \in EP∈E
P+O=O+P=PP+O=O+P=PP+O=O+P=P
(x,y)∈E(x,y) \in E(x,y)∈E
(x,−y)(x, -y)(x,−y)
P=(x1,y1),Q(x2,y2)P=(x_1, y_1),Q(x_2,y_2)P=(x1​,y1​),Q(x2​,y2​)
EEE
x1=x2x_1 = x_2x1​=x2​
y1=−y2y_1 = -y_2y1​=−y2​
P+Q=OP+Q=OP+Q=O
R=P+Q=(x3,y3)∈Zp×ZpR= P+Q=(x_3,y_3) \in \mathbb Z_p \times \mathbb Z_pR=P+Q=(x3​,y3​)∈Zp​×Zp​
x3=λ2−x1−x2(modp)y3=λ(x1−x3)−y1(modp)λ={y2−y1x2−x1(modp)if P≠Q3x12+a2y1(modp)if P=Q\begin{aligned} x_3 &= \lambda^2 - x_1 - x_2 \pmod{p} \\ y_3 &= \lambda(x_1 - x_3) - y_1 \pmod{p} \\ \lambda &= \begin{cases} \frac{y_2 - y_1}{x_2 - x_1} \pmod{p} & \text{if } P \neq Q \\[1ex] \frac{3x_1^2 + a}{2y_1} \pmod{p} & \text{if } P = Q \end{cases} \end{aligned}x3​y3​λ​=λ2−x1​−x2​(modp)=λ(x1​−x3​)−y1​(modp)=⎩⎨⎧​x2​−x1​y2​−y1​​(modp)2y1​3x12​+a​(modp)​if P=Qif P=Q​​
P=(x1,y1),Q=(x2,y2)∈E,Q=2P=P+PP=(x_1,y_1),Q=(x_2,y_2) \in E, Q=2P=P+PP=(x1​,y1​),Q=(x2​,y2​)∈E,Q=2P=P+P
{x2=(3x12+a2y1)2−2x1)y2=y1+(3x1+a2y1)(x2−x1)\begin{aligned} \begin{cases} x_2 &= (\frac{3x_1^2+a}{2y_1)^2 - 2x_1})\\ y_2&=y_1+(\frac{3x_1+a}{2y_1})(x_2-x_1) \end{cases} \end{aligned}{x2​y2​​=(2y1​)2−2x1​3x12​+a​)=y1​+(2y1​3x1​+a​)(x2​−x1​)​​
P=(x1,y1),Q=(x2,y2)∈E,Q=nP=P+P+...+P⏟n回P=(x_1,y_1), Q=(x_2,y_2) \in E, Q=nP=\underbrace{P+P+...+P}_\text{n回}P=(x1​,y1​),Q=(x2​,y2​)∈E,Q=nP=n回P+P+...+P​​
P,Q∈EP,Q \in EP,Q∈E
Q=nPQ=nPQ=nP
nnn
P+P+...+P⏟n回\underbrace{P+P+...+P}_\text{n回}n回P+P+...+P​​
PPP
nnn
nnn
222
P+P+...+P⏟n回\underbrace{P+P+...+P}_\text{n回}n回P+P+...+P​​
n=7n=7n=7
n=1+2+4=20+21+2221P=20P+20P=P+P=2P22P=21P+21P=2P+2P=4P\begin{aligned} n &=1+2+4=2^0+2^1+2^2 \\ 2^1P &=2^0P+2^0P=P+P=2P \\ 2^2P &=2^1P+2^1P=2P+2P=4P \end{aligned}n21P22P​=1+2+4=20+21+22=20P+20P=P+P=2P=21P+21P=2P+2P=4P​
Q=nP=(20+21+22)P=20P+21P+22P=P+2P+4P=7P\begin{aligned} Q &=nP =(2^0+2^1+2^2)P \\ &=2^0P+2^1P+2^2P \\ &=P+2P+4P=7P \end{aligned}Q​=nP=(20+21+22)P=20P+21P+22P=P+2P+4P=7P​
P1,...,PnP_1,...,P_nP1​,...,Pn​
x1,...,xnx_1,...,x_nx1​,...,xn​
Q=x1P1+...+xnPnQ=x_1P_1+...+x_nP_nQ=x1​P1​+...+xn​Pn​
https://zenn.dev/herumi/articles/ecc-multi-scalar-multiplication
https://tex2e.github.io/blog/crypto/point-of-elliptic-curve-over-GF
https://andrea.corbellini.name/ecc/interactive/modk-add.html