¿Cómo almacenar una clave de cifrado en un alojamiento compartido?

3

Estoy diseñando un sistema de administración de pacientes en línea simple que se ejecuta en un alojamiento compartido. De acuerdo con la normativa nacional, los datos confidenciales deben cifrarse cuando se utilizan en línea, por lo que he cifrado todos los campos confidenciales, como nombre, teléfono, dirección y tipo de sangre.

¿Mi problema ahora es cómo debo guardar la clave? Si la clave se coloca en el servidor y el servidor se ve comprometido, los datos se pueden descifrar fácilmente. Después de buscar, obtuve las siguientes soluciones, de las cuales aún no estoy seguro de si son correctas o no:

  1. Código fuente encriptado para todos los archivos PHP.
  2. Colocar la clave en otro servidor y obtenerla del host a través de la conexión HTTPS utilizando un cifrado asimétrico. El host proporciona la clave pública y el servidor remoto proporciona la clave principal cifrada, luego la descifra y la utiliza para cifrar los datos del paciente.

Para estas soluciones, nos enfrentaremos nuevamente al mismo problema sobre cómo ocultar las claves.

También observé la pregunta " Dónde almacenar una clave para ¿cifrado? ", pero la mayoría de los puntos requieren una cuenta de administrador que no esté disponible en el alojamiento compartido.

    
pregunta Akam 29.08.2013 - 21:21
fuente

2 respuestas

5

La única respuesta adecuada a esto, como comentó Xander, es que no puede esperar una seguridad adecuada para datos confidenciales en un entorno "Compartido". Usted no es el administrador del servidor, lo que significa que cualquier defecto de seguridad o configuración errónea dejada abierta por "alguien más" puede hacer que sus datos se vean comprometidos. Y comúnmente en estos casos, cuando las partes involucradas encuentran algo que parece una clave de cifrado y algunos archivos aparentemente encriptados, lo primero que se intenta es descifrar y ver qué hay dentro.

Así que, en general, es mejor obtener un host que pueda garantizarle HIPAA o PCI-DSS, como la confidencialidad de los datos, o hospedar los datos en un entorno en el que usted o su organización tienen control completo para poder asegurarlos a niveles aceptables. usted mismo.

    
respondido por el Fahad Yousuf 29.08.2013 - 22:24
fuente
2

Co-firma con @Xander y @Michael Hampton.

Esos esquemas de cifrado de código fuente se basan en ... una clave privada. Así que eso no resuelve su problema, simplemente lo mueve a otra parte.

La obtención de la clave de un servidor separado [1] tiene el mismo problema: necesita autenticarse en ese otro servidor y las credenciales de autenticación deben almacenarse en algún lugar del host compartido. Así que de nuevo, todo lo que has hecho es mover el problema un poco.

Puede almacenar la clave en la propia base de datos o en la memoria, ninguno de los cuales debe ser leído por otros usuarios en su host compartido a menos que aprovechen alguna vulnerabilidad para aumentar los privilegios [2]. En el caso del almacenamiento en memoria, esto requerirá que se conecte a la aplicación cada vez que se reinicie y proporcione la clave de forma remota, lo que requeriría una conexión segura.

No tengo idea de cómo son las leyes en su país [e IANAL], pero desde un punto de vista puramente ético, nunca recibiría información personal de salud en un establecimiento de alojamiento compartido no acreditado . Usted podría ser capaz de llevarlo a cabo; Incluso podría cumplir con las leyes y regulaciones locales, pero nunca sería muy seguro.

También se ha topado con un problema mucho más grande en general: incluso el mejor cifrado es tan fuerte como la seguridad de las claves privadas involucradas. Incluso en un entorno de alojamiento dedicado, una vulnerabilidad en su aplicación puede permitir que un atacante recupere la clave, y usted también es vulnerable a cualquier persona que tenga acceso físico al servidor, como cualquiera de los empleados de su proveedor de alojamiento.

Incluso si la clave es perfectamente segura, aún debe pensar cómo su aplicación maneja los datos después de que se descifre. ¿Sus controles de acceso aseguran que los usuarios solo vean la información para la que están autorizados? ¿Sus controles de seguridad evitan o mitigan el riesgo de que un atacante secuestre una sesión autorizada y luego la use para fines no autorizados?

Las respuestas a estas preguntas dependen, en parte, de los requisitos legales en los que está operando.

  1. Presumiblemente, el otro servidor no está no en un host compartido, de lo contrario, ¿qué beneficio tiene esta separación? Pero si tiene acceso a un host no compartido, ¿por qué está alojando su aplicación en un host compartido en primer lugar?
  2. La escalada de privilegios parece fuera del alcance de la pregunta que está haciendo.
respondido por el Mark E. Haase 30.08.2013 - 18:21
fuente

Lea otras preguntas en las etiquetas