Creare un codice di attivazione "quadrato" che cela al suo interno delle informazioni criptate non è affatto semplice, per una serie di motivi pratici (il codice non può essere troppo lungo, deve contenere caratteri alfanumerici, non deve essere possibile decriptarlo ne tantomeno risalire facilmente all'algoritmo utilizzato per crearlo).
Ti suggerisco questa soluzione, che per il 90% è abbastanza semplice:
- su un server web crei un db con una tabella (campi necessari: codice, id_pc, assegnato) contenente dei codici "vergini" creati in modo casuale (per esempio alfanumerici, lunghi almeno 10 caratteri), ovviamente tutti diversi gli uni dagli altri. Il campo id_pc rimane per il momento vuoto
- man mano che vendi il tuo software assegni al cliente uno dei codici contenuti nella tabella e scrivi il valore true sul campo "assegnato"
- il cliente esegue l'attivazione con il codice, che la procedura manda via internet (tramite un webservice) insieme ad un id ricavato dal pc (potrebbe essere il seriale dell'HD oppure l'indirizzo mac della scheda di rete)
- se il codice inserito viene trovato nella tabella del db, il server scrive l'id del pc sul campo id_pc e risponde con un file, avente firma digitale, contenente l'id e il codice di attivazione. Questo file verrà salvato da qualche parte nel pc.
Per la firma digitale serve un algoritmo di criptazione asimmetrico (chiave privata e chiave pubblica). Ogni volta che il programma va a verificare la validità della licenza, compie questi passi:
- verifica la presenza del file firmato, se assente blocca il programma o lo manda in modalità "demo"
- verifica la firma del file, utilizzando la chiave pubblica (la chiave privata rimane solo ed esclusivamente nel server!)
- verifica che il file contenga il codice di attivazione e l'id di quel pc
Vediamo i punti a favore di questo metodo di protezione:
- se qualcuno prova ad attivare il software con un codice di attivazione già assegnato, non riceverà il file firmato e l'applicazione non si sblocca
- se qualcuno copia a mano il file firmato da un altro pc, esso non funzionerà perché il nuovo pc ha un id differente
- decompilando il programma non si verrà mai a conoscenza della chiave privata, quindi non sarà possibile creare un keygen o un server fasullo
- la ricerca della chiave privata con un metodo a forza-bruta richiederebbe anni di elaborazione.
Con questo sistema il modo più semplice per crackare il programma è decompilarlo e bypassare la chiamata alla funzione di verifica del file criptato. Se il programma è stato preventivamente offuscato, le cose si complicano un pochino, ma per hacker esperti non è un grosso problema.
A questo punto è opportuno dire che non esiste una protezione infallibile e che il metodo di protezione utilizzato deve essere commisurato al valore del programma da proteggere. E poi, in fin dei conti, la scarsa protezione di certi software commerciali ne ha decretato una diffusione ed un successo tali da far passare in secondo piano le perdite dovute alla pirateria...