Before all
SIDH 本來是 PQC (後量子加密) 技術的一個候選人,不過 2022 年被一種叫做 Castryck-Decru 的攻擊方案給破解了!
這篇文章會包含基礎的 Isgoeny 、 SIDH 介紹以及 Castryck-Decru Attack 的分析
大概幾個月前我重新上 CryptoHack 解題的某一陣子學了一些 Isogeny 相關的知識和實做,不過那時候看著看著有些地方也需要花上不少時間,或多或少繞了遠路才釐清所有概念。
最近有空 + 有些機會讓我需要重新釐一邊相關的知識和技術,就藉此來寫下一篇 “希望” 入門友善的 SIDH 學習筆記,不過也因此在一些數學上可能描述不是那麼嚴謹、或會跳過一些初等代數真的很難涵蓋的證明。 (或者說有些地方希望大家斟酌”通靈”感覺一下他是正確的)
預設會認定讀者有基本橢圓曲線運算和一點代數的概念? 不然就是邊讀邊找,Welcome to the World of Mathematics
SIDH
What’s Isogeny?
簡單來說:
我們考慮曲線 $E$ 以及他的運算群 $<E, +>$,當一個映射是 $\phi:E \rightarrow E’$ 是 Isogeny 的,它必須滿足:
- 是一個群同態 (Group Homomorphism),也就是對於 $P, Q \in E$ 我們有 $\phi(P+Q) = \phi(P) + \phi(Q)$
- 它必須保單位元,也就是無窮遠點傳送後還是無窮遠點 $\phi(\mathcal{O}{E}) = \mathcal{O}{E’}$
- 它一定是滿射而且必須有 Finite Kernel,所謂的 Finite Kernel 就是存在 $ker_{\phi} \subset E$ 滿足 $\forall P \in ker_{\phi}, \phi(P) = \mathcal{O}_{E’}$
哇 這世界真美好!
當然不是地,實際上我們有太多東西沒解決了,像是怎麼算出 $\phi$ 的,在這樣的 Ring 上我們可以操作的運算有哪些……。
所以,複雜來說:
funcion field
定義 k 是曲線的 基體 (Base Field)
定義曲線 $E:y^2=x^3+Ax+B$
則它的 affine coordinate ring 是 $k[E]=k[x,y]/(y^2-x^3-Ax-B)$
function field 是它的分式域:$k(E)=\operatorname{Frac}(k[E])$
元素會長得像
$$
\frac{g(x,y)}{h(x,y)}
$$
並且可以用曲線方程把 $y^2$ 換成 $x^3+Ax+B$,所以任何 function 都能化成 $a(x)+b(x)y$
所以可以考慮成分式版本
$$\frac{a(x)+b(x)y}{c(x)+d(x)y}$$
rational map
一個 rational map $\phi:E_1\dashrightarrow E_2$
在 affine 上常寫成
$$
\phi(x,y)=(r_1(x,y),r_2(x,y))
$$
其中
$$
r_1,r_2\in k(E_1).
$$
若分母在某點為 0,不代表 map 一定沒定義;可能換一個等價表示後可算。
standard form
若兩條曲線都是
$$
E_1:y^2=f_1(x),\qquad E_2:y^2=f_2(x),
$$
且 $\operatorname{char}k\ne2$,則任意 isogeny 可以寫成
$$
\phi(x,y)=\left(\frac{u(x)}{v(x)},\frac{s(x)}{t(x)}y\right),
$$
其中
$$
u,v,s,t\in k[x],\qquad \gcd(u,v)=\gcd(s,t)=1.
$$
接著要來解釋為什麼 $\phi$ 的 affine form 會是第一項只跟 x 相關、第二項又是怎麼來的
因為 $\phi$ 是群同態,所以 $\phi(-P)=-\phi(P)$
若 $P=(x,y),\qquad -P=(x,-y)$
設
$$
\phi(x,y)=(r_1(x,y),r_2(x,y)).
$$
那麼
$$
\phi(x,-y)=(r_1(x,-y),r_2(x,-y)),
$$
而
$$
-\phi(x,y)=(r_1(x,y),-r_2(x,y)).
$$
所以
$$
r_1(x,-y)=r_1(x,y),
$$
$$
r_2(x,-y)=-r_2(x,y).
$$
第一個是 even in $y$,所以可以化成只含 $x$ 的函數:
$$
r_1=\frac{u(x)}{v(x)}.
$$
第二個是 odd in $y$,所以有一個 $y$ 因子:
$$
r_2=\frac{s(x)}{t(x)}y.
$$
kernel where
最後,在拿到一個 map $\phi$ 後,我們就可以很輕鬆地找出所有 kernel
若
$$
\phi(x,y)=\left(\frac{u(x)}{v(x)},\frac{s(x)}{t(x)}y\right),
$$
則 affine kernel points 當然就是 x 分母為零,也就是 $v(x)=0$
的點,再加上無窮遠點 $O$。
$$
\ker\phi={(x,y):v(x)=0}\cup{O}.
$$
degree
定義
$$
\deg\phi=\max(\deg u,\deg v).
$$
若
$$
\left(\frac{u}{v}\right)’\ne0,
$$
稱 $\phi$ separable。
separable isogeny 有個定理是 $#\ker\phi=\deg\phi$
若特徵是 $p>0$,有可能 $\left(\frac{u}{v}\right)’=0$
這通常表示 $\frac{u(x)}{v(x)}=r(x^p),$
給定 Kernel 的 isogeny 就是 quotient!
令 $G\subset E(\bar k)$ 是有限子群。定義等價關係:
$$
P\sim Q\iff P-Q\in G.
$$
也就是把 coset
$$
P+G={P+R:R\in G}
$$
視為同一點。
商群是
$$
E/G.
$$
存在一條 separable isogeny
$$
\phi:E\to E/G
$$
滿足
$$
\ker\phi=G.
$$
它在同構意義下唯一:若
$$
\phi_1:E\to E_1,
\qquad \phi_2:E\to E_2
$$
都是 separable 且 kernel 都是 $G$,則存在 isomorphism (等價) (同態基本定理)
$$
\iota:E_1\to E_2
$$
使得
$$
\phi_2=\iota\circ\phi_1.
$$
n-torsion
定義
$[n]:E\to E, \qquad P\mapsto nP$
其中不難發現這個運算本身也是 isogeny
它的 kernel $E[n]={P\in E(\bar k):nP=O}$ (這些是 n-torsion points)
($\bar{k}$ 是一個閉包包含所有 k 的元素)
對了,這時候其實有一件很 trivial 的事情,那就是 $n$ 一定是 $ord(E)$ 的因數
若 $p=\operatorname{char}k$ (想成 Curve 的 Modulus)
且 $p\nmid n$,則 $[n]$ separable,因此
$#E[n]=n^2$,為什麼呢?等等講到 division polynomial 就知道了!
啊如果 $\ell=p$,則 $E[p^e]\cong\mathbb Z/p^e\mathbb Z$
或
$$
E[p^e]={O}.
$$
若
$$
E[p]={O},
$$
稱為 supersingular。
division polynomials
對一條 short Weierstrass form 的橢圓曲線
$$
E:y^2=x^3+Ax+B
$$
假設 $\operatorname{char} k\ne 2,3$。
因為 multiplication-by-$n$ map
$$
[n]:E\to E,\qquad P\mapsto nP
$$
本身也是一個 isogeny,所以它也可以寫成 rational map 的形式。更具體地說,存在 division polynomials
$$
\psi_n,\ \phi_n,\ \omega_n
$$
使得對 affine point $P=(x,y)$,在分母不為 $0$ 的地方有
$n=\left(\frac{\phi_n(x)}{\psi_n(x,y)^2},\frac{\omega_n(x,y)}{\psi_n(x,y)^3}\right)$
其中 $\psi_n$ 就是用來描述 $n$-torsion 的關鍵多項式。
如果 $p=\operatorname{char}k$ 且 $p\nmid n$,那麼對非無窮遠點 $P\ne O$ 有
$$
P\in E[n]
\iff
[n]P=O
\iff
\psi_n(P)=0.
$$
因此可以把 $E[n]$ 想成:
$$
E[n]={O}\cup {P\in E(\bar{k}) : \psi_n(P)=0}.
$$
這裡要注意,當 $\psi_n(P)=0$ 時,上面的 affine fraction 不能直接代入計算,因為分母會變成 $0$;比較正確的理解是:
這個 rational expression 對應到的 morphism 在該點的值是無窮遠點 $O$。
前幾個 division polynomials 是:
$$
\psi_1=1,
$$
$$
\psi_2=2y,
$$
$$
\psi_3=3x^4+6Ax^2+12Bx-A^2.
$$
所以在 $\operatorname{char}k\ne 2,3$ 的情況下,非零的 $3$-torsion points 的 $x$-coordinate 會是
$$
\psi_3(x)=0
$$
的根。
至於這些多項是怎麼來的,以 n = 3 舉例,我們會可以寫成 $3P = O$ 於是有 $2P=-P$,再帶入倍點公式
$$\frac{(3x^2+A)^2}{4y^2} - 2x = x$$
展開一下就有了。
到這邊我們就可以理解為什麼 $#E[n]=n^2$,在計算 x 項的時候我們有
$x(nP) = \frac{\phi_n(x)}{\psi_n(x)^2}$
其中 $\psi_n(x)^2$ 會是 $n^2 - 1$ 次多項式,他的根在閉包 $\bar{k}$ 上正好就是 $n^2 - 1$ 個,加上 $O$ 我們就有 $n^2$ 個點了。
那最後 $E[n] \cong \mathbb{Z}/n\mathbb{Z} \times \mathbb{Z}/n\mathbb{Z}$ 的來源是什麼呢? 其實回到 n-torsion group 的定義就說得通了,因為在任何一個方向(任何一個點)而言,它走了 n 次就回到單位元了,所以理所當然它不可能是長的形同 $E[n] \cong \mathbb{Z}/n^2\mathbb{Z}$ 的樣子。
所以我們可以選出 basis $P, Q$ 使得裡面所有元素都是他們的線性組合(對,就是 Pairing 那個味道)。
n-isogenies
n-isogeny 其實就是挑選一個點 $P \in E[n]$ 並且拿它當 Kernel 去做 Isogeny $\phi$ 得到一個 codomain $E’$
疑?其實這個 $\phi$ 的 Kernel 大小是 n 唷 (也就是 order 也是 n),因為很自然地 $2P, 3P, 4P, … nP$ 顯然都是它的 Kernel (因為 $\phi(P) = O’$)
它有這樣漂亮的一個代數特徵
再提醒一次 $n$ 一定是 $#E$ 的因數
那總之,選一個點做 Isogeny 後其實就是在 $\mathbb{Z}/n\mathbb{Z} \times \mathbb{Z}/n\mathbb{Z}$ 這個二維的空間裡挑了一個方向去走
velu’s formula
再來,我們的挑戰變成,在挑好 Kernel 後,打過去的那條曲線到底是誰!
假設今天 Kernel 大小為 2 (${O, G}$),我們可以很輕易地透過帶入兩點解聯立
$X = x + \frac{t}{x - x_0}$
$Y = y \cdot (1 - \frac{t}{(x - x_0)^2})$
然後根據像是 Weierstrass Form解 $Y^2 = X^3 + A’X + B’$ 就拿到我們的 $A’, B’$ 了
高次推導其實就是用相似的概念
說著簡單 做起來也是 一篇論文 呢,一點都不簡單 T^T
https://eprint.iacr.org/2011/430.pdf 有興趣的朋友一定可以去讀讀看得!
好消息是!想要對某個點做 Isogeny 我們有個很簡單的做法是打開 sage
1 | phi = E.isogeny(K) |
欸嘿!其中 E 是曲線 K 是點。
其中 codomain 就是經過 $\phi$ 變換後的曲線群
$l^e$ - isogeny
對於 $l^e$ - isogeny 有個特別的計算技巧,與其大費周章解那麼大的數字的 velu’s formula,我們其實可以改成挑選一個 $l^e$ - torsion point,接著做 e 次 l-isogeny
這樣講怪怪的,假設 $P \in E[l^e]$ ,我們在第一次變成以 $l^{e-1} P$ 為 kernel 做 l - Isogeny (注意到 $l^{e-1} P$ 的 order 自然是 l) 拿到 $\phi_1$,接著把 $l^{e-2} \phi_1{P}$ 做為第二次變換的 kernel,注意到 P 在經過一次 I-Isogeny 傳送後因為變成 $l^{e-1} \phi_1{P} = O$ 所以它也自動變成一個 $l^{e-1}$ - isogeny Point on $\phi_1(E)$
最後就完成了把 $P$ 本身作為 Kernel 傳送的目的,也完成了從一開始 $E$ 一路走到變成 $l^e$ - isogeny 的構造,既讓 isogeny order 變很大,複雜度又對 l 取了 log
附上 demo sage
1 | p = 2^18 * 3^13 - 1 |
dual isogeny
對於 n-isogeny $\phi$ (事實上後續文章我們也都只會討論 n-isogeny)
我們會存在 $\hat\phi$ 滿足 $\hat\phi \circ \phi = [n]$
這部分可以用一個構造去想,假設我們傳送的時候挑選了一個 n-torsion point $P$,但另一個 $Q$ 也是 n-torsion point (而且不在 P 的生成群中)。
先把 $P$ 當作 kernel 拿到 map $\phi$ ,那重新在 $E’ = \phi(E)$ 上以 $\phi(Q)$ 作為 Kernel 再做一次 isgeony,就相當於本來的 E 被 $P, Q$ 做 quotient 也就是 $E/\left\langle P, Q\right\rangle$ ,但別忘了, $P, Q$ 本身就變成整個 n-torsion group 的 basis 了,等於 quotient 掉整個 n-torsion group。
SIDH 實踐
終於可以進到我們的 SIDH 了,它的主要功能是 Key Sharing
公鑰:
public p (prime) = $2^{ea}\cdot 3^{eb} -1$
一條曲線 E 使得它是 supersingular curve,如果不是 supersingular curve 的話它的 n-isogeny 結構會變成 isogeny volcano (如下圖),太具有規律性將導致後續很容易被破解
而 E 的 order 因為是一條 Super Singular Curve 所以會是 $2^{ea}\cdot 3^{eb} -1 + 1 = 2^{ea}\cdot 3^{eb}$

