Piratage du chiffrement RSA

Le piratage du chiffrement RSA est possible avec de petits nombres premiers, mais il est considéré comme impossible s'il est utilisé avec de grands nombres. Les raisons qui spécifient pourquoi il est difficile de pirater le chiffrement RSA sont les suivantes -

  • L'attaque par force brute ne fonctionnerait pas car il y a trop de clés possibles pour travailler. En outre, cela prend beaucoup de temps.

  • L'attaque par dictionnaire ne fonctionnera pas dans l'algorithme RSA car les clés sont numériques et n'incluent aucun caractère.

  • L'analyse de fréquence des caractères est très difficile à suivre car un seul bloc crypté représente différents caractères.

  • Il n'y a pas d'astuces mathématiques spécifiques pour pirater le chiffrement RSA.

L'équation de décryptage RSA est -

M = C^d mod n

À l'aide de petits nombres premiers, nous pouvons essayer de pirater le chiffrement RSA et l'exemple de code pour le même est mentionné ci-dessous -

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

Production

Le code ci-dessus produit la sortie suivante -