Saturday, June 17, 2017

Write Up SlashRoot - RSA

June 17, 2017

RSA (100pts) 

N = 1799159815596838211639026598242739
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}

Written by

aringan komputer (jaringan) adalah sebuah sistem yang terdiri atas dua komputer atau lebih yang didesain untuk dapat berbagi sumber daya ...

0 comments:

 

© 2015 Learning Basic Network. All rights resevered. Designed by Templateism

Back To Top