暗号で素数が重要なのはなぜですか?


191

常に暗号解読者ではない私を襲う1つのこと:なぜ素数を使用することがそれほど重要なのですか?それらが暗号化でそれほど特別なのはなぜですか?

誰もが持っていますシンプルな短い説明を?(私は多くの入門書があり、Applied Cryptographyが聖書であることを知っていますが、言ったように:私は自分の暗号アルゴリズムを実装するつもりはありません、そして私が見つけたものは私の脳を爆発させました-10ページの数式ではありませんお願いします :))

すべての回答をありがとう。実際のコンセプトを最も明確にしたものを受け入れました。


いくつかの観察:1.以下の人々は、「大きな数の素因数分解には時間がかかる」と述べています。実際、どの因数分解についても同じことが言えます。重要なのは、整数!= 0には素数の積として一意の因数分解があることです(長さ0の分解を持つ1を含む)。
TT_ 2013年

1
2.素数は、ハッシュ関数のために重要である理由私の説明を確認してください:stackoverflow.com/questions/1145217/...それは(おそらく簡単な説明ではありません)分野に属する係数をもつ多項式の性質に関係しています。
TT_ 2013年

2
非常に単純な短い説明→解決:a * b = 91。今、解決します:13 * 7 = x。2番目の方程式の方がはるかに高速です(人間またはコンピューターの場合)。
Dem Pilafian

回答:


204

最も基本的で一般的な説明:暗号化はすべて数論に関するものですであり、すべての整数(0と1を除く)は素数で構成されるため、数論では多くの素数を扱います。

具体的には、RSAなどのいくつかの重要な暗号化アルゴリズムは、大きな数の素因数分解に時間がかかるという事実に大きく依存しています。基本的に、メッセージの暗号化に使用される2つの大きな素数の積で構成される「公開鍵」と、メッセージの復号化に使用される2つの素数で構成される「秘密鍵」があります。あなたは公開鍵を公開することができ、誰もがそれを使用してあなたへのメッセージを暗号化することができますが、あなただけが主要な要素を知っており、メッセージを解読することができます。数論の現在の最先端技術を考えると、他の誰もが数を因数分解する必要がありますが、これは実際に実行するには時間がかかりすぎます。


7
私たちは、コンピューティング、量子の時代に入ると、量子コンピュータを使用して素数の因数分解は、ショアのアルゴリズムusiong多項式時間で達成することができることに注意することは適切と思わ en.wikipedia.org/wiki/Shor%27s_algorithmを それは、コンピュータがすでに存在している可能性がありますどの缶RSAのような公開鍵暗号化を復号化します
stujo

16
@stujo:量子コンピューティングの状態を大幅に過大評価しています。そのようなコンピュータが存在しないことは実際に確かです。量子ハードウェアにショアのアルゴリズムを用いた因数と最先端の研究努力されている最大数は21ビットが、数21、素因数3および7ないことを21.ある
マイケルBorgwardt

1
どのデータが最新であるかはわかりません。最新の作業に関する情報を取得するのは難しいので、2012年に戻ったと思います。この記事は2014年のものです(m.phys.org/news/2014-11-largest-factored- Quantum-device.html)2016年の公開データを見たことはありますか?分類される可能性のあるものを除外しないこと。Shorsアルゴリズムを実行することはできませんが、D-Waveは1000 qbitを超えています
stujo

1
@stujo:私たち全員がQuantum CPUを使用する場合、同じ原則が適用されます。素数は成長し続ける可能性があるため、量子CPUに対してより大きく実用的でないものを見つけることがすべてであり、通常のCPUを使用してキーを作成し、一部がQuantum CPUを使用する場合に問題が発生します。それらを壊します。私が理解しているように、量子CPUの能力はqbitを使用することで、各qbitは3つの値を持つことができるため、新しいテクノロジーはbase 2ではなくbase 3です。それがパフォーマンスにどのように影響するかわかりません。
juanmf 2017年

5
@juanmf:量子コンピューティングに対するあなたの理解は完全に間違っています。3つの値を持つこととはまったく関係がなく、まったく興味がありません。詳細は非常に複雑ですが、一部の量子アルゴリズムは、非量子ハードウェア上の「通常の」アルゴリズムよりもBig-Oの複雑さが低い問題を解決できるという効果があります。
Michael Borgwardt 2018

137

簡単?うん。

2つの大きな素数を乗算すると、2つの(大きな)素数のみを持つ巨大な非素数になります。

その数を因数分解することは重要な操作であり、その事実は多くの暗号アルゴリズムのソースです。一方向関数を見るをしてください。

補遺:もう少し説明。2つの素数の積は公開鍵として使用でき、素数自体は秘密鍵として使用できます。2つの要因のいずれかを知っていることによってのみ元に戻すことができるデータに対して行われる操作は、暗号化を解除するのは簡単ではありません。


2
また、因数分解の問題に加えて、現代の暗号の多くも(または代わりに)離散対数問題に依存していることにも注意してください。どちらも「一方向」関数です。既知の入力を受け取って答えを計算するのは簡単ですが、答えを受け取ってそれらの入力を計算するのは困難です。
nezroy、2009年

