Estoy tratando de entender mejor cómo funcionan las claves públicas / privadas. Entiendo que un remitente puede agregar una firma digital a un documento usando su clave privada para obtener esencialmente un hash del documento, pero lo que no entiendo es cómo se puede usar la clave pública para verificar esa firma.
Entendí que las claves públicas cifran, las claves privadas descifran ... ¿alguien puede ayudarme a entender?
digital-signature
public-key-encryption
private-key
public-key
pki
jcampos8782
fuente
fuente
Respuestas:
Su comprensión de "cifrado de claves públicas, descifrado de claves privadas" es correcta ... para Cifrado de datos / mensajes. Para las firmas digitales, es al revés. Con una firma digital, está intentando demostrar que el documento firmado por usted proviene de usted. Para hacer eso, debe usar algo que solo USTED tiene: su clave privada.
Una firma digital en su descripción más simple es un hash (SHA1, MD5, etc.) de los datos (archivo, mensaje, etc.) que posteriormente se encripta con la clave privada del firmante. Como eso es algo que solo el firmante tiene (o debería tener), de ahí proviene la confianza. TODOS tienen (o deberían tener) acceso a la clave pública del firmante.
Entonces, para validar una firma digital, el destinatario
Si coinciden, la firma se considera válida. Si no coinciden, significa que se usó una clave diferente para firmarlo o que los datos han sido alterados (ya sea intencionalmente o no).
¡Espero que ayude!
fuente
Las teclas funcionan a la inversa:
A continuación se muestra un script de ejemplo para probar todo este flujo
openssl
.Este script genera lo siguiente:
fuente
La clave pública cifra y solo la clave privada puede descifrarla, y lo contrario es cierto. Ambos encriptan a diferentes hashes pero cada clave puede desencriptar el encriptado del otro.
Hay algunas formas diferentes de verificar que un mensaje proviene de un remitente esperado. Por ejemplo:
El remitente envía:
El mensaje
El hash del mensaje cifrado con su clave privada
El receptor:
Si no son idénticos, significa que el mensaje fue manipulado o que fue firmado con alguna otra clave y no con la que pensamos ...
Otro ejemplo sería que el remitente use un hash común que el receptor también pueda usar. Por ejemplo:
El remitente envía:
El receptor:
Esto nuevamente asegura que el mensaje no fue manipulado y que es del remitente esperado.
fuente
Si tuviera que reformular su pregunta de la forma en que la entiendo, está preguntando lo siguiente:
Otras respuestas ya han explicado cómo asimétricas medios de criptografía que pueda ya sea :
Nosotros sabemos que tanto el ejemplo # 1 y # 2 de trabajo. El ejemplo # 1 tiene sentido intuitivo, mientras que el ejemplo # 2 plantea la pregunta original .
Resulta que la criptografía de curva elíptica (también llamada "multiplicación de curva elíptica") es la respuesta a la pregunta original. La criptografía de curva elíptica es la relación matemática que hace posibles las siguientes condiciones:
Para la mayoría, las condiciones n. ° 1 y n. ° 2 tienen sentido, pero ¿qué pasa con el n. ° 3?
Tu tienes dos opciones aquí:
En conclusión, se crea un par de claves público / privado utilizando criptografía de curva elíptica, que por naturaleza, crea una clave pública y privada que están vinculadas matemáticamente en ambas direcciones, pero no derivadas matemáticamente en ambas direcciones . Esto es lo que le permite utilizar la clave pública de alguien para verificar que firmó un mensaje específico, sin que exponga su clave privada a usted.
fuente
Pensé que proporcionaría una explicación suplementaria para cualquiera que busque algo más intuitivamente revelador.
Una gran parte de esta confusión surge de nombrar 'claves públicas' y 'claves privadas' como tales porque cómo funcionan realmente estas cosas está directamente en desacuerdo con cómo se entiende que es una 'clave'.
Tome encriptación por ejemplo. Se podría pensar que funciona así:
Esto permite que se envíen mensajes secretos entre las partes, pero desde un punto de vista intuitivo aquí, 'bloqueo público' es un nombre más adecuado que 'clave pública'.
Sin embargo, para enviar firmas digitales, los roles están algo invertidos:
Luego, cuando el receptor recibe el mensaje, puede leerlo y luego usar la clave pública para desbloquear el mensaje bloqueado y comparar los dos mensajes. Si los mensajes son iguales, entonces saben que:
El mensaje desbloqueado no fue alterado durante el viaje y,
El mensaje debe haber sido de la persona que tiene el bloqueo correspondiente a su clave pública.
Y finalmente, todo este sistema solo funciona si alguien que quiere validar la firma de un firmante tiene un lugar autorizado para obtener la clave correspondiente para las cerraduras del firmante. De lo contrario, cualquiera puede decir "Oye, aquí está la clave del bloqueo privado de tal y tal", enviarte un mensaje fingiendo ser ellos pero bloquearlo con su bloqueo privado, realizas todos los pasos anteriores y crees que el mensaje debe ser realmente de la persona que pensabas, pero te engañas porque te engañaste en cuanto al verdadero propietario de una clave pública.
Siempre que haya una fuente confiable para recuperar la clave pública de un firmante, sabrá quién es el propietario legítimo de una clave pública y podrá validar su firma.
fuente
A su pregunta, estaba mirando la implementación de RSA. Y obtuve más claridad sobre la forma en que se utiliza una clave pública para verificar la firma utilizando una clave privada. Sin lugar a dudas, la clave privada no está expuesta. Aquí es cómo...
El truco aquí es ocultar la clave privada dentro de una función. En este caso,
(p-1)*(q-1).
Considere p como la clave privada y e como la clave pública. 'p' está encapsulado dentro de otra función para ocultarlo.
Datos enviados = [cifrado (hash), mensaje] = [m ^ d, mensaje]; donde m es el mensaje Suponga 'Datos enviados' = y Para verificar la integridad, encontramos y ^ e para obtener m. Desde
m ^(d*e) = m ^1 = m
.¡Espero que esto ayude! :)
fuente