ikinci dereceden elek - Quadratic sieve

İkinci dereceden elek algoritması ( QS ) bir tamsayı çarpanlara ayırma algoritmasıdır ve pratikte bilinen en hızlı ikinci yöntemdir ( genel sayı alanı elekten sonra ). 100 ondalık basamağın altındaki tamsayılar için hala en hızlısıdır ve sayı alanı süzgecinden çok daha basittir. Genel amaçlı bir çarpanlara ayırma algoritmasıdır, yani çalışma süresinin özel yapı veya özelliklere değil, yalnızca çarpanlara ayrılacak tamsayının boyutuna bağlı olduğu anlamına gelir . 1981'de Carl Pomerance tarafından Schroeppel'in lineer eleğine bir iyileştirme olarak icat edildi .

Temel amaç

Algoritma , modulo n karelerinin (faktörleştirilecek tam sayı) uyumunu kurmaya çalışır , bu da genellikle n'nin çarpanlara ayrılmasına yol açar . Algoritma iki aşamada çalışır: karelerin uyumuna yol açabilecek bilgileri topladığı veri toplama aşaması; ve topladığı tüm verileri bir matrise koyduğu ve bir kareler uyumu elde etmek için çözdüğü veri işleme aşaması . Veri toplama aşaması birçok işlemciye kolayca paralel hale getirilebilir , ancak veri işleme aşaması büyük miktarda bellek gerektirir ve birçok düğüm üzerinde veya işleme düğümlerinin her birinin tüm matrisi depolamak için yeterli belleği yoksa verimli bir şekilde paralelleştirilmesi zordur. Blok Wiedemann algoritması matrisi tutan her edebilen bir kaç sistemler durumunda kullanılabilir.

Karelerin uyumunu bulmanın naif yaklaşımı, rastgele bir sayı seçmek, karesini almak, n'ye bölmek ve negatif olmayan en küçük kalanın tam kare olmasını ummaktır . Örneğin, . Bu yaklaşım, büyük n için yalnızca nadiren bir kareler uyumu bulur , ancak bir tane bulduğunda, çoğu zaman değil, uygunluk önemsizdir ve çarpanlara ayırma tamamlanır. Bu kabaca Fermat'ın çarpanlara ayırma yönteminin temelidir .

İkinci dereceden elek, Dixon'ın çarpanlara ayırma yönteminin bir modifikasyonudur .

İkinci dereceden elek için gereken genel çalışma süresi (bir n tamsayısını çarpanlara ayırmak için )

içinde L-gösterimde .

e sabiti , doğal logaritmanın tabanıdır.

Yaklaşım

n tamsayısını çarpanlara ayırmak için , Fermat'ın yöntemi a , n 1/2 <a<n-1 tek bir sayının aranmasını gerektirir , öyle ki a 2 bölü n'nin kalanı bir kare olur. Ama bunlar bir bulmak çok zor. İkinci dereceden elek geri kalan işlem oluşur , bir 2 / n bazıları için a , o halde ürün bir kare bunların bir alt grubunu bulmak. Bu, karelerin bir uyumunu verecektir.

Örneğin, 1649 sayısını çarpanlarına ayırmayı düşünün . Elimizde: . Tam sayıların hiçbiri kare değildir, ancak ürün bir karedir. biz de vardı

beri . Böylece karelerin uyumunu veren gözlem

Bu nedenle bazı tamsayılar için . O zaman faktör yapabiliriz

En büyük ortak böleni hesaplamak için Öklid algoritmasını kullanmak .

