Por que a Amazon libera chaves privadas em vez de chaves públicas?

20

Meu cérebro está enrolado no eixo com chaves públicas e privadas. Quando você cria um servidor em nuvem (instância) no serviço EC2 da Amazon e depois deseja se conectar a ele via SSH, a Amazon exige que você baixe uma chave privada para fazer a conexão. A idéia por trás da chave pública / privada não sugere que a Amazon exija que você baixe uma pública?

Além disso, se eu configurar um servidor SFTP para uso de um cliente, devo instalar a chave no servidor ou fornecer uma chave do servidor? Em ambos os casos, deve ser uma chave pública ou privada?

Seth
fonte
11
Para aqueles de nós menos familiarizados com o EC2, a Amazon estava exigindo que você baixasse uma chave privada?
precisa
2
Quando você configura um servidor em nuvem no Amazon EC2 e deseja se conectar a ele via SSH, o console da Amazon permite baixar uma chave privada usada para fazer a conexão. Você é obrigado a proteger a chave, é claro.
Seth
@ Zoredache Para ser justo, é uma opção. Alguém que procura trabalhar rapidamente em uma caixa do Windows provavelmente nunca usou o OpenSSH antes, por isso é um bom começo rápido.
precisa

Respostas:

36

Pensando mais profundamente sobre o processo de autenticação, o que precisa ser mantido em segredo? A Amazon conhece a metade pública da chave e qualquer pessoa pode conhecer a metade pública. A metade pública do par de chaves, quando combinada com a metade privada, indica que a metade privada foi usada para autenticar.

Sua chave privada que é fornecida quando a Amazon gera um par de chaves para você é útil apenas se você for a única. Se não é um segredo, qualquer pessoa que o conheça também pode se autenticar para quem detém a metade pública do par de chaves.

Quem está sendo autenticado deve ter a metade privada . Tudo bem se todos no mundo puderem autenticá-lo mantendo a metade pública da chave, mas apenas você deve estar no controle da metade privada.

Jeff Ferland
fonte
18

A Amazon fornece serviços de geração de chaves porque alguns sistemas operacionais (tosse, Windows, tosse) podem não facilitar a geração dos pares de chaves SSH.

Com o SSH (e SFTP), a chave pública é instalada no arquivo allowed_keys do usuário quando a instância do EC2 é iniciada. A chave privada é mantida apenas pelo usuário e é apresentada para autenticação no servidor.

A partir da documentação em:

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

parece que a Amazon gera o par de chaves em seus servidores e envia a chave privada via HTTPS. Talvez isso seja menos do que perfeito (idealmente, você e mais ninguém possuirão a chave privada), mas provavelmente não o será, visto que tudo isso ocorre no contexto da sua sessão autenticada e somente você (e a Amazon temporariamente) vêem a chave privada. Você também pode sempre gerar e fazer upload de sua própria chave pública para uso do EC2, mantendo a chave privada estritamente privada.

Para configurar usuários SFTP para autenticação de chave, eles devem gerar chaves SSH em suas máquinas. Depois que eles gerarem um par de chaves, eles deverão enviar apenas a chave pública para instalação no arquivo autorizado_chaves relevante. A chave privada, como o nome indica, é privada.

cjc
fonte
5
Eu regularmente gero pares de chaves em máquinas Windows. Não é difícil, embora seja feito usando o software instalado, e não pelo próprio Windows.
Dominic Cronin
2
Concordou com Dominic. É mais o fato de que o usuário comum do Windows fica apavorado e se perde ao ver uma CLI e que o Windows ainda não possui a opção "login com chave SSH".
precisa
Ah, sim, concordei. Eu uso o Cygwin, etc., com o openssh, para que tudo funcione corretamente. Eu imagino que a maioria dos usuários do Windows fazendo isso usará o PuTTY e precisará fazer alguma conversão de chave. São apenas mais etapas.
CJC
11
Na verdade, nunca usei a Amazon, mas, em vez de culpar o Windows, suponho que a razão pela qual a Amazon envie uma chave é que, se não lhe deram uma chave para fazer login, como você faria para instalar o seu público chave em primeiro lugar?
DerfK 20/08/12
11
@DerfK Você pode enviar sua própria chave pública e selecioná-la para ser instalada em uma nova instância do EC2. A seleção de uma chave específica faz parte do processo de criação da instância.
CJC
2

