Întrebarea ia în considerare completarea unui text memorabil, cum ar fi „cheie cifră”, într-o cheie AES, adăugând zero octeți la expresia (UTF-8) a acestui text ca octeți, până când se ajunge la 16, 24 sau 32 de octeți pentru AES-128, AES-192, sau AES-256.
The principal problema cu asta este ca este rapid si ieftin, ceea ce este un dezastru în context: permite unui adversar să aplice rapid și ieftin acel proces la parole plauzibile și să testeze cheile rezultate cu un text cifrat (cu text simplu cunoscut sau redundant), și astfel să găsească cheia. Aceasta este spargerea parolei, și există o mică industrie care dezvoltă combinații de software și hardware pentru asta.
Un dicționar cu cele mai comune milioane de cuvinte englezești (pentru o definiție extinsă a cuvântului) ar conține, cred, „cipherkey”. Cel puțin, o căutare Google a găsit 78.400 de apariții și se află în lista de domenii înregistrate în trei TLD-uri comune. Cu o pereche cunoscută text clar/text cifrat sau un text cifrat pentru un text simplu cu o anumită structură, acest lucru va dura câteva secunde pentru a se întrerupe pentru cineva cu instrumentele potrivite.
Chiar dacă acest lucru poate fi îmbunătățit enorm (vezi paragraful următor), „cheie cifră” nu este o parolă bună. Este recomandabil să alegeți o parolă care este mai greu de ghicit. Numindu-l doar expresie de acces va ajuta! Dar asta este o secundar problemă.
Când transformi ceva memorabil (parolă, expresie de acces..) într-o cheie, una trebuie sa utilizați o funcție de derivare a cheii destinată parolelor, adică una cu un parametru factor de lucru care să permită reglarea costului derivării cheii. Dacă acest cost este de 0,5 secunde din timpul unui computer puternic, mai degrabă decât 20 de nanosecunde pentru metoda propusă, acesta va deveni blocajul pentru spargerea parolelor și, probabil, le va da cel puțin o transpirație. Cu o frază de acces à la XKCD sau Diceware, poate fi destul de sigur.
Unul ar trebui să folosească sare, care va împiedica calcularea cheilor derivate în avans și va preveni amortizarea costului unor astfel de derivații pentru mai multe perechi parolă/cheie. Asta e alta secundar problemă.
Este important ca funcția de derivare a cheii să fie dureroasă de memorie, adică să folosească o cantitate considerabilă de memorie pe parcursul calculului său, pentru că aceasta crește foarte mult costul monetar al atacului, cu un cost mic pentru utilizatorii legitimi. Funcțiile recomandate includ Argon2 și cripta. Funcțiile comune, dar nerecomandate includ PBKDF2, care nu este greu de memorie și printre cele mai proaste utilizări posibile a timpului procesorului în scopul derivării de la parolă la cheie: maximizează marginea atacatorilor folosind ASIC-uri, FPGA-uri și chiar GPU-uri w.r.t. utilizatorii legitimi care folosesc procesoare. găsesc Recomandarea NIST pentru PBKDF2 în concordanţă cu forţa lor anterioară pentru Dual_EC_DRBG:
În timp ce PBKDF2 este greu de timp, dar nu de memorie, este atât de larg implementat încât nu este practic (în acest moment, oricum) să se introducă o cerință pentru o funcție de derivare a tastei de memorie.