Puncte:0

Funcții de compresie SHA-256 fără umplutură

drapel fr

Privind exemplul de intrare nulă (512 biți), este nevoie ca intrare:

intrare (hexadecimal): 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

Deoarece este exact 512 biți, nu există nicio divizare și nici o umplutură. Dar de la calculatoare online sau cod golang, aș obține hash-ul sha-256 al intrării nule să fie:

Ieșire calculator online (hexadecimal): f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b

Cu toate acestea, în mai multe biblioteci de ex.kobigurk sau SCALA MAMBA etc., valoarea așteptată ar trebui să fie:

bibliotecă (hexadecimal): da5698be17b9b46962335799779fbeca8ce5d491c0d26243bafef9ea1837a9d8

Am ales intrarea nulă exact ca 512 biți fără padding. Care ar putea fi problema?

kelalaka avatar
drapel in
Umplutura este aplicată întotdeauna indiferent de dimensiunea intrării.
Willi avatar
drapel fr
Ați putea oferi câteva referințe? Cum s-ar aplica padding-ul dacă intrarea este de numai 512 biți?
Puncte:1
drapel in

Răspuns scurt;

Amesteci funcția de compresie și funcția hash. Ambele pagini/biblioteci sunt adevărate în contextul lor!


Răspuns extins

SHA-256, ca și ceilalți algoritmi hash, este întotdeauna captusit și este definit în NIST.FIPS.180-4

Să presupunem lungimea mesajului $M$, în bucăți, $\ell$ este biți. Adăugați bitul 1 până la sfârșitul mesajului, urmat de k zero biți, unde k este cea mai mică soluție nenegativă a ecuației $$\ell +1 + k \equiv 448 \bmod 512$$ Apoi adăugați blocul de 64 de biți care este egal cu numărul $\ell$ exprimată folosind o reprezentare binară

Deci 512 biți zerouri în SHA-256 vor avea 447 zerouri ($k$ parte);

$$\text{Padded_Message} =\underbrace{\texttt{000...00}}_{512-zero}||\texttt{1}||\underbrace{\texttt{000...00}}_ {447-zero}||\underbrace{\texttt{codare lungă}}_{64 de biți}$$

Dacă doriți cu adevărat să testați unele intrări, asigurați-vă că acestea sunt corecte pe vectorii de testare ai NIST definiți în Programul de validare al algoritmului criptografic - Funcții hash

Pentru căptușeală, ca de obicei, nu are legătură cu utilizatorul. Bibliotecile se ocupă de umplutura pentru utilizatori.

Deoarece este exact 512 biți, nu există nicio divizare și nici o umplutură. Dar de la calculatoare online sau cod golang, aș obține hash-ul sha-256 al intrării nule să fie:

După cum am menționat mai sus, umplutura este întotdeauna definită. Face parte din algoritmul hash SHA-256.

Intrarea dvs. nu este intrare nulă, este intrare zero pe 512 biți. NIST furnizează vectorul de testare lungime zero și rezultatul acestuia

Len = 0
Mesajul = 00
MD = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Testarea aportului dvs. pe sha256algorithm.com produce

f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b

Am testat această pagină și pe niște vectori de testare NIST.

Link-ul pe care îl furnizați ca SCALA MAMBA menționează ca;

Ieșire: înlănțuirea valorilor după comprimarea blocului de intrare (în același format în care ar fi returnat rezumatul)
IMPORTANT: Aceștia NU sunt vectori de testare pentru funcția hash completă SHA-256, deoarece regulile de umplutură sunt ignorate

Aceasta este ieșirea primei funcție de compresie. Acest lucru poate fi verificat pe sha256algorithm.com dacă te oprești pe treapta 164. Pune mouse-ul pe valorile inițiale și vei obține valoarea hexadecimală;

da5698be17b...

Acesta este același lucru pe celălalt link către; dat ca vectori de test de compresie sha256.

Amintiți-vă că rezultatul funcției de compresie este valoarea inițială a următoarei funcții de compresie, dacă este necesar. Dacă nu este necesar, atunci este rezultatul SHA-256. Sunt date primele valori inițiale;

Aceste cuvinte reprezintă primii treizeci și doi de biți ai părților fracționale ale rădăcinilor cubice ale primelor șaizeci și patru de numere prime

ca nimic-în sus-în-măneca-numărul-meu deși acest lucru este psihologic.

Willi avatar
drapel fr
Mulțumiri! acest lucru este cu adevărat util.
Willi avatar
drapel fr
o întrebare ulterioară: în ce pas pot afla valoarea hash inițială H(0) pentru primul bloc din site-ul web [sha256algorithm.com](https://sha256algorithm.com/)? Se pare că valoarea hash inițială pentru primul bloc nu este furnizată.
kelalaka avatar
drapel in
Uită-te la pasul 50...

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.