RSA (100pts)
N = 1799159815596838211639026598242739
e = 200917020563208190152062461460131
c = 318686567182196523307366910641013
*format flag : SlashRootCTF{flag}
e = 200917020563208190152062461460131
c = 318686567182196523307366910641013
*format flag : SlashRootCTF{flag}
Hint! Hasil perlu diconvert ke ascii
v Deskripsi
Peserta diberi sebuah soal kriptograpi RSA dimana N merupakan modulus, e merupakan exponen, serta c merupakan chipernya.
v Penyelesaian
Pertama kita harus mendapatkan faktor dari modulus N yaitu p q. Untuk mencarinya dengan cepat kita gunakan tools online factordb.com.
p = 19900922910223213
q = 90405848196748703
Setelah itu di lakukan proses pembangkita private d, dan melakukan proses dekripsi pesan. Script kurang lebih seperti berikut.
from Crypto.Util.number import inverse
class Stack:
def __init__(self):
self.items = []
def item(self):
return self.items
def isEmpty(self):
return self.items == []
def push(self, item):
self.items.insert(0,item)
def pop(self):
return self.items.pop(0)
def peek(self):
return self.items[0]
def size(self):
return len(self.items)
def calculate_privkey(p, q, e):
phi = (p-1) * (q-1)
d = inverse(e, phi)
return d
def long_ascii_to_binary(M):
tmp_flag = Stack()
for i in str(M)[::-1]:
tmp_flag.push(i)
flag_assci = []
while not tmp_flag.isEmpty():
if int(tmp_flag.peek()) == 1:
flag_assci.append(int(tmp_flag.pop()+tmp_flag.pop()+tmp_flag.pop()))
elif int(tmp_flag.peek()) != 1:
flag_assci.append(int(tmp_flag.pop()+tmp_flag.pop()))
return ''.join(chr(x) for x in flag_assci)
def main():
#modulus
N = 1799159815596838211639026598242739
#public exponent
e = 200917020563208190152062461460131
#chiper
C = 318686567182196523307366910641013
#factor
p = 19900922910223213
q = 90405848196748703
#private
d = calculate_privkey(p, q, e)
#decript
M = pow(C, d, N)
print long_ascii_to_binary(M)
if __name__ == '__main__':
main()
Flagnya dari tantangan ini adalah SlashRootCTF{1N1_312354h4h4}
0 comments:
Post a Comment