256 Bit Key in AES 128 stessa uscita di 256 Bit Key in AES 256

2

Ho due diverse librerie crittografiche che ho creato, una è in java e utilizza le librerie di crittografia java incorporate standard.

L'altro utilizza openssl ed è stato inserito in java tramite JNI.

Attualmente sto sostituendo il codice predefinito della libreria java con il codice della libreria openssl e verificando le crittografie l'una contro l'altra per assicurarmi che non si interrompa nulla per il mio utente finale. Sono curioso, perché java è garantito per supportare solo 128 bit chiavi usando la sua implementazione di PBKDF2, quindi sto usando AES CBC 128 con java. Originariamente avevo codificato per AES CBC 256 in openssl, senza pensare.

Ciò di cui sono curioso è questo: quando inserisco una chiave da 256 bit in AES CBC 128 di java, ho ottenuto la stessa uscita di AES CBC 256 di openssl. Quando inserisco una chiave a 128 bit in AES CBC 128 , Ho ottenuto un output diverso rispetto a quando ho inserito la stessa chiave in AES CBC 256 di openssl. (Ho usato lo stesso IV di 16 byte in tutte le prove)

Suppongo che i due diversi schemi di crittografia genererebbero risultati completamente diversi, quindi sono confuso sul perché questo sta accadendo. Pensavo di avere una migliore comprensione del codice di quello che sembra effettivamente.

Chiedo scusa se questo è un risultato dolorosamente ovvio, sono ancora un po 'nuovo in crypto.

    
posta JBires 17.07.2014 - 00:47
fonte

1 risposta

10

"AES-128" significa "AES utilizzato con una chiave a 128 bit". "AES-256" significa "AES utilizzato con una chiave a 256-bit". Per definizione, dovresti utilizzare una chiave a 128 bit con AES-128 e una chiave a 256 bit con AES-256.

Che cosa accade quando si fornisce una chiave da 256 bit ad AES-128 o una chiave da 128 bit ad AES-256? Di tutti i diritti, dovrebbe esplodere in faccia. Tuttavia, alcune implementazioni sono più tolleranti. Alcune implementazioni si adatteranno automaticamente alla dimensione della chiave fornita; in tal caso, quando si inserisce una chiave a 256 bit in AES-128, l'implementazione AES-128 si trasforma in un'implementazione AES-256 (AES-128, AES-192 e AES-256 sono molto simili internamente, differiscono solo per il numero di round, quindi ha senso che condividano la maggior parte del loro codice). Alcune altre implementazioni ignoreranno la tua "lunghezza chiave" e prenderanno i byte che credono di aver bisogno; per esempio. date una chiave a 256-bit a un AES-128 e solo i primi 128 bit vengono usati. Dato che stai facendo cose fuori specifica, questo è il regno del bug, e tutto va bene.

    
risposta data 17.07.2014 - 01:05
fonte

Leggi altre domande sui tag