Il tuo problema principale è identificare chi sono i tuoi "veri" clienti. Poiché il codice è aperto, è facile per chiunque emulare un client. Quindi, come puoi farlo?
È possibile utilizzare la crittografia asimmetrica. Poiché le chiavi non sono all'interno del codice, non è possibile che possano "emulare" quelle chiavi. Ogni server avrà le proprie chiavi.
Se la crittografia è troppo importante per il client (e l'invio di informazioni non è così importante), allora puoi semplicemente usare una chiave condivisa (come una password), che verrà inviata sempre insieme alla richiesta (qualcosa come un cookie di sessione) .
In ogni caso, è ancora necessario sapere chi è chi attraverso una sorta di autorizzazione (ad esempio, la pagina di accesso). L'utente / pass sarà univoco per server, quindi puoi essere sicuro che chiunque scarichi le chiavi o la "password", siano clienti autorizzati.
Nel caso in cui il tuo sistema non abbia informazioni di accesso (più software generale) è più complicato (ed è quello che ritengo sia la tua vera domanda) ...
Bene, temo che non ci sia molto da fare. Forse è possibile archiviare alcune chiavi scaricate dal server durante l'installazione (è possibile assegnare a ciascun client una chiave prodotto specifica). Non sicuro al 100%, ma potrebbe essere d'aiuto.
L'analisi dei dati web non è sicura al 100%. Possono essere falsificati (solo google: 'come falsificare il traffico web'), ma le aziende fanno del loro meglio per identificare i clienti reali da quelli falsi con i propri algoritmi. Il vantaggio che hanno è che il loro codice non è aperto, quindi non si sa esattamente cosa stanno prendendo in considerazione.
Ho avuto una volta lo stesso dilemma di te. In opensource, ogni server ha una propria configurazione (che è privata), e puoi usarlo per tenere lontane le persone indesiderate e sapere tutto sul tuo servizio.
Se riesco a pensare a qualcos'altro, estenderò la mia risposta, ma questo è tutto da ora.