Pregunta

He estado usando el módulo PHP mcrypt para cifrar datos confidenciales en mi empresa. Esto ha estado funcionando bien. Sin embargo, se me ha pedido que cree una nueva contraseña maestra que pueda descifrar los datos. El problema es que esta contraseña maestra tendría que estar codificada en un archivo de script. Corríjame si estoy equivocado, pero la única forma segura parece ser codificar una clave pública en el script y usarla para cifrar datos mientras mantiene segura la clave privada y la usa para descifrar solo cuando sea necesario.

mcrypt no parece tener una implementación para tal esquema. ¿Alguien sabe de una biblioteca (módulo PHP o PHP puro) que haría esto?

¿Fue útil?

Solución

Sugiero echar un vistazo a los enlaces PHP OpenSSL, y en particular a la función openssl_public_encrypt () . De hecho, podría incrustar una clave pública maestra en el script y hacer que el script cifre la clave AES de cada usuario con esta clave pública. Mantenga segura la clave privada maestra correspondiente en la empresa.

Si necesita la función de descifrado maestro, debe extraer la clave de usuario cifrada, descifrarla con la clave privada maestra y luego descifrar los datos originales.

Otros consejos

Hay una extensión PECL para eso. http://us2.php.net/manual/en/book.gnupg. php

También puede usar la herramienta de línea de comando gnupg de php, si no tiene que ser muy rápida: http://devzone.zend.com/article/1265

No he probado ninguno de los métodos.

No veo cómo funcionaría eso. Cualquier función de cifrado bidireccional solo se descifrará cuando se ingrese la contraseña específica utilizada para cifrar (a menos que sea la NSA y ponga puertas traseras en los algoritmos). No puede hacer que dos contraseñas descifren el mismo archivo (a menos que haya colisiones hash, pero eso no es algo que pueda hacer que suceda fácilmente).

En cuanto a almacenar su contraseña maestra en el programa, sería mucho mejor almacenarla en un archivo separado en el que el programa lea, para que pueda usar una seguridad más estricta a nivel del sistema operativo en ese archivo.

Tenga en cuenta que mcrypt no es criptografía de clave pública. Sin embargo, con la criptografía de clave pública, es posible que pueda hacer lo que quiera. Por ejemplo, con PGP / GPG, puede cifrar un archivo de modo que tres usuarios diferentes puedan descifrarlo usando sus claves privadas, sin conocer las claves privadas de los demás. Para que pueda tener un usuario virtual con la contraseña maestra que pueda descifrar todo.

Otra opción sería mantener dos copias de todos los datos cifrados; uno cifrado con la contraseña del usuario y otro cifrado con la contraseña maestra.

Solo para estar seguro de su requisito de esta contraseña maestra ,

  1. ¿Se espera que se use solo como un comando ' encriptar este ' que 'sellará' algo
    que solo puede ser abierto por alguien que conozca la clave privada en cuestión? O,
    • ¿Es algo que espera abrir algún cifrado realizado en la empresa?
    • Solo quiero asegurarme de que tu frase no sea interpretada de esta segunda manera
    • su frase ' descifrar cualquier dato ' suena peligroso
      (y no factible / práctico con cifrado de clave asimétrica)

Actualización basada en el comentario.

  • Está planeando dos copias de los datos cada una encriptada con diferentes claves
    • una copia debe cifrarse con la clave maestra pública
      • se puede descifrar con cualquiera que tenga la clave maestra privada
        la clave privada maestra debe estar protegida (la clave pública no es crítica)
    • la segunda copia debe cifrarse con la clave Rijndael 256
  • el propósito es permitir que el maestro descifre los datos cuando sea necesario
    particularmente, en ausencia de la persona que lo cifró

Este enfoque funcionará para, fácil acceso de los datos por parte del individuo con la tecla Rijndael,
sin necesidad de intervención por parte del propietario de la clave privada maestra.
Y, cuando se confía en el propietario de la clave privada maestra el secreto de los datos.

Su esquema deberá actualizar la copia maestra (eliminar la anterior y volver a cifrar una nueva) cada vez que el usuario actualice su copia.


Sin embargo, si los datos de usuario son de confianza con el maestro (como es claramente el caso aquí),

  • un enfoque más fácil sería emitir la clave Rijndael del maestro
  • El maestro podría mantenerlo encriptado con la clave maestra-pública misma
  • Los datos se pueden cifrar con solo la clave Rijndael emitida
    • siempre estará accesible con la clave maestra-privada
      que puede abrir la clave Rijndael del usuario

Si el usuario necesita firmar los datos, eso se puede lograr por separado en el proceso.
Le ahorrará conservar copias dobles y mantenerlas.


Para firmar los datos , el usuario podría tener un par de claves generado por ellos.

  • Antes de cifrar los datos con la clave privada de Rijndael
  • la clave pública-maestra cifrada con la clave-privada-usuario puede agregarse a ella
  • la clave pública de usuario compartida con el maestro (al menos)
    será suficiente para autenticar que el usuario ha proporcionado los datos
  • En el peor de los casos, si el usuario no está disponible y la confirmación de la clave falla,
    se puede confiar en el maestro en la autenticidad de los datos, que aún se pueden descifrar
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top