esta es mi primera pregunta así que por favor sea amable ...esquema de licencia, parodia de seguridad y revocar capacidades
estoy trabajando en un software que me gustaría para proteger el uso de algún tipo de sistema de licencias. Un esquema básico sería generar alguna clave "única" para un usuario. El usuario envía esta clave y un código de registro cuando desea registrar el software y recibe un código de activación.
Cuando la aplicación se ejecuta, valida el código de activación comparando la clave "única" y un bloque de datos recibidos al descifrar el código de activación.
Esto es justo y bastante simple de implementar, se puede elegir diferentes algoritmos criptográficos, etc. Sin embargo, este sistema carece de dos propiedades:
- Si el usuario logra la firma de hardware parodia etc., para producir el mismo "único "clave en otra computadora podría usar los mismos datos de licencia.
- Si el usuario decide desinstalar la aplicación y quiere moverla a otra computadora, no hay nada que le impida volver a utilizar los datos de la licencia anterior en la computadora anterior y obtener nuevos datos de licencia para la nueva instalación.
¿Tiene alguna sugerencia sobre cómo resolver estos problemas?
Una idea que tuve fue agregar algunos datos aleatorios a la clave "única", estos datos aleatorios se almacenarían de una manera oscura, si el usuario desinstala la aplicación estos datos aleatorios serían eliminados, y algún tipo de hash con los datos aleatorios anteriores y los datos de licencia que se podrían enviar para verificar que realmente ha desinstalado la aplicación y me aseguró que no podrá volver a utilizar los datos de la licencia anterior ya que los datos aleatorios han cambiado.
Cambio y fuera, por ahora ...
EDIT: Actualmente tengo un esquema que funciona, debería mencionar que el producto más común se instala en un entorno integrado en hardware-cambios son muy raros y si hay una falla de hardware, lo más seguro es que la máquina está rota. Pero podría modificar el esquema de clave de hardware para tener en cuenta y permitir algunos cambios.
También debido a esto, el software probablemente no se ejecutará dentro de una máquina virtual, pero es un buen punto y no he pensado en eso.
La aplicación no llama regularmente, si hay una conexión de red disponible, el usuario tiene la opción de realizar un registro más automático; de lo contrario, obtiene una clave de registro, la ingresa en el software y obtiene una ID de instalación que me es proporcionado, el código de registro + ID de instalación genera una clave de activación que el usuario obtiene de mí y luego desbloquea el software.
Lo que busco son soluciones buenas/factibles para los 2 puntos. Duplicación de hardware, revocación de claves de licencia, es decir, para asegurarse de que el usuario no puede usar el mismo código de activación + código de activación.
Gracias por todos sus comentarios
No es necesario
Si la aplicación simplemente "compara" las teclas, un cracker simplemente puede insertar una instrucción JMP para eludir la comparación, o devolver "VERIFICADO". Todo lo que tienen que hacer es romper la aplicación y comparar la ejecución dada una buena clave vs. una mala. Esto es muy difícil de proteger ya que el código DEBE ejecutarse para hacer su trabajo, y usted puede verlo mientras lo hace. –
Esto es cierto, sin embargo, la clave de activación puede tener alguna clave criptográfica integrada que se usa silenciosamente para descifrar los archivos de datos necesarios para que la aplicación funcione correctamente, si el cracker logra cambiar un jz a jnz o viceversa, aún así requeriría obtener el código correcto para que el software funcione correctamente. ¡Buen comentario por cierto! –
Hm. ¿Eso significaría que los archivos de datos son únicos por cliente? –