RSA'dan SAT'a Hızlı Azaltma


28

Scott Aaronson'un blog yazısı bugün, karmaşıklıktaki ilginç açık problemlerin / görevlerin bir listesini verdi. Özellikle biri dikkatimi çekti:

Çözüldüğü zaman kayda değer sonuçlar doğurabilecek, mümkün olduğunca az değişken ve cümlecik içeren, 3SAT örneklerinden oluşan bir halk kütüphanesi oluşturun. (Örneğin, RSA faktoring zorluklarını kodlayan örnekler.) Bu kitaplıktaki en iyi güncel SAT-çözücülerinin performansını araştırın.

Bu benim sorumu tetikledi: RSA / faktoring sorunlarını SAT'a indirgemek için standart teknik nedir ve ne kadar hızlı? Böyle bir standart azalma var mı?

Sadece açık olmak gerekirse, "hızlı" derken polinom zamanını kastetmiyorum. Azalmanın karmaşıklığı konusunda daha üst sınırlarımız olup olmadığını merak ediyorum. Örneğin, bilinen bir kübik azalma var mı?

Yanıtlar:


26

Faktoring'i (RSA) SAT'a kodlamak için bir yaklaşım çoğaltıcı devreleri kullanmaktır (Her devre CNF olarak kodlanabilir).

Diyelim bir tamsayılı verilmiştir kabul ile 2 N bit, C = ( c 1 , c 2 , , Cı- 2 , n ) , 2 . Bu bulgu ile ilgili olarak, iki N bitlik tamsayılardır bir = ( bir 1 , , bir n ) ve bir = ( b 1 , , B , n ) olan bir üründür = A *C2nC=(c1,c2,,c2n)2nA=(a1,,an)A=(b1,,bn) .C=AB

En saf kodlama böyle bir şey olabilir: Bunu biliyoruz

c 2 , n - 1 = ( bir n-b , n - 1 ) x O r ( bir N - 1b , n ) Cı- bir r r y : d 2 , n - 1 = ( a nb n - 1 ) ( a n

c2n=anbn
c2n1=(anbn1)xor(an1bn)
Carry:d2n1=(anbn1)(an1bn)
c2n2=(anbn2)xor(an1bn1)xor(an2bn)xord2n1

Daha sonra, Tseitin dönüşümü kullanılarak, yukarıdaki kodlama CNF'ye çevrilebilir.

Bu yaklaşım nispeten küçük bir CNF üretir. Ancak bu kodlama "Ünite Yayılımı" nı desteklememektedir ve bu nedenle SAT Çözücülerin performansı gerçekten kötüdür.

Çarpma için bu amaçla kullanılabilecek başka bir devre vardır, ancak daha büyük bir CNF üretirler.


10
"Tatmin Edilebilirlik Probleminin Zor Örneklerini Bulma: Bir anket" bölümünde 6.1'de Cook ve Mitchell tarafından bu sorunu bir meydan okuma olarak kullanıyorlar.
Amir

A ve B'nin n bit uzunluğu olması gerektiğini nasıl biliyorsunuz, n - 1 ve n bitleri olamazdı. Elbette 2n bit ve 1 bit olabilir.
Ilya Gazman

1
n

c2n2


18

@Amir'in yazdıklarını genişlettiğimde, şu anda bazı (şu anda aktif olmayan) RSA Faktoring Mücadelesi sayılarında çalıştırılabilecek faktoring devreleri için bir CNF jeneratörüne ev sahipliği yapan hoş bir web sayfasına rastladım . Üretilen örnekler , yıllık SAT çözücüsü yarışmasında mevcut rakiplerin herhangi birine doğrudan beslenebilecek DIMACS formatındadır . Genel olarak zor SAT durumlarına gelince, SAT rekabet sahasında verilen kıyaslama sorunları oldukça yararlı görünmektedir, ayrıca rasgele / hazırlanmış / endüstriyel olarak sınıflandırma da iyidir.


1
Bu bağlantı çok havalı!
Huck Bennett

Aslında bu numaralardan birini girmeyi denerseniz, kaynak kodunun int veri türünü kullandığını görürsünüz ve bu nedenle yalnızca 32 bitlik sayıları tutabilirken, faktörü olmayan RSA sayıları yüzlerce bitte başlar.
Elliot Gorokhovsky



0

Bakınız satfactor:


Tamsayılı Faktörleşmeyi boolean SATISFIABILITY sorununa dönüştür

Shane Neph

genel bakış

Büyük bir tam sayıdaki faktörlerin belirlenmesi, en azından Öklid zamanından bu yana Man için ilgi çekici olmuştur. Tamsayıyı temsil etmek için gereken bit sayısına göre üssel zamandan daha az ölçeklenen bu problem için bilinen bir genel algoritma yoktur.

Bu kod ne yapar

Bir tamsayılı çarpanlara ayırma problemini bir boole SATISFIABILITY problemine dönüştürür. Sorun bir SAT çözücüsü tarafından çözülürse, tam sayı faktörlerini çıkarır.

Boolen tatmin edici çözücüler her yıl gelişir. Her 2 yılda bir çözücüler arasında uluslararası bir yarışma gerçekleşmektedir (bkz. Http://www.satcompetition.org/ ve http://www.satlive.org/ ). Bu son teknolojiye sahip çözücüler, varolan en eski açık matematik problemlerinden birine karşı ne kadar başarılı olabilirler?

Bu projenin 2 ana amacı var:
1) Sorunu dönüştürün ve ilgilenilen bir tamsayı faktörü!
2) Çabucak yaratıcısı tarafından kolayca kontrol edilebilen, çözülebilir ya da çözülemeyen bir SATISFIABILITY problemini çabucak yaratın.
- Çözülemeyen bir SATISFIABILITY problemi yaratmak için sadece bir asal sayıyı kodlayın.
- Daha zor ancak çözülebilir problemler yaratmak için daha az faktör içeren daha büyük bileşik sayıları seçin.

