Dlaczego Amazon wydaje klucze prywatne zamiast kluczy publicznych?

20

Mój mózg jest owinięty wokół osi na kluczach publicznych i prywatnych. Kiedy tworzysz serwer w chmurze (instancję) w usłudze EC2 Amazon, a następnie chcesz się z nim połączyć przez SSH, Amazon wymaga pobrania prywatnego klucza, aby nawiązać połączenie. Czy idea klucza publicznego / prywatnego nie sugeruje, że Amazon powinien wymagać pobrania klucza publicznego?

Ponadto, jeśli skonfiguruję serwer SFTP do użytku klienta, czy powinienem instalować jego klucz na serwerze, czy dać mu klucz z serwera? W obu przypadkach powinien to być klucz publiczny czy prywatny?

Seth
źródło
1
Czy dla tych z nas, którzy są mniej zaznajomieni z EC2, Amazon wymaga pobrania klucza prywatnego?
Zoredache,
2
Po skonfigurowaniu serwera w chmurze na Amazon EC2, a następnie połączeniu się z nim za pośrednictwem SSH, konsola Amazon umożliwia pobranie klucza prywatnego używanego do nawiązania połączenia. Oczywiście musisz chronić klucz.
Seth
@Zoredache Szczerze mówiąc, jest to opcja. Ktoś, kto chce szybko poradzić sobie z systemem Windows, prawdopodobnie nigdy wcześniej nie korzystał z OpenSSH, więc jest to fajny szybki start.
ceejayoz

Odpowiedzi:

36

Zastanawiając się głębiej nad procesem uwierzytelniania, co należy zachować w tajemnicy? Amazon zna publiczną połowę klucza i każdy może znać publiczną połowę klucza . Publiczna połowa klucza, w połączeniu z prywatną połową, oznacza, że ​​prywatna połowa została użyta do uwierzytelnienia.

Twój klucz prywatny, który jest ci dostarczany, gdy Amazon generuje dla ciebie parę kluczy, jest użyteczny tylko wtedy, gdy jesteś jedynym, który go posiada. Jeśli nie jest to tajemnicą, każdy, kto ją zna, może również uwierzytelnić każdego, kto posiada publiczną połowę pary kluczy.

Ktokolwiek jest uwierzytelniany, musi posiadać prywatną połowę. Nie ma problemu, jeśli wszyscy na świecie mogą Cię uwierzytelnić, trzymając publiczną połowę klucza, ale tylko Ty powinieneś mieć kontrolę nad prywatną połową.

Jeff Ferland
źródło
18

Amazon zapewnia usługi generowania kluczy, ponieważ niektóre systemy operacyjne (kaszel, Windows, kaszel) mogą nie ułatwić wygenerowania par kluczy SSH.

W przypadku SSH (i SFTP) klucz publiczny jest instalowany w pliku autoryzowanych_kluczy użytkownika podczas uruchamiania instancji EC2. Klucz prywatny jest przechowywany tylko przez użytkownika i jest przedstawiany w celu uwierzytelnienia na serwerze.

Z dokumentacji na:

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

wygląda na to, że Amazon generuje parę kluczy na swoich serwerach i wysyła ci klucz prywatny za pośrednictwem HTTPS. Jest to może mniej niż idealne (najlepiej, że ty i nikt inny nie będzie posiadał klucza prywatnego), ale prawdopodobnie nie strasznie, biorąc pod uwagę, że wszystko to dzieje się w kontekście uwierzytelnionej sesji i tylko Ty (i Amazon tymczasowo) widzisz klucz prywatny. Możesz również zawsze wygenerować i przesłać własny klucz publiczny do użytku EC2, zachowując jednocześnie klucz prywatny.

Aby skonfigurować użytkowników SFTP do uwierzytelniania klucza, powinni oni generować klucze SSH na swoich komputerach. Po wygenerowaniu pary kluczy powinni jedynie wysłać ci klucz publiczny do zainstalowania w odpowiednim pliku autoryzowanych_kluczy. Klucz prywatny, jak sama nazwa wskazuje, jest prywatny.

cjc
źródło
5
Regularnie generuję pary kluczy na komputerach z systemem Windows. Nie jest to trudne, chociaż odbywa się to za pomocą zainstalowanego oprogramowania, a nie przez sam system Windows.
Dominic Cronin,
2
Uzgodniony z Dominic. Chodzi o to, że przeciętny użytkownik systemu Windows jest przerażony i zagubiony na widok interfejsu CLI, a system Windows nadal nie ma opcji „Zaloguj się przy użyciu klucza SSH”.
HopelessN00b,
Och tak, zgodził się. Używam Cygwin itp. Z openssh, więc wszystko działa czysto. Wyobrażam sobie, że większość użytkowników systemu Windows, którzy to robią, będzie korzystać z PuTTY i będzie musiała dokonać jakiejś kluczowej konwersji. To tylko kolejne kroki.
cjc,
1
Nigdy tak naprawdę nie korzystałem z Amazon, ale zamiast obwiniać okna, zakładam, że powodem, dla którego Amazon wysyła ci klucz, jest to, że jeśli nie dali ci klucza do zalogowania się, jak byś się zalogował, aby zainstalować swoją publiczną klucz w pierwszej kolejności?
DerfK,
1
@DerfK Możesz przesłać własny klucz publiczny i wybrać go do zainstalowania w nowej instancji EC2. Wybranie określonego klucza jest częścią procesu tworzenia instancji.
cjc
2

