RSA에서 SAT 로의 빠른 감소


28

Scott Aaronson의 블로그 게시물은 오늘 흥미로운 열린 문제 / 작업 목록을 복잡하게 나열했습니다. 특히 하나는 내 관심을 끌었다 :

가능한 한 적은 변수와 절을 사용하여 3SAT 인스턴스로 구성된 공개 라이브러리를 구축하면 해결 될 때 주목할만한 결과가 발생합니다. (예를 들어, RSA 인수 분해 문제를 인코딩하는 인스턴스입니다.)이 라이브러리에서 최고의 최신 SAT 솔버의 성능을 조사하십시오.

이것은 내 질문을 일으켰습니다. RSA / 인수 분해 문제를 SAT로 줄이는 표준 기술은 무엇이며 얼마나 빠릅니까? 그러한 표준 축소가 있습니까?

"빠르다"라는 말은 다항식 시간을 의미하지 않습니다. 우리가 축소의 복잡성에 대해 더 엄격한 상한을 가지고 있는지 궁금합니다. 예를 들어, 입방 감소가 알려져 있습니까?

답변:


26

SAT에 팩토링 (RSA)을 인코딩하는 한 가지 방법은 곱셈기 회로를 사용하는 것입니다 (모든 회로는 CNF로 인코딩 될 수 있음).

하자 우리 정수 주어진다 가정 2 N 비트, C = ( C (1) , c를 2 , , C 2 N ) 2 . 우리 찾는데 관심 개의 N 비트 정수 = ( 1 , , N )A는 = ( B 1 , , B의 N ) , 그 제품은 C = *C2nC=(c1,c2,,c2n)2nA=(a1,,an)A=(b1,,bn) .C=AB

가장 순진한 인코딩은 다음과 같습니다.

C 2 N - 1 = ( NB , N - 1 ) (X) O , R ( N - 1B N ) C R , R (Y) : (D) 2 N - 1 = ( nb n - 1 ) ( a n

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

그런 다음 Tseitin 변환을 사용하여 위의 인코딩을 CNF로 변환 할 수 있습니다.

이 접근법은 비교적 작은 CNF를 생성합니다. 그러나이 인코딩은 "Unit Propagation"을 지원하지 않으므로 SAT Solvers의 성능이 실제로 나쁩니다.

이 목적으로 사용될 수있는 다른 곱셈 회로가 있지만 더 큰 CNF를 생성합니다.


10
Cook과 Mitchell의 "만족도 문제의 하드 인스턴스 찾기 : 설문 조사"의 6.1 절에서이 문제를 문제로 사용합니다.
Amir

A와 B의 길이는 n 비트 여야하고 n-1과 n 비트 일 수 없다는 것을 어떻게 알 수 있습니까? 확실히 2n 비트와 1 비트가 될 수 있습니다.
Ilya Gazman

1
n

c2n2

무엇에 대한 RSA-129
일리아 Gazman

18

@Amir가 작성한 것을 확장하면서, 나는 (현재 비활성 인) RSA Factoring Challenge 번호 중 일부에서 실행될 수있는 팩토링 회로위한 CNF 생성기를 호스팅하는 다음의 멋진 웹 페이지를 보았습니다 . 생성 된 인스턴스는 매년 SAT 솔버 경쟁 에서 현재 경쟁 업체 중 하나에게 직접 공급할 수 있는 DIMACS 형식입니다 . 일반적으로 어려운 SAT 사례와 관련하여 SAT 경쟁 사이트에서 제공되는 벤치 마크 문제는 매우 유용하며 무작위 / 제작 / 산업 분류도 좋습니다.


1
그 링크는 매우 멋지다!
Huck Bennett

실제로 해당 숫자 중 하나를 입력하려고하면 소스 코드에 int 데이터 유형이 사용되므로 32 비트 숫자 만 보유 할 수 있으며 팩토링되지 않은 RSA 숫자는 수백 비트에서 시작합니다.
Elliot Gorokhovsky



0

참조 satfactor:


정수 인수 분해를 부울 만족도 문제로 변환

셰인 네프

개요

적어도 유클리드 이후로 많은 정수의 인자를 결정하는 것이 Man에게 관심이되어왔다. 이 문제에 대한 알려진 일반적인 알고리즘은 정수를 나타내는 데 필요한 비트 수와 관련하여 지수 시간보다 작습니다.

이 코드의 기능

정수 인수 분해 문제를 부울 SATISFIABILITY 문제로 변환합니다. 문제가 SAT 솔버로 해결되면 정수 인자를 추출합니다.

Boolen 만족도 솔버는 매년 향상됩니다. 2 년마다 솔버 간의 국제 경쟁이 발생합니다 ( http://www.satcompetition.org/http://www.satlive.org/ 참조 ). 이 최첨단 솔버는 현존하는 가장 오래된 열린 수학 문제 중 하나에 대해 얼마나 잘 할 수 있습니까?

이 프로젝트에는 두 가지 주요 목적이 있습니다.
1) 문제를 변환하고 관심있는 정수를 인수 분해합니다!
2) 해결할 수 있거나 해결할 수없는 만족도 문제를 신속하게 작성하십시오. 어려움은 작성자가 쉽게 제어 할 수 있습니다.
-해결할 수없는 만족도 문제를 만들려면 간단히 소수를 인코딩하십시오.
-더 어렵지만 해결 가능한 문제를 만들려면 더 적은 요소로 더 큰 복합 수를 선택하십시오.

관심의 수는 모든 크기가 될 수 있습니다!

오픈 소스 SATISFIABILITY 솔버가 있습니다. 이들 중 일부는 http://www.satlive.org/ 를 참조 하십시오 .

짓다

-C src /를 만드십시오

어떻게

이진 형식으로 많은 관심을 입력하십시오.

bin / iencode 10101> composite.21
// 선호하는 솔버로 해결하고 결과를 solution.txt에 넣습니다.
bin / extract-sat composite.21 solution.txt

결과는 다음과 같습니다.
00011
00111

이것은 십진 정수 3과 7에 대한 이진 표현입니다.

입력 정수에 요인이 2 개 이상이고 SAT 문제가 해결되면 출력은 요인 중 2 개만됩니다. 소수가 아닐 수도 있습니다 (Maxima, Maple 또는 Mathematica에서 쉽게 테스트 할 수 있음).

모든 SAT 솔버가 동일한 형식으로 출력되는 것은 아닙니다. 그 결과를 약간 닥쳐 야 할 수도 있습니다. extract-sat에는 정수 목록 (여러 줄에 있음)이 포함 된 솔루션 파일이 필요합니다. 예를 들어

1 -2 34 -5 ...


1
이 소프트웨어에서 사용하는 기술을 요약 할 수 있습니까? 이 사이트에서 우리는 소프트웨어 툴의 광고보다는 알고리즘과 기술에 더 관심이 있습니다. 예를 들어, 축소의 복잡성에 대한 질문입니다. 나는 당신이 그 질문을 어떻게 해결했는지 보지 못합니다. Stack Exchange 사이트에서는 요청 된 특정 질문에 답변 할 수있는 경우에만 답변해야합니다. 또한 도구 또는 작성자와 관계가 있습니까?
DW
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.