2010-01-21 26 views
13

Estoy creando una aplicación con información de salud dentro. Esta aplicación estará orientada al consumidor y es nueva para mí. Me gustaría un método para poner las preocupaciones de privacidad completamente a gusto. Al revisar los métodos para proteger datos confidenciales en bases de datos de acceso público, con frecuencia he encontrado la noción de translucidez de la base de datos. Hay the original book sobre el tema y un excellent tutorial on the subject from Oriellynet.Bases de datos translúcidas

Mi preocupación es que he visto muy poca información con respecto a esta idea sobre lo que consideraría sitios de programación muy modernos (como este). No parece haber un artículo sobre la idea en wikipedia. No hay preguntas sobre el tema aquí, y no hay tutoriales o artículos muy recientes sobre el tema. Para ser súper breve, la idea es que ciertos datos sean claros para algunos usuarios del sistema, mientras que a otros usuarios se les impide criptográficamente el acceso a esos datos, incluso si tienen acceso de administrador.

He trabajado mucho en una base de datos prototipo que proporciona acceso translúcido a los datos. Me he topado con un problema considerable: para ser verdaderamente translúcido, no puede haber ningún mecanismo para la recuperación de contraseñas. Si un administrador puede restablecer una contraseña de usuario, entonces puede obtener acceso brevemente a los datos de un usuario. Para ser verdaderamente translúcido, el usuario nunca debe perder la contraseña.

Aquellos de nosotros que utilizamos cifrado fuerte para proteger los datos privados en nuestra vida cotidiana (technorati para estar seguro) estamos acostumbrados a este problema cuando usamos este tipo de sistemas de encriptación fuertes. Si la palabra "pez globo" es parte de su léxico diario, eso es una cosa, ¿pero un sitio web enfocado en el consumidor? Me preocupa el hecho de que los usuarios no estén dispuestos a concentrarse en la noción "verdaderamente encriptada solo para ustedes" implícita en la verdadera translucidez de la base de datos. Tengo miedo de la llamada de soporte que comienza con "Perdí mi contraseña" y termina diciendo "No hay nada que pueda hacer por ti".

Mi pregunta: ¿Debo implementar este método en mi aplicación? ¿Hay otras aplicaciones de código abierto que hayan seguido esta ruta con las que pueda comparar diseños de bases de datos (especialmente utilizando php/MySQL)? ¿Alguien más persigue este tipo de conjuntos de características realmente seguros, pero realmente inconvenientes? ¿Hay otro modelo de seguridad de base de datos que sea más popular y moderno que me he perdido? ¿Era la translucidez de la base de datos una moda pasajera o un método legítimo de diseño de bases de datos que debería adoptar? Aunque siempre aprecio la discusión, preferiría respuestas objetivas que pueda aprovechar en mi diseño.

Respuesta

1

Re: bases de datos translúcidas. Podrías, supongo, usar huellas dactilares. ¿Qué pasa con las víctimas de quemaduras o las personas que terminan perdiendo sus huellas dactilares? Oops. ¿Vale la pena ese pequeño porcentaje de usuarios?

Familiarícese con HIPAA, especialmente en lo que respecta a la tecnología. Recuerda que ningún sistema es realmente seguro, excepto Skynet *, ¡y mira lo que pasó con eso! Los humanos están a cargo. Cuando trabajas en una compañía médica, firmas una NDA que indica que no divulgarás la información que aprendes como parte de tus tareas porque es confidencial. Habrá alguien para restablecer las contraseñas de las personas. Así es, porque no todos son tecnológicamente competentes, y así son las cosas por el momento. Solo tiene que implementar seguridad, como bien dice HIPAA.

  • En verdad, hay otro sistema verdaderamente seguro: se desenchufa de la red y de la electricidad, y se apaga.
+0

Me estremezco al pensar en un sistema que está desconectada de la red y de la electricidad, pero todavía está encendido. – Amy

+0

Estaba pensando en una computadora portátil, pero la imagen de una computadora inteligente cruzó por mi mente. – Trevoke

+0

Si todavía hay alguien que piensa que una computadora que está desenchufada de la red es segura, probablemente todavía no haya visto a estos tipos: http://lasecwww.epfl.ch/keyboard/ – ercan

2

¿Debo implementar este método en mi aplicación? Bueno, como otras cosas en la vida, hay una compensación :) Es probablemente más seguro, pero más difícil de construir.

¿Existen otras aplicaciones de código abierto que hayan seguido esta ruta con las que pueda comparar diseños de bases de datos (especialmente utilizando php/MySQL)?

No sé, supongo que las herramientas están ahí para hacerlo usted mismo :)

Hay alguien más la búsqueda de este tipo de verdaderamente seguro, pero realmente un inconveniente conjuntos de características?

Sí, pero parece que todavía está en un estado inmaduro, como su problema que describe con respecto a las contraseñas perdidas.