Böylece problem şuna indirgenmiştir: Verilen bir tamsayı kümesi, çarpımı kare olan bir alt küme bulun. By aritmetiğin temel teoremi , herhangi bir pozitif tamsayı asal güçlerin ürünü olarak benzersiz yazılabilir. Bunu vektör formatında yapıyoruz; örneğin, 504'ün asal-güç çarpanlarına ayırması 2 3 3 2 5 0 7 1'dir , bu nedenle üs vektörü (3,2,0,1) ile temsil edilir. İki tamsayıyı çarpmak, üs vektörlerini toplamaya karşılık gelir. Üs vektörü her koordinatta çift olduğunda bir sayı bir karedir. Örneğin, (3,2,0,1) + (1,0,0,1) = (4,2,0,2) vektörleri, yani (504)(14) bir karedir. Bir kare aramak için sadece vektörlerdeki sayıların paritesinin bilinmesi gerekir , bu yüzden bu vektörleri hesaplamak yeterlidir mod 2: (1,0,0,1) + (1,0,0,1) = (0 ,0,0,0). O halde (0,1) vektörlerinden oluşan bir set verildiğinde, sıfır vektör mod 2'ye ekleyen bir altküme bulmamız gerekiyor .

Bu bir lineer cebir problemidir, çünkü halka 2. dereceden Galois alanı olarak kabul edilebilir , yani modulo 2'yi hesaplarken sıfır olmayan tüm sayılara (sadece bir tane vardır, yani 1) bölebiliriz. Bu bir teoremdir. Her vektörden daha fazla vektör girişi olan lineer cebir , lineer bir bağımlılık her zaman mevcuttur. Gauss eliminasyonu ile bulunabilir . Bununla birlikte, mod n birçok rasgele sayının karesini almak, çok fazla sayıda farklı asal faktör ve çok uzun vektörler ve çok büyük bir matris üretir. Hile numaraları için özel olarak bakmaktır bir şekilde bir 2 mod n sadece küçük asal çarpanları (bunlar vardır pürüzsüz sayılar ). Bulmak daha zordur, ancak yalnızca düzgün sayılar kullanmak vektörleri ve matrisleri daha küçük ve daha izlenebilir tutar. İkinci dereceden elek , algoritmanın adını aldığı, daha sonra tartışılacak olan eleme adı verilen bir teknik kullanarak düzgün sayıları arar .

algoritma

Özetlemek gerekirse, temel ikinci dereceden elek algoritması şu ana adımlara sahiptir:

  1. Bir pürüzsüzlük sınırı seçin B . Sayı π ( B ), asal sayıların sayısını gösteren daha B , vektör uzunluğunu ve gerektiğinde vektörlerin sayısını hem de kontrol eder.
  2. (Π bulmak için elekten kullanım B + 1 numara) bir i şekilde b ı (= bir i 2 mod N ) 'dir B Pürüzsüz.
  3. Faktör B i ve üstel vektörler oluşturmak her biri için 2 mod.
  4. Sıfır vektörüne eklenen bu vektörlerin bir alt kümesini bulmak için lineer cebir kullanın. Karşılık gelen a i'yi birlikte çarpın ve sonucu mod n'ye a adını verin ; benzer şekilde, b i ile çarpın, bu da bir B -düz kare b 2 verir .
  5. Şimdi elimizde iki karekök ( a 2 mod n ) elde ettiğimiz a 2 = b 2 mod n eşitliği kaldı , bunlardan biri b 2 tamsayılarının karekökünü yani b , diğeri ise a hesaplandı. 4. adımda
  6. Artık istenen kimliğe sahibiz: . n'nin GCD'sini a ve b farkı (veya toplamı) ile hesaplayın . Bu, önemsiz bir faktör ( n veya 1) olmasına rağmen bir faktör üretir . Faktör önemsizse, farklı bir doğrusal bağımlılık veya farklı bir a ile tekrar deneyin .

Bu makalenin geri kalanında bu temel algoritmanın ayrıntıları ve uzantıları açıklanmaktadır.

Algoritmanın sözde kodu

algorithm Quadratic sieve is
    Choose smoothness bound 
    let 

    for  do
        Choose 
        
         (where )
        while (check-p_t-smooth(b_i) = false) do
            Let 
            Find 
            let 
            let 
            if  and  then
                return to main loop.
            else if :
                return gcd(x - y, n) , gcd(x + y, n)

QS, uygunluk bulmayı nasıl optimize eder?

