Amazonが公開鍵ではなく秘密鍵をリリースするのはなぜですか?


20

私の脳は、公開鍵と秘密鍵の軸に巻き付けられています。AmazonのEC2サービスでクラウドサーバー(インスタンス)を作成し、SSH経由で接続する場合、Amazonは接続を確立するために秘密鍵をダウンロードする必要があります。公開鍵/秘密鍵の背後にある考えは、Amazonが公開鍵をダウンロードすることを要求するべきだと示唆していませんか?

さらに、顧客が使用するSFTPサーバーをセットアップした場合、サーバーにキーをインストールするか、サーバーからキーを提供する必要がありますか?どちらの場合でも、それは公開鍵または秘密鍵のどちらですか?


1
EC2に慣れていない私たちにとって、Amazonは秘密鍵のダウンロードを要求していましたか?
ゾレダチェ

2
Amazon EC2でクラウドサーバーをセットアップし、SSH経由で接続したい場合、Amazonコンソールでは、接続に使用する秘密キーをダウンロードできます。もちろん、キーを保護する必要があります。
セス

@Zoredache公平を期すと、これはオプションです。Windowsボックスですばやくツールを探している人は、これまでOpenSSHを使用したことがないので、すばやいクイックスタートです。
ceejayoz

回答:


36

認証プロセスについてより深く考えて、何を秘密にしておく必要がありますか?Amazonはキーの公開半分を知っており、誰でも公開半分を知ることができます。キーペアのパブリック半分は、プライベート半分と一致した場合、プライベート半分が認証に使用されたことを示します。

Amazonがキーペアを生成するときに提供される秘密鍵は、それを所有しているのが自分だけである場合にのみ役立ちます。秘密ではない場合、それを知っている他の誰もが、鍵のペアの半分を公開している人に対しても認証できます。

認証されている人は誰でもプライベートの半分を保持する必要があります。世界中の誰もが公開鍵の半分を保持することであなたを認証できれば大丈夫ですが、あなただけが私用の半分を管理する必要があります。


18

一部のオペレーティングシステム(咳、Windows、咳)でSSHキーペアを簡単に生成できないため、Amazonはキー生成サービスを提供しています。

SSH(およびSFTP)を使用すると、EC2インスタンスの起動時に公開キーがユーザーのauthorized_keysファイルにインストールされます。秘密鍵はユーザーのみが保持し、サーバーに対して認証するために提示されます。

次のドキュメントから:

http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateKeyPair.html

Amazonがサーバー上でキーペアを生成し、プライベートキーをHTTPS経由で送信しているようです。これはおそらく完璧ではありません(理想的には、あなたと他の誰も秘密鍵を所有することはありません)が、おそらくすべてはあなたの認証されたセッションのコンテキストで発生し、あなただけ(そして一時的にAmazon)秘密鍵。また、秘密鍵を厳密に秘密に保ちながら、EC2で使用するための独自の公開鍵をいつでも生成およびアップロードできます。

キー認証用にSFTPユーザーをセットアップするには、マシンでSSHキーを生成する必要があります。キーペアを生成すると、関連するauthorized_keysファイルにインストールする公開キーのみが送信されます。秘密鍵は、その名前が示すとおり、秘密です。


5
Windowsマシンで定期的にキーペアを生成します。難しいことではありませんが、Windows自体ではなく、インストールされたソフトウェアを使用して行われます。
ドミニククローニン

2
ドミニクと合意した。それは、平均的なWindowsユーザーがCLIを見ると恐怖を感じて失われ、Windowsにはまだ「SSHキーでログイン」オプションがないという事実です。
HopelessN00b

ああ、はい、同意しました。私はCygwinなどをopensshで使用しているため、すべてが正常に機能します。これを行うほとんどのWindowsユーザーはPuTTYを使用しており、何らかのキー変換を行う必要があると思います。それはもう一歩です。
cjc

