La scomposizione dei numeri RSA

945 views

Published on

La scomposizione dei numeri RSA

Published in: Education
  • Be the first to comment

  • Be the first to like this

La scomposizione dei numeri RSA

  1. 1. La scomposizione dei numeri RSA Di Cristiano Armellini, cristiano.armellini@alice.it e Morfeo ChiesaSupponiamo di dover scomporre in fattori primi un numero intero ove p, q sono numeri primimolto grandi. Da Fermat sappiamo che ogni numero intero può essere espresso come la differenza di duequadrati , ovvero . Consideriamo due casiCaso a)Scriviamo , ovvero . Quindi dobbiamo trovare gli interi A tali che . D’altraparte sapevamo che il che porta proprio a .Nei problemi RSA i due fattori (p, q) pur essendo molto grandi in genere hanno la stessa dimensione nelsenso che sono dello stesso numero di cifre oppure differiscono al massimo di una o due cifre. Quindi detto e svolgendo o calcoli si arriva a . Ora non è detto che k sia intero tuttavia perogni k = 1,…100 possiamo considerare e quindi provare tutti gli interi A tali chefino a che anche B non è intero. E’ facile immaginare un sistema di calcolo parallelo che svolga talecompito. Ovviamente p =A+B, q = A-BVediamo una semplice applicazione in Visual Basic .netModule Module1 Sub Main() Dim n As Double Dim a, b As Double Dim c As Integer Console.Write("inserisci un intero ") n = Console.ReadLine() a = Math.Floor(Math.Sqrt(n)) b = Math.Sqrt(Math.Abs(Math.Pow(a, 2) - n)) While (b <> Math.Floor(b)) a = a + 1 b = Math.Sqrt(Math.Abs(Math.Pow(a, 2) - n)) End While Console.WriteLine(a - b) Console.WriteLine(a + b) Console.Write("inserisci un carattere per finire ") c = Console.Read End SubEnd ModuleCaso b)Scriviamo quindi con B = 0, 1, 2, 3,….. Anche qui come nell’esempio precedenteconsideriamo (ove p>q, k = 1, …100) Svolgendo i calcoli si arriva a e quindi se
  2. 2. basterà prendere in esame per ogni valore di k =1, 100 gli B interi e provarlifino a che anche A non è intero quindi p = A+B q = A-BVediamo una semplice applicazione in Visual Basic .NetModule Module1 Sub Main() Dim n As Double Dim a, b As Double Dim c As Integer Console.Write("inserisci un intero ") n = Console.ReadLine() b = 0 a = Math.Sqrt(Math.Pow(b, 2) + n) While (a <> Math.Floor(a)) b = b + 1 a = Math.Sqrt(Math.Pow(b, 2) + n) End While Console.WriteLine(a - b) Console.WriteLine(a + b) Console.Write("inserisci un carattere per finire ") c = Console.Read End SubEnd ModulePer velocizzare entrambi gli algoritmi in tutti i casi ricordiamo che i quadrati perfetti devono terminare conuna delle seguenti cifre 0, 1, 4, 5, 6, 9.

×