0Pricing
Cryptology Academy · Lección

HMAC en API: firma de solicitudes

Implemente la firma de solicitudes basada en HMAC y la prevención de ataques de repetición.

HMAC en API: firma de solicitudes es una lección gratuita de Cryptology Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cryptology Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cryptology Academy incluye 4 lecciones en total.

Bienvenida

AWS, GitHub, Stripe y Twilio utilizan la firma de solicitudes basada en HMAC para autenticar llamadas a sus API. En esta lección construiremos un sistema completo de firma de solicitudes.

¿Por qué firmar las solicitudes de API?

Las claves de API incluidas en las URL pueden quedar registradas en servidores proxy, en el historial del navegador y en los registros del servidor. La firma de solicitudes incluye el cuerpo completo de la solicitud en el MAC, lo que garantiza que la carga útil no se haya modificado y que la clave no quede expuesta por sí sola.

Versión 4 de la firma de AWS

AWS SigV4 calcula: 1. Solicitud canónica (método + URL + encabezados + hash del cuerpo) 2. Cadena que se va a firmar (fecha + región + servicio + hash de la solicitud canónica) 3. Clave de firma = HMAC(HMAC(HMAC(HMAC('AWS4'+secret, date), region), service), 'aws4_request') 4. Firma = HMAC(signing_key, string_to_sign)

Verificación de webhooks de GitHub

GitHub firma cada carga útil de webhook: X-Hub-Signature-256: sha256=HMACHEX Verifique: import hmac expected = 'sha256=' + hmac.new(secret, payload, 'sha256').hexdigest() hmac.compare_digest(expected, received_signature)

Amenaza de los ataques de repetición

Si un atacante captura una solicitud válida firmada, puede reenviarla varias veces. Una transferencia de 100 $ firmada una vez podría repetirse 1000 veces. HMAC por sí solo NO evita los ataques de repetición.

Prevención de repeticiones basada en marcas de tiempo

Incluya una marca de tiempo en el mensaje firmado. Rechace las solicitudes con más de 5 minutos de antigüedad. Stripe envía X-Stripe-Signature con una marca de tiempo. GitHub utiliza X-GitHub-Delivery (UUID), no un mecanismo basado en marcas de tiempo.

Prevención de repeticiones basada en nonces

Incluya un nonce aleatorio en cada solicitud. El servidor almacena los nonces utilizados (en Redis con TTL). Rechace cualquier solicitud cuyo nonce ya se haya recibido. Es más fiable que las marcas de tiempo en sistemas distribuidos.

Implementación de la firma de solicitudes

import hmac, hashlib, time, os def sign_request(secret, method, path, body, timestamp=None): ts = timestamp or str(int(time.time())) payload = f'{method}\n{path}\n{ts}\n' + hashlib.sha256(body).hexdigest() sig = hmac.new(secret.encode(), payload.encode(), 'sha256').hexdigest() return ts, sig

Verificación en el servidor

def verify_request(secret, method, path, body, ts, received_sig): # Check timestamp freshness if abs(time.time() - int(ts)) > 300: # 5 minutes return False # Recompute and compare _, expected = sign_request(secret, method, path, body, ts) return hmac.compare_digest(expected, received_sig)

JWT con HMAC (HS256)

Los JWT HS256 utilizan HMAC-SHA256 con un secreto compartido. El servidor firma y verifica los tokens. Limitación: cualquier entidad que tenga la clave puede falsificar tokens. Para una relación de confianza asimétrica (autenticación de terceros), use RS256 o ES256.

Estrategia de rotación de claves

Rote periódicamente las claves de HMAC: genere una clave nueva, admita la antigua y la nueva durante el periodo de transición (24 horas) y, después, retire la clave antigua. AWS SigV4 deriva las claves a partir de secretos fechados para permitir una rotación diaria.

Comprobación rápida

¿Por qué la firma de solicitudes con HMAC no basta por sí sola para evitar los ataques de repetición?

Resumen

Se ha implementado la firma de solicitudes con HMAC y protección contra repeticiones. A continuación, compararemos CMAC y Poly1305 como alternativas de MAC basadas en cifradores de bloque.

Preguntas frecuentes

¿La lección «HMAC en API: firma de solicitudes» es gratis?

Sí — el texto completo de «HMAC en API: firma de solicitudes» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cryptology Academy, actualiza a CoddyKit PRO. El curso de Cryptology Academy incluye 4 lecciones en total.

¿Qué aprenderé en «HMAC en API: firma de solicitudes»?

Implemente la firma de solicitudes basada en HMAC y la prevención de ataques de repetición. Practicas Cryptology Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Cryptology Academy?

No se requiere experiencia previa. Cryptology Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «HMAC en API: firma de solicitudes»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Cryptology Academy?

Sí. Cada lección de Cryptology Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Conceptos de MAC y ataques de extensión de longitud
  2. Construcción de HMAC y demostración de seguridad
  3. HMAC en API: firma de solicitudes
  4. CMAC y Poly1305: MAC basados en cifradores de bloque
← Volver a Cryptology Academy