İkinci dereceden elek girişimler tam sayı çiftleri bulmak x ve y (x) ( y (x) bir fonksiyonu olan x çok daha zayıf koşulu) x 2y 2 (mod n ). Faktör tabanı olarak adlandırılan bir dizi asal sayı seçer ve x'i , y(x) = x 2 mod n'nin en küçük mutlak kalanının faktör tabanı üzerinde tamamen çarpanlara ayrılacağı şekilde bulmaya çalışır . Bu tür y değerlerinin faktör tabanına göre düzgün olduğu söylenir .

Faktör tabanına bölünen bir y(x) değerinin x değeriyle birlikte çarpanlara ayrılmasına ilişki denir . İkinci dereceden elek, x'i n'nin kareköküne yaklaştırarak bağıntı bulma sürecini hızlandırır . Bu, y(x)'in daha küçük olmasını ve dolayısıyla pürüzsüz olma şansının daha yüksek olmasını sağlar.

Bu, y'nin 2 x [ n ] mertebesinde olduğu anlamına gelir . Bununla birlikte, y'nin x çarpı n'nin karekökü ile doğrusal olarak büyüdüğünü de ima eder .

Düzgünlük şansını arttırmanın bir başka yolu da basitçe faktör tabanının boyutunu arttırmaktır. Ancak doğrusal bir bağımlılığın varlığını sağlamak için faktör tabanındaki asal sayısından daha fazla en az bir düzgün ilişki bulunması gerekir.

Kısmi ilişkiler ve döngüler

Bazı ilişkiler için y(x) düzgün olmasa bile, eğer iki y faktör tabanı dışında aynı asal(lar)ın ürünleriyse, bu kısmi ilişkilerden ikisini tam bir tane oluşturmak için birleştirmek mümkün olabilir . [Bunun faktör tabanını genişletmekle eşdeğer olduğuna dikkat edin.] Örneğin, faktör tabanı {2, 3, 5, 7} ve n = 91 ise, kısmi ilişkiler vardır:

Bunları birlikte çarpın:

ve her iki tarafı da (11 −1 ) 2 modulo 91 ile çarpın. 11 −1 modulo 91, 58'dir, yani:

tam bir ilişki üretir. Böyle bir tam ilişkiye (kısmi ilişkilerin birleştirilmesiyle elde edilir) çevrim denir . Bazen, iki kısmi ilişkiden bir döngü oluşturmak, doğrudan karelerin uyumuna yol açar, ancak nadiren.

Eleme ile düzgünlüğü kontrol etme

Y s'nin düzgünlüğünü kontrol etmenin birkaç yolu vardır . En belirgin olanı, deneme bölümüdür , ancak bu, veri toplama aşamasının çalışma süresini artırır. Bir miktar kabul gören başka bir yöntem de eliptik eğri yöntemidir (ECM). Pratikte tipik olarak eleme adı verilen bir süreç kullanılır. Eğer f (x) polinomu olduğunu Elimizdeki

Böylece çözme f (x) ≡ 0 (mod p için) x numaralarının bütün dizisi, y olan Y = F (x) = bölünemeyen bunların hepsi, p . Bu, Shanks-Tonelli algoritması gibi verimli algoritmaların mevcut olduğu bir karekök modulo asal bulmaktır . (İkinci dereceden elek adını buradan alır: y , x cinsinden ikinci dereceden bir polinomdur ve eleme işlemi Eratosthenes Kalburu gibi çalışır .)

Elek, büyük bir A [] bayt dizisindeki her girişi sıfıra ayarlayarak başlar . Her p için , α ve β iki kök elde etmek için mod p ikinci dereceden denklemi çözün  ve ardından y ( x ) = 0 mod p ... olan her girişe log( p )'ye bir yaklaşım ekleyin ... yani, A [ kp  +  α ] ve A [ kp  +  β ]. Faktör tabanlı bir asalın küçük kuvvetleriyle bölünebilen sayıları tanımak için p'nin küçük güçleri modulo ikinci dereceden denklemini çözmek de gereklidir .