A autenticação de chave pública funciona no sentido inverso ao que você provavelmente está pensando. A chave pública criptografa as mensagens e a chave privada as descriptografa. O servidor armazena a chave pública do titular da conta e a usa para criptografar uma mensagem. Somente o titular da chave privada pode descriptografar essa mensagem.

Se você enviar a alguém um segredo criptografado com sua chave pública, se ele puder lhe dizer qual é esse segredo, você saberá que ele possui a chave privada correspondente. O usuário é então autenticado.

A AWS exige que você baixe e salve sua chave privada porque ela não será armazenada por motivos de segurança. Como a chave privada não é armazenada em nenhum lugar da AWS, você pode ter certeza de que sua instância do EC2 é segura.

jkim
fonte
1

Em certo sentido, isso não importa. Um par de chaves públicas / privadas consiste em duas partes, e qual delas é a pública depende de você. Se algo estiver criptografado com uma chave, você precisará da outra para descriptografar. Se você publicou uma chave publicamente e não a outra, a chave privada é a que você não publicou.

Chegando à sua pergunta real: presumivelmente, a chave que a Amazon fornece é permitir que você controle seus próprios recursos, para que não seja entregue a outras pessoas. Nesse contexto, você precisa confiar na Amazon para ter sua chave privada, pelo menos por tempo suficiente para ser configurado.

Se você deseja que seu cliente efetue logon dessa maneira, é necessário que ele forneça uma chave que eles estão preparados para compartilhar com você, portanto, a chave pública deles. Você instala isso no servidor em allowed_keys, que está efetivamente dizendo "qualquer pessoa que possua a chave privada correspondente a essa pública poderá acessar esse recurso".

Dominic Cronin
fonte
11
Uhm, não, isso não é verdade. Pelo menos com o RSA / DH, você criptografa com a chave pública e descriptografa com o privado, mas não funciona ao contrário. Assinar não é o mesmo que criptografia / descriptografia.
precisa saber é o seguinte
11
@ErikA Não, a chave pública não pode ser derivada da chave privada. Os arquivos de chave privada geralmente incluem as duas chaves. Se você realmente quiser entrar em uma discussão, sugiro crypto.stackexchange.com . Essas pessoas podem fornecer detalhes internos realmente profundos, incluindo as diferenças reais das chaves RSA e por que chave é considerada pública versus privada não é apenas um toque arbitrário de uma moeda.
Jeff Ferland
@ Zoredache - eu não sabia disso: obrigado. Você tem um link para uma boa referência?
22612 Dominic Cronin
en.wikipedia.org/wiki/Asymmetric_key_algorithm - uma chave bloqueia ou criptografa o texto sem formatação e a outra desbloqueia ou descriptografa o texto cifrado. Nenhuma tecla pode executar as duas funções. - pt.wikipedia.org/wiki/RSA_(algorithm) - O RSA envolve uma chave pública e uma chave privada. A chave pública pode ser conhecida por todos e é usada para criptografar mensagens . As mensagens criptografadas com a chave pública só podem ser descriptografadas usando a chave privada.
Zoredache
Nenhuma dessas duas referências sugere o que você está dizendo @Zoredache. Obviamente , depois de decidir qual chave é privada e qual pública, isso determina a maneira como você a usa. No ponto de geração de chaves, essa decisão ainda não foi tomada. Quanto vale a pena, a lógica da assinatura depende inteiramente da lógica da criptografia, pois a assinatura exige criptografia.
Dominic Cronin