Meretas Cipher RSA

Meretas sandi RSA dimungkinkan dengan bilangan prima kecil, tetapi dianggap tidak mungkin jika digunakan dengan bilangan besar. Alasan yang menentukan mengapa sulit untuk meretas cipher RSA adalah sebagai berikut -

  • Serangan brute force tidak akan bekerja karena ada terlalu banyak kemungkinan kunci untuk dikerjakan. Juga, ini menghabiskan banyak waktu.

  • Serangan kamus tidak akan bekerja dalam algoritma RSA karena kuncinya adalah numerik dan tidak menyertakan karakter apa pun di dalamnya.

  • Analisis frekuensi karakter sangat sulit diikuti karena satu blok terenkripsi mewakili berbagai karakter.

  • Tidak ada trik matematika khusus untuk meretas cipher RSA.

Persamaan dekripsi RSA adalah -

M = C^d mod n

Dengan bantuan bilangan prima kecil, kita dapat mencoba meretas cipher RSA dan kode sampelnya disebutkan di bawah ini -

def p_and_q(n):
   data = []
   for i in range(2, n):
      if n % i == 0:
         data.append(i)
   return tuple(data)

def euler(p, q):
   return (p - 1) * (q - 1)

def private_index(e, euler_v):
   for i in range(2, euler_v):
      if i * e % euler_v == 1:
         return i

def decipher(d, n, c):
   return c ** d % n
	def main():
      e = int(input("input e: "))
      n = int(input("input n: "))
      c = int(input("input c: "))
      
      # t = 123
      # private key = (103, 143)
      p_and_q_v = p_and_q(n)
      # print("[p_and_q]: ", p_and_q_v)
      euler_v = euler(p_and_q_v[0], p_and_q_v[1])
      
      # print("[euler]: ", euler_v)
      d = private_index(e, euler_v)
      plain = decipher(d, n, c)
      print("plain: ", plain)
if __name__ == "__main__":
   main()

Keluaran

Kode di atas menghasilkan keluaran sebagai berikut -