Riduzione rapida da RSA a SAT


28

Il post sul blog di Scott Aaronson oggi ha fornito un elenco di interessanti problemi / compiti aperti complessi. Uno in particolare ha attirato la mia attenzione:

Costruire una libreria pubblica di istanze 3SAT, con il minor numero di variabili e clausole possibili, che avrebbe conseguenze degne di nota se risolte. (Ad esempio, istanze che codificano le sfide del factoring di RSA.) Studiare le prestazioni dei migliori solutori SAT attuali su questa libreria.

Ciò ha innescato la mia domanda: qual è la tecnica standard per ridurre i problemi di RSA / factoring a SAT e quanto è veloce? Esiste una riduzione così standard?

Per essere chiari, per "veloce" non intendo il tempo polinomiale. Mi chiedo se abbiamo limiti superiori più stretti sulla complessità della riduzione. Ad esempio, esiste una riduzione cubica nota?

Risposte:


26

Un approccio per codificare Factoring (RSA) in SAT consiste nell'utilizzare circuiti moltiplicatori (ogni circuito può essere codificato come CNF).

Supponiamo che ci venga dato un numero intero con 2 n bit, C = ( c 1 , c 2 , , c 2 n ) 2 . Siamo interessati a trovare due interi a n bit A = ( a 1 , , a n ) e A = ( b 1 , , b n ) il cui prodotto è C = A C2nC=(c1,c2,,c2n)2nUN=(un'1,,un'n)UN=(B1,,Bn) .C=UN*B

La codifica più ingenua può essere qualcosa del genere: lo sappiamo

c 2 n - 1 = ( a nb n - 1 ) x o r ( a n - 1b n ) C a r r y : d 2 n - 1 = ( a nb n - 1 ) ( a n

c2n=un'nBn
c2n-1=(un'nBn-1)Xor(un'n-1Bn)
c 2 n - 2 =( a n b n - 2 )xor( a n - 1 b n - 1 )xor( a n - 2 b n )xor d 2 n - 1 ...
Carry:d2n1=(anbn1)(an1bn)
c2n-2=(un'nBn-2)Xor(un'n-1Bn-1)Xor(un'n-2Bn)Xord2n-1

Quindi usando la trasformazione Tseitin, la codifica sopra può essere tradotta in CNF.

Questo approccio produce un CNF relativamente piccolo. Ma questa codifica non supporta "Unit Propagation" e quindi le prestazioni dei solutori SAT sono davvero pessime.

Esistono altri circuiti per la moltiplicazione che possono essere utilizzati per questo scopo, ma producono un CNF più grande.


10
Nella sezione 6.1 di "Trovare istanze difficili del problema della soddisfazione: un sondaggio", di Cook e Mitchell, usano questo problema come una sfida.
Amir,

Come fai a sapere che A e B devono avere una lunghezza di n bit, non potrebbe essere n - 1 e n bit. Di sicuro può essere 2n bit e 1 bit.
Ilya Gazman,

1
@Babibu: se stiamo parlando di fattorizzazione generale, hai ragione. Ma nel caso di RSA, sappiamo che ciascuno dei due numeri primi ha bit. n
Amir,

Capisco che rispondi, ma non so come continuare. Puoi per favore mostrare . c2n-2
Ilya Gazman,

Che dire di RSA-129
Ilya Gazman,

18

Estendendo ciò che ha scritto @Amir, mi sono imbattuto nella seguente bella pagina web che ospita un generatore CNF per circuiti di factoring che si potrebbero ad esempio eseguire su alcuni dei numeri (ora inattivi) della sfida del factoring RSA . Le istanze sono generati in DIMACS formato che può essere direttamente alimentato ad uno qualsiasi dei concorrenti attuali nel annua SAT solver concorrenza . Per quanto riguarda le istanze difficili di SAT in generale, i problemi di riferimento indicati nel sito della competizione SAT sembrano essere abbastanza utili, anche la classificazione in casuale / artigianale / industriale è buona.


1
Quel link è molto bello!
Huck Bennett,

Se in realtà provi a inserire uno di quei numeri, scoprirai che il loro codice sorgente utilizza il tipo di dati int e quindi può contenere solo numeri a 32 bit, mentre i numeri RSA non fatturati iniziano a centinaia di bit.
Elliot Gorokhovsky,



0

Vedi satfactor:


Converti la fattorizzazione a numeri interi in un problema booleano di SODDISFABILITÀ

Shane Neph

Panoramica

Determinare i fattori di un grande numero intero è stato interessante per l'uomo fin dai tempi di Euclide. Non esiste un algoritmo generale noto per questo problema che si ridimensiona in meno di tempo esponenziale rispetto al numero di bit necessari per rappresentare l'intero.

Cosa fa questo codice

Converte un problema di fattorizzazione a numeri interi in un problema booleano di SODDISFABILITÀ. Se il problema viene risolto da un risolutore SAT, estrae i fattori interi.

I solutori della soddisfazione boolen migliorano ogni anno. Ogni 2 anni si svolge una competizione internazionale tra solutori (vedi http://www.satcompetition.org/ e http://www.satlive.org/ ). In che misura questi solutori all'avanguardia possono affrontare uno dei più antichi problemi di matematica aperti esistenti?

Questo progetto ha 2 scopi principali:
1) Converti il ​​problema e calcola un numero intero di interesse!
2) Creare rapidamente un problema di SODDISFABILITÀ risolvibile o irrisolvibile, la cui difficoltà è facilmente controllabile dal creatore.
- Per creare un problema irrisolvibile di SODDISFAZIONE, è sufficiente codificare un numero primo.
- Per creare problemi più difficili ma risolvibili, scegliere numeri compositi più grandi con meno fattori.

Il numero di interesse può essere di qualsiasi dimensione!

Esistono alcuni solutori di SODDISFABILITÀ open source. Vedi http://www.satlive.org/ per alcuni di questi.

Costruire

make -C src /

Come

Inserisci un numero di interesse nella sua forma binaria:

bin / iencode 10101> composite.21
// risolvi con il tuo solutore preferito e metti i risultati in solution.txt
bin / extract-sat composite.21 solution.txt

L'output sarebbe:
00011
00111

che sono rappresentazioni binarie per gli interi decimali 3 e 7, i fattori di 21.

Se un numero intero di input ha più di 2 fattori e il problema SAT è risolto, l'output sarà solo due dei fattori. Questi potrebbero non essere numeri primi (potresti provarlo facilmente in Maxima, Maple o Mathematica).

Non tutti i solutori SAT generano risultati nello stesso formato. Potrebbe essere necessario valutare leggermente questi risultati. extract-sat richiede un file di soluzione contenente un elenco di numeri interi (su qualsiasi numero di righe). Per esempio,

1 -2 3 4 -5 ...


1
Puoi riassumere le tecniche utilizzate da questo software? In questo sito siamo più interessati agli algoritmi e alle tecniche, piuttosto che alla pubblicità di uno strumento software. Ad esempio, le domande per la complessità della riduzione. Non vedo come hai affrontato la domanda; sui siti Stack Exchange, dovresti rispondere solo se puoi rispondere alla domanda specifica che è stata posta. Inoltre, hai qualche relazione con lo strumento o i suoi autori?
DW,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.