Faktör tabanının sonunda, kabaca log( x 2 -n ) eşiğinin üzerinde bir değer içeren herhangi bir A[] , faktör bazında bölünen bir y ( x ) değerine karşılık gelecektir . Asal bölmek tam olarak ilgili bilgiler y ( x ) kesildi, ancak yalnızca küçük faktörler vardır ve küçük asal, bu tür deneme bölünmesi sadece küçük faktörler, sahip olduğu bilinen bir dizi faktoring çok iyi algoritma bulunmaktadır SQUFOF , Pollard genellikle bazı kombinasyonlarda kullanılan rho ve ECM.

Çalışan birçok y ( x ) değeri vardır, bu nedenle sondaki çarpanlara ayırma işleminin tamamen güvenilir olması gerekmez; genellikle süreçler, örneğin girdilerin %5'inde hatalı davranır ve az miktarda ekstra eleme gerektirir.

Temel elek örneği

Bu örnek, logaritma optimizasyonları veya asal güçler olmadan standart ikinci dereceden elek gösterecektir. Sayı çarpanlarına Let N = 15347, bu nedenle karekökü tavan N yana 124. olan , N : küçük, bazik polinom yeterlidir y ( x ) = ( x + 124) 2 - 15347.

Veri toplama

Bu yana , N küçük, sadece 4 asal gereklidir. İlk 4 asal s 15347 kare kök mod sahip olduğu p 2, 17, 23 ve 29 olan (diğer bir deyişle, 15347 a, kuadratik kalıntı , bu asal her modulo). Bu primerler eleme için temel olacaktır.

Şimdi elekimizi oluşturuyoruz ve Y(X)'in ilk 0 ≤ X < 100'ünü elemeyi seçerek, temelde her bir prime için eleme işlemine başlıyoruz:

Bir sonraki adım elek gerçekleştirmektir. Faktör tabanımızdaki her p için denklemi çözün

p ile bölünebilen V dizisindeki girdileri bulmak için .

Çözümü elde etmek için çözmek için .

Böylece, X=1'den başlayarak ve 2 ile artırılarak, her giriş 2'ye bölünebilir olacaktır. Bu girişlerin her birini 2'ye bölmek sonuç verir

Benzer bir şekilde kalan asal için p de denklem çözülür. Her p > 2 için, 2 modüler karekök olması nedeniyle 2 lineer denklem olacağına dikkat edin.

Her bir denklem ile sonuçlanır göre olan bölünebilir p de X = bir ve her bir p ötesinde değeri verir. Bölme V ile p de bir , bir + s , bir + 2 s , bir +3 s bazında her bir asal için, vb benzersiz asal (ilk güçler) ürünleridir düz numaraları bulur.

1'e eşit olan herhangi bir V girişi düzgün bir sayıya karşılık gelir. Bu yana , ve eşit bir, bu karşılık için:

X + 124 Y faktörler
124 29 2 0 • 17 0 • 23 0 • 29 1
127 782 2 1 • 17 1 • 23 1 • 29 0
195 22678 2 1 • 17 1 • 23 1 • 29 1

matris işleme

Y özelliği ile düzgün sayılar Y bulunduğundan , algoritmanın geri kalanı, Dixon'ın çarpanlara ayırma yönteminin diğer herhangi bir varyasyonuna eşdeğer olarak takip eder .

Denklemlerin bir alt kümesinin çarpımının üslerini yazma

matris verimi olarak:

Denklemin bir çözümü sol sıfır uzayı tarafından verilir , basitçe

Böylece tüm 3 denklemin çarpımı bir kare (mod N) verir.

ve

Böylece algoritma bulundu

Sonucun test edilmesi, 15347'lik önemsiz bir faktör olan GCD(3070860 - 22678, 15347) = 103'ü verir, diğeri 149'dur.

Bu gösteri aynı zamanda ikinci dereceden elek sadece n büyük olduğunda uygun olduğunu göstermeye hizmet etmelidir . 15347 kadar küçük bir sayı için bu algoritma aşırıya kaçıyor. Deneme bölümü veya Pollard rho , çok daha az hesaplamalı bir faktör bulabilirdi.

Çoklu polinomlar