4
この説明を「一方向関数」という用語にリンクすると役立ちます。en.wikipedia.org
Chris Conway

しかし、公開鍵を使用して暗号化できる場合、なぜそれを使用してその逆を行うことができないのでしょうか。
jayarjo

45

これは非常にシンプルで一般的な例です。

RSA暗号化アルゴリズム、一般的に安全な商取引のウェブサイトで使用され、反対のことを行うことは極めて困難であるのに対し、2(非常に大きな)素数と乗算それらを取ることは容易であるという事実に基づいている-意味:テイクA非常に大きな数であり、2つの素因数しかないため、それらを見つけます。


30
参考までに、2つの素数を掛けた数をセミプライムと呼びます。
マシューBrubaker、

15

重要なのは素数そのものではなく、素数で動作するアルゴリズムです。特に、数(任意の数)の因子を見つける。

ご存知のように、数値には少なくとも2つの要素があります。素数には、1とそれ自体という2つの要素があるというユニークな特性があります。

因数分解が非常に重要である理由は、数学者とコンピューター科学者が、考えられるすべての組み合わせを試してみなければ数値を因数分解する方法を知らないためです。つまり、まず2で割り、次に3で割り、次に4で割ります。素数(特に非常に大きなもの)を因数分解しようとする場合、(本質的に)2とその大きな素数の間の可能なすべての数を試す必要があります。最速のコンピューターであっても、暗号化で使用される種類の素数を因数分解するには数年(数世紀も)かかります。

暗号アルゴリズムに強みを与える大きな数を効率的に因数分解する方法がわからないのは事実です。誰かがその方法を見つけた場合、私たちが現在使用しているすべての暗号化アルゴリズムは廃止されます。これは未だ研究のオープンエリアです。


10
実際には、因数分解しようとしている数の平方根までの素数のみをテストする必要があります。
マシューBrubaker、

3
知っている。それは私が単純さの名の下に「見落とした」細部でした。
バリーブラウン

@MatthewBrubakerこれがなぜなのか説明していただけませんか?よくわかりません。
Kartik Chugh

4
@KartikChughヅ言うことnは素数ではありません&n = a * b。もしならa > sqrt(n)bもっと小さくなければならず、逆もまた同じですa * b > n。したがって、素数をチェックするには、sqrtまでしかチェックしません。
Abhinav Gauniyal

13

整数を素因数に因数分解する高速アルゴリズムを誰も知らないからです。しかし、一連の素因数が特定の整数に乗算されるかどうかを確認するのは非常に簡単です。


1
興味深いことに、数値が素数であるかどうかをすぐに知ることはすでに可能です。
nes1983

ここに「主要な要素が大きい場合」が欠けています。
Ben Voigt 2013年

@ベン:それは欠けていません。問題は一般的に難しいです。一般的に難しい問題は、簡単な場合があることに注意してください。この場合、小さな素数だけが決して簡単なケースではありません。
nes1983

2
「公共の場で」誰も知らない。さまざまな世界政府の諜報機関が、彼らが共有していない技術を持っている可能性があります。彼らは膨大な数の数学の卒業生を雇っています。たとえば、NSAは、「Dual EC_DRBG」によるランダムな素数生成を密かにプロモートしました。これは、彼らが弱体であると知っていたものであり、一般的な使用のための標準的な暗号化スキームの一部として行われていました。bits.blogs.nytimes.com/2013/09/10/…– 2015
明るく

ドン:雪に覆われた文書は、そうではないことを明らかにしているようです。彼らはかなり決定的な絵を描きます(概して、コーナーが存在する可能性があります)、NSAは暗号化されたデータを、彼らだけが知っている特別な数学の魔法によって解読することはできません。シュナイアーはこの問題について広範囲に議論した。
nes1983

12

暗号化を強化するための優れたリソースがいくつかあります。ここに一つあります:

そのページから:

1977年にRon Rivest、Adi Shamir、およびLen Adlemanによって発明された最も一般的に使用される公開鍵暗号化システムでは、公開鍵と秘密鍵の両方が、比較的単純な数式に従って、大きな素数のペアから導出されます。理論的には、式を逆に操作することにより、公開鍵から秘密鍵を導出できる可能性があります。しかし、大きな素数の積だけが公開され、そのサイズの素数を素数に因数分解することは非常に難しいので、世界で最も強力なスーパーコンピュータでさえ、通常の公開鍵を破ることはできません。

ブルース・シュナイアーの著書「応用暗号法」もまた別です。私はその本を強くお勧めします。楽しい読書です。


9

RSAは素数の性質をどのように使用するかについて、もう少し具体的には、RSAアルゴリズムは時に大きく依存オイラーの定理比較的素数「」と「N」のために、^ eは1と合同であると述べており、剰余ところ、N eは、Nのオイラーの張り関数です。

