En primer lugar, el uso del término firma aquí es incorrecto. Sé que lo están utilizando en la documentación de Twitter , pero ese no es el nombre correcto. "Firma" normalmente se refiere a firmas digitales que forman parte de la criptografía asimétrica; por ejemplo, RSA, DSA ... Aquí tenemos un MAC .
No se utiliza "SHA-1", sino "HMAC / SHA-1". HMAC es un algoritmo de MAC que se basa en un función hash (aquí SHA-1) como un bloque de construcción, pero HMAC es más que una simple función hash. HMAC es un MAC, lo que significa que utiliza una clave secreta que la documentación de Twitter llama al "secreto del consumidor" (una vez más, esa documentación usa el término "clave" para designar algo diferente, lo cual es una gran fuente de confusión). Esta clave secreta está involucrada en el cálculo; es necesario para producir la salida HMAC pero también para verificarla. Esta clave secreta es conocida tanto por el cliente como por el servidor, pero no por ninguna otra (es "secreta"). HMAC es para que cada salida HMAC sea específica para un mensaje de entrada dado, y no es factible forjar una salida HMAC válida para un mensaje nuevo sin conocer la clave secreta, incluso si se observan muchos otros mensajes de pares + salida HMAC.
Para resumir, el servidor puede verificar la "firma" del cliente usando el "secreto del consumidor" que tanto el cliente como el servidor conocen. Cuando el servidor ve una salida HMAC válida, sabe que el mensaje proviene de alguien que conoce el "secreto del consumidor", que solo puede ser el cliente o el servidor en sí. El servidor sabe que nunca produce mensajes con ese formato exacto, por lo que debe provenir del cliente, el cliente específico que conoce ese "secreto del consumidor" específico. Por lo tanto, el cliente está autenticado .