Uwierzytelnianie za pomocą klucza publicznego działa w odwrotnym kierunku niż prawdopodobnie myślisz. Klucz publiczny szyfruje wiadomości, a klucz prywatny odszyfrowuje je. Serwer przechowuje klucz publiczny właściciela konta i używa go do szyfrowania wiadomości. Tylko posiadacz klucza prywatnego może odszyfrować tę wiadomość.

Jeśli wyślesz komuś klucz tajny zaszyfrowany jego kluczem publicznym, jeśli może on powiedzieć ci, co to jest klucz tajny, to wiesz, że ma on odpowiedni klucz prywatny. Użytkownik jest następnie uwierzytelniany.

AWS wymaga pobrania i zapisania klucza prywatnego, ponieważ nie będzie go przechowywać ze względów bezpieczeństwa. Ponieważ klucz prywatny nie jest nigdzie przechowywany w AWS, możesz mieć pewność, że instancja EC2 jest bezpieczna.

jkim
źródło
1

W pewnym sensie to nie ma znaczenia. Para kluczy prywatny / publiczny składa się z dwóch części, a która z nich jest publiczna, zależy od Ciebie. Jeśli coś jest szyfrowane za pomocą jednego klucza, potrzebny jest drugi, aby go odszyfrować. Jeśli jeden klucz został opublikowany publicznie, a nie drugi, klucz prywatny to ten, którego nie opublikowałeś.

Dotarcie do twojego rzeczywistego pytania: prawdopodobnie kluczem, który daje ci Amazon, jest umożliwienie ci kontrolowania własnych zasobów, więc nie należy go przekazywać innym osobom. W tym kontekście musisz zaufać Amazonowi, aby mieć swój klucz prywatny, przynajmniej przez wystarczająco długi czas, aby się skonfigurować.

Jeśli chcesz, aby Twoi klienci logowali się w ten sposób, musisz dać im klucz, który są gotowi udostępnić Tobie, a zatem klucz publiczny. Instalujesz to na serwerze w uprawnionych kluczach, co w rzeczywistości mówi „każdy, kto posiada klucz prywatny pasujący do tego publicznego, może uzyskać dostęp do tego zasobu”.

Dominic Cronin
źródło
1
Uhm, nie, to nie jest prawda. Przynajmniej w przypadku RSA / DH szyfrujesz kluczem publicznym i odszyfrujesz kluczem prywatnym, nie działa to na odwrót. Podpisywanie to nie to samo, co szyfrowanie / deszyfrowanie.
Zoredache,
1
@ErikA Nie, klucza publicznego nie można uzyskać z klucza prywatnego. Pliki kluczy prywatnych często zawierają oba klucze. Jeśli naprawdę chcesz wziąć udział w dyskusji, sugeruję crypto.stackexchange.com . Ci ludzie mogą podać naprawdę głębokie szczegóły wewnętrzne, w tym rzeczywiste różnice kluczy RSA i dlaczego klucz ten jest uważany za publiczny czy prywatny, nie jest po prostu arbitralnym rzutem monetą.
Jeff Ferland
@Zoredache - nie wiedziałem o tym: dzięki. Czy masz link do dobrej referencji?
Dominic Cronin
en.wikipedia.org/wiki/Asymmetric_key_alameterm - Jeden klucz blokuje lub szyfruje zwykły tekst, a drugi odblokowuje lub odszyfrowuje tekst zaszyfrowany. Żaden klawisz nie może wykonywać obu funkcji. - en.wikipedia.org/wiki/RSA_(alameterm) - RSA obejmuje klucz publiczny i klucz prywatny. Klucz publiczny może być znane wszystkim i jest używany do szyfrowania wiadomości . Wiadomości zaszyfrowane kluczem publicznym można odszyfrować tylko przy użyciu klucza prywatnego.
Zoredache,
Żadne z tych dwóch odniesień nie sugeruje, co mówisz @Zoredache. Oczywiście , kiedy już zdecydujesz, który klucz jest prywatny, a który publiczny, określa to sposób jego użycia. W momencie generowania klucza ta decyzja nie została jeszcze podjęta. To, co jest warte, logika wokół podpisywania zależy całkowicie od logiki wokół szyfrowania, ponieważ podpisywanie wymaga szyfrowania.
Dominic Cronin,