¿Existe otro modelo de seguridad de base de datos que sea más popular y moderno que me he perdido?

Básicamente hay dos tipos de conexiones de bases de datos. Una opción proporciona a los usuarios una cuenta de base de datos real, la otra es usar el inicio de sesión único en la base de datos. Antes de que apareciera la web, había defensores de ambos modelos en el mundo cliente/servidor, pero entre los desarrolladores web, el método de inicio de sesión único es líder.

¿Era la translucidez de la base de datos una moda o un método legítimo de diseño de bases de datos que debería adoptar?

no lo creo, la base de datos de contraseñas de UNIX, por ejemplo, es un gran ejemplo de una base de datos básica translúcida;)

aquí algo para leer link text

+0

punto excelente con respecto a la base de datos de contraseñas de Unix. ¿Tiene más información sobre el problema del "inicio de sesión único" que mencionó? Gracias, -FT – ftrotter

7

lo tanto, he estado buscando en algo similar a esto recientemente, y tocó el mismo tema. La solución que estoy considerando implementar es la siguiente:

  • Al registrarse, cree una clave única (segura) para el usuario y úsela para cifrar sus datos.
  • Encripte esta clave con la contraseña del usuario, p. AES y almacenarlo en la base de datos.

En este punto, aún se encuentra en una situación en la que, si el usuario olvida su contraseña, la ha tenido.

  • Cree un par de claves pública/privada que represente a su organización y almacene la clave pública en el servidor.
  • Divida la parte privada de la clave en varios componentes y dele a cada uno personas (por ejemplo, directores de su empresa) que tengan una participación significativa (preferiblemente financiera) en el éxito continuo de su empresa. Haga esto para que dos o tres personas se reúnan y restablezcan la clave privada completa cuando sea necesario. Cifre la clave de cada persona con su propia contraseña.
  • Cuando un usuario se registra, además de encriptar su clave con su contraseña, encriptarla con la clave pública de la organización y almacenarla en algún lugar.
  • Cree un formulario de restablecimiento de contraseña que registre una solicitud para restablecer la contraseña de un usuario, junto con alguna prueba de que el usuario es quien dice ser (por ejemplo, desafío/respuesta).
  • Registre estas solicitudes de restablecimiento (opcionalmente encriptadas utilizando la clave pública nuevamente) en la base de datos.
  • Una vez por hora/día/semana/mes, obtenga los titulares de llaves necesarios juntos, y use sus claves combinadas para procesar las solicitudes de restablecimiento acumuladas, descifrando las claves de los usuarios que demostraron con éxito que son quienes dicen ser.

Hay muchos desafíos y consideraciones en esto. Tengo algunas ideas sobre la mayor parte de estos, pero estaría interesado en otras opiniones también:

  • cómo dividir la clave de seguridad entre varias personas para que una sola persona no puede descifrar las claves almacenadas.
  • Cómo minimizar el número de claves que quedarían expuestas si las "llaves maestras" cayeran realmente en las manos equivocadas.
  • Cómo cerciorarse de que (no lo permita el cielo) sus titulares perdieron sus llaves, entonces (a) no hay riesgo de exposición de los datos, y (b) no hay riesgo de que de repente se pierda la posibilidad de restablecer contraseñas Siempre.
  • Cómo validar con éxito que alguien realmente es quien dice ser sin hacer de esto un agujero evidente en todo su enfoque de seguridad.

Cualquier cosa que implemente en esta área REDUCIRÁ la seguridad del enfoque de la base de datos translúcida, sin lugar a dudas, pero esto puede ser un compromiso que valga la pena dependiendo de la naturaleza de sus datos.

+0

Gran respuesta. Me pregunto si tu método depende de las personas, que generalmente son transitorias. Tal vez alguien podría configurar un "Servicio de restablecimiento de contraseña" que proporcionaría algo similar a lo que sugiere, pero con una API simple. Por ejemplo. ¿Qué sucede si tengo un servicio que publicó su clave pública, que permite cifrar contraseñas/claves para el almacenamiento externo, junto con una API que determinaría los pasos que su usuario tendría que pasar para que el servicio use la clave privada para descifrar la contraseña ... Por ejemplo, responda un mensaje de texto en un número de teléfono específico ... etc etc. – ftrotter

+0

@Paul, ¿alguna vez implementó lo anterior? Es curioso saber las decisiones de diseño que ha tomado. Tengo un problema similar con muchos de los mismos problemas potenciales. Sería interesante obtener una actualización. –

+0

@BillEisenhauer, lo siento, no, no. Nunca llevé ese proyecto más allá de la etapa conceptual al final debido a que necesitaba más tiempo/energía/dinero del que tengo disponible en este momento. Feliz de hablar más si quieres discutir más ... Aunque no estoy seguro de cómo hacerlo mejor en SO? –

Cuestiones relacionadas