In pratica, se il codice e le chiavi si trovano su un computer con scheda SD, saranno in grado di decompilarlo, saranno in grado di scoprire le chiavi e saranno in grado di estrarre i dati sensibili.
È come crittografare i film, un DVD deve includere tutte le informazioni necessarie per decrittografare il film in modo che possa essere visualizzato allo spettatore, quindi tutti i meccanismi di protezione dalla copia dei film sono condannati.
Il meglio che puoi fare è cambiare l'economia del reverse engineering del tuo prodotto.
Vale la pena crittografare e / o offuscare?
Ora abbiamo stabilito che non c'è modo di proteggerti completamente, le domande diventano
- Quanto è probabile che accada?
- Qual è il valore per qualcun altro del tuo algoritmo e dei tuoi dati?
- Qual è il costo per loro di acquistare una licenza per utilizzare il tuo software?
- Qual è il costo per loro di replicare algoritmo e dati?
- Qual è il costo per il reverse engineering del tuo algoritmo e dei tuoi dati?
- Qual è il costo per te per proteggere algoritmo e dati?
Se questi producono un imperativo economico significativo per proteggere il tuo algoritmo / dati, dovresti cercare di farlo. Ad esempio, se il valore del servizio e il costo per i clienti sono entrambi elevati, ma il costo dell'ingegnerizzazione inversa del codice è molto inferiore al costo di sviluppo da soli, le persone potrebbero tentarlo.
Quindi, questo porta alla tua domanda
- Come si proteggono l'algoritmo e i dati?
Offuscazione
L'opzione che suggerisci, offuscando il codice, rovina l'economia sopra - cerca di aumentare significativamente il costo per loro (5 sopra) senza aumentare molto il costo per te (6). Il problema è che, come con la crittografia DVD, è destinata a fallire e se c'è abbastanza differenziale tra 3, 4 e 5, alla fine qualcuno lo farà.
Un'altra opzione potrebbe essere una forma di steganografia , che consente di identificare chi ha decodificato il codice e ha iniziato a distribuirlo. Per esempio, se si dispone di 100 differenti valori float come parte dei dati, e un errore di 1 bit in LSB di ciascuno di questi valori non causerebbe un problema con l'applicazione, codificare un unico (a ciascun cliente) identificatore in quei bit . Il problema è che se qualcuno ha accesso a più copie dei dati dell'applicazione, sarebbe ovvio che differisce, rendendo più semplice l'identificazione del messaggio nascosto.
Protezione
L'unica opzione davvero sicura è quella di fornire una parte critica del tuo software come servizio , piuttosto che includerlo nella tua applicazione.
Concettualmente, la tua applicazione raccoglierebbe tutti i dati necessari per eseguire l'algoritmo, impacchettandolo come richiesta a un server (controllato da te) nel cloud , il tuo servizio calcolerebbe quindi i risultati e li rimanderebbe al client, che lo mostrerebbe.
Ciò mantiene tutti i tuoi dati e algoritmi riservati e riservati all'interno di un dominio che controlli completamente e rimuove qualsiasi possibilità di estrazione di un client.
L'ovvio aspetto negativo è che i clienti sono legati alla tua prestazione di servizi, sono in balia dei tuoi server e della loro connessione Internet. Tra i lati positivi, sono sempre aggiornati con le correzioni di bug. Sfortunatamente molte persone si oppongono a SaaS proprio per questi motivi.
Questo sarebbe un grande passo da fare, e potrebbe avere un enorme costo 6 sopra, ma è l'unico modo che posso vedere per mantenere il tuo algoritmo e i tuoi dati completamente sicuri .