web-dev-qa-db-ja.com

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

非暗号学者としていつも私を襲う1つのこと:なぜ素数を使うことがとても重要なのですか?暗号化においてこれらが特別な理由は何ですか?

simple簡単な説明はありますか? (私は多くの入門書があり、Applied Cryptographyが聖書であることを知っていますが、言ったように、私は自分の暗号アルゴリズムを実装するつもりはありません。お願いします :))

ありがとうすべての回答に対して。実際の概念を最も明確にしたものを受け入れました。

180
Michael Stum

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

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

192

シンプル?うん。

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

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

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

133
user54650

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

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

43
Yuval Adam

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

12
nes1983

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

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

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

暗号アルゴリズムに強さを与えるのは、多数を効率的に因数分解する方法がわからないという事実です。ある日、誰かがそれを行う方法を見つけた場合、現在使用しているすべての暗号化アルゴリズムは廃止されます。これは、研究の未解決領域のままです。

12
Barry Brown

暗号化を強化するための優れたリソースがいくつかあります。以下がその1つです。

そのページから:

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

Bruce Schneierの本Applied Cryptographyはもう1つです。その本を強くお勧めします。楽しい読書です。

11
Brian Clapper

RSAが素数のプロパティをどのように使用するかについてもう少し具体的にするために、RSAアルゴリズムは、 オイラーの定理 に大きく依存します。 1に一致 モジュロ N、ここでeはNの オイラーのtotient関数 です。

プライムはどこに入りますか? Nのオイラーのtotient関数を効率的に計算するには、Nの素因数分解を知っている必要があります。 -1)= N-p-q +1。ただし、pとqがわからなければ、eの計算は非常に困難です。

より抽象的には、多くの暗号化プロトコルは、さまざまな Trapdoor functions を使用します。これらの関数は計算は簡単ですが、反転は困難です。数論はそのようなTrapdoor関数(大きな素数の乗算など)の豊富なソースであり、素数は絶対数論の中心です。

9
Eric

私は本を​​お勧めします コードの数学の旅 。この本には、地球に優しい感じがありますが、これは暗号に関するものなので驚くべきことです。この本は、子供の頃からパズルを学習してから16歳のときにケイリー・パーサー(CP)アルゴリズムを作成するまでのサラフラナリーの旅をまとめたものです。暗号化。

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

7
Jason Rowe

もう1つのリソース。 Security Now!エピソード (〜30分のポッドキャスト、リンクはトランスクリプトへ)は暗号化の問題について語り、素数が重要である理由を説明します。

6
Bill the Lizard

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

このスレッド全体には、暗号化で素数がどのように使用されるかについての説明がいっぱいです。このスレッドで簡単な方法で説明する人を見つけるのは難しいですなぜ素数が使用されるのか...おそらく誰もがその知識を当たり前だと思っているからです。

外部から問題を見るだけで、次のような反応を生成できます。しかし、2つの素数の合計を使用する場合、2つの素数が生成できるすべての可能な合計のリストを作成してみませんか?

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

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

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

大きな素数の計算自体は記念碑的な作業であるため、逆算暗号学者と数学者の両方が互いに掛け合わせた2つの素数はhard hard...今日。

5
Calmo

因数分解アルゴリズムは、検出された各要因により大幅に高速化されるためです。両方の秘密鍵をプライムにすると、最初に見つかった要素も最後になります。理想的には、両方の秘密キーの値がほぼ等しいのは、弱いキーの強度のみが重要であるためです。

3
Michael

暗号化アルゴリズムは、一般にセキュリティが「困難な問題」を抱えていることに依存しています。最新のアルゴリズムの多くは、非常に大きな数のファクタリングを困難な問題として使用しているようです。2つの大きな数を乗算すると、そのファクタの計算は「困難」です(つまり、時間がかかります)。これらの2つの数値が素数である場合、答えは1つだけであるため、さらに難しくなります。また、答えを見つけたときに正しい結果が得られることを保証します。

3
gkrogers

暗号化で重要なのは素数ではないが、それは素因数分解問題難易度であると思う

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

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

3
Gant