Esquema de geração de número de série do pobre homem

Gostaria de obter um esquema / algoritmo simples para gerar números de série com base em alguma identificação de hardware exclusiva (cpu id ou endereço ethernet mac ou número de série do disco rígido).

Gostaria que o esquema funcionasse apenas em uma direção - para que o aplicativo na máquina cliente possa verificar o número de série, mas não gerar um. (Portanto, não seria fácil de decifrar).

Agora, provavelmente, a maioria de vocês recomendará algum tipo de criptografia de par de chaves pública / privada RSA, que pode funcionar de maneira confiável - o cliente não possui uma chave RSA privada, portanto, não pode "gerar" o número de série.

Mas o principal problema da assinatura RSA é que ela é muito grande - o tamanho da assinatura é 128 ou 256 bytes, dependendo do tamanho da chave RSA (Tamanho da assinatura RSA?)

Eu quero que o número de série seja uma cópia simples, cole do correio para o formulário de registro - com no máximo 64 caracteres, idealmente 32 bytes.

Ok, agora você provavelmente dirá que esse tipo de proteção não é bom o suficiente contra ataques de força bruta - onde você simplesmente experimenta todas as combinações para determinar o número de série correto.

Mas eu diria que normalmente você precisa contratar um hacker "caro" ou uma equipe de hackers para criar um aplicativo de cracking por força bruta.

Também acho que é possível alterar o algoritmo de geração de número de série para as próximas versões do aplicativo ou usar a passagem múltipla para diminuir drasticamente a força bruta.

Como base, eu preferiria usar C ou C ++ simples (não C #), preferencialmente Windows / wincrypt.h ou qualquer código-fonte C simples existente (de preferência, não grandes bibliotecas de terceiros).

É possível criar um par de chaves pública / privada RSA para que o tamanho da assinatura tenha 32 caracteres?