İlgi sayısı herhangi bir boyutta olabilir!

Bazı açık kaynaklı SATISFIABILITY çözücüleri var. Bunların bazıları için http://www.satlive.org/ adresine bakın .

İnşa etmek

make -C src /

Nasıl

İkili formuna bir dizi ilgi girin:

bin / iencode 10101> composite.21
// favori çözücünüzle çözün ve sonuçları solution.txt içine koyun
bin / extract-sat composite.21 solution.txt

Çıktı şöyle olabilir:
00011
00111

ki bunlar 21 ve 3 arasındaki ondalık sayılar için ikili gösterimlerdir.

Bir giriş tamsayısının 2'den fazla faktörü varsa ve SAT sorunu çözülmüşse, çıkış yalnızca faktörlerden ikisi olacaktır. Bunlar asal sayılar olmayabilir (bunun için Maxima, Maple veya Mathematica'da kolayca test edebilirsiniz).

Tüm SAT çözücü çıktıları aynı biçimde sonuçlanmamaktadır. Bu sonuçları hafifçe doktorlamanız gerekebilir. extract-sat, tam sayıların listesini içeren bir çözüm dosyası gerektirir (herhangi bir sayıda satıra). Örneğin,

1 -2 3 4 -5 ...


1
Bu yazılım tarafından kullanılan teknikleri özetler misiniz? Bu sitede bir yazılım aracının reklamından ziyade algoritmalar ve teknikler ile daha çok ilgileniyoruz. Örneğin, azaltmanın karmaşıklığı ile ilgili sorular. Soruyu nasıl ele aldığınızı anlamıyorum; Stack Exchange sitelerinde, sadece sorulan belirli bir soruyu cevaplayabiliyorsanız cevap vermelisiniz. Ayrıca, araç ya da yazarlarla herhangi bir ilişkiniz var mı?
DW
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.