であり、既知のときに有効な攻撃
多項式 と
をそれぞれ
上で考えると、
なので、
は
を因数に持つ。従って一変数多項式のgcdをやると
が得られる
という攻撃。別にeが共通である必要はない
from sage.all import * _, x = PolynomialRing(Zmod(N), name='x').objgen() f1 = (a1*x + b1)**e1 - c1 f2 = (a2*x + b2)**e2 - c2 def gcd(a, b): while b: a, b = b, a % b return a.monic() m = -gcd(f1, f2).coefficients()[0]
def pgcd(a, b): while b: a, b = b, a % b return a.monic()