Básicamente elaborando sobre lo que se describe aquí .
Así es como funciona: supongamos que tenemos una función que toma un número del cero al nueve, suma tres y, si el resultado es mayor que diez, resta diez. Entonces f (2) = 5, f (8) = 1, etc. Ahora, podemos hacer otra función, llamarla f ', que va hacia atrás, agregando siete en lugar de tres. f '(5) = 2, f' (1) = 8, etc.
Ese es un ejemplo de una función bidireccional y su inverso. Teóricamente, cualquier función matemática que asigne una cosa a otra puede revertirse. Sin embargo, en la práctica, puede hacer una función que codifique su entrada tan bien que sea increíblemente difícil de revertir.
Tomar una entrada y aplicar una función unidireccional se denomina "hashing" la entrada, y lo que Amazon almacena en su sistema es un "hash" de su clave secreta. SHA1 es un ejemplo de este tipo de función "unidireccional", también está reforzado contra ataques.
La función HMAC se basa en funciones hash establecidas para usar una clave conocida para autenticar una cadena de texto. Funciona así:
- Toma el texto de su solicitud y su clave secreta y aplica la función HMAC.
- Agrega ese encabezado de autenticación a su solicitud y lo envía a Amazon.
- Amazon busca su copia de la clave secreta y el texto que acaba de enviar y aplica la función HMAC.
- Si el resultado coincide, saben que tiene la misma clave secreta.
La diferencia entre esto y PKI es que este método es RESTful , lo que permite un número mínimo de intercambios entre su sistema y los servidores de Amazon.
¿No es básicamente lo mismo que pedirme los números de mi tarjeta de crédito o contraseña y almacenarlos en su propia base de datos?
Sí, aunque el daño que alguien puede hacer con S3 parece estar limitado al drenaje de su cuenta.
¿Qué tan secretos deben ser? ¿Estas aplicaciones que usan las claves secretas lo almacenan de alguna manera?
En algún momento, tendrá que cargar la clave secreta, y con la mayoría de los sistemas basados en Unix, si un atacante puede obtener acceso de root, puede obtener la clave. Si cifra la clave, debe tener un código para descifrarla, y en algún momento el código de descifrado debe ser texto sin formato para que pueda ejecutarse. Este es el mismo problema que tiene DRM, excepto que usted es el propietario de la computadora.
En muchos casos, solo pongo claves secretas en un archivo con permisos limitados, y tomo las precauciones habituales para evitar que mi sistema sea rooteado. Hay algunos trucos para que funcione correctamente con un sistema multiusuario, como evitar archivos temporales y demás.
La criptografía de clave pública se usa para defenderse de ataques muy específicos, algunos de los cuales son comunes. En resumen, esta es una matemática compleja que le permite a uno verificar que un individuo tenga el par de Claves Pública y Privada mientras solo conoce la clave pública. Esto es muy diferente de una tarjeta de crédito o contraseña estática. Como ejemplo, si se está autenticando con un servidor OpenSSH, el servidor no necesita la clave privada .
Idealmente, si la base de datos de la API de Amazon se ve comprometida, el atacante tendría una lista de claves públicas y no podría acceder a la API del usuario utilizando esta información. Sin embargo, los sistemas ideales no siempre se ponen en práctica y no estoy seguro si Amazon está protegiendo contra este vector de ataque, pero deberían estarlo.
En clave pública, la autenticación es estadísticamente inmune a la fuerza bruta. Las contraseñas son a menudo palabras del diccionario que pueden romperse con la relatividad rápidamente. Sin embargo, una clave privada es un número masivo que no es fácil de adivinar. Si el atacante tuviera la clave pública, podría realizar muchas conjeturas "fuera de línea" en una supercomputadora, pero aun así, tomaría mucho tiempo y dinero romper la clave.
fuente
AWS ha diseñado su propio algoritmo de autenticación personalizado. v4 se lanzó en 2014. Aquí se detallan los detalles: Solicitudes de autenticación (AWS Signature Version 4) . Un punto importante es que la solicitud no está firmada con el secreto en sí, sino con una clave de firma que se genera utilizando el secreto. También utiliza HMAC-SHA256 para firmar.
El uso de claves asimétricas sería más seguro ya que AWS solo almacenaría una clave pública en lugar del secreto, que es almacenado tanto por el usuario como por AWS.
fuente