Pregunta

¿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?

¿Fue útil?

Solución

Al encriptar, usa su clave pública para escribir un mensaje y ellos usan su clave privada para leerlo.

Al firmar, usa su clave privada para escribir la firma del mensaje, y ellos usan su clave pública para verificar si es realmente suya.

  

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

Esto es firmando , se hace con su clave privada.

  

Deseo poder cifrar cierta información y utilizarla como clave de producto para mi software.

     

Solo me importa ser el único que pueda generarlos.

Si solo necesita saberlo usted mismo, no necesita meterse con las teclas para hacerlo. Puede generar datos aleatorios y guardarlos en una base de datos.

Pero si quiere que la gente sepa que las claves son realmente suyas, debe generar datos aleatorios, mantener una base de datos Y firmarla con su clave.

  

Me gustaría incluir mi clave pública en mi software para descifrar / leer la firma de la clave.

Probablemente necesite comprar un certificado para su clave pública de un proveedor comercial como Verisign o Thawte, para que las personas puedan verificar que nadie haya falsificado su software y reemplazado su clave pública por la suya.

Otros consejos

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:

  • Para generar una firma, cree un hash a partir del texto sin formato, cifre con su clave privada, inclúyalo junto con el texto sin formato.
  • Para verificar una firma, haga un hash del texto plano, descifre la firma con la clave pública del remitente, verifique que ambos hash sean iguales.

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 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.

La firma está produciendo 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.

Por lo tanto, el uso de claves no se invierte (de lo contrario, su clave privada ya no sería privada).

Hay dos problemas distintos pero estrechamente relacionados para establecer una comunicación segura

  1. Cifre los datos para que solo las personas autorizadas puedan descifrarlos y leerlos.
  2. Verifique la identidad / autenticación del remitente.

Ambos problemas pueden resolverse 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.

  • Alice cifra el mensaje con la clave pública de Bob y lo envía.
  • Bob recibe el mensaje y lo descifra usando su clave privada.
  

Tenga en cuenta que si A quiere enviar un mensaje a B, A necesita usar el Público   clave de B (que está disponible públicamente para cualquiera) y ninguna pública   ni la clave privada de A aparece aquí.

Entonces, si desea enviarme un mensaje, debe conocer y usar mi 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. Verifique la identidad del remitente (Autenticación)

Alice quiere enviar 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?

  • Alice firma el mensaje con su clave privada y lo envía. (En la práctica, lo que se firma es un hash del mensaje, por ejemplo, SHA-256 o SHA-512).
  • Bob lo recibe y lo verifica usando la clave pública de Alice. Dado que la clave pública de Alice verificó con éxito el mensaje, Bob puede concluir que el mensaje ha sido firmado por Alice.

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.

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.

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)

Funcionalmente, utiliza el cifrado de clave pública / privada para asegurarse de que solo el receptor pueda leer su mensaje. El mensaje se encripta y luego se encripta utilizando la clave pública del receptor.

La firma que utiliza para informar al receptor que creó el mensaje y que no ha cambiado durante la transferencia. La firma de mensajes se realiza utilizando su propia clave privada.

En cuanto al algoritmo utilizado: esto invoca números primos. Haría una búsqueda en Google para obtener una mejor explicación.

  

¿Cuál es la diferencia entre cifrar algunos datos frente a firmar algunos datos (usando RSA)?

El cifrado conserva 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.

  

¿Simplemente revierte el papel de las claves público-privadas?

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 gestión de claves , donde p. la clave de firma debería 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 utilizar la clave privada del receptor para descifrar 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.

  

Por ejemplo, quiero usar mi clave privada para generar mensajes, de modo que solo yo pueda ser el remitente.

Esa es una propiedad de no repudio, que se puede lograr firmando.

  

Quiero que mi clave pública se use para leer los mensajes y no me importa quién los lea.

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 de 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.

  

Deseo poder cifrar cierta información y usarla como clave de producto para mi software. Solo me importa ser el único que pueda generarlos.

El cifrado se usa 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.

  

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.

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 firma de código b

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:

  1. Ningún tercero puede producir una clave de licencia al descompilar la aplicación
  2. El contenido de la clave de software no necesita ser seguro
  3. La clave de software no es legible para humanos

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 del proyecto NaCl de causa a ejemplos C

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top