Compartir de forma segura las contraseñas entre usuarios [cerrado]

0

Estoy escribiendo un proyecto para almacenar y compartir contraseñas de forma segura entre usuarios, he estado investigando sobre algoritmos de cifrado, CSPRNG, algoritmos de hash, estiramiento de claves, etc. ...

Solo quiero diseñar mi pensamiento sobre cómo usar todos estos, para crear la aplicación segura, y espero que alguien (s) pueda señalar nuestras fallas o dirigirme si estoy viendo las cosas mal:

Hash

Primero que nada, necesito almacenar los hashes de las contraseñas de las cuentas (estas son las cuentas que inician sesión en la aplicación para ver las contraseñas compartidas).

Después de leer alrededor, entiendo que para hacer un hash "más seguro", necesitas usar scrypt o bcrypt o pbkdv2. He encontrado una implementación de estos en "CryptSharp" (espero que esta sea una implementación segura), también después de una investigación adicional ( enlace ) parece que scrypt es una forma más segura de crear un hash.

Encriptación

Como los datos se compartirán entre los usuarios, tendré que asegurarme de que el sistema use una clave de cifrado maestra para todo el proyecto y que esta se almacene de forma segura.

Mi pensamiento aquí es generar una clave de cifrado y un vector de inicialización (3 de ellos, explicaré por qué): estos se generarán con RNGCryptoServiceProvider, y los 3 se concatenarán en Key1 | IV1 | Key2 | IV2 | Key3 | IV3 para que puedan dividirse y usarse con los algoritmos de cifrado.

Necesito alguna forma de almacenar esta cadena concatenada de IV y claves, así que después de algunas investigaciones encontré la API de protección de datos de Microsoft (ProtectedMemory.Protect (secreto, MemoryProtectionScope.SameLogon)). Mi entendimiento con esto es que el grupo de aplicaciones deberá ejecutarse bajo una cuenta de usuario y el "perfil de carga" establecido en verdadero. La cadena cifrada resultante se almacenará en un archivo de configuración XML.

Con respecto al cifrado de las contraseñas que se compartirán, leí sobre el cifrado en cascada (utilizado en TrueCrypt). Los algoritmos de cifrado que utiliza TrueCrypt son AES, TwoFish y Serpent. He encontrado una implementación de estos ( enlace - que, una vez más, espero que sea una implementación segura). Aquí es donde se utilizarán los 3 IV y las claves; de manera efectiva, los datos se cifrarán así: Serpiente (TwoFish (AES (datos, clave1), clave2), clave3).

¿Por qué?

Por lo tanto, estas son mis ideas para crear un sistema de almacenamiento de datos seguro; ¿Estoy mirando algo? ¿He entendido mal algo? ¿Debería estar haciendo algo más?

Agradezco cualquier consejo sobre esto.

    
pregunta binks 04.07.2014 - 09:51
fuente

2 respuestas

6

No inventes tus propios protocolos criptográficos. Es fácil idear todo tipo de ideas y combinar todo tipo de técnicas, pero hacerlo correctamente es excepcionalmente difícil y requiere mucha experiencia y extensas revisiones por pares. Esto no es algo que puedas hacer por tu cuenta en unos minutos, especialmente si no eres un criptógrafo.

Lo que confirma esta impresión es que pasas directamente a los detalles aleatorios de la implementación antes de que incluso hayas analizado el problema y hayas especificado el objetivo. ¿Cómo es relevante la característica de cifrado anidado en esta etapa temprana? Todo esto suena bastante caótico y vago.

Le recomiendo encarecidamente que primero tenga claro el panorama general y luego elija una solución establecida para este escenario específico.

    
respondido por el Fleche 04.07.2014 - 10:30
fuente
0

"Almacenar y compartir contraseñas de forma segura entre usuarios"

Esto solo requiere un fuerte algoritmo de hash y algún tipo de cifrado. La encriptación para hacerla ilegible y el hash para las verificaciones de integridad (además ayuda a almacenar, buscar y reducir los gastos generales al compartir a través de la red). Además, compartir el hash de tus contraseñas a través de un canal inseguro está mal visto, dado que se ha demostrado que el hashing más popular algo MD5 tiene colisiones.

La pregunta me pareció un poco vaga, pero aquí hay una foto que podría ayudar. Tendrá que planificar cómo se verá su sistema de almacenamiento. Los componentes separados, y modularizarlos de tal manera que cada capa tenga su propia seguridad que es independiente de los demás.

Mientras tanto, @Deer Hunter tiene razón. No reinvente la rueda, existen algos de encriptación robustos que puede usar y se han probado exhaustivamente.

    
respondido por el baconSoda 20.02.2017 - 14:53
fuente

Lea otras preguntas en las etiquetas