Miglior meccanismo per la generazione di chiavi di licenza [chiuso]


35

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

Qualche problema da tenere in considerazione quando li si 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 della lingua).

Risposte:


23

È quasi uguale a quando si memorizzano le password. Dovresti avere una chiave segreta univoca nota solo al generatore e al tuo programma. Utilizzare questa chiave per manipolare i dettagli (nome utente, password, organizzazione, ecc.), Quindi l'hash. Puoi quindi fare qualcosa di banale trasferire la codifica in Base32 sull'hash o semplicemente spostarlo in una stringa esadecimale se non ti interessa un formato.

Qualche problema da tenere in considerazione quando li si implementa?

Mantieni segreti e separati. Rendi la tua implementazione migliorabile. Se qualcuno lo rompe, puoi facilmente cambiare l'implementazione? Un'implementazione comune su applicazioni desktop è l'uso di un server remoto per convalidare la licenza. Ciò elimina la possibilità che qualcuno possa decodificare un hash o l'algoritmo ispezionando l'applicazione stessa.


11
BASE32 da codificare è lo standard. Permette un facile inserimento da parte dell'utente umano;) (Base32: selezione di lettere e numeri molto diversi. Ad esempio, 0 e O non sono nella sequenza)

1
@Pierre: non lo sapevo, buone informazioni!
Josh K,

10

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

  • Prendi il nome dell'utente
  • Concatena il nome utente, la chiave segreta e l'hash con (ad esempio) SHA1
  • Decomprimi l'hash SHA1 come stringa alfanumerica. Questa è la "Product Key" del singolo utente
  • All'interno del programma, esegui lo stesso hash e confrontalo con il codice Product Key. Se uguale, OK.

1

Il mio metodo preferito è generare 10.000 stringhe di licenza casuali, hash SHA1 (o MD5) 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 confrontarla con quelle dell'elenco. Se corrisponde, è una licenza valida. Se si esauriscono le licenze, rilasciare 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 il bypass. (O qualcuno che distribuisce la propria chiave valida.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.