licensing authorization

licensing - Buscando un algoritmo clave de licencia



authorization (7)

Hay muchas preguntas relacionadas con las claves de licencia que se hacen en Stack Overflow. Pero no responden a esta pregunta.

¿Alguien puede proporcionar un algoritmo de clave de licencia simple que sea independiente de la tecnología y que no requiera un diploma en matemáticas para entenderlo?

El algoritmo de clave de licencia es similar al cifrado de clave pública. Solo necesito algo simple que pueda implementarse en cualquier plataforma .NET / Java y use datos simples como caracteres.

Las respuestas escritas como pseudo código son perfectas.

Entonces, si una persona presenta una cadena, se puede generar una cadena complementaria que es el código de autorización. A continuación se muestra un escenario común para el que se usaría.

  1. El cliente descarga software que genera una clave única en el inicio / instalación inicial.
  2. El software se ejecuta durante el período de prueba.
  3. Al final del periodo de prueba se requiere una clave de autorización.
  4. El cliente va al sitio web designado, ingresa su código y obtiene un código de autorización para habilitar el software, después de pagar :)

No tenga miedo de describir su respuesta como si estuviera hablando con un niño de 5 años ya que no soy matemático.


Con toda honestidad, lo que estás tratando de hacer es inútil. Sin embargo, cuanto tiempo le lleve escribir un sistema de validación / cifrado / clave, calcule aproximadamente la mitad para que alguien lo rompa. Incluso si cifras el ejecutable final. Sin embargo, será una medida de demora o una forma de reducir la posibilidad de que las personas obtengan asistencia premium para copias robadas. También para seguimiento simple de compradores. O por diversión. :pag

De todos modos, hay algunas maneras en que puedes manejarlo. Una gran cantidad de software utiliza cadenas de nombre (y posiblemente de compañía) y una función hash para generar una clave. Esto tiene la ventaja de ser constante (siempre que el nombre sea el mismo, el hash y la clave). También es un sistema muy simple, especialmente si utiliza un hash conocido como MD5.

hash = md5(name);

Algunas aplicaciones más sofisticadas usan una función interna para generar un código de validación de algún tipo, y cuando combinas eso y el nombre dado, puedes crear (y devolver) un hash.

validCode = getCode(name); hash = myHash(name ^ validCode);

Unos pocos usan un código basado en el sistema (Windows es un buen ejemplo), donde muestra bits de hardware y construye un identificador a partir de eso. Si puedes conseguir el nombre o la velocidad del procesador, o cualquier otra cosa, puedes ejecutar algo así. El único problema es que los cambios del sistema pueden hacer que un código no sea válido, por lo que puede advertir a sus usuarios (y regalar parte del proceso) o dejar que se enteren accidentalmente (no es bueno).

sysID = processor_name() | ram_Speed(); hash = md5(sysID & name);

Puede usar cualquier combinación de funciones hash, obtención de datos, entradas de cadena, operaciones booleanas, etc. Una cosa a considerar es que no necesita poder revertir el proceso. Mientras pueda replicarlo con los mismos resultados (cualquier buena función hash puede), puede verificar los resultados de hash entre sí y asegurarse de que sean válidos. Cuanto más pongas, más complicado será, pero más difícil será romperlo.

Esperemos que eso ayude con su pregunta.


En cuestiones de seguridad, no reutilizar un algoritmo bien conocido y probado y tratar de crear el suyo propio (sin conocimiento matemático) es suicida

Revelación: me falta el grado matemático para crear tal algoritmo, y siendo franco, no conozco personalmente a nadie que lo tenga


La respuesta es que no, no hay un algoritmo de clave de licencia seguro que no requiera un diploma matemático para entenderlo.

Las mejores claves de licencia son las firmadas digitalmente con un algoritmo de cifrado asimétrico. Usted firma los datos clave con una clave de cifrado privada e incrusta la firma en la clave, y la validación de la clave (que implica la verificación de la firma entre otras cosas) se realiza con una clave pública. De esta manera, nadie puede crear claves de licencia a menos que tengan acceso a la clave privada que es ... privada. El problema es que hay muy pocos algoritmos (y difíciles) que tienen tamaños de firma lo suficientemente cortos como para incrustarlos en una clave de producto. RSA no es uno de ellos (el tamaño de la firma para RSA512 es de 1024 bits, demasiado).

