Miglior meccanismo per generare chiavi di licenza [chiuso]

35

Quali metodi / librerie / strumenti suggerirebbero le persone per generare chiavi di licenza (quelle adorabili AAAAA-AAAAA-AAAAA-AAAAA-AAAAA cose che hai inserito quando registri il software)?

Qualche trucco da tenere in considerazione quando li implementa?

(Al momento sono interessato a questo come una cosa generale piuttosto che specifica della lingua, quindi basta indicare quale lingua stai usando se la tua soluzione è specifica per la lingua).

    
posta Jon Hopkins 08.12.2010 - 14:48
fonte

3 risposte

23

È quasi come quando si memorizzano le password. Dovresti avere una chiave segreta unica conosciuta solo dal generatore e dal tuo programma. Utilizzare questo tasto per manipolare i dettagli (nome utente, password, organizzazione, ecc.) E poi cancellarlo. Puoi quindi eseguire una codifica di trasferimento triviale in Base32 sull'hash o semplicemente spostarlo su una stringa esadecimale se non lo fai cura di un formato.

Any gotchas to look out for when implementing them?

Mantieni segreti segreti e separati. Rendi la tua implementazione più rapida. Se qualcuno lo rompe, puoi facilmente cambiare l'implementazione? Un'implementazione comune sulle applicazioni desktop consiste nell'utilizzare un server remoto per convalidare la licenza. Ciò elimina la possibilità che qualcuno possa decodificare un hash o l'algoritmo controllando l'applicazione stessa.

    
risposta data 08.12.2010 - 14:55
fonte
10

Questa stessa domanda è stata chiesta su SO e la risposta accettata è piuttosto buona. L'essenza generale è:

  • Prendi il nome dell'utente
  • Concatenare il nome utente e la chiave segreta e l'hash con (ad esempio) SHA1
  • Disimballare l'hash SHA1 come stringa alfanumerica. Questo è il "codice prodotto" del singolo utente
  • All'interno del programma, eseguire lo stesso hash e confrontarlo con il codice prodotto. Se uguale, OK.
risposta data 08.12.2010 - 14:53
fonte
1

Il mio metodo preferito è generare 10.000 stringhe di licenze casuali, SHA1 (o MD5) hash o HMAC e includere tutto o parte dell'hash SHA1 / MD5 nell'eseguibile stesso. Quando viene immessa una stringa di licenza, è sufficiente utilizzare il codice offuscato per generare l'hash della stringa e confrontarlo con quelli della lista. Se corrisponde, è una licenza valida. Se hai esaurito le licenze, rilascia una nuova versione con più stringhe.

Usare solo i primi 96-bit dell'hash SHA1 è adeguato. Quindi 10.000 licenze richiederebbero meno di 120 KB. La generazione algoritmica di chiavi o la creazione di un generatore di chiavi sarebbe impossibile. L'unica vulnerabilità di cui dovresti preoccuparti è il reverse engineering o l'esclusione. (O qualcuno che distribuisce la loro chiave valida.)

    
risposta data 07.09.2011 - 16:09
fonte

Leggi altre domande sui tag