web-dev-qa-db-ja.com

ssh公開鍵を公開することは完全に安全ですか?

RSAキーを使用して、sshでリモートサーバーにログインします。また、自分のドットファイルを一般公開されている場所のバージョン管理下に置いているので、新しいサーバーをすばやくセットアップして好きなように機能させることができます。

現在、バージョン管理下にある.sshディレクトリはありません。しかし、.ssh/authorized_keysをdotfileリポジトリーに保持できれば、ステップを節約できます。

それは単なる公開鍵です。もちろん、私の秘密鍵は、私の所有する信頼できるクライアントマシンにのみ置かれます。一般的なsshdバージョンとの幅広い互換性とセキュリティの間の最良のバランスのように思えるため、これを4096ビットのRSAキーにしました。

だから私の質問は、文字通り公開鍵を公開することでセキュリティ上の問題はありますか?誰も私のdotfilesリポジトリを定期的にチェックしている人はいませんが、それは秘密ではなく、興味のある人なら誰でも読むことができます。

108
Brian

公開キーは、公開キーの共有、読み取りアクセス、または公開用に設計されています。

秘密鍵は秘密であり、これらの秘密鍵の所有者のみがアクセスできるようにする必要があります。

この点を理解するには、これまでにアクセスしたことのあるすべてのHTTPS Webサイトを思い出してください。いずれの場合も、HTTPSの一部として、サイトから公開鍵が提供されます。したがって、公開しても安全であるだけでなく、このようにすることも意図されています。たとえば、アドレスバーの緑色の鍵アイコンをクリックすると、このWebサイトの公開キーを見つけることができます(HTTPSで表示している場合)。

*.stackexchange.com

Modulus (2048 bits):
af 46 03 ce c7 13 e6 2e 93 d8 56 91 b1 31 8d 0a 
22 c1 f0 eb 4f 5e ef 0d f6 20 32 b9 a4 4e 87 f9 
d2 d2 44 51 b0 df 30 50 c9 35 4e 68 19 84 fb 98 
33 aa 05 4b 7e fb 57 c5 b6 2e a8 4b 04 ca cf 5e 
2e e5 9e 1b ca b7 60 c5 58 2c b0 df c4 6b 0d b1 
2c 33 97 73 54 61 2b 9a 1b b1 dc 5d 10 a9 c4 c8 
f7 6c e3 55 6e b5 0e 61 3b 35 24 0b 89 1e 32 a2 
75 69 4e 97 40 68 ee 23 48 f2 71 9f c7 7e e2 9d 
6c 22 55 36 24 64 a4 f0 b6 52 58 5a 9a 44 e7 3b 
2a d5 ed 95 63 f8 1d a8 4d 45 9b 5d c2 f2 f9 74 
81 06 18 d5 b1 fb b0 7e 5d 50 1f 63 5c a0 73 f5 
22 b2 57 64 03 e6 b7 0f 6f b7 58 0b 57 80 56 51 
65 9f f5 09 61 63 29 62 4d 30 02 3a 64 10 2d 95 
b8 12 36 04 58 c5 d7 1d 95 e2 21 3c b0 b3 93 35 
b2 b1 f9 6d 7e 20 66 b2 68 33 e9 50 a8 15 1e 0a 
80 9a 3c 19 dd cc 79 35 a8 8c 1b 61 33 5d 12 2f 

Exponent (24 bits):
65537

この他の例はgithub.comにあり、公開鍵をgit clone [email protected]:<user>/<repo>で使用するためにアカウントに添付するように要求されています。

あなたは実際に次のURLでgithub上のすべてのユーザーの公開鍵を確認できます

https://api.github.com/users/<user>/keys

私は次のようにリストされています:

