Pergunta

Tenho vindo a utilizar o módulo mcrypt PHP para criptografar dados sensíveis na minha empresa. Isso tem funcionado bem. No entanto, tenho sido solicitado para criar uma nova senha mestra que deve ser capaz de descriptografar os dados. O problema é que esta senha mestre teria que ser codificado em um arquivo script. Corrija-me se estou errado, mas a única maneira segura parece ser a de codificar uma chave pública no script e usá-lo para criptografar dados, enquanto manter a chave privada segura e usá-lo apenas para descriptografar quando necessário.

mcrypt não parece ter uma implementação de um tal esquema. Alguém sabe de uma biblioteca (módulo PHP ou PHP puro) que faria isso?

Foi útil?

Solução

Eu sugiro dar uma olhada nas ligações PHP OpenSSL, e em particular o openssl_public_encrypt () função . Você poderia realmente incorporar uma chave pública principal para o roteiro, e tem o script criptografar a chave AES de cada usuário com esta chave pública. Mantenha o mestre chave privada correspondente no cofre da empresa.

Se você precisar a função de mestre de descriptografar, você iria puxar a chave de usuário criptografada, decifrá-lo com a chave privada mestre e, em seguida, descriptografar os dados originais.

Outras dicas

Há uma extensão PECL para isso. http://us2.php.net/manual/en/book.gnupg. php

Você também pode usar o GnuPG ferramenta de linha de comando do PHP, se ele não tem que ser muito rápido: http://devzone.zend.com/article/1265

Eu não tentei qualquer método.

Eu não vejo como isso iria funcionar. Qualquer função de criptografia de duas vias só vai para descriptografar quando alimentados com a senha específica usada para criptografar (a menos que você é o NSA e você colocar portas traseiras nos algoritmos). Você não pode ter duas senhas descriptografar o mesmo arquivo (a menos que haja colisões de hash, mas isso não é algo que você pode fazer acontecer facilmente).

Quanto armazenando a sua senha mestre no programa, seria muito melhor para armazená-lo em um arquivo separado o programa lê em, assim você pode usar a segurança em nível de sistema operacional mais apertado sobre esse arquivo.

Tenha em mente mcrypt não é criptografia de chave pública. Com a criptografia de chave pública, você pode ser capaz de fazer o que quiser, no entanto. Por exemplo, com PGP / GPG, você pode criptografar um arquivo de tal forma que três usuários diferentes podem decifrá-lo usando suas chaves privadas, sem saber chaves privadas de cada um. Então você pode ter um usuário virtual com a senha mestra que pode decifrar tudo.

Outra opção seria para manter duas cópias de todos os dados criptografados; um criptografado com a senha do usuário, e um criptografado com a senha mestra.

Só para ter certeza de sua exigência deste senha mestra ,

  1. É esperado para ser usado apenas como um ' encrypt this ' comando que irá 'selo' algo
    que só pode então ser aberto por alguém conhecer a chave privada em questão? Ou,
    • É algo que você espera para abrir qualquer criptografia feito na empresa?
    • Eu só quero ter certeza que seu fraseado não deve ser interpretado desta segunda maneira
    • sua frase ' decrypt any data ' sons perigoso
      (E não-viáveis ??/ prático com criptografia de chave assimétrica)

Atualização com base no comentário.

  • Você está planejando para duas cópias dos dados cada criptografados com chaves diferentes
    • uma cópia deve ser criptografada com a pública mestre Chave
      • pode ser decifrada com qualquer um que tem o privada mestre chave
        a chave privada mestre deve ser segura (chave pública não é crítico)
    • segunda cópia deve ser criptografada com a chave Rijndael 256
  • finalidade é permitir que o mestre para descriptografar os dados sempre que necessário
    particularmente, na ausência do indivíduo que encriptado it

Esta abordagem irá trabalhar para, facilitar o acesso dos dados pelo indivíduo com a chave Rijndael,
sem necessidade de intervenção do dono da chave privada mestre.
E, quando o dono da chave privada mestre é confiável com o sigilo dos dados.

O esquema será necessário atualizar a cópia principal (excluindo a mais velha e re-criptografar um novo) cada vez que o usuário atualiza sua cópia.


No entanto, se os dados usuário é confiável com o mestre (como é claramente o caso aqui),

  • uma abordagem mais fácil seria para emitir a chave Rijndael do mestre
  • O mestre poderia mantê-lo criptografado com o próprio
  • chave mestra-pública
  • Os dados podem então ser criptografados com apenas a chave Rijndael emitido
    • será sempre acessíveis com a chave
      mestre-privadas que pode abrir a chave Rijndael do usuário

Se as necessidades do usuário para assinar os dados, que podem ser realizadas separadamente no processo.
Ela vai lhe poupar de manter cópias de duas e manutenção.


Para assinar os dados , o usuário pode ter um um par de chaves gerado por eles.

  • Antes de criptografar os dados com a tecla privada Rijndael
  • chave mestra públicas criptografado com o usuário-chave privada pode ser anexado a ele
  • chave pública do usuário- compartilhada com o mestre (pelo menos)
    será suficiente para autenticar que o usuário tenha fornecido os dados
  • Em um cenário de pior caso, se o usuário não está disponível e a confirmação chave falhar,
    o mestre pode ser confiável sobre a autenticidade dos dados - o que ainda pode ser descriptografado
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top