Puncte:2

Întrebare de extindere a cheii AES

drapel us

Citesc despre extinderea cheii pentru AES, dar se pare că nu găsesc încă răspunsul la această întrebare. Cartea se referă la o cheie de cifră și la cheia extinsă (sau programul cheilor). Acesta este algoritmul din carte:

procedura KeyExpansion(octetul K[4][Nk], octetul W[4][Nb (N r + 1)]) ? Nk ⤠6
    pentru j = 0 la Nk â 1 do
        pentru i = 0 la 3 do
            W[i][j] â K[i][j]
        sfârşitul pentru
    sfârşitul pentru
    pentru j = Nk la Nb (N r + 1) â 1 do
        dacă j mod Nk = 0 atunci
            W[0][j] â W[0][j â Nk ] + S RD [W[1][j â 1]] + RC[j/Nk ]
            pentru i = 1 la 3 do
                W[i][j] â W[i][j â Nk ] + S RD [W[i + 1 mod 4][j â 1]]
            sfârşitul pentru
        altfel
            pentru i = 0 la 3 do
                W[i][j] â W[i][j â Nk ] + W[i][j â 1]
            sfârşitul pentru
        sfârşitul dacă
    sfârşitul pentru
încheie procedura

Intrebarea 1: În prima linie, această procedură este preluarea unei chei. Care este obiectul cheie care trebuie acceptat de această funcție? Se pare că această cheie are deja numărul necesar de cuvinte pe 32 de biți pentru 128 sau 192 (deoarece aceasta este extinderea cheii pentru 6 coloane sau mai puțin), dar cum ați obține asta din parola de lungime aleatorie a unui utilizator? Ar fi fost deja rulat PKCS7, astfel încât cheia să fie căptușită?

intrebarea 2: Aceasta arată că cheia introdusă efectiv de utilizator face parte din programarea cheilor sau toate cheile din program derivă din cheia de intrare brută reală a utilizatorului?

Puncte:8
drapel my

Se pare că această cheie are deja numărul necesar de cuvinte de 32 de biți pentru 128 sau 192 (deoarece aceasta este extinderea cheii pentru 6 coloane sau mai puțin), dar cum ați obține asta din parola de lungime aleatorie a unui utilizator?

Modul în care obțineți cheia de 128, 192 (sau 256) biți nu face parte din specificația AES. Ia ca intrare acea cheie; ceea ce faci pentru a veni cu cheia nu este preocuparea ei.

Acum, de obicei, nu convertim parola unui utilizator direct într-o cheie; în mod normal, fie o generăm dintr-o funcție de derivare a cheii (cu intrări care pot include rezultatele unei operațiuni de schimb de chei), fie posibil să folosim direct rezultatul unui generator de numere aleatoare securizate (și ne străduim să transmitem cumva această cheie către cealaltă parte) . Problema cu utilizarea directă a parolei unui utilizator este că parola este cea mai slabă parte a sistemului - este mult mai ușor să încercați să ghiciți o parolă decât să spargeți AES (sau o operațiune de schimb de chei).

Aceasta arată că cheia introdusă efectiv de utilizator face parte din programul de chei sau toate cheile din program derivă din cheia de introducere brută reală a utilizatorului?

Extinderea cheii generează cele 11, 13 sau 15 subchei pe care le utilizează AES (în funcție de dimensiunea cheii). Blocurile inițiale 1, 3/2 sau 2 vor fi biți preluați direct din cheia introdusă; cu toate acestea, acest lucru nu este important pentru modul în care funcționează AES.

drapel us
Mulțumesc pentru această informație.
Puncte:7
drapel in

Care este obiectul cheie care trebuie acceptat de această funcție?

O matrice de octeți.

cum ai obține asta de la parola de lungime aleatorie a unui utilizator?

Practica obișnuită este utilizarea funcțiilor de derivare a cheilor bazate pe parolă (PBKDF) precum PBKDF2, Bcrypt, Argon2, BalloonHash etc. Rețineți că acestea nu pot crește puterea intrării. Prin urmare, un utilizator trebuie să aleagă o parolă bună, cu suficientă putere, cum ar fi o parolă generată cu metoda dicewire.

În unele aplicații, cum ar fi criptarea discului, este generată o cheie aleatorie uniformă pentru criptarea discului și aceasta este criptată din cheia derivată din parolele utilizatorului. Totuși, securitatea depinde de calitatea parolei.

De asemenea, materialul cheie poate fi sursa unui schimb de chei precum DHKE, în acest caz, o funcție de derivare a cheii precum HKDF trebuie aplicată materialului cheie pentru a obține cheia AES (octeți).

