Primero, asegurémonos de obtener endianness:
// needs a C99 compiler like gcc. Will work with msvc as well.
#include <stdint.h>
#include <stdio.h>
union endian_test
{
struct
{
uint8_t a;
uint8_t b;
uint8_t c;
uint8_t d;
};
uint32_t x;
};
int main(int argc, char** argv)
{
union endian_test e;
e.x = 0xAABBCCDD;
printf("%x %x %x %x", e.a, e.b, e.c, e.d);
}
Si tu sistema es little endian, obtendrás DD CC BB AA como salida y big endian te dará lo contrario. Todo lo que estamos haciendo aquí es permitirle al procesador la oportunidad de representar un número entero en cualquier endianness que use, y luego usar un pequeño truco de C para generar los bytes en el orden en que están representados en la memoria.
AES funciona en bloques de 128 bits, lo que es realmente conveniente, ya que si multiplicas todos los tamaños de campo en esa unión por cuatro, obtendrás un bloque de entrada AES.
Así que ahora tu pregunta se reduce a:
Si tuviera que invertir el orden de entrada de mi bloque, ¿eso crearía un problema de seguridad?
Bueno, eso depende de la salida. Supongamos que algo ingenuo, como invertir el orden de la entrada, produce un texto cifrado invertido, entonces si la entrada es AABBCCDD que se cifra a 12345678 y DDCCBBAA se cifra a 78563412.
Este es un problema para una cierta clase de vulnerabilidad criptográfica llamada CCA2 , o un ataque de texto cifrado adaptativo elegido. Como resultado del hecho de que el texto cifrado es maleable , puede solicitar que se realicen varias operaciones de descifrado y mientras Usted no sabe el texto en claro, podría deducir algo al respecto. Le gustaría leer un poco en indistinguishability del texto cifrado .
Como tal, un esquema criptográfico no debería verse afectado por la endianidad. Si es, o es maleable, tiene algunos problemas de seguridad que pueden ser abordados (y son, en algunas implementaciones, por ejemplo, al no proporcionar un oráculo de descifrado).