Description

Category: Crypto

Source: AceBear Security Contest 2019

Points: 831

Author: Jisoon Park(js00n.park)

Description:

Let's warm-up

link

Write-up

문제 설정은 매우 간단하다. n, e, c와 함께 (p + q)2019 mod n, (p + 2019)q mod n의 값이 주어진다. (각각 a, b라고 해두자)

여기서 private exponent를 찾아서 c를 복호화 하면 되는 문제이다.

[...]

p = getPrime(512)
q = getPrime(512)
n = p*q
e = 65537

c = pow(m, e, n)

print(n)
# 13299187269178832408213486199795357[...]

print(c)
# 51298575439582965784709335152059190[...]

print(pow(p+q, 2019, n))
# 11662295269650372444446581690681292[...]

print(pow(p+2019, q, n))
# 46935581819524717607675319301313485[...]

우선 (p + 2019)q mod n = b을 살펴보자. q승을 한다는데서 페르마의 소정리를 이용할 생각을 쉽게 해볼 수 있다.

  • (p + 2019)q mod n = (p + 2019)(q - 1) + 1 mod n mod q = p + 2019 mod q = b mod q
  • p = b - 2019 (mod q)

다음으로 (p + q)2019 mod n = a을 풀어보자.

(a + c)b mod c = ab mod c 인 것을 활용하면 된다. (증명은 b가 0, 1일때는 자명하고, 2일때 부터는 귀납법을 이용하면 된다.)

  • (p + q)2019 mod n = p2019 mod n mod q = (b - 2019)2019 mod q = a mod q
  • (b - 2019)2019 - a = 0 (mod q)

그러므로, (b - 2019)2019 - a는 q의 배수이다. n 또한 q의 배수이니, 두 수의 GCD를 구하면 q의 값을 알 수 있다.

이제 순서대로 p, phi(n), d, m을 구하면 flag를 얻을 수 있다. (code)

Flag : AceBear{1_Hop3_1t_w4s_n0t_t00_34sy_f0r_U}

'writeups > Crypto' 카테고리의 다른 글

R u SAd  (0) 2019.11.26
backtalk  (0) 2019.11.26
Open-gyckel-krypto  (0) 2019.11.26
Ezdsa  (0) 2019.11.26
Shadow Cat  (0) 2019.11.26

+ Recent posts