Puncte:0

Cum se implementează o „funcție de burete” de bază?

drapel tn

În capitolul 6 din Criptografie serioasă, ei scriu despre functie de burete:

  1. XOR-ul primului bloc de mesaje, M1, la H0, o valoare inițială predefinită a stării interne (de exemplu, șirul total zero). Blocurile de mesaje sunt toate de aceeași dimensiune și mai mici decât starea internă.
  2. O permutare, P, transformă starea internă într-o altă valoare de aceeași dimensiune.
  3. XOR blochează M2 și aplică din nou P, apoi repetă acest lucru pentru blocurile de mesaje M3, M4 și așa mai departe. Aceasta se numește faza absorbanta.
  4. După injectarea tuturor blocurilor de mesaje, aplică din nou P și extrage un bloc de biți din stare pentru a forma hash-ul. (Dacă aveți nevoie de un hash mai lung, aplicați din nou P și extrageți un bloc.) Acesta se numește faza de stoarcere.

Securitatea funcției unui burete depinde de lungimea stării sale interne și de lungimea blocurilor. Dacă blocurile de mesaje sunt lungi de r-biți și starea internă este de w-biți, atunci există c = w â r biți ai stării interne care nu pot fi modificate de blocurile de mesaje. Valoarea lui c se numește capacitatea unui burete, iar nivelul de securitate garantat de funcția burete este c/2. De exemplu, pentru a ajunge la securitatea pe 256 de biți cu blocuri de mesaje pe 64 de biți, starea internă ar trebui să fie w = 2 × 256 + 64 = 576 de biți. Desigur, nivelul de securitate depinde și de lungimea, n, a valorii hash. Complexitatea unui atac de coliziune este, prin urmare, cea mai mică valoare între 2^{n/2} și 2^{c/2}, în timp ce complexitatea unui al doilea atac preimagine este cea mai mică valoare între 2^n și 2^{c/ 2}.

Pentru a fi sigur, permutarea P ar trebui să se comporte ca o aleatorie permutare, fără părtinire statistică și fără o structură matematică care ar permite unui atacator să prezică rezultate. Ca și în compresie hash-uri bazate pe funcții, funcții burete, de asemenea, mesaje pad, dar umplutura este mai simplă, deoarece nu trebuie să includă mesajele lungime. Ultimul bit de mesaj este pur și simplu urmat de un bit și tot atât zerouri după cum este necesar.

The Pagina Wikipedia este prea opac pentru a fi transformat și în cod.

Mă întreb dacă ar putea să arăți o demonstrație simplistă a funcției de burete din lumea reală, pentru a naviga acasă aceste 4 puncte de marcare despre cum funcționează.

niste întrebări legate de implementarea acestuia:

  • Care este dimensiunea blocului? Presupunând 512
  • Care sunt datele de intrare (utf-8, etc.)? Conteaza?
  • Cu ce ​​să XOR primul bloc de mesaje? Ce numar? Și blocurile viitoare?

Nu prea știu de unde să încep, nici nu am găsit fragmente de cod legate de „funcțiile sponge”.

The Hârtie Keccak Sponge Functions este puțin prea greu de matematică pentru a putea obține o implementare clară a software-ului (cel puțin pentru mine).

Caut doar elementele de bază. Poate acest este cât se poate de simplu?

Maarten Bodewes avatar
drapel in
Am făcut întrebarea mai puțin specifică pentru JavaScript, deoarece ar fi în afara subiectului aici; întrebările pe care le aveți despre implementare ar trebui să fie la subiect. Rețineți că furnizarea de exemplu de cod încă nu este luată în considerare la acest subiect.
Lance avatar
drapel tn
Ok, am eliminat fragmentul, mulțumesc. Am găsit [funcția keccak sponge într-o formă care poate fi citită](https://github.com/lancejpollard/hash/blob/make/lib/keccak-sponge.c), dar este destul de densă și implicată, un burete poate funcționa nu doar să fie foarte simplu să demonstrezi cum funcționează?
Maarten Bodewes avatar
drapel in
Uh, sigur. Poate că există implementări simple disponibile (există specificații AES simplificate utilizate în scopuri de învățare, de exemplu), dar nu cunosc niciuna. Nu sunt sigur dacă alte funcții ale bureților ar fi mai aplicabile. Spritz este cu siguranță simplu în mod deliberat, așa că poate aruncați o privire la asta *pentru învățare*. Totuși, nu sunt sigur dacă funcționalitatea burete este separată de cifrul fluxului în implementarea lor. SPONGENT pare, de asemenea, destul de simplu. Am văzut și o hârtie în care a fost folosit un hash ca funcție de bază. Acum, desigur, este puțin ciudat, dar ar putea fi util în scopuri de învățare
kelalaka avatar
drapel in
Ați uitat o parte importantă din aceasta 1. Fiecare echipă trebuie să trimită codul pentru competiția SHA-3, 2. Standardul SHA-3 este dat de [NIST](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST) .FIPS.202.pdf) și au și vectori de testare. Aș putea numi această înșelăciune a acestui [elaborare pas cu pas cu exemplu de intrare pentru funcțiile Hash NIST precum SHA-1, SHA-2 și SHA-3](https://crypto.stackexchange.com/q/95783 /18298)
Maarten Bodewes avatar
drapel in
Am presupus că implementarea de referință Keccak nu ar fi suficient de „simple” și cunoscută, dar sigur că puteți folosi funcțiile implementării ref sau un port specific limbii - dacă acesta este răspunsul, sigur....
drapel kr
Răspunde asta la întrebarea ta? [Ce este construcția buretelui în termeni simpli?](https://crypto.stackexchange.com/questions/83258/what-is-the-sponge-construction-in-simple-terms)
Lance avatar
drapel tn
Nu, caut o implementare tehnică, în mod ideal în cod sau pseudocod de vreun fel.

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.