# 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$$ となり、誤差を考慮しても明らかに満たされない。
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.