SHARE
TWEET

Untitled

a guest Mar 27th, 2011 249 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/python
  2.  
  3. # PoC de cracker de password privada a partir de la publica (en RSA)
  4. # Primero : se factoriza el modulo N
  5. # Segundo : se calcula el phi(N)
  6. # Tercero : se busca el inverso de e en modulo phi(N) (esta es d)
  7. # Cuarto : se muestra todo.
  8.  
  9. import sys, math
  10.  
  11. def usage():
  12.   print sys.argv[0]," <e> <N> "
  13.  
  14. def factorizar(numero, listaDeDivisores):
  15.   for testNumber in range(2,int(math.sqrt(float(numero))+1))[::-1]:
  16.     if numero%testNumber == 0:
  17.        listaDeDivisores.append(testNumber)
  18.        return factorizar(numero/testNumber, listaDeDivisores)
  19.   listaDeDivisores.append(numero)
  20.   return listaDeDivisores
  21.  
  22. if len(sys.argv) != 3 :
  23.   usage()
  24.   exit()
  25. try:
  26.   KeyE = int(sys.argv[1])
  27.   KeyN = int(sys.argv[2])
  28. except:
  29.   print "Ambos <e> y <N> tienen que ser numeros"
  30.  
  31. #### Factorizacion de N #######
  32. print "[+] Factorizando N ..."
  33. factoresDeN = factorizar(KeyN, [])
  34. print "[+] Factorizacion completada "
  35. if (len(factoresDeN) != 2):
  36.   print "El numero N que suministraste no es el producto de dos primos "
  37.   print "Finalizando ... "
  38.   exit()
  39. #### Fin de factorizacion de N #####
  40.  
  41.  
  42. ##### Calculo de phi(N) ########
  43. # print "Los factores {primos} son ",factoresDeN[0]," y ",factoresDeN[1]
  44. PhiN =  (factoresDeN[0]-1)*(factoresDeN[1]-1)
  45. print "[+] phi(N) calculado"
  46. # print "Phi(N)= ",PhiN
  47. ##### Fin del calculo de phi(N) #####
  48. # ed = 1 mod PhiN
  49. # ed = PhiNk + 1
  50.  
  51.  
  52. #### Busqueda del inverso modular de e en phi(N) ####
  53. kMaximo = KeyE*PhiN/PhiN-1
  54. print "[+] Buscando el inverso modular de ",KeyE," en modulo ", PhiN
  55. for posibleK in range(kMaximo):
  56.   test = ((posibleK*PhiN)+1)/KeyE
  57.   if (test*KeyE)%PhiN == 1:
  58.     KeyD = test
  59.     print "[+] Inverso modular encontrado"
  60.     print ""
  61.     print "Conseguido! la clave privada esta formada por la dupla (",KeyD,",",KeyN,")"
  62.     exit()
  63. print "Lo siento, fue imposible calcular la clave privada"
RAW Paste Data
Top