I would like to get some simple scheme / algorithm for generating serial numbers based on some unique hardware id (cpu id or ethernet mac address or hard disk serial number).
I would like scheme to work only in one direction - so application on client machine can verify serial number but not generate one. (So it would not be simple to crack).
Now most probably most of you will recommend some sort of RSA public / private key pair encryption, which can work reliably enough - client does not have private RSA key, so he cannot "generate" serial number.
But main problem with RSA signature is that it's too big - it's signature size is 128 or 256 bytes depending on RSA key size (RSA signature size?)
- I want serial number to be simple copy paste from mail to registration form - so maximum 64 characters, ideally 32 bytes.
Ok, now you will probably say that this kind of protection is not good enough against brute force kind of hacking - where you simply try out all combinations in order to determine correct serial number.
But I would say that typically you need to hire "expensive" hacker or hacker team to create such brute force cracking application.
Also I think it's possible to change serial number generation algorithm for next versions of application, or use multi-round passing to slow down brute force dramatically.
As a base I would prefer to use plain C or C++ (not C#), preferably Windows / wincrypt.h or any existing plain C source code (Preferably not huge 3-rd party libraries).
Is it possible to create RSA public / private key pair so signature size would be 32 characters long ?