Domanda interessante.
Come fa un software a sapere che abbiamo inserito una chiave seriale sbagliata?
Immagino che tu abbia un account Facebook o Twitter. Prima di poter accedere a Facebook o Twitter è necessario registrarsi. Durante questo processo il sito web conserva il tuo nome utente/email e una password che hai impostato.
Quando torni, il sistema richiederà quei dettagli. Quando li inserisci, li confronta con le informazioni che ha in memoria (database). Se tutto corrisponde, sei accettato altrimenti, rifiutato....
Lo stesso principio è usato con le chiavi seriali del software. La differenza principale è che non ci si iscrive. Il produttore pre-crea degli account (le chiavi seriali). Quando acquisti una licenza ti danno una chiave seriale. Potrebbe anche essere che, quando acquisti una licenza, un meccanismo genera una chiave per te. Nessuna conservazione della chiave inutilizzata.
Il software stesso sarà dotato di un meccanismo che gli permetterà di richiedere l'archivio delle chiavi seriali e confrontarle con la chiave ricevuta.
E qui arriva il problema della distribuzione.
Le chiavi dovrebbero essere incorporate nel software client, o le chiavi dovrebbero essere in un server remoto da cui i clienti possono richiedere e verificare le chiavi? L'ultima opzione è molto usata al giorno d'oggi a causa di Internet che è molto diffuso.
La prima opzione incorpora la chiave e l'algoritmo per verificarla. Nel caso in cui un kacker riesca a vedere il codice sorgente, potrebbe essere in grado di generare chiavi simili che sono VERE all'algoritmo.
Con l'opzione remota, il client fa una richiesta al server con la chiave fornita dall'utente. Il client ignora come viene verificata. Si aspetta solo un SI dal server per permettere l'accesso all'utente. Qualsiasi altra risposta è sbagliata...
Come sono fatte le chiavi seriali per i software?
Questo è complesso da rispondere. Il modo in cui ogni produttore di software lo fa può variare dagli altri.
Il principio chiave è la crittografia.
La chiave di licenza è come la tua password per i tuoi account Twitter o Facebook, è importante avere un modo unico di generarla e un altro modo unico di verificarla. Quindi, il produttore di software deve pensare a "quel modo" di crearle. Può essere che tutte le chiavi dovrebbero essere in questo formato (solo un esempio fittizio) Y-M-D-LICENZA_NUMERO o VVVV-WWWW-XXXX-YYYY-ZZZZ. Questa può essere una normale sequenza di numeri criptati.
Per generarle si imposta un set di caratteri da usare.... tutto questo processo usa ciò che si chiama algoritmo. Gli algoritmi definiscono come le chiavi di licenza devono essere generate, quante devono essere generate, e qual è il valore/proprietà di ogni chiave.
La maggior parte dei linguaggi di programmazione sono dotati di funzioni che aiutano a fare la crittografia con algoritmi potenti come AES, RSA, Triple DES, ecc.
Questa fase potrebbe sembrare facile da fare. per quanto mi riguarda, la parte più difficile è la distribuzione che ho menzionato sopra.
Leggi di più sugli algoritmi, sull'algoritmo di crittografia sicuro e sulle funzioni di hashing offerte dal linguaggio di programmazione che usi.