jukaukor

RSA_from_PublicKey_to_PrivateKey.jl

Sep 4th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. # RSA_from_PublicKey_to_PrivateKey.jl
  2. # Julia-ohjelma murtaa RSA-salausmenetelmän julkisen avaimen n laskemalla
  3. # sen alkulukutekijat p ja q.
  4. # Näiden tekijöiden p ja q sekä julkisen eksponentin e avulla ohjelma
  5. # laskee privaatin eli salaisen purkuavaimen d.
  6. # Juhani Kaukoranta 4.9.2019
  7. function PollardRho(n)
  8. x, y, p = 2, 2, 1
  9. f(x) = mod(x^2+1, n)
  10. while p == 1
  11. x = f(x)
  12. y = f(f(y))
  13. p = gcd(abs(x-y),n)
  14. end
  15. if p == n
  16. println( "Ei tekijöitä, avain alkuluku tms")
  17. else
  18. q = div(n,p)
  19. println("Avaimen ",n," tekijät:")
  20. println(p," ja ",q)
  21. return p,q
  22. end
  23. end
  24.  
  25. # Julkinen avain n
  26. n = parse(BigInt,"9467654010638058611")
  27. println("Julkinen avain n = ",n)
  28. println("Julkisen avaimen bittipituus = ",round(Int,log2(n)))
  29. println("Julkisen avaimessa 10-järjestelmän numeroita = ",ndigits(n))
  30.  
  31. # Lasketaan julkisen avaimen alkulukutekijat p ja q
  32. p, q = PollardRho(n)
  33.  
  34. e = 65537 # sertifioitu exponentti toimii toisena julkisena avaimena
  35. println("Alkuluku p = ",p)
  36. println("Alkuluku q = ",q)
  37. println("Julkinen avain = ",n)
  38. println("Tarkistus p*q = n = ",p*q)
  39. println("Julkinen eksponentti e = ",e)
  40.  
  41. # Nyt meillä on julkinen eksponentti e ja avaimen alkulukutekijät p ja q
  42. # Lasketaan näiden avulla salauksen privaatti purkuavain d
  43. # Tarvitaan funktiot least common multiple lcm(a,b)
  44. # ja modular inverse invmod(a,b)
  45. # lasketaan Carmichaelin totientti lcm(p-1,q-1)
  46. totient = lcm(p-1,q-1)
  47. println("Carmichael's totient = ",totient)
  48. d = invmod(e,totient)
  49.  
  50. # yhtälöstä d * e = 1 mod moduli ratkaistiin d
  51. println("Tarkistus, onko d * e ≡ 1 (mod totient)")
  52. println("d * e mod totient = ",mod(d*e,totient))
  53. println("Salauksen privaatti purkuavain d = ",d)
  54. println()
Advertisement
Add Comment
Please, Sign In to add comment