A maneira mais comum é fazer com que o programa imponha apenas parte do algoritmo de licença real. Por exemplo, digamos que a licença seja assim: UUUU-VVVV-WWWW-XXXX-YYYY-ZZZZ . O algoritmo de licença pode exigir que a parte YYYY-ZZZZ tenha uma estrutura específica. Mas, no que diz respeito ao programa, qualquer parte UUUU-VVVV-WWWW-XXXX é permitida.
No entanto, o fabricante pode escolher os números de série de forma testável. Por exemplo, UUUU pode identificar o revendedor, versão ou ID do produto. VVVV-WWWW pode ser sequencial para emitir várias licenças. Mas a parte XXXX pode ser baseada em um hash seguro da parte UUUU-VVVV-WWWW .
Como o hash seguro não é implementado no programa ou testado por ele, ele pode ser mantido completamente secreto. Todas as chaves legítimas terão o hash seguro correto, mas as chaves com um hash seguro inválido, mas uma parte YYYY-ZZZZ correta funcionará no software, mas deve ter sido gerada por um gerador de chaves.
Normalmente, o programa incorpora parte de sua chave nas coisas. Neste exemplo, provavelmente a parte UUUU-VVVV-WWWW-XXXX-YYY . Isso é suficiente para dizer de quem é a licença (se era legítima) e se foi gerada por um keygen, mas não o suficiente para usar a licença para executar o software.