2010-11-20 12 views
8

Sin intención de ofender, pero no discutamos que los esquemas de licencias pueden ser descifrados (lo sé) y que recurrir a la ley suele ser un mejor elemento de disuasión (tal vez en su país, pero no en todos).¿Cómo implementar un esquema de licencia simple?

No es mi elección: me han pedido que implemente licencias, lo suficiente como para mantener alejados a los hackers casuales.

Lo que podría hacer que esto sea ligeramente diferente es que las PC que ejecutarán el software no siempre tendrán privilegios de acceso a Internet.

Cuando alguien compra el producto, puedo generar información de licencia en él & entregue un CD de instalación. Pero, ¿qué sucede si quieren comprar más licencias? No quiero tener que ir al sitio para actualizar los datos de licencia, pero es posible que no puedan acceder a mi servidor, ni a los suyos.

Estaba pensando en tener licencias en archivos externos (encriptados), cada uno con una cantidad de licencias y una fecha de vencimiento. Si el usuario compra más licencias, entonces puedo enviar por correo electrónico un archivo adicional &. Su código de seguridad borrado puede grabarlo en un CD o dispositivo USB y luego copiarlo en el directorio de datos de las aplicaciones.

¿Eso parece correcto? ¿Puedes pensar en algo mejor? ¿Puedes ver problemas? No tengo demasiado tiempo para implementar esto.

+0

2.5k vistas y contando. Cerrado (correctamente) después de 5 años de estar abierto. En retrospectiva, me doy cuenta de que debería haber pedido en http://programmers.stackexchange.com/, pero en aquellos días solo estaba activo en este sitio. – Mawg

Respuesta

4

Eso estaría bien si la licencia contiene mucha información. Por lo general no lo hacen, por lo que se pueden encriptar completos con algunas protecciones en 30-50 caracteres aproximadamente. Estos pueden enviarse por correo electrónico, cortar & pegar, o incluso mecanografiar.

En cuanto a los esquemas de protección, PKV o la verificación de clave parcial es popular. Hay un número de preguntas aquí en SO al respecto, y una búsqueda en Google proporcionará una cantidad de implementaciones de idiomas diferentes.

+1

+1 Gracias por la respuesta rápida. La única información en los archivos debe ser el número de licencias, la fecha de vencimiento y el número de cliente. No hay mucha información La protección no necesita ser demasiado pesada. – Mawg

+0

Derecha. Y típicamente la licencia contiene un hash del nombre de usuario (número de cliente en su caso) y ambos se ingresan juntos. Esto lo acorta aún más ya que el hash será más corto que el nombre/número. – winwaed

+1

Implementaría un sistema de activación como el de Microsoft (aunque podría usar unidades USB para poder trabajar fuera de línea) para evitar el copiado casual, que simplemente es instalar el software en más computadoras de las que tiene licencia. Desafortunadamente, una compañía llamada Uniloc tiene una patente sobre esto y ya ha demandado a muchas compañías de software, incluida Microsoft. – PleaseStand

2

Si no se preocupan por todo el agrietamiento intentos que tal esto:

Pre-generar un cierto número de teclas completamente al azar (no lo hago, sé ... decir 10.000 por el bien de este ejemplo) Haga clic en cada una de esas teclas con SHA-1.

En su programa, incluyen una matriz que contiene los valores hash SHA-1, por ejemplo:

static unsigned char *keys[20] = 
{ 
    // key 8WVJ-TH6R-R7TH-DXM2 
    { 0xb2, 0x3c, 0xc2, 0xb3, 0xea, 0xa5, 0x69, 0xf6, 0xa6, 0x95, 0x8a, 0x75, 0xee, 0x76, 0x88, 0xa5, 0x71, 0xd9, 0x4a, 0x9e }, 
    // many more keys follow... 
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } 
} 

Cuando el usuario compra una nueva licencia (o paquete de licencias) darles la cantidad apropiada de claves, a los arañazos las llaves de la lista, y eso es todo.

Cuando un usuario ingresa una clave en la aplicación, la pica e itera la lista. Si encuentras el hash, estás listo para ir. Si no lo hace, la clave es incorrecta/no autorizada.

Ventajas:

  • Las claves pueden ser de cualquier longitud y complejidad.
  • Si alguien puede revertir SHA-1, tienen mejores cosas que hacer que romper su aplicación.
  • Fácil de implementar.
  • Fácil de administrar.
  • Si alguna vez se queda sin llaves, emita una actualización de la aplicación y agregue nuevas llaves al final de la tabla.
  • No se necesita acceso en línea.

Desventajas:

  • Las personas que quieren vivir a costa HexEdit puede fácilmente su binario para establecer sus propios valores SHA-1 en la tabla, y luego pueden "licencia" del software a sí mismos.
  • No sabe si sus usuarios pagos usan la misma clave en 20 máquinas.
  • Simple.

El esquema se puede mejorar de muchas maneras diferentes. Pero es un punto de partida para ti.

2

Uso la criptografía asimétrica con curvas elípticas. Para generar una nueva clave de licencia, nombre de usuario hash (o correo electrónico, posiblemente con alguna ID de aplicación adjunta), firme el hash con su clave privada y codifique con base-32 para obtener una buena clave como HQYRV-OZFNZ-M3L7B-WA644-CXLG4-D7IRD-QZ6FY-GJGTO-MEXEG.

Para validar la licencia, marque el nombre de usuario como se indica arriba y verifique la firma del hash con su clave pública.

Esto tiene numerosas ventajas: la clave es relativamente corta (gracias al uso de EC en lugar de RSA/DSA), la clave es "aleatoria" ya que cada vez se genera una diferente para el mismo nombre de usuario, y, crucialmente , no hay código keygen en la aplicación y un cracker no puede escribir un keygen sin obtener su clave privada.

Tengo una biblioteca para hacer esto en GitHub: https://github.com/vslavik/ellipticlicense (es una bifurcación del ahora obsoleto proyecto Objective-C, agregué C API portátil y realicé algunas otras mejoras).

Cuestiones relacionadas