Funcție burete - Sponge function

Ilustrația construcției de bureți
Construcția cu burete pentru funcții de hash. P i sunt blocuri ale șirului de intrare, Z i sunt blocuri de ieșire hashed.

În criptografie , o funcție de burete sau o construcție de burete este oricare dintre clase de algoritmi cu stare internă finită care iau un flux de biți de intrare de orice lungime și produc un flux de biți de ieșire de orice lungime dorită. Funcțiile de burete au atât utilizări teoretice, cât și practice. Acestea pot fi utilizate pentru modelarea sau implementarea multor primitive criptografice , inclusiv hash-uri criptografice , coduri de autentificare a mesajelor , funcții de generare a măștilor , criptare flux , generatoare de numere pseudo-aleatorii și criptare autentificată .

Constructie

O funcție de burete este construită din trei componente:

  • o memorie de stare, S , care conține b biți,
  • o funcție care transformă memoria de stare (deseori este o permutare pseudorandomă a valorilor de stare)
  • o funcție de umplere P

Memoria de stare este împărțită în două secțiuni: una cu dimensiunea r (bitrate) și partea rămasă a mărimii c (capacitatea). Aceste secțiuni sunt notate R , respectiv C.

Funcția de umplere adaugă suficiente biți la șirul de intrare, astfel încât lungimea intrării căptușite este un întreg întreg al bitratei, r . Astfel, intrarea căptușită poate fi împărțită în blocuri r- bit.

Operațiune

Funcția de burete funcționează după cum urmează:

  • Starea S este inițiată la zero
  • Șirul de intrare este căptușit. Aceasta înseamnă că intrarea este transformată în blocuri de r biți utilizând funcția padding P .
  • pentru fiecare r -bit bloc B de intrare capitonat:
    • R se înlocuiește cu R XOR B (folosind XOR în formă de biți )
    • S se înlocuiește cu f ( S )

Acest proces „absoarbe“ (în burete metafora) toate blocurile din șirul de intrare capitonat.

Ieșirea funcției de burete este acum gata de produs („stoarsă”) după cum urmează:

  • R porțiune a memoriei de stare este de ieșire
  • se repetă până când sunt emise suficiente biți:
    • S se înlocuiește cu f ( S )
    • R porțiune a memoriei de stare este de ieșire

Dacă rămâne mai puțin de r biți de ieșire, atunci R va fi trunchiat (doar o parte din R va fi ieșită).

O altă metaforă descrie memoria de stare ca o „ piscină de entropie ”, cu intrarea „turnată” în piscină, iar funcția de transformare este denumită „agitarea bazinului de entropie”.

Rețineți că biții de intrare nu sunt niciodată XORed în porțiunea C a memoriei de stare și niciun bit de C nu este niciodată emis direct. Măsura în care C este modificată de intrare depinde în totalitate de funcția de transformare f. În aplicațiile de hash, rezistența la coliziune sau atacurile de preimaj depinde de C , iar dimensiunea acesteia („capacitatea” c ) este de obicei de două ori mai mare decât nivelul dorit de rezistență.

Construcție duplex

De asemenea, este posibilă absorbția și stoarcerea într-o manieră alternativă. Această operație se numește construcție duplex sau duplex. Poate fi baza unui sistem de criptare autentificat cu o singură trecere.

  • Starea S este inițiată la zero
  • R este XORed cu primul r bloc -bit de intrare
  • S se înlocuiește cu f ( S )
  • R este acum primul r biți de ieșire.
  • R este XORed cu următorul bloc r- bit al intrării
  • S se înlocuiește cu f ( S )
  • R este acum următorii r biți ai ieșirii.
  • ...

Modul de suprascriere

Este posibil să omiteți operațiunile XOR în timpul absorbției, menținând totuși nivelul de securitate ales . În acest mod, în faza de absorbție, următorul bloc de intrare suprascrie partea R a stării. Aceasta permite păstrarea unei stări mai mici între trepte. Din moment ce partea R va fi suprascrisă, poate fi aruncată în prealabil, trebuie păstrată doar partea C.

Aplicații

Funcțiile de burete au atât utilizări teoretice, cât și practice. În criptaanaliza teoretică, o funcție de burete aleatorie este o construcție de burete unde f este o permutare sau transformare aleatorie, după caz. Funcțiile de burete aleatoriu surprind mai multe limitări practice ale primitivilor criptografice decât modelul de oracol aleatoriu utilizat pe scară largă , în special starea internă finită.

Construcția de burete poate fi folosită și pentru a construi primitive criptografice practice. De exemplu, burețelul criptografic Keccak cu o stare de 1600 de biți a fost selectat de NIST drept câștigător în competiția SHA-3 . Puterea deriva Keccak de complicate, multi-rotund permutare f că autorii săi dezvoltat. Proiectarea RC4 numită Spritz se referă la construcția buretei pentru a defini algoritmul.

Pentru un alt exemplu, o funcție burete poate fi utilizată pentru a crea criptare autentificată cu date asociate (AEAD).

Referințe