素数はどこに入るのですか?Nのオイラーの張り関数を効率的に計算するには、Nの素因数分解を知る必要があります。RSAアルゴリズムの場合、いくつかの素数 "p"と "q"のN = pqの場合、e =(p-1)(q -1)= N-p-q + 1.しかし、pとqを知らなければ、eの計算は非常に困難です。

より抽象的には、多くのクリポグラフィックプロトコルは、さまざまなトラップドア関数を使用します。これらの関数は、計算は簡単ですが、反転が困難です。数論は、そのようなトラップドア関数(大きな素数の乗算など)の豊富なソースであり、素数は数論の中心です。


7

私は本「A Mathematical Journey In Code」を提案します。この本は暗号に関するものなので、驚くほど素晴らしく感じられます。この本は、子供の頃のパズルの学習から16歳のときにCayley-Purser(CP)アルゴリズムを作成するまでのサラフラナリーの旅をまとめたものです。一方向の関数、数論、素数、およびそれらがどのように関連するかについて、驚くほど詳細な説明を提供します暗号化。

この本をあなたの質問にさらに具体的にしているのは、サラがマトリックスを使用して新しい公開鍵アルゴリズムを実装しようとしたことです。素数を使用するよりもはるかに高速でしたが、それを悪用できるループホールが見つかりました。彼女のアルゴリズムはプライベート暗号化メカニズムとしてよりよく使用されたことがわかりました。この本は、暗号化に素数を使用することの優れた証であり、非常に賢い個人の試練と挑戦に耐えてきました。



6

私は数学者でも暗号学者でもないので、ここに素人の言葉で外見を示します(派手な方程式はありません。申し訳ありません)。

この全体のスレッドがについての説明で満たされているどのように素数は暗号で使用されている、それは簡単な方法で説明するこのスレッドに人を見つけるのは難しいですなぜ素数が使用されている...最も可能性付与のために、誰もがその知識を要するため。

外部から問題を見るだけで、次のような反応が起こります。しかし、2つの素数の合計を使用する場合、2つの素数が生成できるすべての合計のリストを作成してはどうでしょうか。

このサイトには、455,042,511の素数のリストがあり、最高の素数は9,987,500,00010桁)です。

既知の最大素数(2015年2月現在)は2の257,885,161 − 1の累乗であり、17,425,170桁です。

これは、すべての既知の素数のリストを保持する意味がないことを意味します。数値を取り、それが素数かどうかを確認する方が簡単です。

それ自体で大きな素数を計算することは記念碑的な作業なので、暗号学者と数学者の両方が互いに乗算した2つの素数を逆算することは、今日では十分難しいと言うでしょう...


3
最後の段落だけが本当に有効です。合計の引数は、任意の合成数についても言えます(広い範囲(技術的には無限に大きい)があり、すべての合計の格納は実行不可能/愚かです)。また、素数の合計は暗号化にそれほど関連性がありません。より重要なのは(通常、RSAの場合のように)それらの積です。また、逆算すると、おそらくファクタリングになります。それはおそらくあなたがそこで意味することを助けるでしょう。
initramfs

4

暗号化アルゴリズムは一般に、「困難な問題」を抱えているというセキュリティに依存しています。最近のほとんどのアルゴリズムは、非常に大きな数の因数分解を困難な問題として使用しているようです。2つの大きな数を掛け合わせると、それらの因数の計算は「困難」です(つまり、時間がかかります)。これらの2つの数値が素数である場合、答えは1つしかないため、さらに困難になり、答えを見つけたときに正しい答えであることを保証します。同じ結果が得られるのは他の答えではありません。


4

私はどのような暗号で重要なことは、それ自体をプライムされていないと思うが、それは難しい素因数分解問題

2つの素数mとnの積であることがわかっている非常に大きな整数があるとすると、mとnを見つけるのは簡単ではありません。RSAなどのアルゴリズムはこの事実に依存しています。

ちなみに、この素因数分解問題を量子コンピュータを使用して許容可能な時間で「解決」できるアルゴリズムに関する公開論文があります。そのため、暗号化の新しいアルゴリズムは、量子コンピューターが町にやってきたとき、素因数分解のこの「難しさ」にもはや依存しないかもしれません:)


3

因数分解アルゴリズムが見つかるごとにかなり高速になるからです。両方の秘密鍵を素数にすることで、最初に見つかった要素も最後になります。理想的には、弱いキーの強度のみが重要であるため、両方の秘密キーの値もほぼ等しくなります。


これは私には少し冗長に見えます。トップの答えにコメントできる弱いキーパートの一部:)
Ulysse BN

-1

素数は、与えられた数が素数であるかどうかを判断するのにかなりの時間を費やすため、主に暗号で使用されます。ハッカーにとって、アルゴリズムを解読するのに長い時間がかかると、アルゴリズムは役に立たなくなります。


7
数が素数であるかどうかを判断することは安く、安くする必要があります。RSAの素因数として素数、または有限体暗号のモジュラスとして素数を選択したことを他にどのように知っていますか?高価なのは、大きな合成数をその大きな素因数に因数分解することです。
CodesInChaos 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.