Como funcionam as chaves de API e as chaves secretas? Seria seguro se eu tivesse que passar minha API e chaves secretas para outro aplicativo?

136

Estou apenas começando a pensar em como as chaves da API e das chaves secretas funcionam. Há apenas 2 dias, me inscrevi no Amazon S3 e instalei o S3Fox Plugin . Eles me pediram a chave de acesso e a chave de acesso secreta, que exigem o login para acessar.

Então, eu estou me perguntando, se eles estão me pedindo minha chave secreta, eles devem estar armazenando-a em algum lugar, certo? Não é basicamente a mesma coisa que pedir meus números de cartão de crédito ou senha e armazená-los em seu próprio banco de dados?

Como as chaves secretas e as chaves da API devem funcionar? Quão secretos eles precisam ser? Esses aplicativos que usam as chaves secretas o armazenam de alguma forma?

Lance Pollard
fonte

Respostas:

90

Basicamente elaborando o que é descrito aqui .

Eis como funciona: digamos que temos uma função que leva um número de zero a nove, adiciona três e, se o resultado for maior que dez, subtrai dez. Então f (2) = 5, f (8) = 1, etc. Agora, podemos criar outra função, chamada f ', que retrocede, adicionando sete em vez de três. f '(5) = 2, f' (1) = 8, etc.

Esse é um exemplo de função bidirecional e inversa. Teoricamente, qualquer função matemática que mapeia uma coisa para outra pode ser revertida. Na prática, porém, você pode criar uma função que embaralha tão bem sua entrada que é incrivelmente difícil de reverter.

Receber uma entrada e aplicar uma função unidirecional é chamado de "hash" da entrada, e o que a Amazon armazena em seu sistema é um "hash" da sua chave secreta. O SHA1 é um exemplo desse tipo de função "unidirecional", também endurecido contra ataques.

A função HMAC baseia-se em funções hash estabelecidas para usar uma chave conhecida para autenticar uma sequência de texto. Funciona assim:

  • Você pega o texto da sua solicitação e sua chave secreta e aplica a função HMAC.
  • Você adiciona esse cabeçalho de autenticação à sua solicitação e envia para a Amazon.
  • A Amazon consulta sua cópia da chave secreta e o texto que você acabou de enviar e aplica a função HMAC.
  • Se o resultado corresponder, eles saberão que você tem a mesma chave secreta.

A diferença entre isso e a PKI é que esse método é RESTful , permitindo um número mínimo de trocas entre o sistema e os servidores da Amazon.

Não é basicamente a mesma coisa que pedir meus números de cartão de crédito ou senha e armazená-los em seu próprio banco de dados?

Sim, embora o dano que alguém possa causar com o S3 pareça limitado à drenagem da sua conta.

Quão secretos eles precisam ser? Esses aplicativos que usam as chaves secretas o armazenam de alguma forma?

Em algum momento, você precisará carregar a chave secreta e, com a maioria dos sistemas baseados em Unix, se um invasor puder obter acesso root, poderá obter a chave. Se você criptografar a chave, precisará ter um código para descriptografá-la e, em algum momento, o código de descriptografia precisará ser texto sem formatação para que possa ser executado. Esse é o mesmo problema que o DRM tem, exceto que você é o proprietário do computador.

Em muitos casos, apenas coloco chaves secretas em um arquivo com permissões limitadas e tomo as precauções habituais para impedir que meu sistema seja enraizado. Existem alguns truques para fazê-lo funcionar corretamente com um sistema multiusuário, como evitar arquivos temporários e outros.

ben
fonte
14
"Receber uma entrada e aplicar uma função unidirecional é chamado de" hash "da entrada, e o que a Amazon armazena em seu sistema é um" hash "da sua chave secreta" - Se a Amazon armazena um hash da sua chave secreta, como ela é possível para a Amazon HASH o texto enviado a eles?
Franklin
21
Primeiro, você diz "o que a Amazon armazena em seu sistema é um" hash "da sua chave secreta" e depois "A Amazon pesquisa sua cópia da chave secreta". Estes parecem se contradizer. Eu acredito que a primeira afirmação está errada.
Sean
3
Este URL informa mais detalhes da implementação do Amazon S3 Auth - docs.aws.amazon.com/AmazonS3/latest/dev/S3_Authentication2.html
asyncwait
10
"Teoricamente, qualquer função matemática que mapeia uma coisa para outra pode ser revertida" - Isso não é verdade, as funções de hash são o exemplo. é muito fácil de mostrar. digamos que temos uma função que transforma palavras em números, com base na soma dos valores (a = 1, b = 2, c = 3 etc). Por exemplo, "SO" seria 18 + 14 = 32. Então, mudamos SO para 32, mas se eu revelar essa função a alguém e fornecer o número 32, não há como ele saber se nossa palavra básica era "SO" ou "ZF" (26 + 6) ou uma das dezenas de outras possibilidades
Leo
1
De acordo com o documento que o @asyncwait vinculou, a Amazon definitivamente armazena sua chave secreta, não apenas um hash. Na verdade, parece que a única hash acontecendo é tudo o que ocorre dentro da função HMAC
cowlinator
7

A Criptografia de Chave Pública é usada para se defender de ataques muito específicos, alguns dos quais são comuns. Em resumo, é uma matemática complexa que permite verificar se o indivíduo possui o par de chaves pública e privada, enquanto apenas conhece a chave pública. Isso é muito diferente de um cartão de crédito ou senha estática. Como exemplo, se você estiver autenticando com um servidor OpenSSH, o servidor não precisará da chave privada .

Idealmente, se o banco de dados de API da Amazon, onde seria comprometido, o invasor tivesse uma lista de chaves públicas e não pudesse acessar a API do usuário usando essas informações. No entanto, os sistemas ideais nem sempre são colocados em prática e não sei ao certo se a Amazon está protegendo contra esse vetor de ataque, mas eles deveriam estar.

Na autenticação de chave pública, é estatisticamente imune à força bruta. As senhas geralmente são palavras do dicionário que podem quebrar rapidamente a relatividade. No entanto, uma chave privada é um grande número que não é fácil de adivinhar. Se o invasor tivesse a chave pública, ele poderia realizar muitas suposições "offline" em um super computador, mas mesmo assim levaria muito tempo e dinheiro para quebrar a chave.

torre
fonte
2
o link não precisa da chave privada está quebrado agora.
setzamora
@Joset atualizou o link apontando para uma cópia na internet máquina wayback a partir de 2008
oligofren
1

A AWS projetou seu próprio algoritmo de autenticação personalizado. A v4 foi lançada em 2014. Os detalhes são descritos aqui: Solicitações de autenticação (AWS Signature Versão 4) . Um ponto importante é que a solicitação não é assinada com o próprio segredo, mas com uma chave de assinatura gerada usando o segredo. Ele também usa o HMAC-SHA256 para assinar.

Geração de Assinaturas

O uso de chaves assimétricas seria mais seguro, pois a AWS armazenaria apenas uma chave pública em vez do segredo, que é armazenado pelo usuário e pela AWS.

JBaczuk
fonte