The key in the case of above mentioned function is padded with zero when its length is less than 16 bytes.
È davvero qualcosa che devi affrontare. Le chiavi AES devono sempre avere dimensioni di 128, 192 o 256 bit e indistinguibili da quelle casuali a quelle di un utente malintenzionato.
My question is: How can I perform a key stretching with something like PBKDF2 in mysql to enhance the strength of weak keys.
Suggerisco vivamente non di eseguire tale funzione all'interno delle query del database stesso. PBKDF2 (o qualsiasi altra funzione) deve essere il più veloce possibile per rendere il possibile vantaggio degli hacker il più piccolo possibile. Altrimenti il fattore di lavoro (il conteggio dell'iterazione per PBKDF2) non può essere abbastanza grande.
Prova a trovare una versione ottimizzata di PBKDF2 e integrala con il tuo software.
Also I would like to know that if I use a hex value directly from a function like SHA2('Key', 512) as my key for the aes_encrypt() function, will it reduce the strength of the key because there will only be 16 characters in the character set every time a key is generated.
L'output delle funzioni SHA-2 consiste in byte , non in esadecimali. Potrebbe essere che la tua implementazione la traduca automaticamente in esadecimali. In tal caso, devi specificare esplicitamente l'output non elaborato o devi decodificare gli esadecimali per utilizzarlo come chiave AES.
Il problema con solo SHA-2 è che non si aspetta un sale né un fattore di lavoro. Ciò significa che gli attacchi dizionario e le tabelle arcobaleno sono validi vettori di attacco. Questo è il motivo per cui è necessaria una funzione di derivazione chiave basata su password come PBKDF2.
PBKDF2 non è necessario solo se l'input "password" ha forza sufficiente. Ma per la crittografia AES, avresti bisogno di qualcosa di simile a 128 bit di casualità, ed è improbabile che venga fornito da qualsiasi password in itsef.