B = {p :
p neparan prost broj, p
≤
P,
= 1}
{2},
S = {t2 - n :
√n
+ 1 ≤ t
≤
√n
+ A},
Glavna ideja ove metode je da umjesto da za svaki
s
S
djeljeći ga s prostim brojevima
p
B provjeravamo
da li je B-broj,
mi uzimamo jedan po jedan p
B i ispitujemo
djeljivost sa p za sve s
S.
Odavde dolazi i naziv "sito", po analogiji s
Eratostenovim sitom
za generiranje tablice prostih brojeva. Opisat ćemo glavne korake
u faktorizaciji neparnog složenog broja n metodom kvadratnog sita (QS),
slijedeći [Koblitz:
A Course in Number Theory and Cryptography, Poglavlje V.5].
2. Za t =
√n
+ 1,
√n
+ 2, ... ,
√n
+ A,
napravimo listu brojeva t2 - n
(i stavimo ih u jedan stupac).
3. Za svaki prost broj p ≤ P, provjerimo da li je (n/p) = 1. Ako nije, izbacimo p iz faktorske baze.
4. Za neparan prost broj p takav da je
(n/p) = 1, rješavamo kongruenciju
t2
n
(mod p
)
za β
= 1, 2, ... . Neka je β
najveći prirodan broj za kojeg postoji t,
√n
+ 1 ≤ t
≤
√n
+ A
n
(mod p
).
Neka su t1 i t2 dva
rješenja od
t2
n
(mod p
)
takva da je
t2
-t1 (mod p
) (t1 i
t2 nisu nužno iz S).
5. Za p iz točke 4., pogledamo listu iz
točke 2. U stupcu ispod p stavimo broj 1 kod svih
vrijednosti od t2 - n kod kojih
p|(t - t1); promijenimo 1 u 2
kod onih kod kojih
p2|(t - t1);
promijenimo 2 u 3 ako p3|(t -
t1), itd. sve do
p
.
Potom napravimo sve isto s t2
umjesto t1. Najveći broj koji će se pojaviti u ovom
stupcu bit će β.
6. Svaki put kad u točki 5. stavimo broj 1 ili promijenimo 1 u 2, ili 2 u 3, ili itd., podijelimo odgovarajući t2 - n sa p i zabilježimo rezultat.
7. U stupcu ispod p = 2, ako
n
1 (mod 8),
onda stavimo broj 1 kod svih t2 - n u kojima
je t neparan, te podijelimo t2 - n
s 2. Ako je n
1 (mod 8), onda rješavamo kongruenciju
t2
n
(mod 2
)
i radimo sve isto kao za neparne p (osim što će za
β ≥ 3
biti 4 različita rješenja t1,
t2, t3, t4
modulo 2
).
8. Kad završimo sa svim prostim brojevima p
≤ P,
odbacimo sve t2 - n,
osim onih koji su postali jednaki 1 nakon
dijeljenja sa svim potencijama prostih brojeva
p ≤ P.
Dobit ćemo tako tablicu kao u Primjeru 4.5, u kojoj će stupac koji
odgovara bi imati vrijednosti elemenata
t2 - n iz S koji su
B-brojevi,
a ostali stupci će odgovarati vrijednostima p
P za koje je (n/p) = 1.
9. Ostatak postupka je isti kao kod Fermatove faktorizacije.
Primjer 4.7: Neka je n = 1042387.
Uzmimo P = 50 i A = 500.
Ovdje je
√n
= 1020. Naša faktorska baza
se sastoji od 8 prostih brojeva {2, 3, 11, 17, 19, 23, 43, 47}.
Budući da je n
1 (mod 8), u stupcu pod p = 2
stavljamo 1 kod svih neparnih brojeva između 1021 i 1520.
Opisat ćemo detaljno formiranje stupca pod p = 3. Želimo
naći rješenje
t1 = t1,0 +
t1,1 . 3 +
t1,2 . 32 + ... +
t1,β-1 .
3β-1 kongruencije
1042387
(mod 3β),
{0, 1, 2}. Možemo uzeti t1,0 =1.
Modulo 9 imamo:
(1 + 3t1,1)2
7 (mod 9), odakle je t1,1 = 1.
Modulo 27 imamo: (1 + 4 + 9t1,2)2
25 (mod 27), odakle je t1,2 = 2.
Nastavljajući ovaj postupak do 37,
dobivamo t1 = (210211)3 =
589 mod 37. Budući da je
589 < 1021, a 37 - 589 = 1598 > 1520,
zaključujemo da je
β = 6
i možemo uzeti t1 = 589
1318 (mod 36)
i t2 = 36 - 589 = 140
(t2
1112 (mod 35)).
Sada konstruiramo "sito" za p = 3. Krenuvši od 1318,
skačemo za po 3 broja na dolje do 1021 i na gore do 1519, te svaki put
stavimo broj 1 u stupac i podijelimo odgovarajući
t2 - n sa 3. Tada napravimo
sve isto sa skokovima po 9, 27, 81, 243 i 729 brojeva
(u stvari, za 729 nemamo skokova, već samo promijenimo 5 u 6
kod 1318 i podijelimo 13182 - 1042387 još jednom sa 3). Nakon toga ponovimo sve krenuvši u skokove od 1112, umjesto 1318.
Ovaj put se zaustavljamo kod skoka za 243 brojeva.
Nakon što ovaj postupak primijenimo na preostalih 6 brojeva u
faktorskoj bazi, dobit ćemo tablicu 500 × 8 u kojoj retci
odgovaraju t-ovima između 1021 i 1520. Izbacimo li sve retke
za koje se t2 - n nije reducirao na 1, tj.
zadržimo li samo one retke za koje je t2 -
n B-broj,
dobivamo sljedeću tablicu:
| t | t2 - n | 2 | 3 | 11 | 17 | 19 | 23 | 43 | 47 | ||
| 1021 | 54 | 1 | 3 | ||||||||
| 1027 | 12342 | 1 | 1 | 2 | 1 | ||||||
| 1030 | 18513 | 2 | 2 | 1 | |||||||
| 1061 | 83334 | 1 | 1 | 1 | 1 | 1 | |||||
| 1112 | 194157 | 5 | 1 | 1 | |||||||
| 1129 | 232254 | 1 | 3 | 1 | 1 | 1 | |||||
| 1148 | 275517 | 2 | 3 | 1 | |||||||
| 1175 | 338238 | 1 | 2 | 1 | 1 | 1 | |||||
| 1217 | 438702 | 1 | 1 | 1 | 2 | 1 | |||||
| 1390 | 889713 | 2 | 2 | 1 | 1 | ||||||
| 1520 | 1268013 | 1 | 1 | 2 | 1 |
Sada tražimo relacije modulo 2 između redaka u ovoj matrici. Jedan takav slučaj nalazimo u prva tri retka. Tako dobivamo
(1021 · 1027
· 1030)2
(2 · 33
· 112 · 17)2 (mod 1042387).
111078 (mod 1042387), tako da ne dobivamo ništa korisno.
Međutim, ako kombiniramo peti i zadnji redak, dobivamo
(1112 · 1520)2
(33 · 17
· 23 · 47)2
(mod 1042387), tj.
6478532
4961792 (mod 1042387),
Očekivani broj operacija metodom kvadratnog sita je
Trenutno najbolja poznata metoda faktorizacije je metoda
sita polja brojeva (number field sieve) koja kombinira ideje iz
metode kvadratnog sita i algebarsku teoriju brojeva. Kod ove
metode je očekivani broj operacija
+ 1.
Ovom su metodom faktorizirani brojevi
iz natječaja RSA Factoring Challenge:
RSA-130 (1996. godine), RSA-140, RSA-155 (oba 1999.),
RSA-160, RSA-576 (oba 2003.), RSA-200, RSA-640 (oba 2005.).
Npr. broj RSA-200 ima 200 znamenaka, dok broj RSA-640 ima 640 bitova (193 znamenke)
(terminologija sa znamenaka na bitove je promijenjena 2001. godine).
Brojevi su dizajnirani tako da slijede pravila za odabir modula
u RSA algoritmu, te uspjesi u njihovoj faktorizaciji daju dobru
informaciju o tome koliko velik RSA modul bi trebalo birati da bi
nam komunikacija bila sigurna (danas, ali i u skoroj budućnosti).
Broj RSA-640 je u studenom 2005. godine faktorizirala grupa
njemačkih istraživača (Bahr, Boehm,
Franke, Kleinjung). Evo tog broja i
njegove faktorizacije:
3107418240490043721350750035888567930037346022842727545720161948823206440518081504556346829671723\
286782437916272838033415471073108501919548529007337724822783525742386454014691736602477652346609 =
1634733645809253848443133883865090859841783670033092312181110852389333100104508151212118167511579
× 1900871281664822113126851573935413975471896789968515493666638539088027103802104498957191261465571.
| Web stranica kolegija Kriptografija | Andrej Dujella - osobna stranica |