Tengo una idea para una aplicación que podría ser útil (aunque si no lo es, todavía aprendí en el proceso, que es lo que importa).
Hay un montón de aplicaciones web de pastebin encriptadas (por ejemplo, defuse.ca/pastebin.htm) que realizan el cifrado / descifrado en el cliente mediante JavaScript. Para lograr el cifrado de extremo a extremo, A MENOS QUE alguien piratee el servidor y modifique el JavaScript para que los futuros usuarios que se conecten obtengan un código JavaScript modificado que filtre su contraseña no cifrada al hacker.
Mi idea es que el usuario debe interactuar con una aplicación de cliente independiente en lugar de una aplicación de navegador para eliminar la vulnerabilidad de JavaScript.
- El usuario descarga la aplicación independiente del cliente. Se proporciona cierta seguridad durante la descarga / instalación porque: a. La aplicación del cliente está firmada digitalmente segundo. Las descargas se realizan desde un servidor https do. SHA hashes están disponibles para archivos descargados re. El código fuente de la aplicación cliente está disponible
- El usuario inicia la aplicación y selecciona "nueva pegar". Él ve un cuadro de texto grande.
- El usuario escribe / pega texto y hace clic en "Enviar". Al usuario se le solicita una contraseña y la ingresa.
- La aplicación de cliente CSPRNG genera sal S. de 128 bits.
- La función de derivación lenta toma la contraseña y S y deriva la clave K de 256 bits y el vector de inicialización IV de 128 bits.
- Se realizó el cifrado Aes (tamaño de bloque de 128 bits, clave de 256 bits, modo CBC, relleno PKCS7) utilizando texto sin formato, K y IV para producir Cyphertext C.
- La aplicación del cliente llama al servidor (reste la llamada a https uri) y le pasa S y C.
- El servidor almacena S y C en una fila de la base de datos (S es la clave principal).
- El servidor le dice al cliente que los datos están almacenados. El cliente le dice al usuario "datos guardados" y presenta S al usuario como el identificador único de pegado.
- El usuario toma una nota de S (archivo de texto en su computadora, correo electrónico a sí mismo, etc ... no tiene que mantenerse en secreto). La contraseña debe mantenerse en secreto.
- Más tarde, el usuario vuelve a iniciar la aplicación cliente.
- Él elige "abrir pasta existente". Él ingresa S y selecciona encontrar.
- La aplicación del cliente le pide al servidor que encuentre una S que coincida con el pegado (llamada restante a https uri). Si lo hace, devuelve el texto cifrado.
- Si se encuentra pegar, la aplicación cliente solicita al usuario la contraseña de descifrado. Él lo escribe.
- La función de derivación lenta toma la contraseña y S y deriva la clave K de 256 bits y el vector de inicialización IV de 128 bits.
- Se realizó el descifrado Aes (tamaño de bloque de 128 bits, clave de 256 bits, modo CBC, relleno PKCS7) usando texto plano, K y IV para producir texto plano.
- La aplicación del cliente coloca texto sin formato en el cuadro. El usuario puede alterarlo y volver a cifrarlo o cerrarlo y hacer una nueva pegada (volver al paso 2).
Notas:
- Varios usuarios pueden ver el mismo pegado si: a. Acuerdan de antemano una contraseña o la contraseña se comunica del usuario 1 al usuario 2 después de que realiza el pegado, Y segundo. El usuario que hace el pegado comparte S con otros usuarios (esto puede ser compartido de forma insegura).
Preguntas:
- ¿Qué vulnerabilidades de seguridad tiene esta configuración y cómo podría mejorarse?
- ¿Me estoy perdiendo algo vital en términos de la experiencia del usuario?
- Re: Paso 17. Leí que nunca debes usar la misma sal dos veces. Sería molesto que el identificador de la pasta (S) cambie con cada modificación / reencriptación (si varios usuarios están accediendo a la misma pasta, deberían recomendar la nueva S cada vez que se realice una actualización / reencryption), pero es ¿Es inevitable hacer esto si no quiero sacrificar la seguridad?
Gracias de antemano!