¿Cuál es la mejor manera de cifrar un objeto JSON en Java?

0

Tengo una matriz JSON:

JsonArray people;

Que contiene objetos JSON que representan personas.

Actualmente los estoy guardando como texto sin formato en un archivo json .

try {
    OutputStream out = new FileOutputStream('storage.json');
    JsonWriter writer = Json.createWriter(out);
    writer.writeArray(people);
    writer.close();
} 

Sin embargo, quiero que estos archivos estén encriptados para que no tengan ningún valor sin la clave para descifrarlos.

¿Cuál es la mejor manera de hacer esto? ¿Debo cifrar el objeto de la matriz JSON o solo puedo cifrar la matriz completa antes de escribirla? ¿Cuáles son las funciones criptográficas de Java más recomendadas que debo usar para hacer esto?

    
pregunta Curious1 08.12.2015 - 07:41
fuente

2 respuestas

3

Hay muchas maneras de hacer esto.

Yo cifraría el JSON en un nivel de archivo completo en lugar de cifrar el contenido dentro de él. La alternativa es complicada y no proporciona ninguna ventaja de seguridad significativa. Recomiendo usar un cifrado AEAD (mi recomendación actual es AES-256 con GCM: también conocido como AES / GCM / NoPadding con claves de 256 bits). Para usar GCM necesitas estar en Java 8 o posterior. Para utilizar AES-256 con un JRE de Oracle, necesitará la Extensión de criptografía de Java (JCE ) Archivos de política de jurisdicción de fuerza ilimitada instalados como se documenta.

Debe asegurarse de configurar la etiqueta de autenticación para que incluya información sobre la ubicación y el uso (el verdadero nombre de archivo es un buen comienzo) para dificultar el cambio de nombre o la sustitución por otras versiones (una forma de ataque de repetición en reposo).

Sin embargo, cifrar el contenido JSON no es una solución completa. Solo mueve la pelota un poco. Si el atacante aún tiene acceso de texto simple a la clave privada, entonces no será efectivo.

Para proteger el texto plano de la clave privada, puede usar un KMS (Servicio de administración de claves) en un sistema separado. Eso mantiene la clave privada fuera del acceso a la memoria en la máquina con el archivo JSON cifrado. Usted envía el contenido del archivo cifrado al KMS para ser descifrado en la carga o viceversa en la tienda.

Con los implementados, puede proteger el archivo de forma efectiva contra ataques fuera de línea (por ejemplo, análisis de imagen de disco, análisis de imagen de máquina, robo de copia de seguridad, robo de medios). Sin más defensas, el contenido del archivo aún está sujeto a ataques en línea de la memoria de la máquina.

    
respondido por el Alain O'Dea 29.12.2015 - 03:58
fuente
0

Es mejor cifrar todo el archivo, luego escribir en el archivo normalmente. Lo mismo para la lectura. Aquí hay un ejemplo en stackoverflow.

enlace

    
respondido por el Robert Jacobs 29.12.2015 - 21:13
fuente

Lea otras preguntas en las etiquetas