質問

少し前の話になったのかに興味がガスを勉強してくれるでしょ使用したC++GAlib書き込むプログラムでくださってありがとうござい思いを解決困難なものや、通常の計算問題にしました。そのような大bruteforcing技法の作品も本当にスマートに対応.

私は著書の中でMichalewitz場合のことを思い出名称いたのスキーマ定理証明によります。

私も聞いたことまでは本当に使用するアプローチの問題のように織り込んでRSA非公開鍵の場合.

でもその理由を説明する。

役に立ちましたか?

解決

遺伝的アルゴリズムはでスマートではありません、それらは非常に貪欲なオプティマイザアルゴリズムです。彼ら全員が同じ考えを回避する。あなたはポイントのグループ(「個人の人口」)を持っています、そしてあなたはそのグループを確率的なオペレーターを持つ別のものに変換し、最良の改善の方向にバイアスを変えます( '突然変わりな+クロスオーバー+選択')。それが収束するかあなたがそれにうんざりするまで繰り返します、そこには何もない。

作業する遺伝的アルゴリズムのために、新しいポイントの人口は前回のポイントの集団に近づくべきです。少し摂動はほとんど変化を生み出すべきです。ポイントの小さな摂動後に、完全に異なる性能を持つ解決策を表す点を取得した場合、アルゴリズムはランダム検索よりも優れていません。通常は良好な最適化アルゴリズムではありません。 RSAの場合、あなたのポイントが直接数字であるならば、それはビットを反転するだけではい、またはいいえのどちらかです...したがって、遺伝的アルゴリズムを使用することはランダムな検索よりも優れていません。番号検索ポイント数字のビットとして "

他のヒント

鍵の因子が最適化の問題ではなく、正確な問題であるためと言うでしょう。この区別はあまり正確ではないので、詳細は詳細です。 遺伝的アルゴリズムは、最小値(ローカル/グローバル)の問題を解決するのに最適ですが、分解の問題がありません。DCAまたはシミュレートされたアニーリングとしての遺伝的アルゴリズムは、「解決策にどれだけ近い」という尺度を必要とするが、私たちの問題のためにこれを言うことはできません。

問題遺伝学の例については良い、丘の登山問題があります。

ガスは候補溶液の適応度評価に基づく。

基本的には、候補ソリューションを入力として取り込むフィットネス機能を持っており、候補者がどれほど良いかを指示するスカラーを音声に戻します。それからあなたは続け、与えられた世代の最高の個人を残りよりも高い確率と仲裁することができるので、子孫は(うまくいけば)全体的な「フィット」、などのになるでしょう。

RSA因数分解シナリオのフィットネス(残りと比較して候補ソリューションがどれだけ良いか)を評価する方法はありません。

ガスはブルートフォーキングではありませんが、それらは単なる検索アルゴリズムです。各GAは本質的にこのように見えます:

candidates = seed_value;
while (!good_enough(best_of(candidates))) {
    candidates = compute_next_generation(candidates);
}
.

good_enoughbest_ofは、フィットネス関数に関して定義されています。フィットネス関数は、与えられた候補が問題を解決するをどれだけよく解決するかを言います。それはここでの中核問題のようです:因数分解のためのフィットネス関数をどのように書きますか?例えば、20= 2 * 10または4 * 5。タプル(2,10)と(4,5)は明らかに勝者ですが、他のものはどうですか?"Fit"が(1,9)または(3,4)?

間接的に、 ができ 利用遺伝的アルゴリズムを整数N.ディクソン地区の整数因子分解法の方程式に関の権限の k 素数,modulo N.これらの製品の国の小さな素数と呼ばれる"滑らか".また、初 k=4 素数-{2,3,5,7}-42=2x3x7は滑らかで、11のですが、いよ、11日には"あら").ディクソン地区の方法が必要である可逆 k x k マトリクスを構成する指数を定義するこれらの滑らかな。詳ディクソン地区の方法参照 https://en.wikipedia.org/wiki/Dixon%27s_factorization_method.

