¿Debo almacenar el vector salt y de inicialización de mi contraseña cifrada como texto sin cifrar?

1

Estoy cifrando algún archivo con AES-256-CBC, y estoy planeando almacenar el texto cifrado en un archivo json, con algo como:

{
    "data": "0123456789ABCDEF...",
    "salt": "00123ABCAABBCCDD...",
    "iv": "000111ABCCBBCCDDFD..."
}

Luego, cuando leí el archivo nuevamente, deserialicé los datos, y luego usé el salt para rederir la clave y el iv para descifrar el archivo. ¿Se recomienda / asegura esta forma de almacenamiento?

Tenga en cuenta que los datos no son enormes. Es apenas un poco de texto, por lo que no me importa si la serialización aumentó el tamaño de los datos.

¿Por qué no solo los concatené en forma de bytes? Porque quiero tener compatibilidad con versiones anteriores en el futuro al agregar más metadatos en el archivo json, como la versión, etc.

¿Por qué no escribo los datos en json como bytes? porque no puedo garantizar que el texto cifrado no tenga caracteres ASCII que puedan romper mi archivo json, como " , para ejemplo.

    
pregunta The Quantum Physicist 22.04.2018 - 12:20
fuente

1 respuesta

0

Suponiendo que no le importa la eficiencia, entonces el único problema real es que está usando el modo CBC que es no autenticado . No hay ningún problema criptográfico con el almacenamiento de valores que no se deben mantener en secreto en ninguna codificación arbitraria, ya sea hexadecimal, base64 o uuencode. De hecho, el nuevo formato LUKS2 para el cifrado de disco hace exactamente esto, almacenando el cifrado Datos relacionados con JSON.

Probablemente deberías usar base64, porque el hex es innecesariamente ineficaz.

    
respondido por el forest 22.04.2018 - 12:22
fuente

Lea otras preguntas en las etiquetas