Para las claves de CD de la vieja escuela, era solo una cuestión de inventar un algoritmo para el cual las claves de CD (que podrían ser cualquier cadena) son fáciles de generar y verificar, pero la proporción de claves de CD válidas a CD no válidas -keys es tan pequeño que es poco probable que adivinar al azar las claves del CD te dé una válida.
MANERA INCORRECTA DE HACERLO:
Starcraft y Half-life usaron la misma suma de verificación, donde el 13er dígito verificó los primeros 12. Por lo tanto, podría ingresar cualquier cosa para los primeros 12 dígitos, y adivinar el 13 (solo hay 10 posibilidades), lo que lleva a la infame1234-56789-1234
El algoritmo para verificar es público y se ve así:
x = 3;
for(int i = 0; i < 12; i++)
{
x += (2 * x) ^ digit[i];
}
lastDigit = x % 10;
MANERA CORRECTA DE HACERLO
Windows XP toma bastante información, la encripta y coloca la codificación de letra / número en una pegatina. Esto permitió a MS verificar su clave y obtener el tipo de producto (Hogar, Profesional, etc.) al mismo tiempo. Además, requiere activación en línea.
El algoritmo completo es bastante complejo, pero se describe muy bien en este artículo (¡completamente legal!), Publicado en Alemania.
Por supuesto, no importa lo que hagas, a menos que estés ofreciendo un servicio en línea (como World of Warcraft ), cualquier tipo de protección de copia es solo un bloqueo: desafortunadamente, si vale la pena algún juego, alguien se romperá (o al menos eludirá ) el algoritmo de clave de CD y todas las demás protecciones de derechos de autor.
REAL MANERA CORRECTA DE HACERLO:
Para los servicios en línea, la vida es un poco más simple, ya que incluso con el archivo binario necesita autenticarse con sus servidores para usarlo (por ejemplo, tener una cuenta WoW). El algoritmo de clave de CD para World of Warcraft, utilizado, por ejemplo, al comprar tarjetas de tiempo de juego, probablemente se parece a esto:
- Genere un gran número aleatorio criptográficamente seguro.
- Guárdelo en nuestra base de datos e imprímalo en la tarjeta.
Luego, cuando alguien ingrese un número de tarjeta de tiempo de juego, verifique si está en la base de datos y, si lo está, asocie ese número con el usuario actual para que nunca se pueda volver a usar.
Para los servicios en línea, no hay razón para no usar el esquema anterior; usar cualquier otra cosa puede causar problemas .