Melhor mecanismo para gerar chaves de licença [fechado]

35

Quais métodos / bibliotecas / ferramentas as pessoas sugerem para gerar chaves de licença (aquelas adoráveis ​​coisas AAAAA-AAAAA-AAAAA-AAAAA-AAAAA que você coloca ao registrar um software)?

Alguma dica a ser observada ao implementá-las?

(No momento, estou interessado nisso como algo geral, e não específico do idioma; portanto, indique qual idioma você está usando se a sua solução for específica do idioma).

Jon Hopkins
fonte

Respostas:

23

É quase o mesmo que ao armazenar senhas. Você deve ter uma chave secreta exclusiva conhecida apenas pelo gerador e seu programa. Use esta chave para manipular os detalhes (nome de usuário, senha, organização, etc) e, em seguida, faça o hash. Você pode fazer uma codificação de transferência trivial no Base32 no hash ou simplesmente movê-lo para uma sequência hexadecimal, se você não se importa com um formato.

Alguma dica a ser observada ao implementá-las?

Mantenha segredos secretos e separados. Torne sua implementação improvável. Se alguém quebrar isso, você pode alterar facilmente a implementação? Uma implementação comum em aplicativos de desktop é usar um servidor remoto para validar a licença. Isso remove a possibilidade de alguém fazer engenharia reversa de um hash ou algoritmo, inspecionando o próprio aplicativo.

Josh K
fonte
11
BASE32 para codificar é o padrão. Permite fácil entrada de usuário humano;) (Base32: seleção de letras e números muito diferentes. Por exemplo, 0 e O não estão na sequência)
11
@ Pierre: Eu não sabia disso, boa informação!
Josh K
10

Essa mesma pergunta foi feita no SO e a resposta aceita é muito boa. A essência geral é:

  • Pegue o nome do usuário
  • Concatene o nome do usuário, a chave secreta e o hash com (por exemplo) SHA1
  • Descompacte o hash SHA1 como uma sequência alfanumérica. Essa é a "Chave do produto" do usuário individual
  • Dentro do programa, faça o mesmo hash e compare com a chave do produto. Se for igual, ok.
Walter
fonte
1

Meu método preferido é gerar 10.000 seqüências de licença aleatórias, hash SHA1 (ou MD5) ou HMAC e incluir todo ou parte do hash SHA1 / MD5 no próprio executável. Quando uma sequência de licenças é inserida, basta usar o código ofuscado para gerar o hash da sequência e compará-lo com os da lista. Se corresponder, é uma licença válida. Se você tiver poucas licenças, libere uma nova versão com mais seqüências de caracteres.

Usar apenas os primeiros 96 bits do hash SHA1 é adequado. Assim, 10.000 licenças levariam menos de 120 KB. A geração algorítmica de chaves ou a criação de um gerador de chaves seria impossível. A única vulnerabilidade com a qual você precisa se preocupar é engenharia reversa ou desvio. (Ou alguém distribuindo sua chave válida.)

David Schwartz
fonte