Cómo funciona la firma de AWS en profundidad

8

Estoy tratando de entender cómo funciona la firma 4 de AWS. Leí los documentos y encontré un ejemplo de Python donde Se calcula la firma. También me topé con esta respuesta que explica HMAC a poco.

Tengo curiosidad por entender qué hace AWS en el lado del servidor para "creer" en la solicitud.

¿Están ejecutando el mismo código que el ejemplo pero estableciendo la fecha con el parámetro pasado por la solicitud y luego haciendo coincidir los dos hashes (HMAC parece funcionar de esa manera)? Si es así, ¿por qué hay tantos valores y hash de dos pasos en la solicitud (supongo que es algo relacionado con el choque de hash)?

PS: dado que el enfoque (HMAC) utiliza las teclas ACCESO y SECRETO como claves (es clave simétrica) solo se puede implementar en el lado del servidor. Esto no se puede hacer de forma segura en una aplicación móvil, ya que se puede acceder fácilmente a las teclas. ¿Hay alguna manera de hacerlo en un entorno "menos cerrado" (en comparación con el servidor), como una aplicación cliente / móvil / etc. aplicación?

    
pregunta EsseTi 13.10.2015 - 12:21
fuente

2 respuestas

1

El modelo general de API de Amazon incluye los siguientes pasos

  1. Cree su solicitud de API con todos los elementos (dentro de una estructura de programa como una matriz)
  2. Ordene y formatee los elementos de solicitud
  3. Calcule el HMAC de la solicitud formateada
  4. Envíe la solicitud completa a Amazon, con el HMAC

Amazon luego toma la solicitud, genera su propio HMAC, y si coincide, valida la solicitud (siempre que sus tokens de autenticación también coincidan).

No hay forma de garantizar su seguridad si coloca sus claves dentro de una aplicación. Tendría que obligar a cualquier cliente compilado a ponerse en contacto con su servidor y hacer la solicitud de API allí.

    
respondido por el Machavity 29.06.2016 - 02:21
fuente
1

El lado del servidor pasa por el mismo proceso que el cliente para validar la solicitud (+ algunas otras cosas, por ejemplo, verificar que la hora / fecha se encuentra dentro de los 15 minutos del tiempo real). La ventaja de crear la clave de firma derivada como se describe es que esta clave ahora se puede usar varias veces, siempre que la fecha coincida, para firmar solicitudes a la misma región y servicio. Esto puede ser útil ya sea para guardar algunos cálculos o para uso temporal en un componente diferente. Obviamente, aún desea tomar medidas para asegurar esa clave derivada, pero su pérdida tiene un impacto menor que la pérdida de sus claves "reales".

Si la aplicación necesita cargar objetos en S3, es posible que pueda usar direcciones URL firmadas previamente para evitar comunicar la clave secreta al cliente: enlace

De lo contrario, probablemente querrá mantener las claves de acceso en secreto en un servidor e implementar alguna otra seguridad entre sus clientes y servidores.

    
respondido por el Guy Sirton 28.08.2016 - 05:40
fuente

Lea otras preguntas en las etiquetas