[
  {
    "id": 18667533,
    "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDraswAp7EbMwyYTzOwnSrsmr3nNMDaDf4e2YVaehLc9w6KN2ommomXZO8/V9N3yINNveGqrcVc9m2NTm04iILJUKd9o25ns8QIG6XSCt9SVx/Xw1J/SXfIWUKuEe0SgmIwVwkk8jetfG/Z7giSiU3dxxC4V9lHQCFgKOKBWGpNbINmqtmBWncX3HJKeXrpSddoePbZZ84IEFr4CWUlqoXyphpxqzpfA9sRpVTtyBPcUSj68j4+gKgEQN65G6LXys3q8BiwWxucci6s34vp4L8jKn7uYh26vLuT1oIbODJphCmpvMH+ABPkNQcFBk4rRLpCEAsoAhmvTk/NjnfZM+nd"
  },
  {
    "id": 21175800,
    "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5tPV481acCZ5wm2E15gXkVRaKCE3lic/O8licyzW+eDE9rPpG4rHRRH9K2ENmstUh5nLEenb0nNhEGnsf3pIJRZ07JXwv16+lsJBSS8+YiWeMBlwo+JNaxwSyUlYUgl1ruogr0nR0KBqsYSWXuG0s2jm2IOV+0B/0fzDR/tiLFLj50+iJ9qCDSk/8fAsXz2xG39KcUcxmCbDXb/qSdESWaZc+pafNRiCcVNfMkKeDViWlzI4VkiTcfVCraHUuYx4jgOBB526dRWSDG9bLchwlJiopgT+k4X/TNe2l01DPwYetwLvY6V8rcPrjjJL8ifRTMSof1zRIoBgJZhRzWc1D"
  }
]

正反対は秘密鍵の場合に当てはまります。これは常に保護されており、第三者に提供したり、暗号化せずに電子メールで交換したりすることはありません。

