¿Cuáles son los pasos recomendados para crear un formato de archivo cifrado? [cerrado]

1

Estoy desarrollando un programa bastante estándar que permite a los usuarios guardar su trabajo en un formato de archivo personalizado y volver a abrirlo más tarde. Ahora me gustaría agregar la capacidad de cifrar el archivo con una contraseña definida por el usuario y me pregunto qué pasos tomar y qué tecnologías usar.

Por lo que he leído sobre el tema, creo que necesito alguna forma de obtener una clave de cifrado a partir de la contraseña, así como algún algoritmo de cifrado simétrico que se usará para cifrar el contenido del archivo relevante. Es necesario que haya datos no cifrados en el archivo por necesidad (número mágico / versión, parámetros de cifrado / sales / IV), así como alguna forma de verificar que esos parámetros no cifrados no se hayan manipulado. Finalmente, al descifrar el archivo necesitamos alguna forma de verificar que la contraseña ingresada sea correcta, sin introducir un posible vector de ataque.

Entonces, ¿qué pasos debo tomar para lograr esto?

¿Qué tecnologías debo usar?

¿Cuál debería ser el diseño general del formato de archivo?

El resultado debe ser lo suficientemente seguro para los estándares de hoy en día para una audiencia objetivo de usuarios privados y pequeñas empresas.

    
pregunta Askaga 06.06.2016 - 11:59
fuente

2 respuestas

2

Todo depende de ti. En Java, por ejemplo, hay bibliotecas ( las funciones criptográficas no deben implementarse desde cero ) para el cifrado AES que le permiten usar este cifrado para cifrar un flujo de bytes con una clave determinada y IV. Muy a menudo, incluso cuando usas bibliotecas, aún te quedan los problemas que mencionaste:

  • ¿Dónde debería almacenarse la metainformación? (Versión, nombre del archivo original, ruta original, etc.).
  • ¿Dónde deben almacenarse los parámetros de cifrado?
  • Dónde almacenar IVs
  • Dónde almacenar la sal

Realmente depende de la aplicación que estés creando. Consideraría almacenar la información esencial (IV, sal) dentro del archivo cifrado en un encabezado personalizado . La incorporación de información esencial dentro del archivo tiene la ventaja de que todo lo que necesita para descifrarlo es el propio archivo cifrado y la clave.

También puede colocar la metainformación dentro del encabezado, o si su aplicación lo requiere, almacenarla en una base de datos externa. Debido a que la metainformación no es esencial, los archivos cifrados aún pueden ser descifrados incluso si la base de datos se corrompe o se pierde.

  

Es necesario que haya algunos datos sin cifrar en el archivo por necesidad   (número de versión / magia, parámetros de encriptación / sales / IV) así como   alguna forma de verificar que esos parámetros no encriptados no han sido   manipulado.

No estoy seguro de por qué exactamente lo necesita, pero podría reservar espacio adicional en su encabezado personalizado para una suma de comprobación calculada sobre los parámetros de cifrado IV +. De esa manera siempre se podría decir si los parámetros fueron modificados. Sin embargo, no puede restaurar un IV corrupto, por ejemplo, al menos no sin fuerza bruta.

  

El resultado debe ser lo suficientemente seguro para los estándares de hoy para un objetivo   audiencia de usuarios privados y pequeñas empresas.

Si su algoritmo de encriptación se considera seguro y usted está manejando las contraseñas de usuario correctamente (¡esta es la advertencia más grande!), entonces no hay mucho que pueda hacer mal con el formato de archivo. Los parámetros de IV, sal y cifrado pueden hacerse públicos (leer: almacenado en texto plano). Esto no debería tener un impacto en la seguridad del cifrado elegido.

    
respondido por el Cat 06.06.2016 - 14:03
fuente
0

Le recomendé que use una biblioteca de compresión probada con el tiempo que sea capaz de un cifrado sólido (AES-128/256) para envolver todo su archivo.

La razón es que los diseñadores de esos formatos de archivo ya han evaluado posibles vectores de ataque y los han incorporado en los requisitos de formato. Las bibliotecas que implementan esos formatos tienen, por lo tanto, un estándar mínimo para cumplir. Es probable que las implementaciones también hayan recibido mucho escrutinio.

Si el lenguaje de programación que está utilizando no tiene una biblioteca de buena reputación que se ajuste a la descripción anterior. Siempre puede descascarar una utilidad de línea de comando externa y pasar los datos utilizando tuberías. Puede mantener la extensión del archivo igual y usar números mágicos para verificar si es necesaria la descompresión.

    
respondido por el billc.cn 06.06.2016 - 17:00
fuente

Lea otras preguntas en las etiquetas