Scomposizione dei numeri RSA per differenza del fattore

Scomposizione dei numeri RSA per differenza del fattore
minore
Di Cristiano Armellini, [email protected]
Supponiamo di considerare il classico problema RSA ovvero di decomporre un numero molto
grande intero n nei due suoi fattori primi p e q, n=pq. Supponiamo anche che p < q e ovviamente
2 < p < n , n < q < n / 2 , allora possiamo avere solo due casi:
Caso A) q − p > p ovvero q − p = p + d cioè q = 2 p + d . Sostituendo nella relazione n = pq
− d ± d 2 + 8n
otteniamo l’equazione di II grado 2 p + pd − n = 0 che si risolve con p =
4
2
dove d è necessariamente dispari (la differenza tra due numeri primi dispari è sempre un numero
pari) e d <
n (d=3, 5, 7, 9, 11, …..)
Caso B) q − p < p ovvero q − p = p − d quindi q = 2 p − d e sostituendo come sopra nella
d ± d 2 + 8n
relazione n = pq otteniamo ( 2 p − d ) p = n cioè 2 p − pd − n = 0 , p =
con d
4
2
dispari per i motivi sopra detti e sempre minore di radice quadrata di n.
Per un attacco serio occorrerà quindi aizzare parallelamente i due casi A) e B) e provare i valori di d
sia da sinistra verso destra (valori crescenti dall’estremo inferiore a quello superiore) sia da destra
verso sinistra (valori decrescenti dall’estremo superiore a quello inferiore).
Questo algoritmo risulta comunque particolarmente semplice da programmare in C/C++ , in
PARI/GP o i Python.
Come già avvenuto in altri casi possiamo generalizzare il metodo introducendo il fattore k, un
metodo che verrà utilizzato per l'implementazione dei sistemi di calcolo parallelo e quindi per
accelerare la ricerca delle soluzioni per numeri particolarmente grandi.
- CASO A) q − p = kp + d q = p (k + 1) + d , n = pq quindi p ( p (k + 1) + d ) = n ovvero
p 2 (k + 1) + pd − n = 0 cioè p =
− d ± d 2 + 4n(k + 1)
, k=1, 2, 3, 4, 5, ... Dove se k è dispari allora d
2(k + 1)
è dispari mentre se k è pari d deve essere pari.
- CASO B) q − p = kp − d q = p (k + 1) − d , n = pq quindi p ( p (k + 1) − d ) = n ovvero
d ± d 2 + 4n(k + 1)
p (k + 1) − pd − n = 0 cioè p =
, k=1, 2, 3, 4, 5, ... Dove se k è dispari allora d è
2(k + 1)
2
dispari mentra se k è pari d deve essere pari.
La scelta di l è un fattore critico ma in base a considerazioni statistiche dato che negli RSA p, q
hanno di solito lo stesso ordine di grandezza possiamo considerare 1<k<99. Ad ogni calcolatore del
sistema si assegna un k e si fa variare d nei due casi A) e B).