The company I work for would like to create some kind of a registration process, where at the end, the user will have to enter a key in order to activate his product.
I've already searched and found few sources that explain how to generate a key. One of them (How to generate and validate a software license key?) suggested taking some data (like registration data, combined with hardware info), and concat it with an private key encryption of the hash over the data, and on all of that, calculate the base32 encoding.
So when the key is entered in the program will decode the base32, calculate the has over the data, and verify with the public key that the signature in the key is valid (so we can be sure that the key came from out company).
I've found out about Bouncy castle, but I don't see any schnorr implementation in it (In fact, I didn't find much of implementation of if in c#). All my efforts on making a small signature failed (The smallest signature I've managed to create was 56 bytes).
So assuming that the data + signature is, lets say, 64 bytes. My base 32 string will be 64 * 8 / 5, which is 103 chars.combined with extra - for delimitation, and making it a little more readable, we get something which is not readable and cannot be dictated by phone (if needed).
So what am I missing? If I need to make a 32 chars key, then I need 20 bytes of data + hash.
How do I do that?
Any example using the .net Cryptography, or the Bouncy Castle (which lack of any c# documentation and examples) would be helpful.