# TSG CTF 2020 Modulus Amittendus Writeup
## 問題
RSAで暗号化されたフラグと公開鍵が与えられる。
ただし、バグによって $N$ のかわりに $d$ が与えられ、加えて係数 $c=q^{-1}\bmod p$ が漏洩している。
ここからフラグを復号するのが問題である。
## 解法
まず、$\varphi(N)=(p-1)(q-1)$ を復元する。
$ed=1\bmod \varphi(N)$ より、ある整数 $k>0$ について $ed-1=k\varphi(N)$ が成り立つ。ここで $d<\varphi(N)$ より $k<e=65537$ なのでこのような条件を満たす $k$ を全探索することができる。よって $\varphi(N)$ を得る。
いま $\varphi(N) \bmod p$ を考えると、
$$
\begin{aligned}
\varphi(N)&=\left(p-1\right)\left(q-1\right)\\&=p\left(q-1\right)-q+1
\end{aligned}
$$
より
$$
\varphi(N)-1=-q\bmod p
$$
である。
$c=q^{-1}\bmod p$ を両辺に掛けると、
$$
\begin{aligned}
\left(\varphi(N)-1\right)c&=-qq^{-1}&\bmod p\\\left(\varphi(N)-1\right)c+1&=0&\bmod p
\end{aligned}
$$
よって $\left(\varphi(N)-1\right)c+1$ は $p$ の倍数となる。これを計算し $m$ とおく。
ところでオイラーの定理より $N$ と互いに素である任意の整数 $a$ について
$$
a^{\varphi(N)}=1\bmod N
$$
である。特に $N$ は $p$ の倍数なので、$a^{\varphi(N)}-1$ は $p$ の倍数となる。
いま、
$$a^{\varphi(N)}-1\bmod m$$
を計算すると、法および数値が $p$ の倍数であることから計算結果もまた $p$ の倍数となる。
この式では $a$ の値を変更することで $p$ の倍数を任意に得ることができる。よってこれらの値の最大公約数をとることによって $p$ を得る。
$\varphi(N), p$ より $q$ が求まるため、これで復号に必要な情報が求まり、解ける。
## 補遺
なお、$m$ を求めたあとオイラーの定理を用いずに、Coppersmith's Attack を用いて
$$cq=1\bmod p$$
の解 $q$ を直接得られるようにも見える。が、この方法では解を得られない。以下に証明を示す。
Coppersmith's Attack を用いて $p$ の倍数 $N$ と $p$ の下限 $p\geqq N^\beta$ および $x$ の上限 $x_{i}\leqq X_{i}$ から、n変数非同次線形方程式
$$a_{1}x_{1}+a_{2}x_{2}+\cdots+a_{n}x_{n}\equiv C\bmod p$$
の解 $\left(x_{1},\cdots,x_{n}\right)$ を得るための求解条件は、
$$\frac{1}{\log N}\sum_{i=1}^{n}\log X_{i}\leqq1-\left(1-\beta\right)^{\frac{n+1}{n}}-\left(n+1\right)\left(1-{}^{n}\sqrt{1-\beta}\right)\left(1-\beta\right)$$
である。
特に今回の式では $n=1$ なので、式を整理して
$$\frac{\log X_1}{\log N}\leqq\beta^2$$
を得る。
ここで $c\approx p, \varphi(N)\approx p^2$ と評価できるので、$m\approx p^3$ である。よって $N=m$ とすると $p$ の下限は
$$p\geqq N^{1/3}$$
つまり $\beta\approx 1/3$ とおける。
また $X_1=q, N\approx q^3$ より
$$\frac{\log X_1}{\log N}\approx \frac{1}{3}$$
以上を勘案すると、上の求解条件は
$$\frac{1}{3}\leqq \left(\frac{1}{3}\right)^2$$
となり、誤差を考慮しても明らかに満たされない。