Cuando tenemos firmas digitales, ¿por qué necesitamos el concepto de código de autenticación de mensaje?

Gracias por A2A. Gran pregunta El código de autenticación de mensajes por sí solo prueba que el mensaje no ha sido manipulado. MAC es lo suficientemente bueno si usted es el productor y consumidor del mensaje. por ejemplo, si está enviando código MAC para un valor que produjo y está enviando el valor a otra persona y espera que responda el mismo mensaje sin modificarlo, puede volver a calcular el MAC y saber que no ha sido alterado.
Pero si está enviando un mensaje a un tercero y necesita verificar
a) El mensaje no ha sido alterado / alterado – en ruta …
b) Ese mensaje realmente vino del remitente (es decir, carta de oferta de Quora o acuerdo de seguro de su compañía de seguros)
entonces usas firmas digitales. Que hace lo siguiente:
a) Crea MAC para la detección de manipulación
b) Cifra el MAC usando clave privada
c) El Destinatario tendrá “clave pública”, para que pueda verificar
– El mensaje no ha sido alterado
– El mensaje en realidad provino del remitente original, que es mediante el uso de la clave pública para descifrar el MAC, y recalculando el MAC a partir de los datos originales y comparando. (está asegurando el secreto de cuál debería ser el MAC real para los datos originales cifrando con clave privada a la que solo tiene acceso el remitente)

Esto también proporciona “no repudio”. Por lo tanto, si recibe una carta de oferta firmada digitalmente de Quora, no pueden reclamar que no la enviaron. No puedo hablar por cuestiones legales aquí, pero técnicamente puede probar que vino del remitente.

TL; DR: Ambos conceptos tienen casi el mismo propósito, pero la implementación de MAC es más rápida y pequeña.

Una firma digital es un hash del mensaje cifrado bajo una clave privada del remitente (el firmante) utilizando un algoritmo criptográfico de clave pública. Cualquiera puede validar una firma si se le da la clave pública correspondiente (para descifrar la firma y compararla con un hash calculado del mensaje realmente recibido). Para implementar uno, necesitamos una función hash criptográficamente segura y un cifrado asimétrico.

Un MAC es efectivamente un hash con clave (un hash que también es una función de alguna clave), que generalmente se implementa como ejecutar un cifrado de bloque (con una clave que se comparte entre el firmante y el verificador) sobre bloques de mensaje y combinar el salida del paso anterior con el siguiente para hacer que la salida amplia de un bloque dependa de la clave y el mensaje completo, al tiempo que satisface los requisitos de la función hash (por ejemplo, el efecto de avalancha). De esta manera podemos hacer un hash del mensaje y al mismo tiempo firmar ese hash, porque para reproducir el mismo resultado, quien verifica nuestra firma (o quiere falsificarla) debe tener exactamente la misma clave que tenemos. Entonces, un MAC certifica a los que conocen la clave que el remitente es alguien de ellos y conoce la misma clave.

Es el único inconveniente real de MAC que se basa en un cifrado simétrico, por lo tanto, todas las partes tienen que compartir la misma clave y mantenerla en secreto, y seguirán siendo indistinguibles entre sí. El principal beneficio es que un MAC es muy simple de implementar: solo necesita un cifrado en bloque, y los cifrados en bloque son rápidos y se ajustan convenientemente dentro de chips especializados bajo estrictas restricciones de sistemas integrados y similares.

Por otro lado, una firma digital hecha con un algoritmo criptográfico de clave pública como RSA o DSA o ECDSA es mucho más fácil de usar en la práctica, ya que la clave pública para verificar que la firma no es sensible y se puede distribuir fácilmente. Pero para implementarlo bajo restricciones estrictas, tendríamos que lidiar con dos algoritmos y claves más grandes, y potencialmente toda la infraestructura de clave pública.