En el mensaje firmando , no hay cifrado. De lo contrario, lo llamaríamos cifrado .
Un algoritmo de firma es, nominalmente, la combinación de tres sub-algoritmos:
Generación de pares de claves: ese algoritmo produce un nuevo par de claves públicas / privadas, utilizando una fuente aleatoria fuerte, y utilizando como parámetro un "nivel de seguridad" para alcanzar (es decir, el tamaño de la clave que se va a generar).
Generación de firmas: las entradas son el mensaje que se firmará m y la clave privada. La salida es el valor de la firma s.
Verificación de firma: las entradas son el mensaje m , la firma s y la clave pública. La salida es un valor booleano: "verdadero" si la firma coincide con el mensaje y la clave pública, "falso" de lo contrario.
Se supone que los algoritmos de generación y verificación de firmas pueden procesar mensajes de longitud arbitraria, posiblemente gigabytes. Y lo hacen. Los algoritmos de firma existentes ya son muy eficientes en el manejo de grandes entradas. Por lo tanto, no hay ningún problema que requiera una construcción adicional, al contrario del cifrado asimétrico donde se necesita algo más para hacer frente a las graves limitaciones de estos algoritmos.
La mayoría de los textos que hablan sobre cifrado híbrido dicen que debemos hacerlo porque el cifrado asimétrico es lento, pero eso es incorrecto . La razón real por la cual se usa el cifrado híbrido es porque los algoritmos de cifrado asimétricos conocidos no pueden simplemente procesar mensajes de longitud arbitraria, y no tenemos una idea real de cómo podríamos modificarlos para hacerlo de manera segura. . Básicamente, los "modos de encadenamiento" para cifrados de bloque no tienen equivalentes para el cifrado asimétrico que serían obviamente seguros. Sin embargo, los algoritmos de firma nunca tuvieron una limitación en la longitud de entrada, por lo que no es un problema.
Ocurre, internamente, que la mayoría de los algoritmos de firma son eficientes en el manejo de entradas grandes porque su primer paso es procesar el mensaje completo a través de una Función criptográfica de hash , y luego trabajar solo sobre el valor de hash. Este es un elemento de diseño de la mayoría de los algoritmos de firma y no debería preocupar a los usuarios externos que simplemente usan el algoritmo. Sin embargo, sí explica por qué algunas personas que discuten sobre "firmas RSA" de repente comienzan a hablar sobre funciones hash como SHA-1: esto se debe a que el algoritmo incluye , como uno de sus elementos de construcción, Una función hash. Tenga en cuenta que algunos algoritmos no funcionan exactamente de esa manera; sería erróneo afirmar que los algoritmos de firma de todos comienzan por un simple hashing.
En última instancia, esto es una cuestión de terminología. En el caso de cifrado asimétrico, p. Ej. RSA, es tradicional hablar de "algoritmo de encriptación" usando solo una entrada corta; y cualquier capa de cifrado simétrico adicional se considera, de hecho, una capa externa adicional. Sin embargo, en el caso de las firmas digitales, la misma tradición sostiene que el paso de hash inicial es parte de lo que llamamos el "algoritmo de firma".
Hay algunas buenas razones para esta elección de terminología; en particular, queremos que la función hash sea parte de lo que llamamos el "algoritmo de firma" porque usamos un algoritmo de firma como RSA o ECDSA sin un paso de hashing (usando una "entrada corta" directamente sin hashing) puede inducir debilidades severas. Sin embargo, en su esencia, todavía es un problema de terminología.