Estoy desarrollando un software que maneja datos confidenciales de privacidad en un entorno de red local, usando computadoras Mac , a las que solo puede acceder un grupo selecto de personas.
Necesito entender cómo puedo proporcionar acceso seguro y personalizado a los (mismos) datos de cada persona autorizada.
Los datos se almacenan en una base de datos SQL (actualmente en Sqlite, pero posiblemente en Postgresql) y se cifrarán en el archivo de la base de datos. El motor de base de datos podrá descifrar los datos para que pueda buscarlos sin esfuerzo, es decir, no quiero ya cifrar los datos en el extremo del cliente.
Con eso, creo que al abrir la base de datos, se debe proporcionar una clave de descifrado , ya que la base de datos no puede gestionarla por sí sola. Lo que significa que las computadoras que acceden al servidor deben conocer la clave. Por lo que he aprendido hasta ahora, esto se hace así:
Cada usuario autorizado tiene una contraseña; esa contraseña se utiliza para crear un código hash. El código hash se usa para cifrar y descifrar los datos secretos, en este caso la clave de la base de datos. Esto significa que para cada cuenta de usuario que cree, tengo que cifrar la misma clave de DB con la contraseña del usuario.
Además, para evitar que las personas revelen sus contraseñas con demasiada facilidad, se utilizará una clave física para autenticar a cada usuario . Algún sistema de tarjetas de acceso, probablemente.
No conozco ningún sistema de tarjeta de acceso ni he investigado ningún sistema de autenticación (p. ej., sospecho que Kerberos tiene algo que ver con eso, pero nunca lo he utilizado, por lo que mi nivel de "experiencia" es en esta área) .
Mis preguntas son:
¿Cómo funciona la autenticación con una tarjeta de acceso ? ¿Cuál es el resultado que obtengo del lector de tarjetas para poder autenticar a un usuario con él? Después de todo, tengo que terminar con un código hash para descifrar los datos cifrados de ese usuario.
¿Qué tipo de tarjetas para Mac hay que puedo usar para la autenticación de usuario personalizada en mi escenario? ¿Supongo que necesito algo que viene con un conjunto de tarjetas programables? En el peor de los casos, me imagino que puedo usar cualquier sistema de tarjeta basado en USB siempre que su API de nivel de USB esté documentada públicamente (en el pasado logré escribir controladores USB para Mac). Pero ni siquiera sé qué buscar. ¿Cómo se llaman los sistemas que debo buscar? Me he topado con RSA, por ejemplo, pero ni siquiera puedo decir si es adecuado para mi propósito desde su sitio web centrado en el marketing.
-
Acabo de enterarme de las etiquetas RFID: prácticamente son tarjetas con un UUID fijo. Eso no va a funcionar ya que pueden ser escaneados y replicados fácilmente, creo. Así que prefiero algo que realmente esté ejecutando una pequeña CPU en el interior, para realizar algún proceso secreto de respuesta-desafío. Como alguien señaló, eso sería "tarjetas inteligentes", supongo ahora.
Actualización 1
Tuve algunas ideas adicionales sobre el uso de tarjetas RFID. Si bien se pueden copiar fácilmente, puedo combinarlos con hacer que el usuario ingrese una contraseña personal, luego use la ID única de RFID con la contraseña para crear un código hash que luego uso para descifrar la clave de cifrado de la base de datos. Por lo tanto, un atacante necesitaría dos cosas: la tarjeta y la contraseña del usuario, lo cual es una protección suficiente en mi caso. ¿Tiene sentido esa técnica?