Кіріспе
Толық сандарды факторлау алгоритмі
Квадраттық сүзгі алгоритмі (QS) – бүтін сандарды факторлау алгоритмі және практикада екінші ең жылдам әдіс болып табылады (жалпы сандық өріс сүзгісінен кейін). Бұл әлі де 100 ондық таңбадан аспайтын сандар үшін ең жылдам әдіс саналады және сандық өріс сүзгісіне қарағанда әлдеқайда қарапайым. Бұл жалпы мақсаттағы факторлау алгоритмі, яғни оның жұмыс істеу уақыты факторланатын санның мөлшеріне ғана байланысты, ал ерекше құрылымына немесе қасиеттеріне емес. Оны Карл Померанс 1981 жылы Шропелдің сызықтық сүзгісін жақсарту ретінде ойлап тапты.
The quadratic sieve algorithm (QS) is an integer factorization algorithm and, in practice, the second fastest method known (after the general number field sieve). It is still the fastest for integers under 100 decimal digits or so, and is considerably simpler than the number field sieve. It is a general purpose factorization algorithm, meaning that its running time depends solely on the size of the integer to be factored, and not on special structure or properties. It was invented by Carl Pomerance in 1981 as an improvement to Schroeppel's linear sieve.
Негізгі мақсат
Алгоритм n бүтін санын (факторланатын санды) модуль бойынша квадраттардың конгруэнттілігін орнатуға тырысады, бұл көбінесе n-ді факторлауға әкеледі. Алгоритм екі кезеңде жұмыс істейді: деректерді жинау кезеңі, онда квадраттардың конгруэнттілігіне алып келуі мүмкін ақпарат жиналады; және деректерді өңдеу кезеңі, онда жиналған барлық деректер матрицаға салынып, квадраттардың конгруэнттілігін алу үшін шешіледі. Деректерді жинау кезеңін көптеген процессорларға оңай параллельдеуге болады, бірақ деректерді өңдеу кезеңіне көп жад қажет, және оны көптеген түйіндерге тиімді параллельдеу қиын, әсіресе егер өңдеу түйіндерінің әрқайсысында матрицаны толығымен сақтауға жеткілікті жад болмаса. Матрицаны ұстауға қабілетті бірнеше жүйе болған жағдайда блок Видеманн алгоритмін қолдануға болады. Квадраттардың конгруэнттілігін табудың қарапайым тәсілі – кездейсоқ санды таңдап, оны квадраттап, n-ге бөліп, ең кіші теріс емес қалдықтың толық квадрат болатынына үмітттену. Мысалы, бұл тәсіл үлкен n үшін квадраттардың конгруэнттілігін сирек табады, бірақ ол бірін тапқанда, көбінесе конгруэнттілік маңызды болып шығады және факторлау аяқталады. Бұл Ферманың факторлау әдісінің негізгі принципі. Квадраттық елеуіш – Диксонның факторлау әдісінің өзгешелігі болып табылады. Квадраттық елеуіштің (n бүтін санын факторлау үшін) қажетті жалпы жұмыс уақыты L нотациясында көрсетіледі. e тұрақтысы – табиғи логарифмнің негізі.
in the L notation. The constant e is the base of the natural logarithm.
QS конгруенцияларды табуды қалай оңтайландырады
Квадраттық сырға x² ≡ y² (mod n) шартынан әлдеқайда әлсіз шартты қанағаттандыратын x және y(x) бүтін сандарының жұптарын табуға тырысады. Ол факторлық негіз деп аталатын алғашқы сандар жиынтығын таңдайды және y(x) = x² mod n қалдығының ең кіші абсолютті мәні факторлық негізге толық бөлінетіндей x-ті табуға тырысады. Мұндай y мәндері факторлық негізге қатысты тегіс деп аталады. y(x) мәнінің факторлық негізге бөлінген факторлық жіктелуі, x мәнімен бірге қатынас деп аталады. Квадраттық сырғалау x-ті n-нің квадрат түбіріне жақын алып, қатынастарды табу процесін жылдамдатады. Бұл y(x) кішірек болатынын және демек, тегіс болу мүмкіндігі жоғары болатынын қамтамасыз етеді. Бұл y шамамен 2x-ке тең екенін білдіреді. Алайда, бұл y-нің x есе n-нің квадрат түбірімен сызықтық өсетінін де білдіреді. Тегіс болу мүмкіндігін арттырудың тағы бір жолы – факторлық негіздің мөлшерін ұлғайту. Бірақ, сызықтық тәуелділіктің болуын қамтамасыз ету үшін факторлық негіздегі жай сандар санынан кем дегенде бір тегіс қатынасты табу қажет.
Another way to increase the chance of smoothness is by simply increasing the size of the factor base. However, it is necessary to find at least one smooth relation more than the number of primes in the factor base, to ensure the existence of a linear dependency.
Сырлау арқылы тегістікті тексеру
Мұздың тегіс болуын тексерудің бірнеше тәсілі бар. Ең айқын тәсіл – сынаққа бөлу, бірақ бұл деректерді жинау кезеңіндегі жұмыс уақытын ұзартады. Тағы бір қабылданған әдіс – эллиптік қисық әдісі (ECM). Іс жүзінде, көбінесе «сілемдеу» деп аталатын процесс қолданылады. Егер f(x) біздің полиномымыз болса, онда f(x) ≡ 0 (mod p) теңдеуін x үшін шешу, y = f(x) болатын y сандарының тізбегін тудырады, олардың барлығы p-ге бөлінеді. Бұл жай санға қатысты квадрат түбірді табумен байланысты, мұндай жағдайда Шенкс-Тонелли алгоритмі сияқты тиімді алгоритмдер бар. (Дәл осы себепті квадраттық сілемдеу атауы берілген: y – x-ке қатысты квадраттық полином, ал сілемдеу процесі Эратоспеннің сілемдесі сияқты жұмыс істейді.) Сілемдеу байттардан тұратын үлкен A[] массивінің әрбір ұяшығын нөлге теңеуден басталады. Әрбір p үшін, екі түбір α және β алу үшін mod p бойынша квадраттық теңдеуді шешіп, содан кейін log(p) жуықтауын y(x) = 0 mod p болатын әрбір ұяшыққа қосыңыз, яғни A[kp + α] және A[kp + β]. Сондай-ақ, негізгі фактордың кіші дәрежештеріне бөлінетін сандарды анықтау үшін p-дің кіші дәрежештері бойынша квадраттық теңдеуді шешу қажет. Факторлық базаның соңында, A[] массивінің кез келген ұяшығында шамамен log(x² - n) шегінен жоғары мән болса, ол факторлық базаға қатысты бөлінетін y(x) мәніне сәйкес келеді. y(x)-ті бөлетін жай сандар туралы ақпарат жоғалып кеткенімен, оның тек кіші факторлары бар, ал кіші факторлары бар санды факторлауға арналған көптеген тиімді алгоритмдер бар, мысалы, кіші жай сандарға сынаққа бөлу, SQUFOF, Pollard rho және ECM, олар көбінесе бірнеше комбинацияда қолданылады. Жұмыс істейтін көптеген y(x) мәндері бар, сондықтан факторлау процесінің соңында толыққанды сенімділік қажет емес; көбінесе процестер кірістердің 5% жағдайында қате жұмыс істейді, бұл қосымша сілемдеуді қажет етеді.
Thus solving f(x) ≡ 0 (mod p) for x generates a whole sequence of numbers y for which y=f(x), all of which are divisible by p. This is finding a square root modulo a prime, for which there exist efficient algorithms, such as the Shanks–Tonelli algorithm. (This is where the quadratic sieve gets its name: y is a quadratic polynomial in x, and the sieving process works like the Sieve of Eratosthenes.) The sieve starts by setting every entry in a large array A[] of bytes to zero. For each p, solve the quadratic equation mod p to get two roots α and β, and then add an approximation to log(p) to every entry for which y(x) = 0 mod p that is, A[kp + α] and A[kp + β]. It is also necessary to solve the quadratic equation modulo small powers of p in order to recognise numbers divisible by small powers of a factor base prime. At the end of the factor base, any A[] containing a value above a threshold of roughly log(x2−n) will correspond to a value of y(x) which splits over the factor base. The information about exactly which primes divide y(x) has been lost, but it has only small factors, and there are many good algorithms for factoring a number known to have only small factors, such as trial division by small primes, SQUFOF, Pollard rho, and ECM, which are usually used in some combination. There are many y(x) values that work, so the factorization process at the end doesn't have to be entirely reliable; often the processes misbehave on say 5% of inputs, requiring a small amount of extra sieving.
Негізгі сырғаның үлгісі
Бұл мысал логарифмдік оңтайландырулар немесе жай санның дәрежелері қолданбастан стандартты квадраттық елеуді көрсетеді. Бөлінетін сан N = 15347 болсын, демек N түбірінің жоғары шегі 124-ке тең. N кішкентай болғандықтан, қарапайым көпмүшелік жеткілікті: y(x) = (x + 124)2 − 15347.
Көптік көптік
Іс жүзінде y үшін көптеген түрлі полиномиалдар қолданылады, себебі әдетте бір ғана полиномиал факторлық негізге тегіс жеткілікті (x, y) жұптарды қамтамасыз ете алмайды. Қолданылатын полиномиалдардың арнайы түрі болуы керек, өйткені олар n модулі бойынша квадраттар болуы тиіс. Полиномиалдардың бәрі бастапқы y(x) = x² − n түріне ұқсас болуы керек: Егер A-ның еселігі деп есептесек, онда y(x) полиномиалын былай жазуға болады. Егер A квадрат болса, онда тек сол факторды қарастыру жеткілікті. Бұл тәсіл (MPQS, Көпполиномиалды квадраттық елеу) параллель өңдеуге өте ыңғайлы, себебі факторлауға қатысатын әрбір процессорға n, факторлық негіз және полиномиалдар жиынтығы беріледі, ал ол өзінің полиномиалдарын аяқтамайынша орталық процессормен байланысқа түсудің қажеті болмайды.
Assuming is a multiple of A, so that the polynomial y(x) can be written as If A is a square, then only the factor has to be considered. This approach (called MPQS, Multiple Polynomial Quadratic Sieve) is ideally suited for parallelization, since each processor involved in the factorization can be given n, the factor base and a collection of polynomials, and it will have no need to communicate with the central processor until it is finished with its polynomials.
Бір үлкен пропорционалды сан
Егер А-дан кіші барлық көбейткіштерге бөлгеннен кейін санның қалған бөлігі (кофактор) А²-ден кіші болса, онда бұл кофактор жай сан болуы керек. Іс жүзінде, оны кофактор бойынша қатынастар тізімін реттеу арқылы факторлық базаға қосуға болады. Егер y(a) = 7*11*23*137 және y(b) = 3*5*7*137 болса, онда y(a)y(b) = 3*5*11*23 * 7² * 137². Бұл, іріктеу массивіндегі жазбалардың шекті мәнін төмендету арқылы жұмыс істейді, одан жоғары толық факторлау орындалады.
Үлкен жай сандар
Шешімді одан да төмендету және y(x) мәндерін тіпті салыстырмалы түрде үлкен жай сандардың көбейтінділеріне жіктеу үшін тиімді әдіс қолдану – ЭКМ осы үшін өте жақсы. Ол факторлық базада көптеген факторлары бар қатынастарды таба алады, бірақ олардың ішінде екі немесе тіпті үш үлкен жай сан да болуы мүмкін. Циклді табу бірнеше жай санмен ортақ қатынастар жиынтығын бір қатынасқа біріктіруге мүмкіндік береді.
Факторингті есепке алу
Сандық өріс сырғалау (NFS) ашылғанға дейін QS асимптотикалық тұрғыдан ең жылдам жалпы мақсаттағы факторлау алгоритмі болды. Қазір Ленстра эллиптік қисық факторлауы QS-пен бірдей асимптотикалық жұмыс уақытына ие (егер n дәл екі тең өлшемдегі жай санға ие болса), бірақ практикада QS жылдамырақ, себебі ол эллиптік қисық әдісінде қолданылатын көп дәлдік операцияларының орнына бір дәлдік операцияларын қолданады. 1994 жылдың 2 сәуірінде QS арқылы RSA 129 санының факторлары табылды. Бұл 129 таңбалы сан, екі үлкен жай санның көбейтіндісі, біреуі 64 таңбалы, екіншісі 65 таңбалы. Осы факторлау үшін факторлық база 524339 жай санды қамтыды. Деректерді жинау кезеңі 5000 MIPS жылға созылды және ол Интернет арқылы үлестірілген түрде жүзеге асырылды. Жиналған деректердің көлемі 2 ГБ құрады. Деректерді өңдеу кезеңі Bellcore (қазір Telcordia Technologies) MasPar (массивті параллель) суперкомпьютерінде 45 сағатқа созылды. Бұл NFS арқылы RSA 130 санының факторлары табылғанға дейін жалпы мақсаттағы алгоритммен ең үлкен жарияланған факторлау болды, ол 1996 жылдың 10 сәуірінде аяқталды. Содан бері факторланған барлық RSA сандары NFS арқылы факторланды. Қазіргі QS факторлау рекорды – 140 таңбалы (463 бит) RSA 140 саны, оны Патрик Консор 2020 жылдың маусым айында 6 күн ішінде шамамен 6000 процессорлық сағатты пайдаланып факторлады.