1
私は実際にAmazonを使用したことはありませんが、ウィンドウを非難するのではなく、Amazonがあなたにキーを送信する理由は、彼らがあなたにログインするためのキーを与えなかった場合、どのようにログインしてあなたのパブリックをインストールするのだと思いますそもそもキー?
DerfK

1
@DerfK独自の公開キーを送信し、それを選択して新しいEC2インスタンスにインストールできます。特定のキーを選択することは、インスタンス作成プロセスの一部です。
cjc

2

公開鍵認証は、おそらくあなたが考えている方法とは逆の方向で機能します。公開鍵はメッセージを暗号化し、秘密鍵はメッセージを復号化します。サーバーはアカウント所有者の公開鍵を保存し、それを使用してメッセージを暗号化します。秘密鍵の所有者のみがそのメッセージを解読できます。

公開鍵で暗号化された秘密を誰かに送信し、その秘密が何であるかを伝えることができれば、一致する秘密鍵を保持していることがわかります。その後、ユーザーは認証されます。

セキュリティ上の理由により、AWSでは秘密キーを保存しないため、ダウンロードして保存する必要があります。秘密鍵はAWSのどこにも保存されないため、EC2インスタンスが安全であると確信できます。


1

ある意味では、それは問題ではありません。秘密/公開キーペアは2つの部分で構成されており、どちらが公開かはユーザー次第です。何かが1つのキーで暗号化されている場合、それを解読するにはもう1つが必要です。一方のキーを公開し、もう一方を公開していない場合、秘密キーは公開しなかったキーです。

実際の質問にたどり着く:おそらくAmazonが提供する重要なことは、あなたがあなた自身のリソースを制御できるようにすることです。このコンテキストでは、少なくともセットアップするのに十分な時間、秘密鍵を持っていることをAmazonに信頼する必要があります。

顧客にこの方法でログインさせたい場合は、顧客と共有する準備ができている鍵を提供する必要があるため、顧客の公開鍵です。これをauthorized_keysのサーバーにインストールします。これは、「この公開キーに一致する秘密キーを提示する人は誰でもこのリソースにアクセスできます」と事実上言っています。


1
ええ、それは本当ではありません。少なくともRSA / DHでは、公開鍵で暗号化し、秘密鍵で復号化しますが、逆の方法では機能しません。署名は暗号化/復号化とは異なります。
ゾレダチェ

1
@ErikAいいえ、公開鍵を秘密鍵から派生させることはできません。多くの場合、秘密鍵ファイルには両方の鍵が含まれます。本当に議論したい場合は、crypto.stackexchange.comをお勧めします。それらの人々は、RSAキーの実際の違いや、どのキーがパブリックとプライベートのどちらであると考えられるのか、コインの単なる任意のフリップではないなど、本当に深い内部詳細を提供できます。
ジェフファーランド

@Zoredache-知りませんでした。ありがとう。良いリファレンスへのリンクはありますか?
ドミニククローニン

en.wikipedia.org/wiki/Asymmetric_key_algorithm-1つのキーは平文をロックまたは暗号化し、もう1つのキーは暗号文をロック解除または復号化します。どちらのキーも両方の機能を実行できません。- en.wikipedia.org/wiki/RSA_(algorithm) - RSAは、公開鍵と秘密鍵を必要とします。公開鍵は、すべての人に知られていることができ、メッセージを暗号化するために使用されます。公開鍵で暗号化されたメッセージは、秘密鍵を使用してのみ解読できます。
ゾレダチェ

これらの2つの参考文献のいずれも、@ Zoredacheが言っていることを示唆していません。もちろん、どのキーがプライベートでどのパブリックであるかを決定すると、そのキーの使用方法が決まります。キー生成の時点では、この決定はまだ行われていません。署名に暗号化が必要であるため、署名の論理は暗号化の論理に完全に依存します。
ドミニククローニン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.