RSA暗号化を解読するために必要な時間を見積もるにはどうすればよいですか? 1024、2048、3072、4096、5120、6144、5120、7168、8192、9216、10240、11264、12288、13312、14336、15360、および16384のキー長でRsa暗号化をクラックするのに必要な時間を意味しますか?
さまざまな研究者や組織が使用している主要な強度の見積もりの概要については、 このサイト を参照してください。
あなたの「12μsの512ビット」は完全に偽物です。それがどこから来るのか見てみましょう。 1999年は、最初の512ビットの一般的な因数分解が実行された年であり、RSA(会社)が発行し、 RSA-155 と呼ばれました(数値は155桁の10進数で構成されているため、バイナリで) 、長さは512ビットです)。その分解には6か月かかりました。 Eurocryptイベント で同じ年に組織されました(5月、その時点で512ビットの因数分解の取り組みは始まっていましたが、まだ完了していませんでした)、 Adi Shamir 、Weizmannから研究所は、 [〜#〜] twinkle [〜#〜] と呼ばれる理論上のデバイスを発表しましたが、これは因数分解の取り組みにおいてかなり役立つ可能性があります。厳選された周波数で点滅する膨大な数のダイオードで構成され、一種の黒い管になっているはずです。シャミールは、10メートル離れたところからコーヒーマシンのように見えるカスタムデバイスを持ち込みました。彼は、Eurocryptの出席者が2、3、5、7秒の間隔で点滅する4つの赤いダイオードに驚嘆できるように、人々に明かりを消すように求めました。おお!そして、ああ!実際のマシンは構築されますが、数百万のダイオードと10または100ギガヘルツの周波数が必要になります。したがって、このアイデアは(少なくとも暗号の研究者にとっては奇妙なユーモアのセンスがあることが知られている)楽しいですが、まだ理論的なスケッチのステップを超えていません。シャミルは素晴らしいショーマンです。
ただし、TWINKLEは「ヘルプ」にすぎません。最もよく知られている因数分解アルゴリズムは General Number Field Sieve ;と呼ばれます。次に来る2つのアルゴリズムは 二次ふるい と 楕円曲線法 です。 512ビットの数値は、今日の技術ではQSおよびECMの範囲外であり、1999年の技術では困難です。 GNFSは非常に複雑です(数学的に言えば)。特に、いくつかの重要なパラメーター(「多項式選択」)を注意深く選択する必要があるためです。したがって、非常に賢い頭脳による最初の努力が必要です(大きなコンピューターでは、しかしここでは頭脳が最も重要です)。その後、GNFSはsieveとlinear reductionの2つの部分で構成されます。ふるいは数百または数千のマシンで並行して作成できますが、それでも(RAMで)比較的大きい必要がありますが、これは実行可能です。線形縮小には、コンピューターに収まりきらないほど大きい行列で計算することが含まれます(数桁の大きさで、たとえそのコンピューターにテラバイトの高速RAMがあると仮定しても)。マトリックス(かなりまばらです)を圧縮された形式に保ち、それでも計算できるアルゴリズムがありますが、これは困難です。 512ビットの因数分解では、ふるい分けは合計時間の約80%を要しましたが、数値が大きい場合、線形削減がボトルネックになります。
TWINKLEは、ふるい部分の高速化についてのみです。線形削減については何もしません。言い換えれば、(比較的)簡単な部分を高速化します。 TWINKLEで強化されたふるいの半分でさえ、12μsの近くにはありません。代わりに、4か月のふるい分け作業を、たとえば3週間に減らすのに役立ちます。これは科学的には良いことですが、特に大きなサイズでは線形縮小が支配的であるため、記録破りではありません。 12μsの数字は、さらに神秘的な獣 Quantum Computer との混乱から来ているようです。これは、512の「キュービット」を持つQCを構築できれば、大きな数を簡単に因数分解できます。 D-Waveは最近、128量子ビットを備えた量子コンピューターを発表しましたが、これらは「実際の」量子ビットではなく、因数分解には適していないことがわかりました(理論的には、最適化問題でいくつかの効率的な近似を行うことができます。ただし、暗号化アルゴリズムは近似に対応できないため、基本的に暗号化には適用されません。これらは、1つの間違ったビットがすべてをスクランブルするように設計されています)。これまでで最高の「実際の」QCはIBMのプロトタイプのようですが、私が覚えている限りでは、5キュービットがあり、15が3の5に等しいことを確認できます。
現在のRSA因数分解記録は、2009年12月に発表された 768ビット整数 用です。これには4年かかり、レンズトラやモンゴメリーを含む、現在地球上に住んでいる最も賢い理論家が関与しています。それらのサークルのステータスのように。私は最近、1024ビットの数値因数分解のパラメーターの選択が始まったことを知りました(これは「頭の悪い」部分です)。ふるい分けは技術的には実行可能ですが(高価で、多くの大学クラスターでは何年もの計算時間を必要とします)、現時点では、1024ビット整数の線形縮小部分を実行する方法は誰にもわかりません。そのため、すぐに1024ビットの中断が発生することを期待しないでください。
現在、公開されたコード(例 Msieve )を使用する専門のアマチュアは、強力なコンピューター(数十の大きなPC、および少なくとも1つのクロックで高速RAMが満載)にアクセスできる場合、512ビットの因数分解を実現できます。 )および数ヶ月の自由時間。基本的に、「専用アマチュア」とは「裕福な大学の退屈なコンピュータサイエンスの学生」を意味します。 512ビットを超えるものは、アマチュアには届きません。
概要:コードでは、すべてのキーの長さのクラッキング時間として「実質的に無限」を返すことができます。一般的なユーザーは、1024ビットのRSA鍵を解読することはありませんし、現在も10年も経っていません。地球上にはおよそ12人の人々がいますが、信頼性はありますが、確率は低いですがゼロではないと考えられ、aを因数分解できる可能性がある 2020年以前の不特定の時点での単一の1024ビット整数。
(ただし、RSAまたはRSAを使用するすべてのアプリケーションの実装を、RSAキーをまったく気にすることなく、保持している機密データを回復できるようにすることは非常に簡単です。1024ビットのRSAキーを使用する場合、アプリケーションがハッキングされるときに、RSAキー分解によるものではないことを確認できます。)
短い回答:最も簡単な方法は、 素数定理 を使用することですが、これは近似値であることに注意してください。これらの素数をそれぞれ試すのにかかる時間を見積もります。素数あたりの時間*素数の数はあなたに合計時間を与えます。これにより、ブルートフォース検索の推定値が得られます。
quadratic sieve または general number field sieve の実行時間の見積もりを使用することもできます。これにより、RSA番号を破る人々が実際に使用する因数分解アルゴリズムの推定が得られます。
長い背景:
数論の時間!
最初に、あなたが話している数字のサイズを見てみましょう。 2 ^ 3 = 8、つまり2進数で1000とすると、これは4ビットの数値であり、可能な最小値です。したがって、2 ^ 2 = 4は3ビットの数値(100)です。したがって、与えられたxに対して、十分なビットを確保するために可能な最小値は2 ^(x-1)です。あなたはここで扱っている数の大きさ、n
のすなわちサイズだ2 ^ 2047 = 16158503035655503650357438344334975980222051334857742016065172713762327569433945446598600705761456731844358980460949009747059779575245460547544076193224141560315438683650498045875098875194826053398028819192033784138396109321309878080919047169238085235290822926018152521443787945770532904303776199561965192760957166694834171210342487393282284747428088017663161029038902829665513096354230157075129296432088558362971801859230928678799175576150822952201848806616643615613562842355410104862578550863465661734839271290328348967522998634176499319107762583194718667771801067716614802322659239302476074096777926805529798115328.を加味します。
次の大きな問題は、nがどのように構築されるかです。 RSAの定義からわかるように、n=pq
は、その数の要素として2つの素数を探しています。質問は、どのようにして数が素数であると判断し、それらを数えることができるかになりますか?
したがって、定義により、x
がそれより小さい場合、x=1
を除いて\gcd(p, x)
= 1の場合、その数値は既約になります。しかし、それを改善することはできます。どんな数でも、それが素数であるかそうでないかをかなりすぐに理解すべきです。それが素数でない場合、そのgcdと少なくとも1つの素数は1より大きくなければなりません(そうでなければ、素数になります)。これから、素数でない整数は素数のセットで割り切れる必要があると結論付けます。正式な数学的証明は、実際にはここからの大きな飛躍ではありません。
これはarithemticの基本定理と呼ばれ、問題を少し単純化します。つまり、ある数が素数であるかどうかを判断するときに、すべての数を試す必要がなくなり、すでにわかっている数だけが素数であるということです。
これは明らかに本当に遅いので、別の観察を行いましょう-因子がペアで発生する場合、2つの数値の小さい方が最大でも平方根になります。 N(自然数のセット)に制限されている場合、これは、チェックする必要がある最大可能値の上限を表します。したがって、任意の数値Nについて、2から始まり、sqrt(N)に向かう各整数を検索して、そのリストで素数として決定する各数値を探す必要があります。次に、素数を見つけた場合、それがN自体を因数分解するかどうかを推定できます。私は間違いなく間違ったことを言うので、その実行時間を推定するつもりはありませんが、長い時間がかかります。
これで、RSAの強さがわかります。非常に大きなプライムを選択すると、長い道のりが続きます。現在のところ、2から始めなければなりません。これは明らかにひどいです。
Primality Testing は、さまざまな手法を使用して改善することを目的としています。単純な方法は、今説明した方法です。これらの手法の詳細な説明はおそらくMathに適していると思います。まとめてみましょう。すべてのランタイムはゴミであり、素数をカウントする方法としてこれを使用するのは恐ろしいでしょう。
したがって、素因数分解に効果的に類似しているため、永遠に取らなければ、素数の数を数よりも確実に数えることはできません。何らかの形で素数を数える関数はどうですか?
\pi(n) = \frac{n}{\log(n) - 1.08366}
と入力します 素数定理 素数の近似値で1回試行します。しかし、それはまさにそれです。そのような関数の目的は、素数の数を正確に数えることですが、現時点では単純に推定値を提供します。あなたの目的のために、これは十分に良いと考えることができます。
ただし、これは絶対的な近似値です。記事の残りの部分をご覧ください。とりわけ、他の推定はリーマン仮説に依存しています。
では、 整数分解 はどうでしょうか?さて、これまで2番目に優れた方法は Quadratic Sieve と呼ばれ、最良の方法は general number field sieve と呼ばれます。これらの方法はどちらも、かなり高度な数学に触れています。素因数分解を真剣に考えているとすれば、これらについて読んでいきます。確かに、両方の推定値を素数定理を使用するための改善として使用できるはずです。大きな素数を因数分解する場合は、ブルートフォース検索ではなく、これらを使用したいからです。
しかし、量子について知りたいですか?
わかりました。 Shor's Algorithm を実装できると仮定すると、量子コンピューターでの整数分解は途方もなく短い時間で実行できます。指摘しておきたいのですが、これには量子コンピューターが必要です。私の知る限りでは、RSAを解読できる規模の量子コンピューターの開発は現在のところ途切れています。 量子コンピューティング開発 を参照してください。
いずれの場合でも、Shorのアルゴリズムは指数関数的に高速になります。そのページには、その実行時間の見積もりが表示されます。見積もりに含めることができます。
別のオプションは、可能なキーの大きなデータベースを作成し、それをルックアップテーブルとして使用することです。どうやらあなたはすべての素数さえも必要とせず、カップルだけがインターネットトラフィックの大きな割合を通過するでしょう。
ソース: https://freedom-to-tinker.com/blog/haldermanheninger/how-is-nsa-breaking-so-much-crypto/