Hackear el cifrado RSA

Es posible piratear el cifrado RSA con números primos pequeños, pero se considera imposible si se usa con números grandes. Las razones que especifican por qué es difícil piratear el cifrado RSA son las siguientes:

  • El ataque de fuerza bruta no funcionaría ya que hay demasiadas claves posibles para trabajar. Además, esto consume mucho tiempo.

  • El ataque de diccionario no funcionará en el algoritmo RSA ya que las claves son numéricas y no incluyen ningún carácter.

  • El análisis de frecuencia de los caracteres es muy difícil de seguir, ya que un solo bloque cifrado representa varios caracteres.

  • No hay trucos matemáticos específicos para piratear el cifrado RSA.

La ecuación de descifrado de RSA es:

M = C^d mod n

Con la ayuda de pequeños números primos, podemos intentar piratear el cifrado RSA y el código de muestra para el mismo se menciona a continuación:

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()

Salida

El código anterior produce la siguiente salida: