¿Cuál es la diferencia entre cifrar algunos datos frente a firmar algunos datos (usando RSA)?
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.
¿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 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.
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 mediante la firma.
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 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.
Quiero poder encriptar cierta información y usarla como clave de producto para mi software. Solo me importa ser el único que pueda generarlos.
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.
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 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.
¿Es útil la firma en este escenario?
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.