web-dev-qa-db-ja.com

SSH-イブがパスフレーズと公開鍵を持っている場合、彼女は秘密鍵を導出できますか?

利用した ssh-keygen RSA 4096ビットのSSH秘密鍵と公開鍵のペアを作成します。秘密鍵にはパスフレーズを使用しました。

攻撃者のイブが公開鍵に加えてパスフレーズを知っている場合:

  1. 彼らは秘密鍵を導出できますか? -私は十分な時間をとってはいを推定します。
  2. 公開鍵を導出できる場合、これを行うためにどのようなアルゴリズムを使用できますか? - 知りません。
  3. 各アルゴリズムが秘密鍵を導出するために必要な操作の数(または順序)はいくつですか?

更新-1台のコンピューター( http://iamnirosh.blogspot.co.uk/2015/02/factoring-rsa-keys.html )で「yafu」を使用すると、ブルートフォースがクラッキングするようですプロセス/ファクタリングにかかる​​時間が大幅に短縮されます。

  • 分散環境とスーパーコンピューターでyafuがどの程度の違いをもたらすかを見るのは興味深いでしょう。
33
unseen_rider

秘密鍵はパスフレーズとは無関係です。公開鍵も同様です。秘密鍵がパスフレーズで保護されている場合でも、公開鍵は通常、暗号化されずに保存されます。 (公開鍵が暗号化された形式で格納されている場合は例外がありますが、基本的なケースでは十分に大きな鍵を想定しているため、公開鍵はmeant公に配布されるか、少なくとも攻撃者が利用できると想定できます。)

誤解しないでください。秘密鍵をパスフレーズで保護することは非常に良い考えであり、そうすることをお勧めします。秘密鍵と公開鍵は、互いに数学的関係にあります。しかし、あなたの秘密鍵はまだ数にすぎません。この番号は、この番号を保持するファイルの暗号化に使用するパスフレーズとは関係ありません。

攻撃者のイブが公開鍵に加えてパスフレーズを知っている場合。彼らは秘密鍵を導出できますか? -私は十分な時間があってイエスだと思います.

公開鍵は数学的には秘密鍵に関連しており、簡単な答えは「はい」です。理論上、十分な時間があれば、一方を他方から派生させることができます。暗号化された通信チャネルが設定される前にアイデンティティを確立するために、ほぼ定義上公開鍵を平文で送信する必要があるため、イブ(慣例により、イブは受動的な盗聴者であり、マロリーは真ん中のアクティブな男です)が見ることができますそれ。

RSAの秘密鍵から公開鍵を取得するのは簡単です。公開鍵から秘密鍵を導出することは、計算上実行不可能であり、十分に大きな鍵では事実上不可能です。私たちが知る限り、古典的なコンピューター(現在使用しているコンピューター)で4096ビットのパブリックRSAモジュラスから秘密RSAキーデータをすばやく取得する方法はありません。 2048ビットの公開RSAモジュラスに対する効率的な攻撃でさえ、かなりの偉業になりますが、1024ビットのRSAは、妥当な時間内で可能な範囲内にあり、 768ビットのRSA秘密鍵は、 public (これは、合理的に最新のハードウェアで2,000 CPU年のオーダーに相当します)。

それで、「十分な時間をかけて」、それは可能です。しかし、それはパスフレーズやパスフレーズの欠如とは無関係です。

上記のwhyを理解するために、簡単にするために教科書RSAを使用します。 (実世界のRSAは、教科書RSAと似ていますが、完全には同じではありません。教科書RSAが扱っていない多くの実世界の攻撃があるためです。)ここで、いくつかの他の数の中で、秘密鍵はペアです。一般にpおよびqと呼ばれる素数と、キーはその製品ですn=pq、ここでnは、公開モジュラスと呼ばれます。 pおよびqの場合、nは境界線の取るに足らないことです(2つの-非常に大きい-数値を一緒に乗算する必要があるだけです)が、npおよびqの対応する値を決定することは非常に難しい。ただし、これがであるという証明はありません。多くの非常に賢い人々が長い間問題に取り組んできたとしても、実際にそれを行うための公に知られている簡単な方法がないことだけです。これは、15 = 3 * 5であると考えているようなものですが、数桁の数字ではなく、数百の数字が含まれている点が異なります。一次近似で、4096ビットのRSAキーを使用すると、nは約1300桁の10進数であり、 pおよびqは、それぞれ600桁を超える10進数です。ログのためにこれを見ることができます10(24096)≈1233、および10615* 10615= 101230

公開鍵を導出できる場合、これを行うためにどのようなアルゴリズムを使用できますか? - 知りません。

Semiprime 数値因数分解アルゴリズム。 10より大きい数の現在の最新技術100 (10進数で100桁、約332ビット)は General Number Field Sieve (GNFS)アルゴリズムです。

量子コンピューターは Shor's algorithm を使用してセミプライムを効率的に因数分解できますが、(少なくとも公共の場では)実際に機能する十分な大きさの量子コンピューターを構築する方法はまだわかりません。これがいわゆる ポスト量子暗号 へのプッシュが意味することの一部です。最後に聞いたところによると、最先端の技術では15を考慮に入れていましたが、それは数年前のことです。公に知られている量子コンピューターが15より大きい数を因数分解できるようになった可能性があります。

各アルゴリズムが秘密鍵を導出するために必要な操作の数(または順序)はいくつですか?

GNFSを使用して数を因数分解する複雑さについては、Wikipediaのページで説明されています。操作の数を直接議論することは本当に難しいですが、前提条件についてのいくつかの議論の後、ウィキペディアの記事は、数値フィールドふるいの実行時間は超多項式であるがサブ指数関数であると述べて要約しています入力のサイズで。さまざまな因数分解時間と、さまざまな RSA数 に使用されるアルゴリズムを比較できます。これは、1990年代初頭に始まった競争の一部でした。整数因数分解に関する知識を拡張するために、現在は非アクティブ。

また、比較してみてください 確立されているHTTPS接続を監視している人が、それを復号化する方法を知らない可能性があるのはなぜですか? HTTPSはSSHとは動作が異なりますが、基本的な動作原理は同じです。

51
a CVn

パスフレーズはaccessing秘密鍵から保護します

パスフレーズは、物理アクセスが発生した場合に秘密鍵を保護するためのものです。ハッカーがサーバーにサインオンし、証明書ストアにアクセスできる場合、ハッカーはパスフレーズを使用して 秘密キーを含む証明書のコピーを取得 できます。うまくいけば、ハッカーはあなたの証明書ストアに定期的にアクセスできないのですが、ハッカーが単に不満を抱いている従業員である場合もあります。

公開鍵algorithmは秘密鍵の導出を防ぎます

ハッカーがnotに証明書ストアへのアクセスを許可し、パスフレーズと公開鍵しか持っていない場合、秘密鍵を取得することはできません。これは、RSAアルゴリズムが巧妙に設定されているためです。秘密鍵から公開鍵への関係は トラップドア関数 であり、一方の方向で計算するのは簡単ですが、もう一方の方向では計算できません。

例を示します。 X * Y = 3014569で、XとYが整数であると伝えた場合、XまたはYを教えていただけますか? (私がXとYを選択した方法のため)非常に難しいでしょう。一方、X = 1237およびY = 2437と言った場合、X * Y = 3014569と簡単に言うことができます(乗算する必要があるだけです)。仕方。これは prime factorization 問題として知られています。

そうは言っても、彼はcould数千年かけて何度も罠の扉を通り抜け、あなたの秘密鍵を見つけました。このような:

  1. 可能なすべての秘密鍵を反復処理します
  2. 各秘密鍵について、公開鍵を導出します
  3. 計算された公開鍵をターゲットの公開鍵と照合します

これはブルートフォース攻撃と呼ばれます。時間がかかります。

いくつかのショートカットがあるかもしれません(例: 量子コンピューター を使用)。数学者は常にこのようなことを回避するための新しい方法を考え出します。しかし、今のところ、4096ビットのキーは予見可能な未来まで続くのに十分長いと考えられています(詳細は this link を参照)。

24
John Wu

公開鍵から秘密鍵を導き出すことは可能かもしれません(誰もそれを効率的に行う方法を誰も知らないと考えられているだけです)が、パスフレーズはまったく役に立ちません。

Ssh-keygenは最初にパスフレーズとはまったく関係のない鍵の一部を生成し、パスフレーズはディスク上の秘密鍵の暗号化にのみ役立つことを理解する必要があります。したがって、パスフレーズは、暗号化された秘密鍵を知っている人にのみ役立ちます。

ところで、秘密鍵のパスフレーズを変更することができます(ssh-keygen -p)公開鍵を変更せずに。

5
user2233709

彼らは秘密鍵を導出できますか? -私は十分な時間があってイエスだと思います.

パスフレーズは、クライアントシステム上の秘密鍵のストレージを暗号化するために使用されるだけなので、暗号化された秘密鍵ファイルがある場合にのみ役立ちます。つまり、これは単純に、攻撃者が公開鍵から秘密鍵を導出できるかどうかということになります。

その答えは、キーのタイプと長さ、およびそれらが利用できる計算リソースによって異なります。

RSA鍵の場合、クラックの最もよく知られている方法は、係数を因数分解することです。係数が因数分解されると、係数係数から秘密鍵を再導出することは簡単です。

因数分解の最もよく知られているアルゴリズムは、一般的なフィールド番号ふるいです。 768ビット数の因数分解は公に実証されています。 1024ビット数の因数分解は公的には実証されていませんが、スパイ機関や同様にリソースを提供している組織で実現可能であると信じられています。 2048ビットのRSAは、分解技術に大きな進歩がないか、RSAを攻撃する別の方法が見つからない限り、安全でなければなりません。 4096ビットはパラノイアのもう1つのステップです。

4096ビットのキーでも安全であると絶対に述べることはできないことに注意してください。因数分解アルゴリズムに突破口があるか、RSAを攻撃するための別のルートが見つかる可能性は残っています。

従来のDSAの場合、最もよく知られている攻撃経路は、モジュロプライムフィールドの離散ログ問題の解決です。このための最もよく知られているアルゴリズムは、一般的なフィールド数のふるいでもありますが、このアルゴリズムを離散対数問題に適用することは、素因数分解問題に適用するよりも困難です。図1024ビットDSA鍵は、1024ビットRSA鍵よりも解読が少し難しいですが、おそらく完全に実行不可能ではありません。

楕円曲線DSAの場合、最もよく知られている攻撃経路は、楕円曲線フィールドの離散対数問題を解くことです。これは、モジュロプライムフィールドで解くよりもはるかに困難であると考えられているため、想定されるセキュリティの特定のレベルでは、キーを短くすることができます。

2
Peter Green

公開鍵暗号化は、公開鍵から秘密鍵を導出する方法がないという信念に依存しています。 公開鍵から秘密鍵を生成する既知のアルゴリズムがあるため、暗号化は非対称と呼ばれます。これは、そのようなアルゴリズムがないことを意味するのではなく、単に不明です。

「逆」アルゴリズムが存在しない場合、秘密鍵を解読するプロセスには、時間、計算能力、推測/仮定が必要です。 RSAキーのセキュリティが心配な場合は、8192ビット以上のキーサイズを使用してください。プラットフォームのキー生成アルゴリズムが、生成されたキーのセキュリティを危険にさらすショートカットをとっていないと仮定します。逆アルゴリズムがない限り、デフォルトからキーサイズを増やすことは、不審な人々から身を守る最も簡単な方法です。

したがって、パスフレーズと公開鍵を使用して秘密鍵を解読する方法は知られていないという点で、他の人にも同意する必要があります。

0
user134702