Es probable que esté duplicado, pero no puedo averiguar las palabras clave correctas para la búsqueda. Puedes ayudar simplemente diciéndome esas palabras, soy bastante bueno con Google :)
Quiero desarrollar algo así como el almacenamiento de archivos con cifrado de cada archivo. Solo hay un usuario y todos los datos (y el código) se almacenan en su máquina local. El usuario puede importar algunos archivos y leer los que se importaron anteriormente.
Requisitos
El vector de ataque principal es lectura de datos no autorizada . No es necesario protegerse de la importación ilegal de archivos.
Además, me gustaría implementar negación plausible . Se verá así: hay dos unidades de almacenamiento, una de ellas está encriptada con una contraseña vacía y está bien exponer su contenido a cualquier persona. Se utiliza para ocultar el hecho de que hay algo oculto. Solo un escudo adicional.
La clave en la que se basa la seguridad de todo el sistema es que la contraseña del usuario se almacena solo en su cabeza, i. mi. programable (a menos que haya keylogger, software telepático o satélite con cámara de alta resolución que lo pueda ver escribiendo).
Implementación
Por ahora he terminado con el siguiente esquema.
-
La contraseña del usuario es una clave para cifrar / descifrar la (s) contraseña (s) de nivel 2 generadas aleatoriamente. Se utiliza código simétrico (por ejemplo, AES que se considera seguro por el momento).
-
La criptografía de nivel 2 es asimétrica. La clave de cifrado (pública) se utiliza al importar archivos no cifrados de fuentes externas. La clave Decription (privada) se utiliza para leer archivos. Como los algoritmos asimétricos son lentos, estas claves se utilizan realmente para proteger la clave de sesión (única para cada archivo). La clave privada está disponible en la memoria como texto simple solo cuando se encripta la clave de sesión.
-
El nivel 3 usa criptografía simétrica, AES nuevamente o algún cifrado de flujo seguro (solo en el caso de un rendimiento mucho mejor porque se prefiere la seguridad). Se utiliza para cifrar / descifrar realmente el contenido del archivo.
Finalmente lo has leído hasta el final :) Aquí están las preguntas:
-
¿Cómo simplificar este esquema sin dañar la seguridad?En resumen: eliminar el nivel medio. Sin embargo, todavía tengo que usar dos niveles, para evitar la fatiga por cipher / enthropy agotador y para satisfacer mi paranoia :)
-
¿Cómo mejorar su seguridad? Sé que hay errores aquí, crypto es una cosa difícil.Muchas gracias a @DeerHunter por señalar posibles fallas.
-
¿Qué buscar en google y leer sobre esto? No hay cosas fundamentales como Shneier, por favor :)Bueno, tengo suficientes términos y conceptos para sumergirme. Por ahora, al menos.
-
Todavía no estoy seguro de si debo usar claves asimétricas (en el nivel uno). Pensé que ayudaría a dividir los riesgos: la clave de descifrado (privada) se genera como texto sin formato solo por un momento, mientras que la clave de encriptación (pública) puede ser expuesta a todos. Pero en comparación con los syphers simétricos, todavía tengo una clave para asegurar en la RAM, y hay una clave (pública) adicional de la que preocuparse.
EDIT1 . No no quiero diseñar mi propio estándar, está más allá de mi conocimiento. Voy a usar cosas que se demuestren seguras cuando sea posible. P.ej. Lo que haré solo es combinar varias clases de Crypto ++ para trabajar en conjunto. Solo necesito el diseño adecuado para hacerlo. Por ahora no creo que el cifrado de disco completo sea adecuado en mi caso. He pensado en TrueCrypt, etc., pero no permite ocultar la presencia de los datos cifrados. Preferiría una solución (protocolo criptográfico o protocolo) para el cifrado por archivo.
EDIT2 . Se reorganizó el texto para dividir los requisitos y la implementación, se agregaron requisitos de plausibilidad denegable.
EDIT3 Queda una pregunta más sobre la criptografía asimétrica.