Su pregunta principal es:
Los problemas con H pueden debilitar el esquema; esta es la razón por la que las personas dejaron de usar MD5 y se están alejando de SHA1. Entonces, ¿por qué no saltarse el paso 3 y cifrar c directamente?
Sí, el MD5 actualmente se puede dividir en aproximadamente 2 24.1 conjeturas (24.1 bits de seguridad). SHA1 actualmente ofrece alrededor de 80 bits de seguridad contra los mismos ataques. ¿Estás diciendo que eliminar el hash por completo y obtener 0 bits de seguridad es de alguna manera una mejora?
Tu comprensión es cercana, pero parece que te faltan algunos conceptos básicos.
La respuesta de @ReyRyan da la respuesta directa: que el criptográfico asimétrico como RSA solo puede funcionar con una entrada de longitud fija.
Para ampliar eso, dijiste:
[el certificado es] generalmente mucho más corto que el contenido de la página que mi navegador probablemente descifre de todos modos.
Estás mezclando un montón de ideas erróneas diferentes aquí y comparando manzanas con naranjas.
-
Lo que estás describiendo con "cifrar el hash" se llama un firma RSA . Estoy enojado incluso por llamarlo "cifrar el hash" porque técnicamente estás descifrando el hash usando la clave descifrado .
-
En la práctica, las Autoridades de certificados reales utilizan Algoritmo de firma digital (DSA) o Elliptic Curve DSA que se basan en matemáticas completamente diferentes y que definitivamente no pueden describirse como "cifrar el hash".
-
Comparando los tiempos de ejecución de "descifrar el hash" (también conocido como "verificar la firma") con el tiempo de ejecución de descifrar el contenido de la página web son manzanas y naranjas porque la firma se realiza con un criptográfico asimétrico (RSA o Criptografía de curva elíptica (ECC)), que como dijo @LieRyan, solo puede cifrar un solo bloque de longitud fija, mientras que el contenido de la página web está cifrado con simétrico cryto (generalmente AES ) que está diseñado para cifrar / descifrar datos en masa muy rápidamente.
Ignorando todo lo anterior, todavía hay una buena respuesta a la pregunta:
Entonces, ¿por qué no omitir el paso 3 y cifrar c directamente?
Porque esto sería mucho más fácil para un atacante falsificar. Usted está proponiendo que el servidor web proporcione una versión cifrada de su certificado que puedo descifrar con la clave pública de la AC. Como atacante puedo cambiar un byte del texto cifrado, descifrarlo con la clave pública de la CA y ver lo que dice, repetirlo varios miles de millones de veces hasta que tenga lo que parece ser un certificado legítimo de esa CA que dice ser el propietario del sitio web (es decir, la clave pública es una que tengo).
Agregar un hash al proceso detiene ese tipo de ataque porque también tienes que comprobar cuál es la imagen previa del hash del texto cifrado modificado e intentarlo de nuevo si no coincide. Al agregar un paso hash, hemos aumentado el costo de realizar este ataque de "un par de meses en una computadora portátil y ~ $ 10,000 en electricidad" a "siglos en una supercomputadora y una central eléctrica al tamaño del sol".
(estoy exagerando un poco, suponiendo que pudiéramos hacer cálculos de un solo electrón, solo construir un contador de 0 a 2 ^ 256 requeriría una energía equivalente a la mitad de la materia en la galaxia Vía Láctea ).