Tengo un almacenamiento externo en el que deseo almacenar archivos encriptados.
Estrategia # 1:
- El nombre de cada archivo y carpeta es AES cifrado con su propia clave de datos
- Todas las claves de datos se guardan en un solo archivo datakeys.json en el mismo almacenamiento ubicación como todos los archivos cifrados.
- El archivo datakeys.json está encriptado AES usando una clave principal.
- La clave principal se cifra mediante la clave pública RSA de un usuario.
Estrategia # 2:
-
El nombre de cada archivo y carpeta es AES cifrado con su propia clave de datos
-
Cada clave de datos única se cifra con una clave principal y se almacena junto al archivo
-
la clave principal se cifra con la clave pública RSA del usuario y se almacena fuera de la ubicación de almacenamiento
Compartir :
-
Cuando quiero compartir los archivos con otro usuario, cifro la página principal clave utilizando la nueva clave pública RSA de los usuarios.
-
Se puede revocar su acceso a los usuarios eliminando su clave principal cifrada RSA personal. También su token de acceso (oauth) se revoca a la ubicación de almacenamiento. Datakeys.json solo se carga en la memoria cuando la aplicación se ejecuta por primera vez, y se elimina cuando se cierra.
-
El usuario tiene acceso a todos los archivos y carpetas en la ubicación de almacenamiento, no es necesario compartir archivos a nivel
-
Los usuarios pueden descifrar los nuevos elementos agregados al almacenamiento externo al obtener una versión actualizada del archivo datakeys.json.
Problemas de seguridad
- Mi principal preocupación es el archivo datakeys.json que contiene TODAS las claves de datos para TODOS los archivos en la ubicación de almacenamiento.
- El atacante obtiene acceso a la ubicación de almacenamiento (robado o token de acceso) y de alguna manera puede ver los archivos
- El centro de datos puede ver los archivos
El enlace más débil:
El enlace más débil (en el que puedo pensar) será el dispositivo del usuario, que almacenará su propia clave rsa privada. Si el dispositivo está comprometido, entonces la ubicación de almacenamiento puede ser descifrada. Este es un riesgo aceptable.
Cada usuario solo será un pequeño grupo de confianza, por lo que si de alguna manera almacenan la clave principal después de que se les revoque el acceso, eso debería estar bien (no podrán acceder al almacenamiento externo de todos modos porque su token de acceso a la verdad tendrá) también se revocaron), o tal vez las claves de datos deberían volver a cifrarse con una nueva clave principal al revocar el acceso de nuevos usuarios (esto podría no tener sentido, ya que el usuario puede haber guardado las claves de datos en caché).
Otro enlace débil (creo) es almacenar todas las claves de datos en un único archivo json encriptado (estrategia # 1) en el almacenamiento externo. Si ese archivo está comprometido, todo el almacenamiento externo puede ser descifrado. Alternativamente, el archivo json de las claves de datos se puede almacenar en un servidor seguro diferente y se puede acceder a través de una API. Creando una separación entre el almacenamiento externo y las claves de datos json.
¿Algún consejo?