現在の質問:ある遺伝子を発見するアルゴリズム-ディクソン方程式の方法です。

  1. ましょう r すると、逆の円滑な数mod Nで r 悪数
  2. ましょう s スムーズになる
  3. をランダム解rx=sy mod N.これらのソリューションでは[x,y]に人口の遺伝的アルゴリズムです。各x,yとして知られていたことは、平成荒ます。例えば、仮にx=369=9x41.そのと仮定41ではないの小さなカウントをスムーズ)の一部x41の滑らかな部分は9.
  4. 選択ペアソリューション-"親"を組み込み々の小さな荒ます。
  5. このアルゴリズムが終了するのは、ひとつのペア[x,y]で見られる粗部品[1,1], [1,-1],[-1,1] または[-1,-1].この利回りの式とディクソン地区の方法で rx=sy mod N r の荒番号左 xy スムーズ、 s 開始オフスムーズです。でも1/r mod Nは滑らかで、全てのスベスベ!

毎時間ごと結合し、組み-ん[v w][x,y]に滑らかな部品の番号は抹消の要因は、円滑なパーツのv×株当たりの要因は、円滑なパーツw、yります。なお両親の共有による滑らかなのです。この精密書

g=gcd(滑らかな部分のv、滑らかな部分のx)

h=gcd(滑らかな部分のw、滑らかな部分のy)

[v w][x,y]=[g v/g、h w/h],[g x/g、h y/h]

のが苦心して円滑な要因gとhのまま保存され、次世代ものの、円滑なパーツのv/g w/h x/g y/hまで犠牲にするための合[v w][x,y].なお両親によるv/g w/h x/g y/hの最小の円滑なパーツ。このようにしてんのスキー装着のままに荒部品の弊社のソリューションをrx=sy mod Nからしていることを発見しました。

さらに、滑らかな係数xに向かってあなたの道を滑らかにするための最良の方法は、ラティスax= mod nによってyが回帰し、遺伝的アルゴリズムではなく、回帰を伴う。

2回帰が実行され、1つは、Ax=のランダムに選択された溶液からのx値からなる応答ベクトルr0を実行する。他方は、同じ溶液からのY値からなる応答ベクトルR1を有する。両方の回帰は同じ説明行列Xを使用しています。Xでは、X値モジュロスムーズな除数の剰余からなる列、およびY値の剰余からなる他の列からなる列です。

スムーズな除数の最良の選択は、各回帰からのエラーを最小限に抑えるものです。

E0= R0 - X((X-トランスポーズ)(X))(X-Transpose)(R0)

E1= R1 - X((X-トランスポーズ)(X)の逆数)(X-転置)(R1)

次のようなXを消滅するための行操作は、Xが形成された元の解決策からこれらの行操作の結果ZをX値およびY値に適用します。

z R0 = z R0 - 0
     = z R0 - zX (inverse of (X-transpose)(X)) (X-transpose) (R0)
     = z E0 
.

同様に、Z R1= Z E1

3つの特性がZ R0とZ R1で組み合わされています:

  • Z消滅は滑らかな数値モジュロの滑らかな数字を維持するため、滑らかな数の大きさの倍数です。
  • E0とE1が小さいので、それらは比較的小さいです。
  • ax= to mod n、z r0およびz r 1の線形の線形の線形組み合わせは、その方程式に対する解決策です。

    大きな滑らかな数の比較的小さい倍数は、滑らかな数自体だけであるかもしれません。 AX=の滑らかな解の解をMOD Nにすると、Dixonの方法への入力が得られます。

    2つの最適化これは特に速くなります。

    • xの滑らかな数字と列を一度に推測する必要はありません。回帰を連続して実行し、一度に1列に1列を追加し、E0とE1を縮小する列を選択することができます。なぜなら、コモンファクタを持つ2つの滑らかな数字は選択されます。
    • mod nによってzx=のランダムな解決策をたくさん始めることもでき、xの新しい列の選択間に最大のエラーを持つものを削除することもできます。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top