I have this idea of implementing a license key:
- After the user downloads the program, he connects to a website and sends his Windows product ID.
- The website, then, sends this back to him with a signature using a private RSA key.
- The program, then, checks, using a public key, whether it is really signed by the private key, and stores this message it got.
Now, every time the program starts, it retrieves this message, and checks it in the way mentioned in 3., comparing that with the windows product ID retrieved from the operating system.
This is done using 1024 bit numbers. I can't encode anything with the private key using what the computer language (C#) offers. (I don't want to implement my own algorithm – I don't know enough about encryption.)
Is the Windows product key long enough for this? It's something like 12345-abc-1234567-12345
. (Get it by right-clicking on “my-computer”, and clicking “properties”.)
I apologize for my non-cryptographer way of asking. Here are the questions:
a) Is encrypting a small number by a large key safe?
b) Is signing a message (as opposed to encrypting it) safe?
Win32_BIOS
forSerialNumber
on the first instance (there should only be one), which will give you the serial number of the BIOS device. You can do the same withWin32_Baseboard.SerialNumber
, which gives you the serial number of the motherboard. You can grab WMI Explorer from here to take a look around: http://www.ks-soft.net/hostmon.eng/wmi/index.htm – Polynomial Nov 24 '11 at 06:53