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.