¿Cómo funcionan las claves API y las claves secretas? ¿Sería seguro si tuviera que pasar mi API y mis claves secretas a otra aplicación?

136

Estoy empezando a pensar en cómo funcionan las claves API y las claves secretas. Hace solo 2 días me inscribí en Amazon S3 e instalé el complemento S3Fox . Me pidieron tanto mi Clave de acceso como mi Clave de acceso secreta, las cuales requieren que inicie sesión para acceder.

Entonces me pregunto, si me están pidiendo mi clave secreta, deben estar almacenándola en algún lugar, ¿verdad? ¿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?

¿Cómo se supone que funcionan las claves secretas y las claves de API? ¿Qué tan secretos deben ser? ¿Estas aplicaciones que usan las claves secretas lo almacenan de alguna manera?

Lance Pollard
fuente

Respuestas:

90

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.

ben
fuente
14
"Tomar una entrada y aplicar una función unidireccional se llama" hashing "la entrada, y lo que Amazon almacena en su sistema es un" hash "de su clave secreta". Si Amazon almacena un HASH de su clave secreta, ¿cómo es ¿Es posible que Amazon HASH el texto que se les envió?
Franklin
21
Primero dice "lo que Amazon almacena en su sistema es un" hash "de su clave secreta" y luego "Amazon busca su copia de la clave secreta". Estos parecen contradecirse entre sí. Creo que la primera afirmación es incorrecta.
Sean
3
Esta url brinda
asyncwait
10
"Teóricamente, cualquier función matemática que asigne una cosa a otra se puede revertir". Eso no es cierto, las funciones hash son el ejemplo. Es muy fácil de mostrar. Digamos que tenemos una función que convierte las palabras en números, basadas en la suma de valores (a = 1, b = 2, c = 3, etc.). Por ejemplo, "SO" sería 18 + 14 = 32. Así que hemos cambiado SO a 32 pero si le revelo esta función a alguien y le doy el número 32, no hay forma de que él pueda saber si nuestra palabra básica era "SO" o "ZF" (26 + 6) o una de las docenas de otras posibilidades
Leo
1
Según el documento que @asyncwait enlazó, Amazon definitivamente almacena su clave secreta, no solo un hash. De hecho, parece que lo único que está ocurriendo es lo que ocurre dentro de la función HMAC
cowlinator
7

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.

torre
fuente
2
el no necesita el enlace de clave privada está roto ahora.
setzamora
@Joset actualizó el enlace que apunta a una copia en la máquina de retroceso de Internet desde 2008
oligofren
1

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.

Generación de firma

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.

JBaczuk
fuente