HMAC y hash para firmas API: protección de webhooks
Cuando un servicio de terceros le envía datos a través de un webhook o necesita autenticar una solicitud de API, necesita una forma de demostrar que el mensaje no ha sido manipulado y que realmente proviene de quien dice que sí. El hash por sí solo no resuelve esto; necesitas HMAC. Comprender la diferencia entre un hash simple y un HMAC, y cómo verificar las firmas correctamente, es la diferencia entre una integración segura y una comprometida.
¿Qué es un hachís?
Un hash es una función unidireccional que convierte cualquier entrada (texto, un archivo, una respuesta API) en una cadena de longitud fija. La misma entrada siempre produce la misma salida. Los algoritmos hash comunes incluyen SHA-256, SHA-1 y MD5. Puedes usar un generador de hash Para ver esto en acción: "hola" siempre se convierte en el mismo hash SHA-256. La propiedad clave es que el hash es determinista pero imposible de revertir; no puede recuperar la entrada original del hash.
¿Qué es HMAC?
HMAC significa Código de autenticación de mensajes basado en hash. A diferencia de un hash simple, HMAC combina un mensaje con una clave secreta antes del hash. El proveedor del webhook tiene una clave secreta, codifica el mensaje con esa clave y le envía el mensaje y el hash. Repites el proceso con la misma clave secreta; Si su hash calculado coincide con el enviado, sabrá que el mensaje es auténtico y no está modificado. El generador HMAC La herramienta te permite probar esto con tu propio mensaje y secreto.
La diferencia crítica: hash vs HMAC
He aquí por qué esto es importante:
- hash simple: Cualquiera puede ver su mensaje y recalcular el hash para crear uno "válido". No prueba nada.
- HMAC: Sólo alguien con la clave secreta puede generar el HMAC correcto. Esto prueba criptográficamente que el mensaje provino del poseedor de la clave y no ha sido alterado.
Si un servicio le envía un webhook con solo un hash, un atacante puede interceptarlo, cambiar los datos, recalcular el hash y usted no se dará cuenta. Con HMAC y un secreto compartido, el atacante no puede falsificar una firma válida sin la clave.
Verificar firmas de webhooks en su código
Cuando llega un webhook, el servicio proporciona la carga útil del mensaje y un encabezado de firma (a menudo X-Signature o X-Webhook-Signature). Su código debería:
- Recupere su clave secreta de una configuración segura (variables de entorno, un administrador secreto).
- Calcule el HMAC-SHA256 del cuerpo de la solicitud sin formato utilizando esa clave.
- Compare su HMAC calculado byte por byte con el encabezado de la firma (utilice siempre la comparación de tiempo constante para evitar ataques de sincronización).
- Si coinciden, el webhook es auténtico. Si no, recházalo.
La mayoría de los proveedores de webhooks documentan su algoritmo HMAC y el formato exacto para firmar: a veces es el cuerpo JSON sin formato, a veces una marca de tiempo concatenada con el cuerpo. Siga exactamente sus especificaciones.
HMAC vs JWT: ¿dónde encajan?
Los JWT (JSON Web Tokens) a menudo se confunden con firmas HMAC. Un JWT es un token autónomo con tres partes: un encabezado, una carga útil (reclamaciones) y una firma. La firma puede estar basada en HMAC o RSA. decodificadores JWT le permite inspeccionar y verificar tokens. Mientras que los HMAC verifican un solo mensaje, los JWT son tokens que almacena y envía con cada solicitud o llamada API. Para webhooks y autenticación de mensajes únicos, HMAC es más simple y suficiente. Para tokens de sesión en curso o credenciales de API, un JWT suele ser más flexible.
Privacidad: firme y verifique completamente en su navegador
Las herramientas HMAC y hash de TextArray se ejecutan completamente en su navegador. No se carga ningún mensaje, secreto o firma en un servidor. No se requiere ninguna cuenta y las herramientas funcionan sin conexión después de que se carga la página. Puede pegar de forma segura cargas útiles de webhook y claves API para probar y depurar firmas sin exponer los datos a un tercero o a un servicio de registro. Esto es especialmente valioso cuando trabaja con claves API confidenciales o datos de clientes durante el desarrollo.
Empezando
Empiece por comprender el hash: utilice el generador de hash para ver cómo la misma entrada siempre produce la misma salida SHA-256. Luego muévete a Generación HMAC para ver cómo una clave secreta cambia la salida. Intente cambiar ligeramente la clave o el mensaje; el HMAC cambia por completo, a diferencia de una suma de comprobación ingenua. Una vez que comprenda la mecánica, aplíquela a la lógica de verificación de su webhook. Para cargas útiles sensibles como texto cifrado o fichas decodificadas, emparéjelos siempre con solicitudes firmadas por HMAC para garantizar la integridad y el origen.