Innanzitutto, assicuriamoci di ottenere 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);
}
Se il tuo sistema è little endian, riceverai DD CC BB AA come output e big endian ti darà il contrario. Tutto quello che stiamo facendo qui è permettere al processore di rappresentare un intero in qualsiasi endianness che usa, quindi usare un piccolo trucco per emettere i byte nell'ordine in cui sono rappresentati in memoria.
AES funziona su blocchi a 128 bit, il che è abbastanza comodo, in realtà, poiché se moltiplichi per quattro tutte le dimensioni del campo in quell'unione, otterrai un blocco di input AES.
Quindi ora la tua domanda si riduce a:
If I were to reverse the order of the input of my block, would that create a security problem?
Bene, questo dipende dall'output. Assumiamo qualcosa di ingenuo, come invertire l'ordine dell'input produce un testo cifrato invertito, quindi se l'input è AABBCCDD che crittografa a 12345678 e DDCCBBAA crittografa a 78563412.
Questo è un problema per una certa classe di vulnerabilità crittografica chiamata CCA2 , o un attacco di testo cifrato adattivo scelto. Come risultato del fatto che il testo cifrato è malleabile puoi quindi richiedere varie operazioni di decrittografia da eseguire e mentre non conosci il testo in chiaro, potresti dedurne qualcosa. Ti potrebbe interessare leggere un po 'su indentazione del testo cifrato .
Come tale, uno schema crittografico non dovrebbe essere influenzato da endianness. Se è, o è malleabile, ha alcuni problemi di sicurezza che potrebbero dover essere affrontati (e sono, in alcune implementazioni, per esempio, non fornendo un oracolo di decrittazione).