Puncte:0

Pot folosi jumătate din cheia de 256 de biți ca AES 256 IV?

drapel cn

După câteva cercetări pe Google, am aflat că IV-ul folosit în criptarea AES pe 256 de biți trebuie să fie o cheie de 128 de biți.

Criptarea mea AES256 este procesată cu cheia cheii aleatoare de 256 de biți și IV generat din șir de text.

Mă gândesc la MD5 pentru a genera o astfel de cheie, dar MD5 pare depășit.

Deci, ar trebui să fie în regulă dacă folosesc SHA256, generează o cheie de 256 de biți, apoi împart șirul hexagonal al cheii în mod egal în 2 părți și folosesc prima parte ca IV în criptarea AES pe 256 de biți?

kelalaka avatar
drapel in
NOOO!! IV este public și cheia este secretă! Ai dat jumătate din secretul tău!
Kim Mỹ avatar
drapel cn
ai putea te rog sa-l lamuri oferindu-i cui? Adică cheia este complet aleatorie și întregul 256 de biți IV nu este stocat doar utilizatorii o știu, doar pentru a folosi jumătate din ea?
kelalaka avatar
drapel in
Nu ai menționat asta. Oricum, folosiți $IV = SHA256(cheie, aleatoriu\; sare)$ pentru a fi sigur. IV nu este menit să fie secret...
poncho avatar
drapel my
Intenționați să criptați mai mult de un mesaj cu aceeași cheie (și astfel, după sugestia dvs., același IV)? Dacă nu, ei bine, în modul CTR sau modul GCM, este complet stricat (chiar și cu un IV secret); cu modul CBC, nu este nici pe departe la fel de rău, dar se va scurge dacă cele două mesaje au un prefix comun (care este încă mai multe informații decât am dori ca adversarul să aibă)
Maarten Bodewes avatar
drapel in
Atenție, lucruri precum crearea / derivarea cheilor MD5 și codificarea hexazecimală a cheilor sunt semnale roșii mari. Văd multe pe [so], iar în 99% din cazuri înseamnă că utilizatorii nu au nicio idee ce fac.
Puncte:1
drapel in

Deci, ar trebui să fie în regulă dacă folosesc SHA256, generează o cheie de 256 de biți, apoi împart șirul hexagonal al cheii în mod egal în 2 părți și folosesc prima parte ca IV în criptarea AES pe 256 de biți?

Nu, există modalități mai bune.

În primul rând, atunci când creați o cheie aveți nevoie de un generator de numere aleatoare, sigur din punct de vedere criptografic. daca tu deriva o cheie dintr-un secret principal - uneori numită semințe - aveți nevoie de o funcție de derivare a cheii sau KDF. În acest din urmă caz ​​ați putea de ex. utilizați HKDF cu un hash bun, cum ar fi SHA-256. În principiu, puteți crea de ex. Ieșire pe 384 de biți folosind HKDF - chiar și atunci când utilizați SHA-256, dar nu cred că este o idee bună, din cauza următoarei părți a răspunsului.


În al doilea rând, reutilizarea unei combinații cheie/IV nu este o idee bună; în funcție de modul și mesaj, este posibil să scurgeți doar câteva date sau tot mesajul.

În general, puteți utiliza doar un IV cu zero dacă cheia este generată aleatoriu pentru fiecare mesaj. Ar fi mai bine decât reutilizarea unei părți a cheii. După cum s-a indicat, un IV nu este considerat, în general, a fi secret, așa că dacă utilizați date cheie ca implementări IV, ar putea foarte bine să-l scurgă.

Dacă trebuie să criptați mai multe mesaje cu aceeași cheie, atunci puteți utiliza a sintetic IV sau SIV. În acest fel, veți pierde date doar dacă mesajele sunt complet identice, cu prețul unei anumite performanțe, deoarece modurile SIV sunt multi-pass (mesajele trebuie procesate de două ori).

În general, ar trebui să utilizați doar un IV randomizat și să îl trimiteți cu textul cifrat. Nu este clar din întrebare dacă acest lucru a fost luat în considerare; ar fi cel mai comun mod de a gestiona generația a IV-a.


În cele din urmă, cheile nu sunt alfanumerice; sunt formați din biți. De fiecare dată când o cheie este tradusă în text, deschideți o problemă de securitate. Deci nu face asta: păstrează cheile binare.Prefer să folosesc AES-128 cu o cheie complet aleatorie și să folosesc ceilalți 128 de biți pentru IV decât să revin la utilizarea hexazecimale.

Hexazecimalele sunt utile numai pentru consumul uman, de ex. în timpul testării sau depanării când vine vorba de cheile secrete.

