web-dev-qa-db-ja.com

公開鍵を使用して逆方向に作業してメッセージを復号化できないのはなぜですか?

タイトルが示すように、メッセージ、公開鍵、および暗号化されたメッセージを使用してメッセージを復号化する方法を理解できない理由を知りたいと思います!

キーを使用してメッセージを暗号化する方法と、暗号化を「元に戻す」ために逆方向に作業する方法を理解できません。

63
Max

コンピュータサイエンスには 一方向関数 があります(数学的には証明されていませんが、それ以外のことを証明すれば豊かで有名になります)。これらの関数は1つの方法で簡単に解決できますが、逆にするのは困難です。計算は簡単です569 * 757 * 911 = 392397763紙に1〜2分で。もう片方はあなたにあげたなら392397763と主要な要因を見つけるように頼まれました、あなたは非常に苦労するでしょう。これらの数値が本当に大きい場合、世界最速のコンピュータでさえ、妥当な時間内に因数分解を元に戻すことができなくなります。

公開鍵暗号では、これらの一方向関数は巧妙な方法で使用され、誰かが公開鍵を使用して何かを暗号化できるようにしますが、結果のメッセージを解読することは非常に困難になります。 Wikiの記事 RSA cryptosystem をお読みください。

88
Lucas

あなたの質問は、次のようなものです( Tom Stoppardへの謝罪 ): "ライスプディングにジャムをかき混ぜることはできますが、もう一度かき混ぜることができないのはなぜですか。 「

一部の数学演算は、順方向と同じくらい簡単に逆方向に実行できます。たとえば、100を引くのと同じくらい簡単に100を数値に追加できます。ただし、一部は逆にするのがより困難です。たとえば、xを取得してg(x) = a(x^5)+b(x^4)+c(x^3)+d(x^2)+ex+fを見つけた場合、単純な乗算と加算を実行するだけで済みます。しかし、g(x)からxに戻すのは 5次方程式の一般的な代数解はありません のように(代数的に)困難です。それが(二次方程式ではなく)当てはまる理由はすぐにはわかりませんが、そうです。より適切な例として、34129と105319がどちらも素数(そうである)であると言った場合、それらの製品が3594432151であることがすぐにわかります。 、あなたはおそらくそれがかなり難しいと思うでしょう。

公開鍵暗号化は、一対の鍵を使用します。一般に、秘密鍵は一方向に進むアルゴリズムをリバースするのが難しいパラメータを提供します(たとえば、プレーンテキストから暗号文へ)公開鍵は、逆方向に進むアルゴリズムをリバースするためのパラメータを提供します。

したがって、逆方向に作業できないのは、アルゴリズムがこれを難しくするように設計されているからです。

44
abligh

ジャグリングは簡単です。適切なタイミングでボールを投げるだけなので、落ちたときにフリーハンドができます。 1つまたは2つのボールの場合、これは簡単です。 3つで十分簡単です。ボールが増えると、(意外にも)難しくなります。さえ実質的により難しい。

すべての一般論として、n-bitキーを使用して行われる「リバース」暗号化は、2のジャグリングのようなものです。n ボール。 2048ビットの鍵では32317006071311007300714876688669951960444102669715484032130345427524655138867890893197201411522913463688717960921898019494119559150490921095088152386448283120630877367300996091750197750389652106796057638384067568276792218642619756161838094338476170470581645852036305042887575891541065808607552399123930385521914333389668342420684974786564569494856176035326322058077805659331026192708460314150258592864177116725943603718461857357598351152301645904403697613233287231227125684710820209725157101726931323469678542580656697935045997268352998638215525166389437335543602135433229604645318478604952148193555853611059596230656個のボールのようなものです。とか、ぐらい。

(もちろん、公開鍵アルゴリズムは多くの数学的構造を使用しているため、賢明な人々は数学を活用してボールの数を162259276829213363391578010288128に減らしました。

39
Thomas Pornin

Max、暗号化について考えるためにこれまでに作成された最高のツールは、ルービックキューブです。それらを解決することが未解決の問題である世界を想定している場合、DiffieHellmanKeyExchange、RSA署名、RSA暗号化などの直接的な類似物があります。手で書き留め、キューブでそれらを実行してそれらを交換することでトリックをプレイできます。群論方程式は、暗号キューブとルービックキューブで同じです。

しかし、心に留めておくべき重要なことは、私があなたを悩ませなければならないことだと思います:あなたは正しいです。これらの操作をすべて反転することは「可能」です。技術的には、f(x) and f_inverse(x)、ここでf(x)は多項式時間で実行されます(つまり、大きな数値をすばやく暗号化できます) )、f_inverse(x、s)は指数関数的に実行されます(つまり、中程度の数でも実行不可能)-f_inverseへのプラグインに適切な秘密のsがない場合。このような関数のペアはトラップドアと呼ばれます。一般的なトラップドアは、素因数分解と離散対数として。

7
Rob

あなたがしなければならないことは、公開鍵暗号で読むことです。簡単に言えば、1つのキーで暗号化し、もう1つのキーで復号化できるアルゴリズムに基づいているため、逆方向に作業することはできません。

これは、起こっていることの簡単な説明です。問題の核心に到達したい場合は、次のようなソースを見ることができますが、すぐに崖から離れて、簡単な場合とそうでない場合がある数学に注意してくださいあなたがフォローするために: http://nrich.maths.org/22

2
BeepBeep

一般に、十分な情報がないため、逆に(明らかな方法で)作業することはできません。

RSAは、大きな数を因数分解する困難さに依存しています。 2つの大きな素数、pとqを乗算することにより、RSA係数nを生成します。 pにqを掛けるのは簡単です。 q = n / p(またはp = n / q)を計算して、操作を元に戻すこともできます。簡単にできないことは、pとqの両方を捨て、nからそれらを計算することです。これは別の問題であり、すでに使用したプロセスの一部を取り消すものではありません。

同様に、暗号化キーeを使用したメッセージmのRSA暗号化には、(m ^ e) mod nの計算が含まれます。理論的には、ログを使用してm ^ eを反転させることができますが、モジュロ演算を行わないと、この数値は大きすぎて処理できません。いずれの場合でも、モジュロ演算は数値の一部を破棄するため、簡単な方法で逆方向に作業するために必要なすべての情報が得られません。

0
Pete

この公開鍵暗号化(または非対称暗号化)では、何かを暗号化するには、次のようにします。

メッセージを(数値として)送信する:5だとしましょう。

3 ^ 5を計算します(「秘密」に引き上げられた3)= 243

別の数値で割った係数を計算します。たとえば、143としましょう。つまり、243/143 = 100です。

どうぞ。暗号化された秘密は100です。

シークレットを見つけるには、秘密鍵を使用せずに、143で割った結果として結果が100になる数を見つけ、その3次基数を見つけるだけです。

0
woliveirajr