Puncte:2

Cum se generează un circuit pentru SHA-256?

drapel ie

În „Un circuit boolean pentru SHA-256” de Steven Goldfeder, autorul oferă un circuit boolean pentru SHA-256. Mi se pare foarte complicată această metodă.

Pot să întreb cum să construiesc un circuit boolean pentru o funcție hash? Adică, având în vedere un algoritm al unei funcții hash, cum se transformă într-un circuit ca în articol?

fgrieu avatar
drapel ng
Întrebarea este concentrată pe SHA-256 (ca în titlu) sau întrebarea în general (ca în ultima propoziție a corpului)? Se dorește o expresie strict booleană (după cum este necesar, de ex.dovadă de cunoaștere a valorii cu un hash dat) sau ceva pentru un design din silicon (care, după toate probabilitățile, va fi secvenţial într-o anumită măsură)? De asemenea, ar putea fi util să spunem lungimea de intrare vizată și de ce se crede că expresia legată este „foarte complicată”, având în vedere [specificația SHA-256](https://nvlpubs.nist.gov/nistpubs/FIPS/ NIST.FIPS.180-4.pdf#page=6).
user77340 avatar
drapel ie
@fgrieu da, de fapt intreb in general.
Puncte:2
drapel ng

dat un algoritm al unei funcții hash, cum se transformă într-un circuit?

Cel mai important, mai întâi dorim să expunem mai bine problema

  • Ce funcție hash?
  • Dorim un circuit pentru funcția hash completă și o intrare cu lungime fixă ​​[care pare să se potrivească cel mai bine cu întrebarea] sau pentru o parte a hashului [cum ar fi o rundă a funcției hash cu introducerea unui bloc de mesaj captusit în material legat, dacă am citit corect]?
  • De ce vrem „un circuit”? Acest lucru va afecta natura a ceea ce producem.
    • O dovadă de zero cunoștințe care implică hash ca în exemplul legat? Aceasta se va îndrepta către o expresie ca un lung lanț de porți limitat la unele soiuri (aici XOR, ȘI, și INV)
    • Testarea cât de pură Rezolvator SAT se ocupă de rezolvarea unei probleme legate de hash (cum ar fi preimagine)? Expresia va fi de obicei și mai restrânsă (fără XOR), pe de altă parte, negația este de obicei liberă.
    • Realizare optimizată în silicon sau FPGA? De obicei, o puritate prea profundă Expresie booleană va fi inutil, vom avea nevoie de zăvoare intermediare și, cu excepția cazului în care totul este profund canalizat sau hash-ul teribil de neregulat, vom avea o anumită logică reutilizată în runde. Nu voi acoperi asta.
  • În ce formă vrem rezultatul? Pentru un circuit pur boolean, majoritatea formatelor vor numerota variabile. Presupun că exemplu are 512 intrări numerotate de la 0 la 511, 116246 porți (una pe linie) fiecare producând o nouă variabilă pentru un total de 116758 variabile și 256 ieșiri (ar putea fi variabile de la 116502 la 116757, nu sunt sigur), cu aceasta descrisă în primele două rânduri după o convenție simplă. Mai jos sunt câte o poartă pe linie, cred că pentru fiecare
    • numărul de intrări [1 pentru NOT și 2 pentru altele din exemplu]
    • numărul de ieșiri [1 în exemplu]
    • lista de intrări
    • lista cu [unul] ieșiri
    • numele porții [XOR, AND, INV în exemplu]

Restul urmează în linii mari tehnica omului cavernelor de a mânca un mamut (o bucată la un moment dat) și progresul de acolo (instrumente).

Luăm algoritmul pas cu pas, derulând fiecare buclă și exprimăm fiecare pas ca ecuații booleene. De exemplu, dacă toate variabilele sunt pe 32 de biți (ca în SHA-256):

  • o afirmatie ca C = A ^ B poate fi tradus în 32 de variabile noi pentru C, ieșite de 32 de porți XOR, necesitând 32 de linii. Trebuie să ținem evidența numerelor care desemnează noile variabile cărora le sunt atribuite C.
  • E = C + D necesită variabile intermediare, deci mai multe linii. Avem nevoie de 30 sumatori plini, și apoi două simplificate (fără executare pentru bitul de înaltă calitate care se reduce astfel la un XOR; fără transfer pentru primul care se reduce astfel la un XOR și un AND).
  • F = (E<<3)|(E>>29) nu ar necesita nicio linie, doar o reatribuire a variabilelor pentru E.

Există câteva trucuri care pot obține uneori expresii mai simple, dar pentru hashe-uri de interes criptografic expresia va rămâne lungă. Dacă nu ar fi, hașul ar fi slab.

Este destul de ușor să faci un program care să facă asta de la zero și, din experiența mea, este mai ușor decât să găsești și să stăpânești ceva adecvat. Instrumentele existente pot fi utile pentru a simplifica automat expresiile, dar pentru majoritatea hashurilor criptografice o mică analiză a ecuațiilor hash-ului va obține cele mai multe simplificări posibile și ar putea oferi rezultate mai bune decât instrumentele automate.

user77340 avatar
drapel ie
Multumesc pentru raspunsul tau! Da, vreau să-l folosesc pentru implementarea MPC sau, în mod concret, proiectez un protocol de calcul securizat cu două părți, în care probatorul trebuie să dovedească imaginea prealabilă a SHA256. Deci, fișierul din „A Boolean Circuit for SHA-256” de Steven Goldfeder” este ceea ce vreau. Cu toate acestea, circuitul pe care îl proiectează este pentru intrare cu lungime fixă, în timp ce vreau un circuit pentru intrare cu lungime arbitrară. Încă mă lupt. e. Mulțumesc mult!
fgrieu avatar
drapel ng
@user77340: pentru SHA-256 și intrare de $b$ biți până la $512-64-1=447$-bit ($55$-byte), există un singur bloc și se obține prin adăugarea la intrare a unor $512-b $ biți depinzând doar de $b$ și apoi aplicați ecuațiile rotunde (este instructiv să le derivați și indispensabil să le verificați. De asemenea, unii $55$ din biții $512-b$ sunt întotdeauna $0$, crescând la $65$ pentru intrare aliniată la octeți, permițând câteva simplificări ușoare. Pentru o lungime arbitrară, trebuie să adăugați $(-65-b\bmod512)+65$ biți și să aplicați $\lceil (b+65)/512\rceil$ ori ecuațiile rotunde .

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.