As chaves de licença são o padrão padrão como medida antipirataria. Para ser sincero, isso me parece uma (in) segurança através da obscuridade , embora eu realmente não tenha ideia de como as chaves de licença são geradas. Qual é um bom exemplo (seguro) de geração de chave de licença? Que primitivo criptográfico (se houver) eles estão usando? É um resumo da mensagem? Em caso afirmativo, quais dados eles estariam fazendo hash? Quais métodos os desenvolvedores empregam para dificultar a criação de crackers de seus próprios geradores de chaves? Como são gerados os principais geradores?
security
cryptography
license-key
torre
fonte
fonte
Respostas:
Para chaves de CD da velha escola, era apenas uma questão de criar um algoritmo para o qual as chaves de CD (que poderiam ser qualquer sequência) são fáceis de gerar e fáceis de verificar, mas a proporção de chaves de CD válidas e CD inválidas -keys é tão pequeno que é improvável que você adivinhe aleatoriamente as chaves do CD para obter uma válida.
MANEIRA INCORRETA DE FAZER:
Starcraft e Half-life usaram a mesma soma de verificação, onde o 13º dígito verificou os 12 primeiros. Assim, você pode inserir qualquer coisa para os 12 primeiros dígitos e adivinhar o 13º (há apenas 10 possibilidades), levando ao infame
1234-56789-1234
O algoritmo para verificação é público e é algo como isto:
MANEIRA CORRETA DE O FAZER
O Windows XP pega um pouco de informação, criptografa e coloca a codificação de letra / número em um adesivo. Isso permitiu à MS verificar sua chave e obter o tipo de produto (residencial, profissional etc.) ao mesmo tempo. Além disso, requer ativação online.
O algoritmo completo é bastante complexo, mas bem delineado neste documento (completamente legal!), Publicado na Alemanha.
Obviamente, não importa o que você faça, a menos que você ofereça um serviço on-line (como World of Warcraft ), qualquer tipo de proteção contra cópia é apenas um empate: infelizmente, se houver algum jogo que valha valor, alguém irá quebrar (ou pelo menos contornar ) o algoritmo da chave do CD e todas as outras proteções de direitos autorais.
Real maneira correta de fazê-lo:
Para serviços on-line, a vida é um pouco mais simples, pois mesmo com o arquivo binário, você precisa se autenticar com seus servidores para utilizá-lo (por exemplo, ter uma conta WoW). O algoritmo de chave de CD para World of Warcraft - usado, por exemplo, na compra de cartões de brincadeira - provavelmente se parece com isso:
Para serviços online, não há razão para não usar o esquema acima; usar qualquer outra coisa pode levar a problemas .
fonte
1234-56789-1234
tecla Starcraft, mas lembro que levou apenas cinco minutos para "forçar a força bruta" do verificador pressionando o teclado e tentando novamente.Quando escrevi originalmente esta resposta, pressupunha-se que a pergunta estava relacionada à validação 'offline' de chaves de licença. A maioria das outras respostas aborda a verificação on-line, que é significativamente mais fácil de manusear (a maior parte da lógica pode ser feita no servidor).
Com a verificação offline, o mais difícil é garantir que você possa gerar um grande número de chaves de licença exclusivas e ainda manter um algoritmo robusto que não é facilmente comprometido (como um dígito de verificação simples)
Não sou muito versado em matemática, mas me ocorreu que uma maneira de fazer isso é usar uma função matemática que plota um gráfico
A linha plotada pode ter (se você usar uma frequência suficientemente fina) milhares de pontos únicos, para que você possa gerar chaves escolhendo pontos aleatórios nesse gráfico e codificando os valores de alguma maneira
Como exemplo, plotaremos esse gráfico, escolheremos quatro pontos e codificaremos em uma string como "0, -500; 100, -300; 200, -100; 100,600"
Criptografaremos a string com uma chave conhecida e fixa (terrivelmente fraca, mas serve a um propósito), depois converteremos os bytes resultantes através do Base32 para gerar a chave final
O aplicativo pode reverter esse processo (base32 para número real, decodificar, decodificar os pontos) e depois verificar se cada um desses pontos está em nosso gráfico secreto.
É uma quantidade bastante pequena de código que permitiria a geração de um grande número de chaves únicas e válidas
No entanto, é muita segurança pela obscuridade. Qualquer pessoa que desmontasse o código seria capaz de encontrar a função gráfica e as chaves de criptografia e depois simular um gerador de chaves, mas provavelmente é bastante útil para diminuir a pirataria casual.
fonte
Verifique este artigo sobre Verificação Parcial de Chave, que cobre os seguintes requisitos:
As chaves de licença devem ser fáceis de digitar.
Devemos poder colocar na lista negra (revogar) uma chave de licença no caso de estornos ou compras com cartões de crédito roubados.
Não é necessário telefonar para casa para testar as teclas. Embora essa prática esteja se tornando cada vez mais predominante, eu ainda não a aprecio como usuário, por isso não pedirei que meus usuários a tolerem.
Não deve ser possível para um cracker desmontar nosso aplicativo liberado e produzir um "keygen" funcional a partir dele. Isso significa que nosso aplicativo não testará completamente uma chave para verificação. Apenas parte da chave deve ser testada. Além disso, cada versão do aplicativo deve testar uma parte diferente da chave, para que uma chave falsa baseada em uma versão anterior não funcione em uma versão posterior do nosso software.
Importante: não deve ser possível que um usuário legítimo digite acidentalmente uma chave inválida que parece funcionar, mas falha em uma versão futura devido a um erro tipográfico.
fonte
Eu não tenho nenhuma experiência com o que as pessoas realmente fazem para gerar chaves de CD, mas (supondo que você não queira seguir o caminho da ativação on-line), aqui estão algumas maneiras pelas quais alguém pode criar uma chave:
Exija que o número seja divisível por (digamos) 17. É trivial adivinhar, se você tiver acesso a muitas chaves, mas a maioria das cadeias possíveis será inválida. Semelhante seria exigir que a soma de verificação da chave corresponda a um valor conhecido.
Exija que a primeira metade da chave, quando concatenada com um valor conhecido, faça o hash até a segunda metade da chave. Melhor, mas o programa ainda contém todas as informações necessárias para gerar chaves e validá-las.
Gere chaves criptografando (com uma chave privada) um valor conhecido + nonce. Isso pode ser verificado descriptografando usando a chave pública correspondente e verificando o valor conhecido. O programa agora possui informações suficientes para verificar a chave sem poder gerar chaves.
Eles ainda estão todos abertos ao ataque: o programa ainda está lá e pode ser corrigido para contornar a verificação. Mais inteligente pode ser criptografar parte do programa usando o valor conhecido do meu terceiro método, em vez de armazenar o valor no programa. Dessa forma, você teria que encontrar uma cópia da chave antes de descriptografar o programa, mas ainda é vulnerável a ser copiado uma vez descriptografado e ter uma pessoa que faça sua cópia legítima e a use para permitir que todos acessem o software.
fonte
As chaves de CD não são uma grande segurança para qualquer material que não esteja em rede; portanto, tecnicamente, elas não precisam ser geradas com segurança. Se você estiver no .net, quase poderá usar o Guid.NewGuid ().
Atualmente, seu principal uso é o componente Multiplayer, onde um servidor pode verificar a CD Key. Por isso, não é importante a segurança com que foi gerado, pois se resume a "Pesquise o que for passado e verifique se alguém já o está usando".
Dito isto, você pode usar um algoritmo para atingir dois objetivos:
Dito isto, você ainda deseja uma grande distribuição e alguma aleatoriedade para evitar um pirata, simplesmente adivinhando uma chave válida (que é válida no seu banco de dados, mas ainda dentro de uma caixa na prateleira da loja) e transando com um cliente legítimo que por acaso compra essa caixa .
fonte
Se você não está particularmente preocupado com o comprimento da chave, um método bastante experimentado e verdadeiro é o uso da criptografia de chave pública e privada.
Essencialmente, tenha algum tipo de nonce e uma assinatura fixa.
Por exemplo: 0001-123456789
Onde 0001 é seu noncece e 123456789 é sua assinatura fixa.
Em seguida, criptografe isso usando sua chave privada para obter sua chave de CD, algo como: ABCDEF9876543210
Em seguida, distribua a chave pública com seu aplicativo. A chave pública pode ser usada para descriptografar a chave do CD "ABCDEF9876543210", da qual você verifica a parte da assinatura fixa.
Isso impede que alguém adivinhe qual é a chave do CD para o nonce 0002, porque não possui a chave privada.
A única desvantagem importante é que suas chaves de CD serão bastante longas ao usar chaves privadas / públicas com tamanho de 1024 bits. Você também precisa escolher um número não longo o suficiente para não criptografar uma quantidade trivial de informações.
O lado positivo é que esse método funcionará sem "ativação" e você pode usar itens como endereço de e-mail ou nome do licenciado como nonce.
fonte
O sistema de chaves deve ter várias propriedades:
Uma solução que você deve fornecer a eles seria usar um esquema de assinatura de chave pública . Comece com um "hash do sistema" (digamos, pegue os macs em qualquer NICs, classificadas e as informações de ID da CPU, além de outras coisas, concatene tudo isso junto e obtenha um MD5 do resultado (você realmente não quer ser manipular informações de identificação pessoal, se você não precisar)) anexa o número de série do CD e se recusa a inicializar, a menos que alguma chave do registro (ou algum arquivo de dados) possua uma assinatura válida para o blob. O usuário ativa o programa enviando o blob para você e você devolve a assinatura.
Os problemas em potencial incluem o fato de você estar oferecendo praticamente qualquer coisa para que você assuma que alguém executará um texto sem formatação e / ou ataques de texto cifrado . Isso pode ser atenuado verificando o número de série fornecido e recusando-se a manipular solicitações de pessoas inválidas, além de recusar-se a manipular mais de um determinado número de consultas de um dado s / n em um intervalo (digamos 2 por ano)
Devo salientar algumas coisas: primeiro, um invasor habilidoso e determinado será capaz de contornar toda e qualquer segurança nas partes às quais eles têm acesso irrestrito ( ou seja, tudo no CD), o melhor que você pode fazer nessa conta é dificulta o acesso ilegítimo do que o acesso legítimo. Segundo, eu não sou especialista, portanto pode haver falhas sérias nesse esquema proposto.
fonte
Também existem comportamentos DRM que incorporam várias etapas ao processo. Um dos exemplos mais conhecidos é um dos métodos da Adobe para verificar uma instalação do Creative Suite. O método tradicional de CD Key discutido aqui é usado, então a linha de suporte da Adobe é chamada. A chave do CD é fornecida ao representante da Adobe e eles devolvem um número de ativação a ser usado pelo usuário.
No entanto, apesar de ser dividido em etapas, isso é vítima dos mesmos métodos de craqueamento usados no processo normal. O processo usado para criar uma chave de ativação que é verificada em relação à chave do CD original foi rapidamente descoberto e foram gerados geradores que incorporam as duas chaves.
No entanto, esse método ainda existe como uma maneira de usuários sem conexão à Internet verificarem o produto. No futuro, é fácil ver como esses métodos seriam eliminados à medida que o acesso à Internet se tornar onipresente.
fonte
Todos os CD apenas algoritmos de proteção contra cópia incomodam usuários honestos, ao mesmo tempo em que não oferecem proteção contra pirataria.
O "pirata" só precisa ter acesso a um CD legítimo e seu código de acesso; ele pode fazer n cópias e distribuí-las.
Não importa o quão criptograficamente seguro você crie o código, você precisará fornecer o CD em texto sem formatação ou um usuário legítimo não poderá ativar o software.
Os esquemas mais seguros envolvem o usuário que fornece ao fornecedor do software alguns detalhes da máquina que executará o software (números de série da CPU, endereços Mac, endereço IP etc.) ou requerem acesso on-line para registrar o software no site do fornecedor e em troca, recebe um token de ativação. A primeira opção requer muita administração manual e vale a pena apenas para softwares de alto valor, a segunda opção pode ser falsificada e é absolutamente irritante se você tiver acesso limitado à rede ou estiver preso atrás de um firewall.
No geral, é muito mais fácil estabelecer uma relação de confiança com seus clientes!
fonte
Você pode usar e implementar a API de Licenciamento Seguro em ( https://www.nuget.org/packages/SystemSoulLicense/ ) com muita facilidade em seus Projetos de Software, (você precisa fazer o download do aplicativo da área de trabalho para criar uma licença segura em https: / /www.systemsoulsoftwares.com/ ) 1. Cria UID exclusivo para software cliente com base no hardware do sistema (CPU, placa-mãe, disco rígido) (o UID atua como chave privada para esse sistema único) 2. Permite enviar sequência de licença criptografada com muita facilidade para o sistema cliente, verifica a sequência de licença e funciona apenas nesse sistema específico 3. Esse método permite que desenvolvedores de software ou empresa armazenem mais informações sobre software / desenvolvedor / serviços de distribuidor / recursos / cliente 4. Ele fornece controle para bloquear e desbloquear os recursos de software cliente, economizando tempo dos desenvolvedores para criação de mais versões para o mesmo software, com alterações nos recursos 5. Ele também se preocupa com a versão de teste por vários dias 6. Ele protege o cronograma da licença verificando o DateTime on-line durante o registro 7. Desbloqueia todas as informações de hardware para os desenvolvedores 8.Possui todas as funções personalizadas e pré-compiladas que o desenvolvedor pode acessar a cada processo de licenciamento para criar código seguro mais complexo
fonte