Ar fi fost deja rulat PKCS7, astfel încât cheia să fie căptușită?

În nici un caz, asta nu este sigur. Dacă proiectați o bibliotecă, respingeți intrarea utilizatorului (programatorilor) dacă este mai scurtă decât dimensiunea cheii țintă.

aceasta arată că cheia introdusă efectiv de utilizator face parte din programul de chei sau toate cheile din program derivă din cheia de introducere brută reală a utilizatorului?

Parola utilizatorului trebuie procesată cu un PBKDF pentru a obține cheia. Programul de chei necesită o matrice de chei cu dimensiunea în funcție de AES preferat (128.192.256). The programul cheie nu distinge calitatea materialului cheie și nu face parte din designul său. Responsabilitatea calității materialelor cheie revine utilizatorului și bibliotecilor. Bibliotecile care criptează ar fi trebuit să gestioneze parolele cu un PBKDF bun și să fi introdus rezultatul în programul de chei. Acest proces trebuie să fie independent de utilizator - cu excepția unor avertismente despre calitatea parolei.

Toate intr-unul;

  1. Obțineți o parolă de la utilizator și avertizează utilizatorul dacă parola este scurtă.
  2. derivați matricea de octeți de cheie dorită din parolă cu un PBKDF
  3. Furnizați programarea cheilor cu matricea de octeți a cheilor derivate.
drapel us
„Parola utilizatorului ar trebui procesată cu un PBKDF pentru a obține cheia.” Am inteles. Mulțumiri.Doar că cartea nu părea să intre în asta din câte îmi dau seama.
Maarten Bodewes avatar
drapel in
Care este titlul cartii"? Modul în care este generată sau derivată o cheie AES nu face parte din algoritmul AES în sine...
drapel us
@MaartenBodewes „Designul lui Rijndael” în capitolul 3, unde este stabilit programul cheie. Dar și FIPS 197. Este foarte bine dacă nu face parte din AES în sine, dar asta ar explica de ce nu este menționat și de ce nu eram sigur. :D
drapel cn
@mirkaim Bănuiesc că majoritatea cheilor simetrice nu sunt derivate deloc din parolele utilizatorului. Acestea sunt fie generate dintr-un protocol de acord asimetric cu chei (de exemplu TLS), fie generate aleatoriu (sperăm că de la un generator de numere aleatoare securizate din punct de vedere criptografic), și apoi protejate prin criptare cu o altă cheie.
Puncte:5
drapel in

Se pare că această cheie are deja numărul necesar de cuvinte de 32 de biți pentru 128 sau 192 (deoarece aceasta este extinderea cheii pentru 6 coloane sau mai puțin), dar cum ați obține asta din parola de lungime aleatorie a unui utilizator?

Parolele nu sunt chei în sine.

Pentru a obține o cheie dintr-o parolă, ați folosi o funcție de derivare a cheii pe bază de parolă. Puteți utiliza funcții precum PBKDF2, Argon2 sau hashing Balloon. Alți algoritmi bine cunoscuți sunt bcrypt și scrypt.

Ar fi fost deja rulat PKCS7, astfel încât cheia să fie căptușită?

Nu, umplutura compatibilă cu PKCS#7 este ceea ce rulați pe textul simplu (sau - atunci când este implementat eficient - pe buffer-ul de dimensiunea blocului care este folosit pentru criptare / decriptare în timpul ultimei operațiuni de criptare). Cheia nu are nevoie de o metodă de umplutură atunci când este generată/derivată corect; ar trebui să aibă întotdeauna dimensiunea potrivită - și altfel umplutura zero ar funcționa bine.

Aceasta arată că cheia introdusă efectiv de utilizator face parte din programul de chei sau toate cheile din program derivă din cheia de introducere brută reală a utilizatorului?

Cheile simetrice constau din biți/octeți. Deci, o cheie AES este formată din 128, 192 sau 256 de biți / 16, 24 sau, respectiv, 32 de biți. Orice altceva decât asta nu este o cheie AES. Un șir de caractere nu este, în general, considerat o cheie, deși ar putea fi o codificare hex sau în bază64 a unei chei. Dacă este un șir de orice dimensiune, atunci este în general considerat o parolă.

În ceea ce privește programul de taste intern al AES: Nu, prima rundă poate folosi foarte bine tasta de introducere originală. După cum puteți vedea valoarea j nu începe cu j. Acest lucru are sens, programarea cheilor se asigură că subcheile sunt suficient de diferite, astfel încât informațiile unei subchei ulterioare să nu prezinte nicio informație despre o subcheie anterioară.

drapel us
Am înţeles. Mulțumesc mult.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.