Cifrar / descifrar nuestra clave de licencia

4

Necesitamos proporcionar una clave de licencia a los clientes para nuestra aplicación. La licencia real es XML, pero necesitamos cifrarla y luego, en nuestro programa, descifrarla. Creo que es lo siguiente, pero estoy pidiendo que me asegure de que no me esté perdiendo algo (la información a continuación se actualiza desde el cifrado hasta la firma según los comentarios a continuación):

  1. En nuestro servidor, cree el XML para la clave. La clave está en el contenedor de claves en el servidor.
  2. En nuestro servidor, firme el XML con nuestra clave privada.
  3. UUEncode la licencia encriptada para que se envíe por correo electrónico.
  4. Envíe la licencia por correo electrónico a nuestro cliente.
  5. El cliente coloca la licencia en su archivo app.exe.config.
  6. La aplicación lee la licencia del archivo de configuración.
  7. La aplicación codifica UUD la licencia.
  8. La aplicación verifica la firma usando nuestra clave pública. La clave pública está incorporada en el programa.
  9. Ahora tenemos el XML y usamos las propiedades de la licencia.

¿Es esta la mejor manera de hacer esto? Si no es así, ¿qué enfoque debemos tomar?

En caso afirmativo, ¿qué API .NET deberíamos usar para esto y hay enlaces al código de ejemplo?

Y un gigante gracias a todos los que me acompañaron en esto.

    
pregunta David Thielen 16.09.2014 - 16:19
fuente

1 respuesta

6

Firme su archivo de licencia

Desea firmar los datos con su clave privada para crear una firma.

  1. Generar un archivo de licencia
  2. Firme el archivo con su clave privada.
  3. Proporcione la clave pública con su aplicación
  4. En su programa, verifique que el contenido del archivo no haya cambiado con su clave pública.

La firma no se puede reemplazar porque solo usted tiene la clave privada para firmar la licencia. Si alguna parte del archivo de licencia ha cambiado, la verificación fallará y podrá detener la ejecución de su programa. Notifica al usuario como mejor te parezca. Lo importante es darse cuenta de que no les está impidiendo que lo modifiquen, pero si lo hacen, invalidan la licencia.

El cifrado es la ruta equivocada que se debe tomar porque no importa lo que tenga que codificar la clave de cifrado en algún lugar de su aplicación. Firmar los datos es mucho más seguro.

Aquí hay una buena introducción a cómo firmar datos funciona (abre un PDF).

Firma de datos con .NET

Creo que este artículo de MSDN le mostrará todo lo que necesita Necesidad de firmar digitalmente un archivo XML en .NET. Hay un ejemplo de código completo en la parte inferior.

Tendrá que crear su propio RsaCryptoServiceProvider , y las propiedades de configuración solo contienen claves públicas. Luego, durante la instalación, deberá exportar su clave pública al proveedor de servicios utilizando ExportCspBlob (false) . Puede exportar su clave pública en un formato conocido como PEM y codificarla. Aquí hay un ejemplo con muchos códigos de ejemplo para trabajar con cadenas codificadas, crear RsaCryptoServiceProviders, etc.

El último enlace incluye un ejemplo que exporta la clave privada , así como el público. ¡No quieres incluir esto!

    
respondido por el RoraΖ 16.09.2014 - 16:56
fuente

Lea otras preguntas en las etiquetas