Puede consultar SoftActivate Licensing SDK, que utiliza la criptografía de curva elíptica para generar claves de licencia cortas y firmadas digitalmente (el código fuente de C ++ / C # está disponible).


Las claves de licencia son bastante inútiles en mi opinión honesta.
¿Qué es lo que impide que su cliente distribuya esa clave a otros? ¿Seguro que podría configurar un servidor de clave de licencia que registre la cantidad de activaciones pero que cueste dinero y qué sucederá si se apaga o desaparece?

En mi opinión profesional, crear un software que se marque de forma exclusiva para un usuario (cifrado dentro del programa, por supuesto). Por ejemplo, si va a ayuda -> acerca del software, muestre el nombre de la persona, el teléfono y posiblemente su dirección. De esta manera, si lo suben a un sitio pirata de algún tipo, no solo otras personas conocerán la información personal de estos tipos ... sino también usted para cobrarle por más licencias o demandarlo.


No hay un algoritmo de licencia confiable. De Verdad. Ni siquiera uno. Para el software propietario más popular y costoso que puede comprar, también puede encontrar "generadores de claves" y versiones pirateadas que no requieren licencia.

En lugar de preocuparse por hacerlo "irrompible", simplemente haga algo simple. Un mecanismo popular es, al comprar, pedir el nombre del usuario y luego darle una clave de licencia que se deriva de un hash criptográfico (por ejemplo, la suma MD5) del nombre del usuario, o alguna variación en él. Luego, en el software, vuelve a pedir su nombre, más la clave de registro (esa cosa derivada de MD5); Usted verifica que coincidan, lo que activa el software.

¿Puede esto ser hackeado? Absolutamente. Una vez que alguien se da cuenta de cómo está generando las claves de licencia, puede generar las suyas propias. Pero si mantiene una base de datos de las claves de licencia "oficiales" que ha generado hasta ahora, al menos podrá identificar a los estafadores más adelante (tal vez cuando intenten descargar contenido "premium" o algo así).

Pero no se preocupe tanto por evitar que los hackers descifren su código. Va a suceder, pero son una parte tan pequeña del mercado que no afectará significativamente sus ventas generales.


Ya que cualquier algoritmo que hagas se romperá, haría algo simple como esto:

const string secretMumboJumbo = "sdfkldafskjlfajmkldsfjaewumaskldfladkkldsfklj" //For you to generate keys string GenerateLicenceKey(int idNr) { return Sha1Hmac(key=secretMumboJumbo, messageToEncode=idNr) } //For clients to check if key is valid, bool IsKeyValid(string key) { for(int i=0;i<maxNrOfLicenceKeys;i++) if(key == GenerateLicenceKey(i)) return true; return false; }

Tal vez la verificación podría ser demasiado lenta porque tiene que probar todas las claves posibles, pero eso también podría ser una buena cosa para evitar el forzoso brutal.

La mayoría de los marcos deberían tener una función HMAC para SHA1 o alguna otra función hash. En el peor de los casos, podría reemplazarlo con md5 (clave + id)

No tome este algoritmo demasiado en serio, es solo un ejemplo y probablemente se pueda romper fácilmente ya que la clave de generación debe incluirse en el cliente, aunque esté oculta en algún lugar en el binario.


Yo uso un sistema como este:

• crear una cadena a partir de la clave de licencia de Windows + fecha de finalización del período de prueba

• generar un hash (Sha / md5) de la cadena

• convertir la fecha de finalización de prueba a un int (por ejemplo, número de días)

• la clave se convierte en fecha de finalización de prueba + alguna parte del hash

• convierte la clave a solo caracteres en mayúsculas para que sea más fácil de ingresar

ABCD-DEFG-HIJK ...

la validación funciona como

• convertir la clave a bytes de nuevo

• extraer fecha de finalización de prueba

• crear cadena desde la clave de licencia de Windows + fecha de finalización de prueba

• hash

• comparar hash con el resto de la clave

esto lo hace bastante difícil para mi audiencia.