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.