Puncte:1

Cum este WinZip AES diferit de AES normal

drapel co

Încerc să scriu o funcție în dart care poate decripta un fișier în interiorul unui zip care este criptat folosind standardul WinZip AES-256. Documentatia pe care am gasit-o aici: https://www.winzip.com/en/support/aes-encryption/. Folosind 7-Zip am putut crea un exemplu de fișier conform standardului. Pot extrage cheia de criptare și textul de criptare conform specificațiilor:

cheie de criptare: 9f2df21ad65ff7f33b817c5686042f1dc038f0290cbe0189f2ee2bb610bf033d
cipherText: f88a3bd439b4aef91ebaa9
așteptat: 68656c6c6f20776f726c64 (saluta lume)
ieșire: c5e7de168b7dd6f3b157d4

Orice instrument sau pachet pe care îl folosesc nu îl poate decripta în mesajul potrivit. Așa că m-am uitat la o bibliotecă nodejs care a folosit o implementare specială pentru decriptare care nu pare să fie exact egală cu AES standard. Se numește implementare specifică Gladmann. dupa cum puteti vedea aici: https://github.com/gildas-lormeau/zip.js/blob/master/lib/core/codecs/sjcl.js#L590

Am descărcat acest pachet nodejs și am putut confirma că datele mele de intrare sunt valide, așa că întrebarea mea este de ce există mai multe implementări ale AES? Și care ar fi cea mai bună abordare pentru a implementa acest lucru în dart?

Aș putea încerca să imit aceeași logică în dart, care este dublă, dar provocatoare. Ar fi posibil să folosiți o bibliotecă existentă și să faceți o mică modificare pentru a o face să funcționeze? Dacă da, care ar fi această schimbare?

Din păcate, documentația de pe internet cu privire la separarea WinZip AES este puțină. Singurul alt motiv pe care l-am putut găsi a fost implementarea de la Brian Gladmann însuși: https://github.com/BrianGladman/aes dar îi lipsește documentația și trece puțin peste cunoștințele mele.

Multumesc pentru ajutor :)

Swashbuckler avatar
drapel mc
Un alt lucru de luat în considerare, versiunile mai vechi ale 7-Zip foloseau doar un IV de 8 octeți. Dacă utilizați o versiune mai veche care ar putea duce la unele probleme, consultați https://threadreaderapp.com/thread/1087848040583626753.html
Puncte:1
drapel in

Voi presupune că ați efectuat deja PBKDF2 cu cele 1000 de iterații statice definite (care este, uh, la capătul inferior al securității) și că cei doi octeți de verificare a cheii au fost validați.

AES în sine nu este diferit și se pare că Winzip nu folosește nimic special. Singurul lucru care este puțin ciudat este că contorul este în little endian. Acesta este tot codul C, deci endianness este definit de platformă și, mai ales, asta înseamnă Little Endian.

Nimic nu interzice utilizarea unui contor little endian pentru modul CTR, dar în 99% din cazuri va fi big endian. Este posibil să fie nevoie să implementați CTR-LE pe deasupra cifrului AES (sau AES-ECB, care este cam la fel).

De asemenea, rețineți că standardul ZIP - uh - definește un antet criptat, astfel încât începutul textului simplu decriptat nu va fi conținutul fișierului.

În mod similar, eticheta de autentificare este doar HMAC-SHA1-80 peste textul cifrat. HMAC-SHA1-80 este doar HMAC-SHA-1 din care sunt utilizați doar 80 de biți, adică jumătate din dimensiunea de ieșire a lui HMAC-SHA-1, de obicei biții cei mai din stânga.

Dacă sunteți blocat, m-aș uita cu atenție la cod pentru a verifica dacă nu aveți valori înapoi (de exemplu, poate că folosește octeții din dreapta HMAC, puțin probabil, dar da).

Maarten Bodewes avatar
drapel in
Faptul că WinZip 11 și versiunile ulterioare stochează CRC32 peste textul simplu pentru orice fișier > 20 de octeți este simplu. „Deoarece pentru unele fișiere foarte mici, CRC poate fi folosit pentru a determina conținutul exact al unui fișier”. Nu, *idioți*, puteți determina cu mare siguranță că un fișier conține date specifice, indiferent de dimensiune. Dacă doriți să criptați ceva **, atunci nu utilizați WinZip pentru asta**.

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.