RSAからSATへの高速削減


28

今日のScott Aaronsonのブログ投稿は、複雑で興味深い未解決の問題/タスクのリストを提供しました。特に注目を集めたのは次の1つです。

3SATインスタンスのパブリックライブラリを、可能な限り少ない変数と句で構築します。これを解決すると、注目に値する結果になります。(たとえば、RSAファクタリングの課題をエンコードするインスタンス。)このライブラリで現在の最高のSATソルバーのパフォーマンスを調査します。

これは私の質問を引き起こしました:RSA /ファクタリングの問題をSATに減らすための標準的なテクニックは何ですか?そのような標準的な削減はありますか?

明確にするために、「高速」とは多項式時間を意味しません。削減の複雑さの上限がもっと厳しいかどうか疑問に思っています。たとえば、既知の立方体の縮小はありますか?

回答:


26

ファクタリング(RSA)をSATにエンコードする方法の1つは、乗算回路を使用することです(すべての回路をCNFとしてエンコードできます)。

のは、我々は整数与えられていると仮定する用いて2 のnビット、C = (C 1、C 2、⋯ 、C 2 N)2。積がC = A ∗である 2つのnビット整数A = (a 1、⋯ 、a n)およびA = (b 1、⋯ 、b n)を見つけることに興味があります。C2nC=(c1、c2、⋯、c2n)2nA=(a1、⋯、an)A=(b1、⋯、bn)。C=A∗B

最も素朴なエンコーディングは次のようなものです。

C 2 N - 1 = (N ∧ B N - 1)X O R (N - 1件の ∧ B N)C A R R Y :D 2 N - 1 = (A N ∧ B N - 1)∧ (nは

c2n=an∧bn
c2n−1=(an∧bn−1)バツor(an−1∧bn)
C 2 N - 2 =( N ∧ B N - 2)XOR( N - 1 ∧ B N - 1)XOR( N - 2 ∧ B N)XOR d 2 n − 1 ...
Carry:d2n−1=(an∧bn−1)∧(an−1∧bn)
c2n−2=(an∧bn−2)バツor(an−1∧bn−1)バツor(an−2∧bn)バツord2n−1

次に、Tseitin変換を使用して、上記のエンコードをCNFに変換できます。

このアプローチでは、比較的小さなCNFが生成されます。しかし、このエンコードは「ユニット伝搬」をサポートしていないため、SAT Solversのパフォーマンスは非常に悪いです。

この目的に使用できる乗算用の回路は他にもありますが、より大きなCNFを生成します。


10
クックとミッチェルによる「満足度問題のハードインスタンスの検索:調査」のセクション6.1で、彼らはこの問題を課題として使用しています。
— アミール

AとBがnビット長でなければならないことをどのようにして知ることができますか。n-1とnビットではありません。確かに2nビットと1ビットにすることができます。
— イリヤガスマン

1
@Babibu:一般的な因数分解について話しているなら、あなたは正しいです。しかし、RSAの場合、2つの素数のそれぞれにビットがあることがわかります。n
— アミール

私はあなたの答えを理解していますが、それを続ける方法がわかりません。を見せてください。c2n−2
— イリヤガスマン


18

@Amirが書いたものを拡張して、次の素敵なWebページに出会いました。このページは、たとえば(現在は非アクティブな)RSAファクタリングチャレンジ番号で実行できる回路をファクタリングするCNFジェネレータをホストします。生成されたインスタンスは、毎年のSAT ソルバー競技会の現在の競技者に直接提供できるDIMACS形式です。一般的なハードSATインスタンスに関しては、SAT競合サイトで与えられたベンチマークの問題は非常に有用であるように思われます。また、ランダム/細工された/産業への分類も素晴らしいです。


1
そのリンクはとてもクールです!
— ハックベネット

実際にこれらの数値のいずれかを入力しようとすると、ソースコードはintデータ型を使用するため、32ビットの数値しか保持できず、ファクタリングされていないRSA数値は数百ビットから始まります。
— エリオットゴロホフスキー14



0

参照satfactor:


整数因数分解をブール値のSATISFIABILITY問題に変換する

シェーン・ネフ

概要

少なくともユークリッドの時代から、人間にとって大きな整数の要因を決定することは興味がありました。整数を表現するのに必要なビット数に関して、指数関数的時間未満でスケーリングするこの問題の既知の一般的なアルゴリズムはありません。

このコードがすること

整数因数分解問題をブール値のSATISFIABILITY問題に変換します。問題がSATソルバーによって解決される場合、整数因子が抽出されます。

ブール充足可能性ソルバーは毎年改善されています。2年ごとに、ソルバー間の国際競争が行われます( http://www.satcompetition.org/およびhttp://www.satlive.org/を参照)。これらの最先端のソルバーは、現存する最も古いオープンな数学の問題の1つに対してどれだけうまく機能しますか?

このプロジェクトには2つの主な目的があります
。1)問題を変換し、対象の整数を因数分解します。
2)解決可能または解決不可能なSATISFIABILITY問題をすばやく作成します。その問題は作成者が簡単に制御できます。
-解決できないSATISFIABILITY問題を作成するには、素数をエンコードするだけです。
-より困難ではあるが解決可能な問題を作成するには、より少ない要因でより大きな複合数を選択します。

興味の数は、どんなサイズでもかまいません!

オープンソースのSATISFIABILITYソルバーがいくつかあります。これらのいくつかについては、http://www.satlive.org/を参照してください。

構築する

make -C src /

の仕方

バイナリ形式で関心のある数を入力します。

bin / iencode 10101> composite.21
//お気に入りのソルバーで解決し、結果をsolution.txtに格納します
bin / extract-sat composite.21 solution.txt

出力は次のようになります:
00011
00111

これは、10進整数3および7、21の係数のバイナリ表現です。

入力整数に2つ以上の因子があり、SAT問題が解決される場合、出力は2つの因子のみになります。これらは素数ではない場合があります(Maxima、Maple、またはMathematicaで簡単にテストできます)。

すべてのSATソルバーが同じ形式で結果を出力するわけではありません。これらの結果をわずかに修正する必要があるかもしれません。extract-satには、整数のリスト(任意の行数)を含むソリューションファイルが必要です。例えば、

1-2 3 4 -5 ...


1
このソフトウェアで使用されているテクニックを要約できますか?このサイトでは、ソフトウェアツールの広告よりもアルゴリズムと技術に関心があります。たとえば、削減の複雑さに関する質問。質問にどのように対処したかわかりません。Stack Exchangeサイトでは、質問された特定の質問に回答できる場合にのみ回答する必要があります。また、ツールまたはその作成者と何か関係がありますか?
— DW
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.