Interesante pregunta.
¿Cómo sabe un software que hemos introducido una clave de serie incorrecta?
Supongo que tienes una cuenta de facebook o twitter. Antes de poder entrar en facebook o twitter tienes que registrarte. Durante ese proceso, la web guarda tu nombre de usuario/correo electrónico y una contraseña que has establecido.
Cuando vuelvas, el sistema te pedirá esos datos. Cuando los introduzcas, lo comparará con la información que tiene en la memoria(base de datos). Si todo coincide, te acepta, si no, te rechaza....
El mismo principio se utiliza con las claves de serie del software. La principal diferencia es que, no te registras. El fabricante crea previamente las cuentas(las claves de serie). Cuando compras una licencia te dan una clave de serie. También puede ser que, cuando usted compra una licencia, un mecanismo genera una clave para usted. No hay que guardar la clave sin usar.
El propio software estará dotado de un mecanismo que le permitirá solicitar el almacén de claves de serie y cotejarlas/compararlas con la clave que has recibido.
Y aquí viene el tema de la distribución.
¿Las claves deben estar incrustadas en el software cliente, o las claves deben estar en un servidor remoto desde el que los clientes puedan solicitar y verificar las claves? La última opción es muy utilizada estos días debido a que Internet es muy utilizado.
La primera opción incrusta la clave y el algoritmo para verificarla. En caso de que un kacker consiga ver el código fuente, podría ser capaz de generar claves similares que sean VERDADERAS al algoritmo.
Con la opción remota, el cliente hace una petición al servidor con la clave que el usuario proporciona. El cliente ignora cómo se verifica. Sólo espera un SI del servidor para permitir el acceso al usuario. Cualquier otra respuesta es errónea...
¿Cómo se hacen las claves de serie de los softwares?
Esto es complejo de responder. La forma en que cada fabricante de software lo hace puede variar de otros.
El principio clave es la criptografía.
Siendo la clave de licencia como tu contraseña para tus cuentas de twitter o facebook, es importante conseguir una forma única de generarlas y otra forma única de verificarlas. Así que el fabricante de software tiene que pensar en "esa forma" de hacerla. Puede ser que todas las claves tengan este formato (sólo una muestra ficticia) Y-M-D-LICENCE_NUMBER o VVVV-WWWW-XXXX-YYY-ZZZZ. Pueden ser secuencias normales de números encriptados.
Para generarlos se establece un conjunto de caracteres a utilizar.... todo este proceso utiliza lo que se llama algoritmos. Los algoritmos definen cómo deben generarse las claves de licencia, cuántas deben generarse y cuál es el valor/propiedades de cada clave.
La mayoría de los lenguajes de programación vienen con funciones para ayudarte a hacer encriptación con potentes algoritmos como AES, RSA, Triple DES, etc.
Esta fase puede parecer fácil de hacer. por lo que a mí respecta, la parte más difícil es la distribución que he mencionado anteriormente.
Lee más sobre los algoritmos, el algoritmo de cifrado asegurado y las funciones de hashing que ofrece el lenguaje de programación que utilice.