Longitud de salida de encriptación Java AES

1

Estoy tratando de cifrar algunas columnas de base de datos (valores de cadena) utilizando el algoritmo AES de Java. Esto es para proteger ciertos datos sensibles. Para algunos usuarios, estos datos deberían ser descifrados.

En el cifrado AES de Java, si la longitud del carácter de entrada es 60, obtengo la longitud de cadena cifrada en 88.

Pero no quiero cambiar la longitud de los datos cifrados. Tenemos una gran cantidad de tablas y muchas aplicaciones están usando esas tablas. Queremos minimizar el impacto de cifrar ciertos campos en las tablas.

¿Hay alguna solución recomendada? O ¿hay algún algoritmo recomendado, ejemplo de código, etc.?

Gracias, Prabakaran N

    
pregunta Prabakaran 28.05.2014 - 12:33
fuente

3 respuestas

1

Lo que se describe en la pregunta es Formato que conserva el cifrado . Sin embargo, espere una curva de aprendizaje empinada y una grave falta de implementaciones listas para usar.

    
respondido por el Maarten Bodewes 22.06.2014 - 19:34
fuente
0

Dependiendo de la seguridad que está tratando de lograr, esto podría no ser posible: se necesita una cierta cantidad de expansión de salida para proporcionar protección contra ciertos ataques.

Considere el caso de una base de datos que almacena registros de salud en forma de una lista de enfermedades que afectan a una persona; también, considere que la "presión arterial alta" se cifra a 0x1234abcd utilizando AES "normal" (o cualquier cifrado de bloque) en Modo BCE . (El BCE tiene otros problemas además de ser determinista, pero me centraré en ese aspecto aquí).

Un atacante podría no saber el significado de 0x1234abcd, ¡pero puede identificar fácilmente a todos los pacientes que comparten ese registro!

Es posible que se produzcan ataques más elaborados si el atacante tiene acceso de escritura a la base de datos: podrían, por ejemplo, insertar enfermedades aleatorias, mirar los textos cifrados correspondientes y construir una tabla con correspondencias de texto cifrado de texto simple.

Esta es la razón por la que los cifrados en bloque se utilizan casi exclusivamente en un modo de operación que expande la entrada en cierta longitud: La expansión es (entre otras cosas) necesaria para permitir el cifrado de múltiples mensajes en una sola clave.

Dependiendo del contenido de su base de datos, el ataque mencionado podría o no ser un problema, pero en la mayoría abrumadora de todas las aplicaciones, es conveniente que el BCE use CCA-secure cryptosystem, que es necesariamente probabilístico, y por lo tanto también se extiende en longitud.

    
respondido por el lxgr 22.06.2014 - 19:48
fuente
0

Podría considerar usar un cifrado en el modo CTR, que esencialmente lo convierte en un cifrado de flujo. La longitud de salida debe ser igual a la longitud de entrada, pero aún debe crear un nonce único para cada registro. Si tiene un identificador único para cada registro, puede usarlo para generar su nonce para el contador. Tenga cuidado: usar el mismo nonce dos veces con la misma clave permite que un atacante trivialmente recupere el texto sin formato.

    
respondido por el David 23.06.2014 - 03:00
fuente

Lea otras preguntas en las etiquetas