The aim is to have a system that would allow any user on any client machine of a home network to be able to use my software. Activations outside of this network would not be allowed.

The base for this is web API which holds various license keys. You can do the usual queries of this API - verify, create, update etc. There's facility to have number of activations and max activations etc. Idea being the user is sent an license key to activate their product.

The simple process would be the user chooses "activate product", types in their key, the software checks with the API whether this is valid and within the remaining number of activations and the API returns relevant info. You can send info to the API (any custom string) and possibly store it server-side.

The real challenge is the constraint of not allowing activations outside of a home network. The things I've considered:

  1. Sending the public IP to the API and storing it there and comparing any other activations. Problem being dynamic IPs + changes of ISP??

  2. Handling this within the home network. For example, if the first activation is on Client A, then when a new installation attempts activation on Client B, the software can check in some shared location for a file/key. I was originally thinking %appdata% or the registry but my cursory reading reveals that there is not 'automatic syncing' of such across a home network.

  3. I wonder about any registered copy of the software producing an encrypted file on demand that contains some kind of unique identifier of the home network which can then be imported into another client to activate it. The import would check the network identifier against it's own calculation of this and if they match, activation is approved. This would also get around any problems of identifiers changing due to network hardware or infrastructure changes, as the 'key file' would be contemporaneous and thus relevant to both machines.

I'm wanting to keep it simple. I'm not precious about piracy, and realise no system is water tight. Just enough to discourage people sharing keys whilst also allowing them to set up multiple machines with the software in their own home.

I would appreciate any views + suggestions.

  • What are the characteristics that make a network a "home network" rather than some other kind of network? What about the situation that I buy a license and invite my friends to activate their copy with my license at my home and then use it at their own homes. How would you want to detect/deal with that case? Jun 17 '21 at 18:32
  • That's a really good point. I suppose I could store the unique network identifier on the friend's client and if they connect to their home network this would indicate a problem. Question then goes to what if the original licensee's network changes somehow and changes the unique identifier. Alternatively, I could just accept that as a loss scenario, as I wouldn't imagine that happening a great deal, given they would physically have to connect to the licensee's network.
    – stigzler
    Jun 17 '21 at 20:33
  • I'm going to say that your entire original idea may not be good. Home networks don't tend to have stable identifiers. Home wi-fi routers are often treated as disposable, replaceable appliances. Home internet connections often do not have an 'external' IP address at all, much less an unchanging one. People might have two home networks in the same room, or in different cities. They might have zero home networks and be getting internet from a smartphone whose MAC address changes every time. (Basically, don't fall into the trap of treating your users as adversary first, customer second.)
    – user1686
    Jun 18 '21 at 19:37
  • @user1686 - thanks - also really good advice. Do you have any suggestions then about how I could achieve this?
    – stigzler
    Jun 18 '21 at 21:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.