Puncte:0
drapel us

Presupun că nu dezvălui acest IV. Depinde ce vrei și ce mod folosești. IV pentru AES ar trebui să fie de 128 de biți pentru moduri precum OFB, CBC sau CFB, dar este de obicei mai scurt pentru moduri precum CTR sau variantele sale autentificate, unde cel mai comun mod de a crea blocuri folosit pentru a genera fluxul ar fi concatenarea lui IV (nonce) și tejghea. Pot exista multe probleme cu utilizarea unei părți a cheii ca IV:

Pentru o dată nu cunosc niciun risc de securitate imens asociat cu dezvăluirea $E_k(k_{0..|k|/2})$ sau $E_k(k_{0..|k|/2} \oplus P)$ sau $E_k(k_{0..m} || ctr)$ pentru un mesaj cunoscut $P$ pentru AES complet (Vă rugăm să corectați dacă greșesc). Acestea sunt funcții pe care le puteți vedea în funcție de modurile utilizate. Cu toate acestea, utilizarea reală poate fi nesigură.

  1. În esență, vă face criptarea deterministă. Deci nu ascunde complet mesajul. Pentru moduri precum CBC sau CFB puteți detecta prefixe comune (prefixe de bloc complet în mesaj). Pentru CFB, acest lucru vă poate permite, de asemenea, să deduceți relația dintre textele simple corespunzătoare primelor blocuri divergente, în special $P_{1_i} \oplus P_{2_i}$ unde textele cifrate diverg la $i^{th}$ bloc. Pentru moduri precum CTR sau OFB, poate fi devastator dacă reutilizați vreodată cheia, puteți deduce relația xor pentru întregul text simplu pentru cele două. Această problemă persistă chiar dacă utilizați MD5 pentru IV. Prin urmare, îl face foarte nepotrivit pentru reutilizare, chiar și accidental, ceea ce este mai ușor de spus decât de făcut.

  2. În unele protocoale, dacă un atacator găsește o modalitate de a obține $E_k(k_{0..|k|/2})$ de exemplu prin păcălirea în criptare $0^{|k|}$ în modul CBC și apoi să-i păcălească în criptare $p_i||c_{i}$ unde obţinuse $c_{i}$ din interacțiunea anterioară pentru a dezvălui $E_k(0^{|k|})$, i-ar putea păcăli să dezvăluie jumătate din cheie cerând să decripteze $E_k(0^{|k|})$. Aceasta nu este ideea mea originală, așa că vă sugerez să vedeți răspunsul lui fgrieu Aici, vezi dezavantajul 2.

  3. Poate fi sigur să îl utilizați dacă nu reutilizați cheia sau în alte protocoale similare. Pentru moduri precum CBC sau chiar ECB cu unele mesaje cu entropie ridicată (aleatorie) fără structură cunoscută pot fi OK, de asemenea, în cazul în care utilizați de mai multe ori.

SAI Peregrinus avatar
drapel si
— Presupun că nu dezvălui acest IV. Acea presupunere este rea. Analizele de securitate ale tuturor modurilor AES comune presupun un IV public. Așa că va trebui să inventați un nou mod cu un IV secret și să vă asigurați că este protejat (bibliotecile existente nu fac niciun efort pentru a ascunde IV-ul). Aceasta înseamnă adăugarea de rezistență pe canalul lateral la manipularea IV. Este mult mai greu decât utilizarea unui hash sau KDF pe cheie sau, mai bine, modul SIV.
Manish Adhikari avatar
drapel us
@SAIPeregrinus În conformitate cu întrebarea lui OP, IV face parte din cheie, așa că am presupus că asta a vrut OP
SAI Peregrinus avatar
drapel si
Da, dar IV este public prin definiție. Deci nicio bibliotecă de software nu încearcă să-l ascundă, pentru majoritatea este antepus textului cifrat! Așadar, întrebarea se rezumă la „ce ar fi dacă le-aș scurge jumătate din cheia secretă către atacatori”.
poncho avatar
drapel my
Pentru modul ECB, de obicei nu ne facem prea multe griji cu privire la IV... :-)
Kim Mỹ avatar
drapel cn
va multumesc tuturor! Dacă IV este menit să fie public și adăugat la ieșirea criptată, ceea ce înseamnă că ar trebui să schimb IV ca cheie și cheie ca IV?
Kim Mỹ avatar
drapel cn
Ieșirea criptată a base64 poate fi convertită și afișează IV-ul?
Manish Adhikari avatar
drapel us
Schimbă IV și cheie, ce vrei să spui? Sper că nu sugerați păstrarea secretă a cheii publice și IV, nu oferă niciun fel de siguranță.

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.