接下來會選擇 $2^{ea}$ -torsion group 和 $3^{eb}$ -torsion group 上的點來操作
$P_A, Q_A \in E[2^{ea}]$
$P_B, Q_B \in E[3^{eb}]$
到這邊都還是公鑰,接下來才是私鑰(一樣拿 Alice, Bob 來操作):
Alice 會選擇一個 $s_A \in \mathbb{Z}/2^{ea}\mathbb{Z}$ 作為私鑰
接著他會以 $K_A = P_A + s_A Q_A$ 作為 Kernel 建立 $\phi_A: E \rightarrow E_A \cong E/K_A$
並且把 $E_A, \phi_A(P_B), \phi_A(Q_B)$ 公開出來給 B,類似地 B 也會通過一樣流程產出私鑰 $s_B$ 以及公開 $E_B, \phi_B(P_A), \phi_B(Q_A)$
最後最後,Alice 產生私鑰的方法是
計算 $\phi_B(P_A) + s_A \phi_B(Q_A) = \phi_B(K_A)$ 並且拿它作為 Kernel 對 $E_B$ 做 Isogeny
這時候如果 Alice 和 Bob 都這樣做了, 他們會同時把 E quotient 掉兩個 Subgroup
$E/\left\langle K_A, K_B \right\rangle$
這時候再去計算 j-invariant,雖然計算出來的曲線可能是不同條,但因為他們同構所以 j-invariant 相同。
關於 n-isogeny 關係還有很多有趣的 feature 我放在 Appendix a.k.a. 我不想證明了(
Castryck-Decru Attack
終於要來見證 SIDH 被破解的重大歷程了
本質上是利用 $\phi_B(P_A), \phi_B(Q_A)$ 的 info leak 做 mod 3 oracle 來攻擊。
Known Endomorphism What
先回到 SIDH 最不妙的那個地方:Bob 公鑰不是只有 $E_B$,還有 $\phi_B(P_A), \phi_B(Q_A)$。這代表什麼?代表只要我拿到任何 $2^{ea}$-torsion 上的點 $T = xP_A + yQ_A$,我就可以直接算出它經過 Bob secret isogeny 後的結果:
$$
\phi_B(T)=x\phi_B(P_A)+y\phi_B(Q_A).
$$
也就是說,雖然我不知道 $\phi_B$ 本身長怎樣,但我知道它在整個 $E_0[2^{ea}]$ 上的線性作用。這件事超級致命,因為 SIDH 的起始曲線 $E_0$ 又不是一般隨機曲線,它通常有一些已知的小 Endomorphism,例如 $i$ 或 $2i$ 這種東西。既然 $\theta$ 是已知的,我們當然也知道它怎麼作用在 $P_A,Q_A$ 上:
$$
\theta(P_A)=aP_A+bQ_A,
$$
$$
\theta(Q_A)=cP_A+dQ_A.
$$
然後透過 public images,我們就可以把這個 action 傳到 $E_B$ 上。直覺上就是,雖然 $\theta$ 原本住在 $E_0$,但因為 $\phi_B(P_A),\phi_B(Q_A)$ 被公開了,我們可以在 torsion level 上看到一個「被 Bob secret path 搬運過去」的 endomorphism action。換句話說,SIDH public key 洩漏的不是一點點座標而已,而是 secret isogeny 對一整塊 torsion vector space 的線性資訊。
Kani’s Diamond and Theorem
接下來是這個攻擊最漂亮的地方:Kani’s theorem。我們先想一個菱形。假設我們正在猜 Bob secret 的某一段,如果候選是對的,那 Bob 的 secret isogeny
$$
\phi_B:E_0\to E_B
$$
就會 factor 成:
$$
\phi_B=\rho\circ\kappa.
$$
這裡 $\kappa:E_0\to E’$ 是我們猜出來的前半段,$\rho:E’\to E_B$ 是 Bob 剩下那段真正的 secret tail。問題是 $\rho$ 我們不知道,但如果猜對,它就真的存在。接著攻擊者自己再從 $E’$ 構造另一條輔助 isogeny:
$$
\gamma:E’\to C.
$$
然後故意讓 degree 滿足:
$$
\deg(\rho)+\deg(\gamma)=N,
$$
其中在原論文攻 Bob 的方向,$N$ 通常是某個 $2$-power,例如 $2^{ea-\alpha}$。這時候圖形大概長這樣:
$$
\begin{array}{ccc}
& E’ & \\
\gamma \swarrow & & \searrow \rho \\
C & & E_B \\
\searrow & & \swarrow \\
& D &
\end{array}
$$
這個就是 Kani diamond。Kani’s theorem 告訴我們:如果這個 diamond 真的存在,那麼可以從它構造一個 anti-isometry
$$
f:C[N]\to E_B[N],
$$
而且它的 graph
$$
H=\operatorname{Graph}(f)
$$
拿去 quotient 整個 product surface:
$$
(C\times E_B)/H
$$
結果會 split 成兩條 elliptic curves 的 product,而不是一個普通的 genus-2 Jacobian。那問題來了:我們不是不知道 $\rho$ 嗎?怎麼構造 $f$?答案就是 SIDH public images 又出來救援了。對 $U=\kappa(2^\alpha P_A)$ 來說,如果候選正確:
$$
\rho(U)=\rho(\kappa(2^\alpha P_A))=2^\alpha\phi_B(P_A).
$$
同理:
$$
\rho(\kappa(2^\alpha Q_A))=2^\alpha\phi_B(Q_A).
$$
而 $\gamma$ 是攻擊者自己造的,所以左邊也能算:
$$
P_C=\gamma(\kappa(2^\alpha P_A)),
$$
$$
Q_C=\gamma(\kappa(2^\alpha Q_A)).
$$
於是我們就能直接寫出 graph subgroup:
$$
H=
\left\langle
(P_C,2^\alpha\phi_B(P_A)),
(Q_C,2^\alpha\phi_B(Q_A))
\right\rangle.
$$
也就是 split 成兩個新群的乘法
$$
A_\epsilon=(C_\epsilon\times E_B)/H_\epsilon.
$$
$$
A_\epsilon\cong E_\epsilon\times D_\epsilon.
$$
這就是最關鍵的焊接:public image 讓我們在不知道 $\rho$ 的情況下,還是能把 $\gamma(U)$ 和 $\rho(U)$ 配對起來。然後 Kani theorem 說,如果這個配對真的是從 diamond 來的,那 quotient 就會 split;如果猜錯,diamond 不存在,這個 quotient 通常就只是 genus-2 Jacobian。這就是整個攻擊的判斷核心。
The Oracle
最後把整件事整理成 oracle。Bob 的 secret kernel 是:
$$
K_B=\langle P_B+sQ_B\rangle,
\qquad
s\in\mathbb Z/3^{eb}\mathbb Z.
$$
攻擊者要把 $s$ 一段一段猜出來。假設目前已知:
$$
s\equiv t\pmod{3^k}.
$$
那下一個 ternary digit 只有三種可能:
$$
t,\qquad t+3^k,\qquad t+2\cdot 3^k.
$$
對每個候選 $t_\epsilon=t+\epsilon 3^k$,我們構造候選 partial kernel:
$$
K_\epsilon=
\left\langle
3^{eb-(k+1)}(P_B+t_\epsilon Q_B)
\right\rangle,
$$
再拿它做 isogeny:
$$
\kappa_\epsilon:E_0\to E_\epsilon.
$$
如果這個 $\epsilon$ 猜對,則 $\ker\kappa_\epsilon\subseteq\ker\phi_B$,所以一定存在 tail isogeny
$$
\rho_\epsilon:E_\epsilon\to E_B
$$
使得:
$$
\phi_B=\rho_\epsilon\circ\kappa_\epsilon.
$$
接著我們自己構造 auxiliary isogeny:
$$
\gamma_\epsilon:E_\epsilon\to C_\epsilon
$$
讓:
$$
\deg(\gamma_\epsilon)+\deg(\rho_\epsilon)=2^{ea-\alpha}.
$$
然後用 public images 組出:
$$
H_\epsilon=
\left\langle
(
\gamma_\epsilon\kappa_\epsilon(2^\alpha P_A),
2^\alpha\phi_B(P_A)
),
(
\gamma_\epsilon\kappa_\epsilon(2^\alpha Q_A),
2^\alpha\phi_B(Q_A)
)
\right\rangle.
$$
最後計算:
$$
A_\epsilon=(C_\epsilon\times E_B)/H_\epsilon.
$$
如果 $\epsilon$ 猜對,Kani diamond 存在,所以 $A_\epsilon$ 會 split 成:
$$
A_\epsilon\cong E_\epsilon\times D_\epsilon.
$$
如果 $\epsilon$ 猜錯,通常沒有 diamond,結果就會是一個 genus-2 Jacobian。實作上因為這邊 quotient level 是 $2$-power,所以可以用 $(2,2)$-Richelot isogeny chain 去算;最後如果 Richelot 公式退化,也就是 determinant $\delta=0$,就代表 split。於是 oracle 就長這樣:
1 | candidate epsilon correct? |
Richelot 公式的證明那些的我可以很誠實說我也沒看懂 @@
但計算上倒是意外不複雜
令 $k$ 是一個 $\operatorname{char} k \ne 2$ 的 field。
考慮 genus 2 hyperelliptic curve
$$
C: y^2 = f(x)
$$
其中 $f(x)$ 可以分解成三個二次多項式:
$$
f(x)=G_1(x)G_2(x)G_3(x)
$$
也就是
$$
C: y^2 = G_1(x)G_2(x)G_3(x)
$$
其中
$$
G_i(x)=a_i x^2+b_i x+c_i.
$$
定義 determinant
$$
\Delta =
\det
\begin{pmatrix}
a_1 & b_1 & c_1\\
a_2 & b_2 & c_2\\
a_3 & b_3 & c_3
\end{pmatrix}.
$$
若
$$
\Delta \ne 0,
$$
則就沒退化
所以 Castryck-Decru Attack 本質上不是在 isogeny graph 裡面暴力找 collision,而是把「猜 secret digit」轉成一個 genus-2/product 的 split test。
After all
有點睏了 XD
Appendix
- 有種叫做 modular polynomial 的多項式是根據 isogeny 大小代入 j-invariant 計算,在 sage 裡面可以用
classical_modular_polynomial獲得我們的多項式 $\Phi$ ,拿來計算 neighbor,也是 SIDH 的 MitM implementation 很好用的工具 (可以參考我在 THJCC 2026 出的題目 Exploit:https://blog.whale-tw.com/2026/02/22/thjcc-2026-official/#I-Sogo-%E4%BD%A0%E4%BA%86%E5%96%94%EF%BC%81) - Weil Pairing 在 Isogeny map 有個酷酷的 feature $e(\phi(P), \phi(Q)) = e(P, Q)^{deg(\phi)}$
- DDH(Decisional Diffie Hellman) 和 Genus Theory 也很好玩: https://eprint.iacr.org/2020/151.pdf 不過改天有機會再來寫文章
- SIDH 之後其實還沒完,我們有了 CSIDH ,也是改天有機會再來寫文章 lol (應該會輕鬆很多,畢竟 Isogeny 觀念都在這篇寫得差不多了() ,但相信讀者讀完這篇去看 CSIDH 應該也很容易理解