誰かがあなたの秘密鍵にアクセスした場合、彼らはあなたの公開鍵で保護されたデバイスや暗号化されたファイルにアクセスすることができます。また、あなたに代わって署名できることも意味します。 [〜#〜] very [〜#〜]誰かがあなたの秘密鍵にアクセスした場合、それは悪いことです。

多くの場合、秘密鍵ファイルのアクセス許可が、あなた以外のユーザーに読み取りアクセスを許可するものであることが検出された場合、SSHクライアントは機能しません。

103

Ssh公開鍵を公開することは完全に安全ですか?

いいえ、とにかく心配することなく、とにかく行うことができます(多くの人がそうします。 https://sks-keyservers.net/i/ または https://pgp.mit .edu /

完全に安全ではない理由は、公開鍵がわかっていれば、きちんとした数学で秘密鍵を計算できるからです。あなたの公開鍵には、基本的に2つの素数の積である大きな数nが含まれており、これら2つの素数を見つければ、私はあなたの秘密鍵を簡単に見つけることができます。

心配する必要がない理由:n = 21の場合はnの因数を見つけるのは簡単ですが、nの場合ははるかに困難ですは4096ビット長の数値です。現在生きているか死んでいる数学者は、許容できる時間にそのような多数を因数分解する方法を発表していません。最もよく知られている方法を使用すると、nを構成する要素が誰かに見つかるずっと前に、私たちはみな死んでしまいます。

誰かが大きな数を因数分解する近道を見つけるのは完全に不可能ではありません。そうなると、RSAは役に立たなくなります。それまでは、心配する必要はありません。

SSHは、RSA(または別の署名方式)とDiffie Hellman(セッションキー交換用)の両方を使用します。 Diffie Hellmann鍵交換用の1024ビット(数学的にはRSAとは少し動作が異なります)は、十分に大きくない場合があります。これは、Diffie Hellmanを使用する一部のssh実装(および私が正しく覚えている場合はssl実装)がランダムに選択する代わりに定数を再利用するためです。 1024ビットは、離散対数を因数分解または計算するために信じられないほどの量の計算能力を必要とします(そして、それを迅速に行うためにマシンを構築するために数十億ドル)。インスタンスは、このような多数の暗号化されたセッションを中断します。ただし、2048ビットと4096ビットは安全と見なされています。

RSAキーについても同様です。 1024ビットの数値がまだ公に因数分解されているとは思いませんが、おそらくそれは地平線上にあるでしょう。つまり、予算が非常に大きい機関が1024ビットの数値を因数分解することはおそらく可能です、大量ではありませんが。

(編集:最後の段落の意味を明確にし、RobIIIによって指摘されたエラーを修正しました)

59
Out of Band

「完全に安全」なものはありません。問題は、その他のリスクを追加するかどうかです。

SSHプロトコルは、サーバーと対称セッション暗号化キーをネゴシエートした後でのみ、クライアントの公開キーencryptedを送信します。そのため、接続を盗聴した敵はクライアントの公開鍵を知りません。つまり、それを公開することで、他の方法では得られないであろう追加の情報が敵に提供されることになります。

しかし、敵はその追加情報で何ができるでしょうか?まあ、これはすべて、攻撃者がRSAを破ることができるかどうかにかかっています。 2つのサブケースを考えてみましょう。 (サーバーとクライアントの両方のRSA鍵は、そもそも安全であるように十分大きく、2048ビット以上であると想定します。)

攻撃者はRSAに対して一般的な攻撃を行い、公開鍵の知識が必要です

一般的な攻撃とは、使用するキーに関係なくRSAを破る攻撃を意味します。たとえば、これは RSA問題 (たとえば、多項式時間素因数分解アルゴリズム)を解決するための効率的なアルゴリズム、または実用的な 量子コンピューター

この場合、クライアントの公開鍵を公開するかどうかは関係ありません。SSHとRSAを使用する他のすべてのアプリケーションが完全に破壊されるためです。したがって、追加のリスクはありません。

攻撃者は、「弱い」RSA公開鍵のサブセットに対して攻撃を行います

これは現実の問題です。一部のシステムでは、鍵生成アルゴリズムまたは乱数ジェネレーターに障害があるため、実際には攻撃に対して脆弱なRSA鍵を選択します。最も注目すべき例は、 Debian GNU/Linuxディストリビューションが弱い乱数ジェネレータをほぼ2年間(2006年9月から2008年5月13日まで)出荷したことです2011年の公衆インターネットでの700万のRSAキーの調査 は、彼らが見た1024のRSA公開キーの約0.4%が弱いことを発見しました。

クライアントの公開鍵が弱い鍵であり、それを公開した場合、それを取得した攻撃者はそれを知らせ、この事実を悪用する可能性があります。その後、そのキーを使用して認証するSSHサーバーにログインできます。それは確かに追加のリスクになります。

サーバーの公開鍵が弱い場合、そのサーバーは安全ではありません。攻撃者は接続を盗聴できるため、とにかく公開鍵を知ることができます。したがって、この場合、追加のリスクはありません。

結論

SSHクライアント公開鍵を公開することによる追加のリスクは小さいですが、ゼロではありません。最大のリスクは、クライアントの公開鍵が脆弱なものであることです。これは、ソフトウェアの欠陥が原因です。クライアントの公開鍵を公開する場合は、鍵が脆弱でないことを確認するための手順を実行することをお勧めします。例えば:

  • 弱いキーテスターツールに対して公開キーをチェックします
  • 十分な注意を払ったシステムでクライアントの鍵ペアを生成し、弱い鍵を与えないようにします。例えば:
    • すべてのセキュリティパッチをオペレーティングシステムに適用します。特に、乱数ジェネレータ、SSH、またはSSHが依存するライブラリの問題に対処するものを適用します。
    • システムが適切なエントロピーソースにアクセスできるように対策を講じます。 (複雑なトピック。)
33
Luis Casillas

いいえ、サービスごとに固有のものを使用しない限り。攻撃者があなたを特定できるようにします。

サービスAとサービスBに同じ公開鍵を使用していて、両方の公開鍵が漏洩した場合、2つのアカウントが相互にリンクされます。

うまくいけば、2つのサービスのどちらも恥ずかしいことではありません。しかし、その場合でも、攻撃者があなたを攻撃したい場合、攻撃者はいつの日かハッキングするアカウントを特定するためのより良いリードを与えるでしょう。

26
user541686

公開鍵の最後にコメントとしてホスト名が含まれていると、身元が明らかになるリスクが少しあります。 ssh-rsa C4F3B4B3... [email protected]。あなたの名前がかなり珍しい場合、それはあなたを識別することが可能かもしれません。

詳細については、この質問と回答を参照してください: 公開SSHキーを最後にuser @ hostnameで公開しますか?

12
whirlwin

はい、しかし...

セキュリティが公開鍵の秘密性に依存している場合、次善の策を講じています。これは、非対称暗号化の目的ではありません。

以前のすべての回答はいくつかの脆弱性を指摘しています

  • 公開鍵が知られている場合、リスクが高くなります。
  • または彼らはあなたが持っているいくつかの追加の防御を示し、それは秘密にされています。

どちらの場合も、本当の理由は、それが設計された公開鍵を使用しないことです。たとえば、あなたの公開鍵の知識はあなたの識別を可能にします。これは非表示のpubkeyで処理できますが、このタスクにいくつかの追加のメカニズム(セッションごとに自動生成されたランダムキーペアを持つ追加の暗号化レイヤーなど)を使用すると、より適切に実行できます。

しかし、すべては他のタスクにも使用できます。特に、防御側にいない場合は、実り多いこともあります。

現在、バージョン管理下にある.sshディレクトリはありません。しかし、.ssh/authorized_keysをdotfileリポジトリーに保持できれば、ステップを節約できます。

公開鍵を公開しても安全であるはずですが、これは良い考えではないと思います。

秘密キーは.sshディレクトリにも格納されており、dotfileリポジトリから除外して誤って公開しないように注意しないリスクがあります。

3
mkrieger1

考慮できる脅威がいくつかあります。他の回答者が論じているのは、悪意のあるユーザーが公開鍵を解読しようとしているというものです。検討する価値のあるもう1つの脅威は、この悪意のあるユーザーが公開鍵を自分の鍵に置き換えることです。彼がキーを変更し、これに気付かない場合は、悪意のあるユーザーのキーを使用してシステムをセットアップできます。したがって、彼がプライベートペアを所有しているHIS公開キーを展開します。

2
Marcelo Bielsa

公開鍵の共有に関するもう1つの懸念は、安全に生成されていないかどうかです。 RSAとDiffie Hellmanの鍵をバックドアする方法については、数多くの論文が出ていますが、それ以外は完全に正常に見えます。このシナリオでは、公開鍵を提供すると、攻撃者が秘密鍵を導出するために必要なすべての情報を入手できます。

参照:

http://kukuruku.co/hub/infosec/backdoor-in-a-public-rsa-keyhttps://www.cryptologie.net/article/360/how- to-backdoor-diffie-hellman-quick-explanation /

2
shellster

はい

RSAが設計どおりに機能する場合、これはセキュリティの問題ではありません。それはあなたのアイデンティティについての少しの情報を明らかにするかもしれませんが、この質問はまた示しません。

なぜ?

AESの場合、鍵は完全に秘密なので、必要なのは256ビットだけです。 RSAを使用すると、敵にいくつかの情報(公開鍵)を提供しますが、それでも解読するのが難しいことを示すことができます。しかし、数字を因数分解すると、総当たりのパスワードよりも速く速くなります。

簡単に言うと、ランダムに選択された2つの素数が秘密鍵であり、掛け合わせて公開鍵を形成します。 (素数が非常に一般的であるため、これは実行可能です)。 RSAは、2つの素数にそれらを因数分解するのは難しいという仮定に基づいています。数分解アルゴリズムには多くの進歩があり、本格的な量子コンピューターが登場すれば、ショーのアルゴリズムはRSAの終わりです

1
J.A.K.

PKIシステムの理論に関しては、違います。アルゴリズムと公開鍵の両方が世界に知られている場合、システムは「安全」、つまりより正確に弱くないになるように設計されています。

実際には、他の理由であなたに何らかの接触をする可能性があります。つまり、大失敗によって自分のセキュリティを危険にさらさないでください。そして、個々の目的ごとに異なるキーペアを作成するのが最善です。

  • 秘密鍵または失効証明書を忘れて誤ってコミットした場合、誰かがそれを見ると、それらはあなたに対して使用される可能性があります。 .ssh潜在的な人的エラーのリスクを受け入れているフォルダ。あなたは注意する必要があります。 (これが発生した場合、再度削除するだけでは履歴から削除されない可能性があります。今日の最も一般的なシステムではそうではありません。バージョン管理システムによっては、完全に削除することが難しい場合があります。)
  • リポジトリの公開方法、およびその公開鍵を他に何に使用するかに応じて、敵対者はその公開鍵で行われたアクティビティを追跡し、それによりアクションの履歴を構築できる可能性があります。おそらく、その過程であなたを特定します。ロングショット。
0
wberry