Pratikte, y için birçok farklı polinom kullanılır , çünkü sadece bir polinom tipik olarak faktör tabanı üzerinde düzgün olan yeterli ( x , y ) çiftleri sağlamayacaktır. Kullanılan polinomlar, modulo n kareleri olması gerektiğinden özel bir forma sahip olmalıdır . Polinomların tümü orijinal y ( x ) = x 2n ile benzer bir forma sahip olmalıdır :

A'nın katı olduğunu varsayarsak , y(x) polinomu olarak yazılabilir . O zaman A bir kare ise, sadece faktör dikkate alınmalıdır.

Bu yaklaşım (MPQS, Çoklu Polinom Kuadratik Elek olarak adlandırılır) paralelleştirme için idealdir , çünkü çarpanlara ayırmada yer alan her işlemciye n , faktör tabanı ve bir polinomlar topluluğu verilebilir ve merkezi işlemci ile iletişim kurmasına gerek kalmaz. polinomları bitene kadar.

Büyük asal sayılar

Bir büyük asal

, Daha kısa bir sürede tüm faktörler bölünmesi sonra, sayı (kofaktörü) geri kalan kısmı daha kısa bir sürede ise 2 , bu kofaktör asal olmalıdır. Aslında, ilişkiler listesini kofaktöre göre sıralayarak faktör tabanına eklenebilir. y(a) = 7*11*23*137 ve y(b) = 3*5*7*137 ise, o zaman y(a)y(b) = 3*5*11*23 * 7 2 * 137 2 . Bu, üzerinde tam bir çarpanlara ayırmanın gerçekleştirildiği eleme dizisindeki girişlerin eşiğini azaltarak çalışır.

Daha büyük asal sayılar

Eşiği daha da azaltmak ve y(x) değerlerini nispeten büyük asal sayıların bile çarpımlarına ayırmak için etkili bir süreç kullanmak - ECM bunun için mükemmeldir - faktör bazında faktörlerin çoğuyla ilişkiler bulabilir, ancak iki veya hatta üç büyük asal sayı. Döngü bulma daha sonra birkaç asal değeri paylaşan bir dizi ilişkiyi tek bir ilişkide birleştirmeye izin verir.

Gerçekçi örnekten parametreler

