Un método muy seguro es usar la
firma digital para generar un fichero de licencia. El algoritmo de firma digital es complejo y requiere muchas matemáticas, pero es un algoritmo público muy documentado y hay librerías en muchos lenguajes. Muchas empresas usan este método para generar licencias.
El fichero de licencia puede llevar el nombre del propietario (comprador) o algún dato del sistema. El algoritmo funciona de tal manera que si se cambia algún dato de este archivo la licencia ya no es válida. Y también, si se filtra una versión "pirata" de la licencia se puede saber si la ha filtrado un propietario o se ha generado usando otros métodos.
La firma digital se basa en dos claves generadas por el desarrollador, una clave privada (no se comparte) y otra pública (que se puede compartir). Estas claves son números primos de muchas cifras. Se genera el fichero de licencia con los datos que se deseen: fecha, hora, aplicación, nombre del propietario, id del dispositivo, etc y se hace un HASH. Esto es un "churro", un número muy largo que es un resumen del fichero, por ejemplo CRC o MD5 son algoritmos de hash. Luego se encripta el hash con la clave privada y se añade al fichero de licencia. Ya está firmado.
Para validar la licencia, simplemente se valida la firma. Se lee la parte de la firma del fichero de licencia y se desencripta con la clave pública del desarrollador, esto da el supuesto hash (el "churro"). Si este hash es igual al hash de los datos del fichero de licencia la firma es correcta. Es decir la licencia es válida.
-----Actualizado-----
Lo de la firma digital está bien, pero es bastante complejo.
Lo he puesto como información y también para responder a tu pregunta "¿como se hace lo de obtener una contraseña que concuerde con un numero facilitado?". Encriptando el número (cuanto más grande mejor) con una contraseña que sólo sepas tu. Luego, la aplicación aceptará tanto el número encriptado (que llamaremos código de activación) como el original (que llamaremos ID de usuario). Si al desencriptar el código de activación te da el mismo ID de usuario, el código es válido.
Para encriptar hay muchos métodos algunos más complejos que otros.
Ejemplo simplificado para que se entienda, usando la codificación del césar con clave +1 (sumar 1 a cada letra y digito). En tu app tienes que usar un método más complejo con una clave larga.
- El usuario quiere comprar el programa y éste le presenta un ID de usuario que te envía. Ej: PEPE123
- El código de activación sería: QFQF234 (codificación césar +1), y se la envías.
- El usuario va a la app, opción Registrar y mete ID: PEPE123, codigo: QFQF234
- La app desencripta QFQF234 con la clave inversa (-1), y da PEPE123, que es igual que el ID, el registro es correcto.
Marcadores