¿Cuál es la diferencia entre cifrar algunos datos frente a firmar algunos datos (usando RSA)?
¿Simplemente revierte el papel de las claves público-privadas?
Por ejemplo, quiero usar mi clave privada para generar mensajes, de modo que solo yo pueda ser el remitente. Quiero que mi clave pública se use para leer los mensajes y no me importa quién los lea. Quiero poder encriptar cierta información y usarla como clave de producto para mi software. Solo me importa ser el único que pueda generarlos. Me gustaría incluir mi clave pública en mi software para descifrar / leer la firma de la clave. No me importa quién puede leer los datos en la clave, solo me importa que sea el único verificable que pueda generarlos.
¿Es útil la firma en este escenario?
fuente
f(key, message)
, de modo quef(private, f(public, message)) === f(public, f(private, message)) === message
En la criptografía RSA, cuando genera un par de claves, es completamente arbitrario cuál elige ser la clave pública y cuál es la clave privada. Si encripta con uno, puede desencriptar con el otro; funciona en ambas direcciones.
Por lo tanto, es bastante simple ver cómo puede cifrar un mensaje con la clave pública del receptor , para que el receptor pueda descifrarlo con su clave privada .
Una firma es una prueba de que el firmante tiene la clave privada que coincide con alguna clave pública. Para hacer esto, sería suficiente cifrar el mensaje con la clave privada de ese remitente e incluir la versión cifrada junto con la versión de texto sin formato. Para verificar el remitente, descifre la versión encriptada y verifique que sea la misma que el texto sin formato.
Por supuesto, esto significa que su mensaje no es secreto. Cualquiera puede descifrarlo, porque la clave pública es bien conocida. Pero cuando lo hacen, han demostrado que el creador del texto cifrado tiene la clave privada correspondiente.
Sin embargo, esto significa duplicar el tamaño de su transmisión: texto sin formato y texto cifrado juntos (suponiendo que desee que las personas que no están interesadas en verificar la firma, lean el mensaje). Por lo tanto, en general, se crea una firma creando un hash del texto sin formato. Es importante que no se puedan crear hashes falsos, por lo que se utilizan algoritmos de hash criptográficos como SHA-2.
Entonces:
fuente
Existen dos problemas distintos pero estrechamente relacionados para establecer una comunicación segura
Ambos problemas se pueden resolver de manera elegante utilizando la criptografía de clave pública.
I. Cifrado y descifrado de datos.
Alice quiere enviar un mensaje a Bob que nadie debería poder leer.
Entonces, si desea enviarme un mensaje, debe conocer y usar la clave pública que le proporciono y solo yo podré descifrar el mensaje ya que soy el único que tiene acceso a la clave privada correspondiente.
II Verificar la identidad del remitente (autenticación)
Alice quiere enviarle un mensaje a Bob nuevamente. El problema de cifrar los datos se resuelve utilizando el método anterior.
Pero, ¿qué pasa si estoy sentada entre Alice y Bob, presentándome como 'Alice' a Bob y enviando mi propio mensaje a Bob en lugar de reenviar el enviado por Alice? Aunque no puedo descifrar y leer el mensaje original enviado por Alice (que requiere acceso a la clave privada de Bob), estoy secuestrando toda la conversación entre ellos.
¿Hay alguna manera de que Bob pueda confirmar que los mensajes que está recibiendo son enviados por Alice?
fuente
Sí, piense en firmar datos para darle su propio sello de cera que nadie más tiene. Se hace para lograr integridad y no repudio . El cifrado es para que nadie más pueda ver los datos. Esto se hace para lograr la confidencialidad . Ver wikipedia http://en.wikipedia.org/wiki/Information_security#Key_concepts
Una firma es un hash de su mensaje firmado con su clave privada.
fuente
Firmar es generar un "hash" con su clave privada que se puede verificar con su clave pública. El texto se envía en claro.
El cifrado utiliza la clave pública del receptor para cifrar los datos; La decodificación se realiza con su clave privada.
Entonces, el uso de claves no se invierte (de lo contrario, su clave privada ya no sería privada).
fuente
Está describiendo exactamente cómo y por qué se usa la firma en la criptografía de clave pública. Tenga en cuenta que es muy peligroso firmar (o cifrar) los mensajes aritrarios proporcionados por otros; esto permite ataques a los algoritmos que podrían comprometer sus claves.
fuente
La firma indica que realmente eres la fuente o el aval del objeto firmado. Sin embargo, todos pueden leer el objeto.
Cifrar significa que solo aquellos con la clave privada correspondiente pueden leerlo, pero sin firmar no hay garantía de que esté detrás del objeto cifrado.
fuente
El cifrado preserva la confidencialidad del mensaje ("algunos datos"), mientras que la firma proporciona no repudio: es decir, solo la entidad que lo firmó podría haberlo firmado. También hay diferencias funcionales; sigue leyendo.
Absolutamente no. El uso de las mismas claves privadas para firmar y descifrar (o, del mismo modo, las mismas claves públicas para verificación y cifrado ) está mal visto, ya que no debe mezclar propósitos. Esto no es tanto un problema matemático (RSA aún debe ser seguro), sino un problema con la administración de claves , donde, por ejemplo, la clave de firma debe tener una vida más corta y contener más protección antes de usarse.
Para el mismo mensaje, debe usar la clave privada del remitente para firmar y la clave pública de confianza del receptor para el cifrado. Por lo general, se utiliza firmar y luego cifrar; de lo contrario, un adversario podría reemplazar la firma por la suya. Del mismo modo, debe usar la clave privada del receptor para el descifrado y la clave pública confiable del remitente para la verificación.
Además, debe comprender que la generación de firmas no utiliza "cifrado con la clave privada". Aunque todas las operaciones de RSA se basan en la exponenciación modular, el esquema de relleno es completamente diferente para la generación de firmas. Además, la clave pública tiene propiedades completamente diferentes a la clave privada RSA en todos los usos prácticos de RSA.
Esa es una propiedad de no repudio, que se puede lograr mediante la firma.
La clave pública debe considerarse conocida por todos. Si desea que todos lean los mensajes, simplemente no los cifre.
La firma generalmente no influirá en el contenido del mensaje. El mensaje se considera separado de las firmas. Oficialmente, tales firmas se conocen como "firmas con apéndice", donde el apéndice es el mensaje. Es un nombre un poco extraño ya que el mensaje se considera más importante que la firma sobre él, pero sí. Solo algunas firmas ofrecen recuperación de mensajes (parcial); ya no se usan mucho y generalmente se consideran obsoletos.
Tenga en cuenta que los protocolos de firma como CMS pueden implementar un formato contenedor que incluye tanto el mensaje como la firma. En ese caso, primero debería obtener el mensaje, aún sin cifrar, del contenedor, al igual que descomprimir un archivo de un archivo .zip simple. Por lo tanto, el mensaje puede estar oculto a la vista y no puede usarse directamente en ese caso.
El cifrado se utiliza para lograr la confidencialidad. En el pasado, la generación de firmas RSA a menudo se consideraba como "cifrado con la clave privada". Sin embargo, las operaciones son bastante diferentes como se explicó anteriormente, y los estándares posteriores intentan desesperadamente separar el cifrado y la generación de firmas.
Sí, esto se llama establecer confianza en la clave pública. Sin embargo, proteger el código de su programa es muy diferente de proteger los mensajes. Puede realizar la firma del código, pero luego necesitaría algo para verificar la firma fuera de su código . Hay sistemas operativos que ofrecen esto.
Hay Microsoft Authenticode por ejemplo. Las tiendas de aplicaciones como la tienda de aplicaciones iStore y Android pueden o no usar la firma de código, pero ofrecen cierta seguridad de que su aplicación no está clonada o al menos no está clonada dentro de la tienda. La criptografía no siempre es la solución después de todo.
Mantener su código de ser clonado / alterado en absoluto es mucho más difícil, y que estaría sólidamente en territorio DRM si vas de esa manera.
Si, absolutamente. Sin duda, puede ayudar asegurarse de que los mensajes solo fueron firmados por usted, si existe confianza en la clave pública. Si puede ser útil para autenticar el código de su aplicación / clave pública integrada, depende completamente del entorno en el que espera ejecutar el código.
fuente
En su escenario, no cifra en el significado del cifrado asimétrico; Prefiero llamarlo "codificar".
Entonces codifica sus datos en alguna representación binaria, luego firma con su clave privada. Si no puede verificar la firma a través de su clave pública, sabe que los datos firmados no se generan con su clave privada. ("verificación" significa que los datos sin firmar no son significativos)
fuente
Funcionalmente, utiliza el cifrado de clave pública / privada para asegurarse de que solo el receptor pueda leer su mensaje. El mensaje se cifra utilizando la clave pública del receptor y se descifra con la clave privada del receptor.
La firma que puede usar para informar al receptor que creó el mensaje y que no ha cambiado durante la transferencia. La firma del mensaje se realiza con su propia clave privada. El receptor puede usar su clave pública para verificar que el mensaje no haya sido manipulado.
En cuanto al algoritmo utilizado: eso implica una función unidireccional, ver por ejemplo wikipedia . Uno de los primeros algoritmos utiliza números primos grandes, pero desde entonces se han inventado más funciones unidireccionales.
Busque 'Bob', 'Alice' y 'Mallory' para encontrar artículos de introducción en Internet.
fuente
Respondiendo a esta pregunta en el contenido que la intención de los interrogadores era utilizar la solución para la licencia de software, los requisitos son:
Una firma digital resolverá este problema, ya que los datos sin procesar que hacen que la clave se pueda firmar con una clave privada, lo que hace que no sea legible para el ser humano, pero podría decodificarse si se realiza la ingeniería inversa. Pero la clave privada es segura, lo que significa que nadie podrá hacer licencias para su software (que es el punto).
Recuerde que no puede evitar que una persona experta elimine los bloqueos de software de su producto. Entonces, si tienen que hackear cada versión que se lanza. Pero realmente no desea que puedan generar nuevas claves para su producto que puedan compartirse para todas las versiones.
Python La documentación de PyNaCl tiene un ejemplo de 'Firma digital' que se adaptará al propósito. http://pynacl.readthedocs.org/en/latest/signing/
y de causa NaCl proyecto a ejemplos C
fuente