Pergunta

Estou implementando um pequeno aplicativo em C, o que eu gostaria de vender como shareware por um preço razoável mais tarde. Ele vai começar com um teste de 30 dias, que eu já estou completamente certo de como implementá-lo.

O problema que tenho, porém, é que eu não sou completamente certo como implementar a verificação da chave do produto. O que tenho em mente é que o cliente pode se inscrever na minha página (depois de tentar o produto por um tempo), o pagamento para o produto, e obter uma chave de produto na forma de aaaaa-bbbbb-ccccc-ddddd-eeeee via e -mail (ou talvez disponível através de seu perfil no meu site). Nenhum problema até agora. Ele / Ela então deixa cair a chave nos campos-chave adequadas em meu aplicativo e crescimento o aplicativo está registrado.

Do que eu poderia reunir até agora, as pessoas, quer recomendar AES ou RSA para isso. Para ser honesto, eu em outra direção na faculdade (não criptografia) ea classe de uma criptografia Tomei foi há algum tempo. Mas pelo que eu me lembro, AES é um algoritmo de criptografia simétrica, o que significaria que eu teria apenas uma chave para criptografia e descriptografia, certo? Como eu poderia, então, gerar milhares de chaves do produto e ainda validá-los em meu aplicativo (que por sinal não vai exigir acesso à Internet .... assim não há verificação de volta com um servidor)?

Então eu acho RSA seria o caminho a percorrer? Mas não RSA produzir chaves muito longas (pelo menos mais do que o exigido 25 caracteres de cima)?

Na outro segmento Eu li que alguns produtos não vai mesmo usar a criptografia para a geração chave do produto / verificação, mas em vez disso apenas empregar algumas verificações como "adicionar o e o caráter 2. 17. e que devem totalizar a x".

O que é a maneira mais rápida, mais fácil e mais seguro para ir para lá? :-) Exemplos de código seria açúcar!

Saudações,

Sebastian

PS: Ah ... e por favor não me diga como minha chave pode e vai ser quebrada em algum momento ..... eu sei sobre isso, que é principalmente por isso que eu não quero gastar muito de tempo com esta questão, mas ao mesmo tempo não torná-lo muito fácil para o cracker ocasional.

Foi útil?

Solução

Algoritmos simétricos são limitados, em que qualquer cracker de principiante com um disassembler pode encontrar a chave (ou o algoritmo usado para gerar um) e fazer um "keygen".

Por esta razão, criptologia assimétrica é o caminho a percorrer. A premissa básica é algo como isto:

  • Quando o usuário compra uma licença de você, você coleta certos detalhes de identificação sobre o usuário e / ou seu ambiente (tipicamente, este é apenas um nome completo, às vezes uma empresa, também)
  • .
  • Você faz um hash MD5 desta informação de 128 bits.
  • Usando um 128-bit Elliptic Curve criptografia, criptografar esse hash usando o private chave no servidor.
  • O texto cifrado de 128 bits pode ser representado para o usuário como uma seqüência de 25 caracteres consistindo de letras e algarismos (mais separando traços para facilitar a leitura). Note-se que 26 letras + 10 dígitos = 36 valores discretos, e que 36 ^ 25> 2 ^ 128.
  • O usuário digita esta chave de produto em seu diálogo de registro. Os convertidos de software cliente de volta para um número de 128 bits (16 bytes), decifra que usando a chave pública do seu cripto CE, e compara o resultado com um hash MD5 de informações pessoais do usuário, que deve corresponder ao que foi utilizado durante o registo .

Esta é apenas a idéia básica, é claro. Para mais detalhes e código-fonte, consulte Chaves produto baseado em Elliptic Curve Cryptography .

Outras dicas

A vida é simples se você simplesmente comprar uma solução.

http://www.kagi.com/kagisolutions/index.php

Kagi permite pagamentos recolher e eles ajudá-lo a gerenciar as chaves.

Um cara tem um blog sobre como ele lidou com a questão de números de registo. Uma de suas entradas de blog é Generating únicos números de matrícula .

Sim, RSA e AES são duas coisas muito diferentes:

  • RSA é a chave pública de criptografia, envolvendo uma chave pública e uma chave privada, e é bastante lento. O uso principal é a criação de uma troca segura de uma chave de sessão de criptografia simétrica.
  • AES é criptografia simétrica, que é rápido e seguro.

Uma vez que a sua aplicação não se comunica através de canais públicos eo uso de criptografia é limitado a ativação / registro, você vai querer ir com uma cifra simétrica produto. Os benefícios de cifras de chave pública é no gerenciamento de chaves, que você vai ser lidar no seu web site ou por e-mail.

Note que você não tem que distribuir a mesma chave para cada cliente. Você poderia gerar um hash de algumas das informações de registro e XOR-lo com outra coisa (a chave de sessão fixo, talvez). Enviar para o cliente, e o programa pode gerar o mesmo hash e XOR será a chave que você enviou para produzir a chave fixa originais.

Lidar com criptografia não é algo para ser feito de ânimo leve. Como você menciona, você espera que isso para ser quebrada. Se você estiver fazendo seu próprio presente quase certamente irá acontecer. Você ainda pode usar sua própria implementação de "manter as pessoas honestas", mas percebo que é tanto quanto você vai conseguir. Se você precisar de algo mais forte, então você deve comprar uma solução depois de fazer uma profunda investigação sobre as soluções.

scroll top