¿Cuáles son los mejores algoritmos contra el ataque de texto simple conocido?

0

También me gustaría cifrar los archivos y sus metadatos. Se almacenarán en algún tipo de base de datos (aún no se ha decidido, probablemente pgsql). Los metadatos pueden ser, por ejemplo, el tiempo de creación, el tiempo de modificación, etc., por lo que es muy fácil de adivinar, por ejemplo. una cadena de fecha y hora o una marca de tiempo. Afaik esto hace que encontrar la llave con fuerza bruta sea más fácil. Dado que habrá muchos archivos cifrados con la misma clave, me preguntaba qué algoritmo podría ser el mejor para cifrar los archivos y los metadatos.

También pensé en soluciones alternativas, por ejemplo, almacenar la cadena datetime en un formato JSON junto con un valor aleatorio:

{
    modificationTime: "2017-11-18 03:54:11",
    bik2rbfih2ofbskblwbf: "sdfgjhln2rh9328hogolwesgn"
}

Siguiendo esta línea de pensamiento, podría agregar todos los metadatos a una sola columna, por lo que sería aún más difícil de adivinar, pero por otro lado también sería más difícil de consultar.

{
    label: "blah",
    description: "blah blah",
    tags: [1,2,3,4,5],
    modificationTime: "2017-11-18 05:21:11",
    creationTime: "2017-11-18 03:54:11",
    sfbik2rbfih2ofbskblwbf: "sdfgjhln2rh9328hogolwesgn"
}

Otro pensamiento fue cifrar los metadatos y los datos reales con claves diferentes. ¿Alguna sugerencia, mejores prácticas en el tema?

    
pregunta inf3rno 18.11.2017 - 04:22
fuente

1 respuesta

3

Respuesta corta: Cualquier cifrado simétrico considerado seguro moderno está bien. Simplemente use AES con un modo de operación seguro, como CBC o GCM.

Los ataques de texto plano conocidos son una parte estándar del análisis criptoanalítico; cualquier cifrado que sea incluso más débil que el de los demás se considera comprometido criptográficamente.

Respuesta más larga: este es un excelente riesgo a considerar, pero estás haciendo la pregunta equivocada. Dejando a un lado el por qué (es decir, ¿por qué está intentando desplegar su propio esquema de encriptación de datos, cuando ya existen muchos? ), probablemente debería considerar dónde se asume que

  

Esto hace que sea más fácil encontrar la clave con la fuerza bruta

viene de. Incluso si HMAC los datos con una clave diferente (no es posible si utiliza un esquema de cifrado autenticado como AES-GCM), si usted tiene alguna forma de determinar una clave correcta de una incorrecta (como una hash de la clave, o del texto sin formato, o simplemente porque supones que si se descifra en JSON sintácticamente válido, la clave probablemente sea la correcta), un atacante puede hacer lo mismo. Se puede suponer que ser capaz de validar casi instantáneamente la corrección de la clave correcta siempre es el caso.

La dificultad de la criptografía moderna de fuerza bruta no se debe a que no tenga un texto plano parcial en los sistemas que lo usan, o porque es difícil saber cuándo adivinó la clave correcta. Es porque el espacio de claves es tan grande que, si construyó un centro de datos completo lleno de hardware de primera línea que no hizo nada más que intentar un ataque distribuido para forzar una sola clave AES de 128 bits y podría funcionar para siempre, las máquinas en ese centro de datos serían absurdamente poco probables de adivinar la clave correcta antes de que el sol se expanda para tragar la tierra.

Por cierto, eso no es una hipérbole; la intuición humana es realmente mala en los números grandes, y 2 ^ 128 es un número extremadamente grande. Digamos que coloca un millón de CPU (OK, 2 ^ 20) en el hardware en ese centro de datos. Supongamos además que cada uno de ellos puede verificar 32 mil millones (2 ^ 35) de claves posibles por segundo (lo cual es más rápido que incluso las mejores CPU modernas de productos básicos aceleradas por hardware que conozco, pero tienes un hardware personalizado elegante) . Eso significa que todo su centro de datos puede verificar 2 ^ 55 (aproximadamente 32 cuatrillones) de claves posibles por segundo. Súper rápido, ¿verdad? A esa velocidad, y suponiendo que en promedio solo tiene que buscar la mitad del espacio de teclas, necesitará (2 ^ 127) / (2 ^ 45) = 2 ^ 82 segundos para tener una probabilidad del 50% de encontrar la clave.

Se espera que el sol trague la tierra en aproximadamente 7.6 billones de años (más o menos unos miles de milenios). En segundos, eso es 2.4x10 ^ 17, también escrito como 2.4e17. Tome el logaritmo base 2 de ese número y obtendrá un poco menos de 58. 2 ^ 82/2 ^ 58 es 2 ^ 24, o aproximadamente 16 millones. Sería aproximadamente una sexta millonésima parte del porcentaje realizado.

Además, no es parte de su pregunta, pero: está tomando en cuenta la integridad (detectando la manipulación del texto cifrado, que la mayoría del cifrado brinda poca o ninguna protección) y también genera vectores de inicialización únicos para sus archivos, ¿verdad? Hacer criptografía a la derecha es difícil. Ya hay (toneladas de) programas que hacen cifrado simétrico de archivos (u otros blobs de datos).

    
respondido por el CBHacking 18.11.2017 - 06:00
fuente

Lea otras preguntas en las etiquetas