¿Es más fácil de descifrar AES cuando la entrada es pequeña? [cerrado]

3

Supongamos que solo desea cifrar un número. Por ejemplo, digamos que el número podría ser cualquier double . Un doble en C # y Java es de 8 bytes.

Si tuviera que cifrar un doble utilizando AES:

var cypherText = AES.Encrypt(123d); // 8 bytes
¿

sería trivial de romper? Si no, al menos sería significativamente más fácil de descifrar que el texto cifrado de una entrada más amplia:

var largeText = GetDeclarationOfIndependence(); // 6760 ascii characters, so 6760 bytes
var cypherText = AES.Encrypt(largeText);
    
pregunta user875234 11.09.2018 - 13:50
fuente

2 respuestas

3

No, a menos que ...

No deberían ser posibles las posibilidades de "fuerza bruta" a menos que proporcione un oráculo para que lo utilice un atacante.

En este caso, un oráculo le permite al atacante introducir tanto texto sin formato como desee en su encriptador y recibir una salida encriptada para verificar.

Si este es el caso, necesita salvaguardar sus datos, preferiblemente configurando un Vector de inicialización para un modo de cifrado de bloque como CBC o CTR ( use GCM si es posible ), y haciéndolo para que el IV es elegido por el oráculo (y no por el atacante).

Aunque realmente deberías estar haciendo esto de todos modos.

No creo que el enfoque de rellenar tus bloques con datos aleatorios sea muy efectivo en un ataque contra un oráculo.

Posiblemente podría mitigar un ataque en el caso extremo de tener solo 1 bloque de datos cifrados, pero no sería tan efectivo como configurar un Vector de Inicialización.

tl; dr No, a menos que haya un oráculo que un atacante pueda explotar. Si lo hay, asegúrese de que está configurando el vector de inicialización (oracle-side).

    
respondido por el Jesse Daniel Mitchell 11.09.2018 - 19:23
fuente
0

Sí, si ...

  1. Eres lo suficientemente estúpido como no para llenar los 64 bits restantes del bloque con datos aleatorios
  2. El atacante sabe que estás haciendo esto (lo que generalmente es una suposición que se debe hacer según Kerckhoff).

El motivo es obvio: AES opera en bloques de 128 bits (= 16 bytes), y si usted completa solo 64 bits de carga útil (configurando los bits restantes a cero o alguna otra constante, o algo así), entonces el número de salidas posibles es solo 2 64 . Lo cual es factible solo para la fuerza bruta (y también bastante fácil de identificar, busque un resultado donde la mitad del bloque sea igual a PaddingValue ).

Asignar un IV debería hacer el truco. Mientras que un habitual, el "normal" IV en realidad no resuelve el problema [1] , si le asignas el tamaño correcto (8 bytes), simplemente llena el bits no utilizados con aleatorio. Que es lo que necesitas que suceda.

[1] Si usted antepone un bloque completo como lo haría normalmente para un IV, entonces el bloque con la carga útil solo tiene 64 bits no obvios, nada cambia, realmente     
respondido por el Damon 11.09.2018 - 16:15
fuente

Lea otras preguntas en las etiquetas