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.
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.
fonte
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.
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.
fonte