Pergunta

Muitos dos clientes da minha empresa utilizar o nosso software de aquisição de dados em uma base de pesquisa. Devido à natureza da pesquisa em geral, alguns dos clientes pedem que os dados são criptografados para evitar adulterações - poderia haver sérias conseqüências se os seus dados foram mostrados para ser falsificada

.

Alguns de nossos binário arquivos de saída de software criptografa com uma senha armazenada na fonte, que se parece com caracteres aleatórios. Ao nível de software, somos capazes de abrir arquivos criptografados para operações somente leitura. Se alguém realmente queria descobrir a senha para que pudessem alterar dados, seria possível, mas seria muito trabalho.

Eu estou olhando para usar Python para desenvolvimento rápido de um outro pedaço de software. Para duplicar a funcionalidade de criptografia a derrota / desencorajar a adulteração de dados, a melhor idéia que eu vim acima com até agora é ctypes uso apenas com um DLL para leitura de arquivos / escrita operações, para que o método de criptografia e descriptografia é "suficientemente "ofuscado.

Estamos bem conscientes de que um método "uncrackable" é inatingível, mas ao mesmo tempo eu não sou obviamente confortável com apenas ter a encriptação / desencriptação abordagens sentado lá em texto simples no código fonte Python. A "muito forte desânimo de adulteração de dados" seria bom o suficiente, eu acho.

Qual seria a melhor abordagem para alcançar um meio de criptografia ou outra prova de integridade de dados usando Python? vi outro post falando gerando uma 'adulteração assinatura prova', mas se uma assinatura foi gerada em puro Python, então seria trivial para gerar uma assinatura para todos os dados arbitrária. Nós pode ser capaz de telefone de casa para provar a integridade dos dados, mas que parece ser um grande inconveniente para todos os envolvidos.

Foi útil?

Solução

Como princípio geral, você não quer usar a criptografia para proteger contra adulteração, em vez disso você quiser usar uma assinatura digital. Encryption lhe dá confidencialidade , mas você está depois integridade .

calcular um valor de hash sobre seus dados e quer armazenar o valor de hash em um lugar onde você sabe que não pode ser adulterado ou assiná-lo digitalmente.

No seu caso, parece que você quer garantir que apenas o seu software pode ter gerado os arquivos? Como você diz, não pode existir uma maneira muito segura de fazer isso quando os usuários têm acesso ao software, uma vez que pode acabar com isso e encontrar as chaves secretas que você incluir. Dada essa restrição, acho que sua idéia de usar um DLL é quase tão bom como você pode fazê-lo.

Outras dicas

Se você está incorporando senhas em algum lugar, você está já metralhado. Você não pode garantir nada.

No entanto, você pode usar a criptografia de chave pública / chave privada para se certificar de que os dados não foi adulterado.

O modo como funciona é este:

  1. Você gerar um par de chave pública / chave privada.
  2. Mantenha a chave privada segura, distribuir a chave pública.
  3. Hash os dados e, em seguida, assinar o hash com a chave privada.
  4. Use a chave pública para verificar o hash.

Isso efetivamente torna os dados somente leitura fora de sua empresa, e fornece o seu programa de uma maneira simples de verificar se os dados não foi modificado sem distribuir senhas.

Aqui está uma outra questão. Presumivelmente, o seu software de aquisição de dados está coletando dados de uma fonte externa (como uma espécie de dispositivo de medição), em seguida, fazer o que processsing é necessário nos dados brutos e armazenar os resultados. Independentemente de qual método você usar em seu programa, um outro vetor de ataque possível seria a alimentação de má dados para o programa, e o programa em si não tem nenhuma maneira de saber que você está alimentando em compostas de dados em vez de dados que veio da medição dispositivo. Mas isso pode não ser corrigível.

.

Outro vector possível ataque (e provavelmente o que você está preocupado é mexer com os dados no computador depois de ter sido armazenada Aqui está uma idéia para mitigar esse risco: configurar um servidor separado (Isto poderia ser algo que seu empresa seria executado, ou mais provavelmente seria algo que o cliente iria configurar) com uma senha protegida serviço web que permite que um usuário adicionar (mas não remova) registros de dados. Então, o seu programa, quando se recolhe dados, enviá-lo para o servidor (usando a seqüência de senha / conexão que é armazenado no programa). ter o seu programa só escrever os dados para a máquina local se receber a confirmação de que os dados foram armazenados com sucesso no servidor.

Agora, suponha que um atacante tenta mexer com os dados do cliente. Se ele pode fazer engenharia reversa do programa, então ele pode, naturalmente, ainda enviá-lo para o servidor para armazenamento, assim como o programa fez. Mas o servidor ainda terá os dados originais, de modo que a adulteração será detectável porque o servidor vai acabar com os dados originais e modificados - o cliente não será capaz de apagar os registros originais. (O programa cliente, naturalmente, não precisa saber como registros de apagar no servidor.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top