Voglio creare un client che si colleghi al mio server e usi l'API del server. Puoi considerarlo come un'applicazione bancaria perché la sicurezza dei dati è la cosa più importante. Dal momento che gli utenti o gli hacker provano a violare la sicurezza del software per entrare nel flusso e vedere cosa sta succedendo, dobbiamo proteggere tutto anche dagli utenti. Semplicemente, voglio prendere delle precauzioni contro queste (ma non limitate) situazioni:
-
Attacchi reverse engineering: nessuno deve vedere il mio codice sorgente. Se qualcuno lo vede può capire l'algoritmo e imparare come funziona l'API. Dal momento che l'API non è pubblica, non deve mai accadere. Sta offuscando un processo irreversibile e il modo migliore per nascondere il vero codice sorgente? Inoltre, come posso proteggere le mie variabili che possono essere scaricate dalla memoria durante il runtime? Qual è il modo migliore per proteggere la configurazione locale o i file creati in Windows?
-
Client pirata: come posso evitare che altri software utilizzino la mia API? Se qualcuno ottiene il codice sorgente, lo modifica comunque o crea la sua, questa situazione sarà scomoda. C'è un modo per limitare l'accesso del servizio ai miei clienti originali, non modificati? (controllo hash? certificati client? firma assembly forse?)
-
Canale dati e amp; sicurezza dei dati: il software dovrebbe essere in grado di funzionare in ogni rete che si connette a Internet, quindi sembra che io debba usare le richieste web & risposte per comunicare i client con il server. Penso che il canale dati possa essere protetto facilmente con https. Dovrei preferire un certificato a pagamento (come Verisign) o creare il mio certificato (firmato da me)? Voglio proteggere anche i dati stessi, penso che sia un pubblico & la coppia di chiavi private per ciascun cliente sarà sufficiente sia per l'identificazione che per la comunicazione. È un buon approccio? Sto anche pensando di connettere i client con un proxy HTTP, può aumentare la sicurezza?
So che il mio software sta lavorando su terreno nemico di cui non devo fidarmi e che non c'è nulla che un utente non possa fare con esso. Ma voglio garantirlo il più possibile. Nessuno può renderlo pienamente sicuro, ma voglio fare tutto il possibile per aumentarlo.