Try   HackMD
tags: cakeCTF crypto

[crypto] Together as one - cakeCTF 2021

Challenge

RSA問題
以下の値が貰える。

n=pqrcm0x10001(modn)x(p+q)r(modn)y(p+qr)r(modn)

Solution

x,yをそれぞれ数論パワーで殴ることで、
p,q,r
を求めることができる。

まず、二項定理より

{xpr+qr(modn)ypr+(qr)r(modn)(1)

となることがわかる。
ここで

qを法としてみると、

{xpr(modq)ypr(modq)

となる。(

modn
kn
となり、
modq
では当然0となる)

つまり法

qにおいて、
x
y
は合同である。よって、

xy(modq)=y+kqxy=kq

となり、

gcd(xy,n)から
q
を求めることができる。

次に、(1)から

rを法としてみると

{xp+q(modr)yp(modr)

となる。(フェルマーの小定理より、

pr(modr)p
ここで、
x,y,p
が手元にあるので、

xy+q(modr)xyq0(modr)=kr

となり、

gcd(xyq,n)から
r
を求めることができる。

以上より、

q,rが求まったので
p
も求めることができ、フラグを入手できる。

from Crypto.Util.number import long_to_bytes, inverse, GCD exec(open("./../distfiles/output.txt").read()) q = GCD(n, x-y) r = GCD(n//q, y - (x - q)) p = n // (q * r) assert n == p*q*r d = inverse(0x10001, (p-1)*(q-1)*(r-1)) print(long_to_bytes(pow(c, d, n)))
$ python3 solver.py
b'cakeCTF{This_chall_is_inspired_by_this_music__Check_out!__https://www.youtube.com/watch?v=vLadkYLi8YE}\n'

問題名とフラグはTimmy TrumpetのDiamondsから