AES può essere utilizzato per 3 dimensioni chiave: 128, 192 e 256 bit. Fondamentalmente se si è in grado di usare chiavi più grandi di 256 bit, allora la libreria è "mentire a voi", cioè alcuni bit della chiave più grande vengono scartati o compressi in qualche modo. Ad esempio, PHP mcrypt
riduce semplicemente la dimensione della chiave alla dimensione massima possibile.
I "semi" di chiavi più grandi sono piuttosto comuni nel mondo della crittografia. Ad esempio Diffie-Hellman - un algoritmo di accordo chiave - di solito genera un segreto più grande della dimensione della chiave richiesta. Quindi, la domanda di che estrae (concentrando) la quantità di entropia in una chiave spesso si pone. Se i bit vengono troncati, l'entropia in questi bit viene scartata.
Quindi ciò che viene effettivamente utilizzato nella crittografia moderna è un KDF, una funzione di derivazione chiave. Se l'input - the seed - è una password, è necessario utilizzare un PBKDF (KDF basato su password). I moderni PBKDF sono PBKDF2, bcrypt, scrypt e Argon2.
Se l'input è già una chiave - i dati che forniscono un'entropia sufficiente (casualità) se presi insieme - è necessario utilizzare un KBKDF (Key Based KDF). Un KBKDF moderno è ad esempio HKDF. Si noti che questi algoritmi richiedono input aggiuntivi, quindi se non vengono forniti dati aggiuntivi è molto probabile che i bit chiave extra vengano semplicemente ignorati.
La forza crittografica di AES-128 è e rimane 128 bit, naturalmente. Finché questi bit sono indistinguibili da un utente malintenzionato, AES-128 should provide enough security for practical needs. AES-256 potrebbe essere usato se si temono scoperte nella crittografia quantistica.
Quindi per la risposta: "sono AES dimensioni delle chiavi di legge davvero il limite?" la risposta è un clamoroso sì. Le dimensioni delle chiavi a 2048 bit si trovano più comunemente per algoritmi asimmetrici come RSA/DSA. Per RSA e DSA la dimensione della chiave è in realtà piuttosto bassa, anche se dovrebbe essere ancora irraggiungibile per attacchi pratici. Forse il testo cifrato è stato crittografato utilizzando hybrid encryption.
fonte
2014-04-24 05:15:56
'(nuovo AesCryptoServiceProvider()). Chiave = nuovo byte [256];' -> "CryptographicException: la chiave specificata non è una dimensione valida per questo algoritmo." - Puoi mostrare il codice che stai utilizzando con una chiave da 256 byte? – Blorgbeard
Ho scritto una risposta diretta ma sono d'accordo con Blorgbeard su questo, non vedo come 'AesCryptoServiceProvider' possa essere usato con qualsiasi dimensione di chiave diversa dalle dimensioni della chiave" legale ". Detto questo, i documenti di Mickeysoft sono - di nuovo - abbastanza vaghi da non specificare eventuali errori che potrebbero sorgere. –
Se si imposta prima la dimensione della chiave a 256, quindi si genera una chiave, l'API produce una chiave da 256 byte senza errori e consente di utilizzarla nel modo corretto senza errori. Ho scritto un'intera libreria di classi funzionali che utilizza una dimensione chiave di 256 byte per AES e RSA/AES ibrido per vedere se avrebbe funzionato durante la scrittura di programmi su più piattaforme. E fa ... solo la spiegazione 8 che i tasti legali sono sbagliati o che la maggior parte della chiave non viene utilizzata. Sono incline a credere a quest'ultimo. – SteakNinja