Na prática, se o código e as chaves estão em uma máquina de cartão SD, eles vão ser capazes de de-compilá-lo, eles vão ser capazes de descobrir as chaves e eles vão ser capazes de extrair os dados sensíveis.
É como criptografar filmes, um DVD deve incluir todas as informações necessárias para descriptografar o filme para que possa ser exibido ao espectador, para que todos os mecanismos de proteção contra cópia de filmes estejam condenados.
O melhor que você pode fazer é mudar a economia da engenharia reversa do seu produto.
Vale a pena a criptografia e / ou ofuscação?
Agora, estabelecemos que não há como se proteger completamente, as perguntas se tornam
- Qual a probabilidade de isso acontecer?
- Qual é o valor para outra pessoa do seu algoritmo e dados?
- Qual é o custo para eles comprarem uma licença para usar seu software?
- Qual é o custo para eles de replicar seu algoritmo e dados?
- Qual é o custo para eles da engenharia reversa de seus algoritmos e dados?
- Qual é o custo para você proteger seu algoritmo e dados?
Se estes produzem um imperativo econômico significativo para proteger seus dados / algoritmo, você deve tentar fazê-lo. Por exemplo, se o valor do serviço e o custo para os clientes forem altos, mas o custo da engenharia reversa do seu código for muito menor do que o custo de desenvolvê-lo, então as pessoas poderão tentar.
Então, isso leva à sua pergunta
- Como você protege seu algoritmo e dados?
Ofuscação
A opção que você sugere, ofuscar o código, mexe com a economia acima - ela tenta aumentar significativamente o custo para eles (5 acima) sem aumentar muito o custo para você (6). O problema é que, como na criptografia de DVD, está fadado ao fracasso e, se houver um diferencial suficiente entre 3, 4 e 5, então alguém o fará.
Outra opção pode ser uma forma de esteganografia , que permite identificar quem descriptografou seu código e começou a distribuí-lo. Por exemplo, se você tiver 100 valores flutuantes diferentes como parte de seus dados, e um erro de 1bit no LSB de cada um desses valores não causasse problemas no seu aplicativo, codifique um identificador exclusivo (para cada cliente) nesses bits . O problema é que, se alguém tiver acesso a várias cópias dos dados do aplicativo, seria óbvio que isso difere, facilitando a identificação da mensagem oculta.
Proteção
A única opção realmente segura é fornecer uma parte crítica do seu software como serviço , em vez de incluí-lo em seu aplicativo.
Conceitualmente, seu aplicativo coletava todos os dados necessários para executar seu algoritmo, empacotava-os como uma solicitação para um servidor (controlado por você) na nuvem ; seu serviço calculava seus resultados e os passava de volta ao cliente, o que mostraria.
Isso mantém todos os seus dados e algoritmos proprietários e confidenciais em um domínio que você controla completamente e remove qualquer possibilidade de extração de um cliente.
A desvantagem óbvia é que os clientes estão vinculados à sua prestação de serviços, estão à mercê dos seus servidores e de suas conexões à Internet. No lado positivo, eles estão sempre atualizados com as correções de erros. Infelizmente, muitas pessoas se opõem ao SaaS exatamente por esses motivos.
Este seria um grande passo a ser dado, e pode ter um custo enorme 6 acima, mas é a única maneira que posso ver para manter seu algoritmo e dados completamente seguros .