El mejor mecanismo para generar claves de licencia [cerrado]

35

¿Qué métodos / bibliotecas / herramientas sugeriría la gente para generar claves de licencia (esas encantadoras cosas AAAAA-AAAAA-AAAAA-AAAAA-AAAAA que pones cuando registras el software)?

¿Hay que tener en cuenta al implementarlos?

(Por el momento, estoy interesado en esto como algo general en lugar de un idioma específico, así que solo indique qué idioma está usando si su solución es específica del idioma).

Jon Hopkins
fuente

Respuestas:

23

Es casi lo mismo que cuando se almacenan contraseñas. Debe tener una clave secreta única conocida solo por el generador y su programa. Use esta tecla para manipular los detalles (nombre de usuario, contraseña, organización, etc.) y luego péguelo. Luego puede hacer algo de codificación de transferencia trivial en Base32 en el hash o simplemente moverlo a una cadena hexadecimal si no le importa un formato.

¿Hay que tener en cuenta al implementarlos?

Mantenga secretos secretos y separados. Haga que su implementación sea mejorable. Si alguien lo rompe, ¿puede cambiar fácilmente la implementación? Una implementación común en las aplicaciones de escritorio es usar un servidor remoto para validar la licencia. Esto elimina la posibilidad de que alguien pueda aplicar ingeniería inversa a un algoritmo hash o al inspeccionar la aplicación en sí.

Josh K
fuente
11
BASE32 para codificar es el estándar. Permite la entrada fácil del usuario humano;) (Base32: selección de letras y números que son muy diferentes. Por ejemplo, 0 y O no están en la secuencia)
1
@Pierre: No lo sabía, ¡buena información!
Josh K
10

Esta misma pregunta se hizo en SO y la respuesta aceptada es bastante buena. La esencia general es:

  • Toma el nombre del usuario
  • Concatene el nombre de usuario y la clave secreta y el hash con (por ejemplo) SHA1
  • Desempaquete el hash SHA1 como una cadena alfanumérica. Esta es la "clave de producto" del usuario individual
  • Dentro del programa, haga el mismo hash y compárelo con la clave del producto. Si es igual, está bien.
Walter
fuente
1

Mi método preferido es generar 10,000 cadenas de licencia aleatorias, SHA1 (o MD5) las hash o HMAC, e incluir todo o parte de la hash SHA1 / MD5 en el propio ejecutable. Cuando se ingresa una cadena de licencia, simplemente usa código ofuscado para generar el hash de la cadena y compararlo con los de la lista. Si coincide, es una licencia válida. Si tienes pocas licencias, lanza una nueva versión con más cadenas.

Usar solo los primeros 96 bits del hash SHA1 es adecuado. Entonces, 10,000 licencias tomarían menos de 120KB. La generación algorítmica de claves o la creación de un generador de claves sería imposible. La única vulnerabilidad de la que debería preocuparse es la ingeniería inversa o eludir. (O alguien que distribuye su clave válida).

David Schwartz
fuente