This is my first question, so please be careful ...
I am working on software that I would like to protect using some kind of licensing scheme. The basic scheme would be to create some “unique” key for the user. The user sends this key and registration code when he wants to register the software and receives an activation code.
When the application starts, it checks the activation code by comparing the “unique” key and the data block obtained by decrypting the activation code.
This is fair and quite simple to implement, you can choose different cryptographic algorithms, etc. However, this scheme does not have two properties:
- If a user manages to fake a hardware signature, etc., to create the same “unique” key on another computer, he can use the same license data.
- If the user decides to remove the application and wants to transfer it to another computer, nothing prevents him from reusing the old license data on the old computer and still getting new license data for a new installation.
Do you have any suggestions for resolving these issues?
One of my ideas was to add some “random” data to the “unique” key, this random data will be stored in an obscure way, if the user uninstalls the application, this random data will be deleted, and some previous random data will be created with a hash license data and data that can be sent to me to make sure that he really uninstalled the application, and made sure that he would not be able to use the previous license data again, because the random data was changed.
Again and again, for the moment ...
EDIT: I currently have a circuit that works, I should mention that the most common product is installed in an embedded environment, where hardware changes are very rare, and if there is a hardware failure, it is most likely that the machine is broken. But I could change the hardware key scheme to take into account and allow some changes.
In addition, because of this, the software most likely will not run inside the virtual machine, but I did not think about it.
The application is not called regularly if a network connection is available, the user gets the opportunity to do more automatic registration, otherwise he receives a registration key, enters it into the software and receives the installation ID, which is provided to me, the registration code + installation ID generates an activation key that the user receives from me, which then unlocks the software.
What I'm looking for is good / possible solutions for 2 points. Hardware spoofing, cancellation of license keys, that is, to ensure that the user can not use the same regcode + activation code.
Thank you for all your feedback.
Not necessary