Çoklu polinom ve büyük asal optimizasyonlar dahil olmak üzere gerçek bir uygulamada gerçekçi bir örnek için tipik parametre seçimlerini göstermek için, msieve aracı 267 bitlik bir yarı asal üzerinde çalıştırılarak aşağıdaki parametreleri üretti:

  • Deneme faktoring sınırı: 27 bit
  • Elek aralığı (polinom başına): 393216 (12 blok 32768 boyutunda)
  • Düzgünlük sınırı: 1300967 (50294 asal)
  • Polinom A katsayıları için faktör sayısı : 10 ( yukarıdaki Çoklu polinomlara bakın )
  • Büyük asal sınır: 128795733 (26 bit) ( yukarıdaki Büyük asal sayılara bakın )
  • Pürüzsüz değerler bulundu: 25952 doğrudan eleyerek, 24462 sayıları büyük asal sayılarla birleştirerek
  • Son matris boyutu: 50294 × 50414, filtrelenerek 35750 × 35862'ye düşürüldü
  • Bulunan önemsiz bağımlılıklar: 15
  • Toplam süre (1.6 GHz UltraSPARC III'te): 35 dk 39 saniye
  • Kullanılan maksimum bellek: 8 MB

Faktoring kayıtları

Sayı alanı eleğinin (NFS) keşfine kadar , QS asimptotik olarak en hızlı bilinen genel amaçlı faktoring algoritmasıydı. Şimdi, Lenstra eliptik eğri çarpanlarına ayırma , QS ile aynı asimptotik çalışma süresine sahiptir ( n'nin tam olarak eşit boyutta iki asal faktöre sahip olduğu durumda ), ancak pratikte, QS, çoklu kesinlik yerine tek kesinlikli işlemleri kullandığı için daha hızlıdır. eliptik eğri yöntemi tarafından kullanılan işlemler.

2 Nisan 1994'te RSA-129'un çarpanlara ayrılması QS kullanılarak tamamlandı. Biri 64, diğeri 65 olmak üzere iki büyük asal sayının çarpımı olan 129 basamaklı bir sayıydı. Bu çarpanlara ayırmanın çarpan tabanı 524339 asal sayı içeriyordu. Veri toplama aşaması , İnternet üzerinden dağıtılmış bir şekilde yapılan 5000 MIPS yılını aldı . Toplanan verilerin toplamı 2 GB'dir . Bellcore'un (şimdi Telcordia Technologies ) MasPar (büyük ölçüde paralel) süper bilgisayarında veri işleme aşaması 45 saat sürdü . Bu, 10 Nisan 1996'da tamamlanan RSA-130'u çarpanlara ayırmak için NFS kullanılana kadar, genel amaçlı bir algoritma tarafından yayınlanan en büyük çarpanlara ayırma işlemiydi. O zamandan beri çarpanlara ayrılan tüm RSA sayıları NFS kullanılarak çarpanlara ayrıldı.

Mevcut QS çarpanlara ayırma kaydı, Patrick Konsor tarafından Haziran 2020'de 6 gün boyunca yaklaşık 6.000 çekirdek saati kullanılarak çarpanlarına ayrılan 140 basamaklı (463 bit) RSA-140'tır.

Uygulamalar

  • PPMPQS ve PPSIQS
  • mpq'ler
  • SIMPQS , William Hart tarafından yazılmış, kendi kendini başlatan çoklu polinom ikinci dereceden eleklerin hızlı bir uygulamasıdır. Büyük asal değişken için destek sağlar ve lineer cebir aşaması için Jason Papadopoulos'un blok Lanczos kodunu kullanır. SIMPQS'e SageMath bilgisayar cebir paketindeki qsieve komutu olarak erişilebilir veya kaynak biçiminde indirilebilir. SIMPQS, Athlon ve Opteron makinelerinde kullanım için optimize edilmiştir, ancak en yaygın 32 ve 64 bit mimarilerde çalışır. Tamamen C ile yazılmıştır.
  • Dario Alpern tarafından, belirli koşullar karşılandığında ikinci dereceden elek kullanan bir faktoring uygulaması .
  • PARI / GP bilgisayar cebir paketi büyük asal varyantı uygulayan kendini başlatılıyor çoklu polinom kuadratik elek bir uygulamayı içermektedir. Thomas Papanikolaou ve Xavier Roblot tarafından LiDIA projesi için yazılmış bir elekten uyarlanmıştır. Kendi kendini başlatma şeması, Thomas Sosnowski'nin tezinden bir fikre dayanmaktadır.
  • MAGMA bilgisayar cebir paketinde ikinci dereceden eleğin bir çeşidi mevcuttur . Arjen Lenstra'nın "e-posta ile faktoring" programında kullandığı 1995 tarihli bir uygulamasına dayanmaktadır.
  • msieve , Jason Papadopoulos tarafından yazılmış, tek ve çift büyük asal sayıları destekleyen çoklu polinom ikinci dereceden elek uygulamasının bir uygulaması. Kaynak kodu ve bir Windows ikili dosyası mevcuttur.
  • YAFU Ben Buhrow tarafından yazılmış, daha hızlı, en modern için msieve benzer ancak işlemciler . Jason Papadopoulos'un blok Lanczos kodunu kullanır. Windows ve Linux için kaynak kodu ve ikili dosyalar mevcuttur.
  • Ariel , didaktik amaçlar için ikinci dereceden eleğin basit bir Java uygulaması.
  • Java-matematik-kütüphane muhtemelen Java ile yazılmış en hızlı ikinci dereceden elek (PSIQS 4.0 halefi) içeriyor.
  • Java QS , temel QS uygulamasını içeren açık kaynaklı bir Java projesidir. 4 Şubat 2016'da İlya Gazman tarafından yayınlandı

Ayrıca bakınız

Referanslar

Diğer dış bağlantılar