Skip to content

Instantly share code, notes, and snippets.

@keltecc
Created October 19, 2019 17:09
Show Gist options
  • Save keltecc/05cc773e999be45c31375f8c3d7669e5 to your computer and use it in GitHub Desktop.
Save keltecc/05cc773e999be45c31375f8c3d7669e5 to your computer and use it in GitHub Desktop.
RSA / House of Fear

LetoCTF 2019 | House of Fear (crypto)

Задание с AntiCTF, который проводился в Летней школе CTF летом 2019 года.

Автор: Илья Греков

RSA{79c48170138b5bc7addded5fade58f367630e9a4a389963271f22efa88c506ef}
N = 0xab4fdd2a830ee2153b162573c38ec7f1a76bfb5d174c17063ebc8798c13396696bfbb9f6326b1c5c0121992623915d92a742af7241fbc1684f3e4ad786fc12aa7da583e91664258730628c61baceb9416ead0f87d2214792151f2e7a1069fc290e4cc4a1d47022ce701c2661c1402c4ee91ca2ec636fcce4f24716ec1005316979999bb6c133904e782c5713340b8b25d2858daf9751b46d4dc087ca05ffd7f1282e896ab7d9bab2c07618a5767e83e138e9520243b7edb8633ee55009e8b49034e368b71d1e99e82806acedf5359c9482ea1fc64a23d9f56aeeb43d2e74dc5a61540306beddb0fc33dd307358cf71a7d272eec83180fc1a9dcc4d851210bb5b
e = 0x8c18551fe9d81b0375566d67395d829dbc35a4f16daac6275e44c0ebd8ac4f430d8cdbdb8892122f32062844a4dc536b8a884e4f386e8615c4634fb5fd3e4a81b307b5bae7957c7db5c889350a3ab753449274bd2eeca3f7a96f06d4362ec0c573f901c95218d34dd4a58d33636efa5aa10479e059bec98d63a2d668da105afbf14bb77d35b0dad94575a42a95d1e378d838f6d3031d0175981bf36d947b9d1559b0f4eae3670b847abbde8e7747b840670aa9ea085b01cbbb287af86cee845eb8cbfbaa347ea9b8d1f832e7cac66cc2cd6d2c99a777ad3e879e6ef7c4b2cf1e72639a53a8403d01f50b62e334595a06d992ce7affb83cf2759a4a4207a83b31
c = 0x3ad58a2719d7553f584966d52193e0aed8b7d4820e4dd3100e1eb84cc44d6e21f5d992e612d90589460b65802d0d058fb1f71cd894e0f9d3709121fe2130ad33e2a1f9a843c0e030f14954d50ba3d81ffdbbe13b0eae1fbc09119fc809854352ad05afa5be16d7bf86b3c8eeb170a06e7bfa1e82689a50d53755d74a88aa0ef974097dd9d1d66d016aa76a2420eb7c1df839968fc110d445364bcb44169e5b6eff4a51c444e9a0fc2974ecbae985d360467af0d2054c57b430f2baf086a3973df4be762193fea754fdf85883c7cfc89b03fc3f1b2cdfdef79425eac99518056d9e30b41c3384ee3c74a7c9e48765372b71192831cdd2ccc6167978b78f59ccfe
#!/usr/bin/env python3
from Crypto.Util.number import GCD, long_to_bytes
def main():
N = 0xab4fdd2a830ee2153b162573c38ec7f1a76bfb5d174c17063ebc8798c13396696bfbb9f6326b1c5c0121992623915d92a742af7241fbc1684f3e4ad786fc12aa7da583e91664258730628c61baceb9416ead0f87d2214792151f2e7a1069fc290e4cc4a1d47022ce701c2661c1402c4ee91ca2ec636fcce4f24716ec1005316979999bb6c133904e782c5713340b8b25d2858daf9751b46d4dc087ca05ffd7f1282e896ab7d9bab2c07618a5767e83e138e9520243b7edb8633ee55009e8b49034e368b71d1e99e82806acedf5359c9482ea1fc64a23d9f56aeeb43d2e74dc5a61540306beddb0fc33dd307358cf71a7d272eec83180fc1a9dcc4d851210bb5b
e = 0x8c18551fe9d81b0375566d67395d829dbc35a4f16daac6275e44c0ebd8ac4f430d8cdbdb8892122f32062844a4dc536b8a884e4f386e8615c4634fb5fd3e4a81b307b5bae7957c7db5c889350a3ab753449274bd2eeca3f7a96f06d4362ec0c573f901c95218d34dd4a58d33636efa5aa10479e059bec98d63a2d668da105afbf14bb77d35b0dad94575a42a95d1e378d838f6d3031d0175981bf36d947b9d1559b0f4eae3670b847abbde8e7747b840670aa9ea085b01cbbb287af86cee845eb8cbfbaa347ea9b8d1f832e7cac66cc2cd6d2c99a777ad3e879e6ef7c4b2cf1e72639a53a8403d01f50b62e334595a06d992ce7affb83cf2759a4a4207a83b31
c = 0x3ad58a2719d7553f584966d52193e0aed8b7d4820e4dd3100e1eb84cc44d6e21f5d992e612d90589460b65802d0d058fb1f71cd894e0f9d3709121fe2130ad33e2a1f9a843c0e030f14954d50ba3d81ffdbbe13b0eae1fbc09119fc809854352ad05afa5be16d7bf86b3c8eeb170a06e7bfa1e82689a50d53755d74a88aa0ef974097dd9d1d66d016aa76a2420eb7c1df839968fc110d445364bcb44169e5b6eff4a51c444e9a0fc2974ecbae985d360467af0d2054c57b430f2baf086a3973df4be762193fea754fdf85883c7cfc89b03fc3f1b2cdfdef79425eac99518056d9e30b41c3384ee3c74a7c9e48765372b71192831cdd2ccc6167978b78f59ccfe
d = GCD(pow(2, e, N) - 2, N)
m = pow(c, d, N)
print(long_to_bytes(m))
if __name__ == '__main__':
main()
#!/usr/bin/env python3
from Crypto.Util.number import getPrime, inverse, bytes_to_long
def generate_key(bits):
p, q = getPrime(bits), getPrime(bits)
n = p * q
phi = (p - 1) * (q - 1)
d = p
e = inverse(d, phi)
return n, e, d
def main(flag):
bits = 1024
n, e, d = generate_key(bits)
m = bytes_to_long(flag)
c = pow(m, e, n)
print('N = %s' % hex(n), end='\n\n')
print('e = %s' % hex(e), end='\n\n')
print('c = %s' % hex(c))
if __name__ == '__main__':
with open('flag.txt', 'rb') as file:
flag = file.read()
main(flag)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment