Puncte:0

SHA-256 nu urmează o distribuție uniformă?

drapel vn
Bob

M-am jucat cu SHA-2-256 în Julia și am observat că hashurile produse nu par să urmeze o distribuție uniformă. Înțelegerea mea despre algoritmii de hashing securizați este că aceștia ar trebui să aproximeze bine o distribuție uniformă, deci nu sunt previzibili.

Iată codul Julia pe care îl folosesc:

folosind BitIntegers, Distributions, HypothesisTests, Random, SHA

funcția sha256_rounds()
    runde::Matrice{Matrice{UInt8,1}} = Matrice{Matrice{UInt8,1}}(undef, 10000) # 10000 de mostre
    hash::Matrice{UInt8} = Matrice{UInt8}(undef, 64) # matrice de 64 de octeți

    pentru i = 1:10000
        hash = sha2_256(string(rand(UInt64), base = 16)) # Număr aleatoriu, convertiți în șir hexadecimal, apoi semințe
        rounds[i] = hash
    Sfârşit

    runde de întoarcere
Sfârşit

sha256_str_vals = [join([string(x, base = 16) for x in y]) for y in sha256_rounds()] # Uniți octeții împreună în șiruri
sha256_num_vals_control = [parse(UInt256, x, base = 16) for x in sha256_str_vals] # Obțineți valoarea numerică din șiruri

OneSampleADTest(sha256_num_vals, Uniform()) # O probă de test Anderson-Darling

Și rezultatul testului:

Un eșantion de test Anderson-Darling
---------------------------------
Detalii despre populație:
    parametru de interes: neimplementat încă
    valoare sub h_0: NaN
    estimare punctuală: NaN

Rezumatul testului:
    rezultat cu 95% de încredere: respinge h_0
    valoare p unilaterală: <1e-7

Detalii:
    număr de observații: 10000
    medie eșantion: 8.73991847621225e75
    eșantion SD: 2.2742656031884893e76
    Statistică A²: Inf

Pentru mine, asta spune că hashe-urile produse nu se conformează unei distribuții uniforme. Folosesc incorect testul sau eșantionul meu este defect? Mulțumesc pentru gândurile tale.

kelalaka avatar
drapel in
valoarea hash stochează $64*8 = 512$ biți, totuși, SHA-256 are 256 de biți, definiți-l ca `hash::Array{UInt8} = Array{UInt8}(undef, 32) # 32-byte array`
fgrieu avatar
drapel ng
Îmi amintesc afirmații similare anterioare conform cărora [un hash](http://eprint.iacr.org/2002/099) sau [un cifru bloc](http://eprint.iacr.org/2003/003) este nu întâmplător. Ei [s-au dovedit a fi greșit](https://eprint.iacr.org/2003/022). Ieșirile lui SHA-256 (pentru intrări distincte pregătite independent de constantele din SHA-256) sunt utilizabile pentru a valida teste statistice. Independent: afirmația trebuie să fie exprimată independent de codul Julia și să includă o descriere a testului statistic efectuat.
kelalaka avatar
drapel in
Priviți în mod similar [Cum să obțineți o ieșire a lui SHA-1 cu primii 2 biți sunt zerouri?](https://crypto.stackexchange.com/q/83224/18298)
Meir Maor avatar
drapel in
Am votat redeschiderea chiar și fără îmbunătățirile sugerate de fgrieu. SHA256 nu va eșua la un simplu test statistic, aș încerca să testez biți individuali și perechi de biți, pentru a mă convinge de uniformitate aproximativă. Dacă insistați asupra testului pe care l-ați aplicat, uitați-vă la modul în care faceți conversia la numere, este foarte probabil ca bug-ul să fie acolo.
Paul Uszak avatar
drapel cn
Acest lucru este de fapt foarte simplu. Generați 1 GB de lucruri în modul contor și rulați `ent` pe el. Daca trece asa sa fie. Dacă eșuează, atunci și codul tău...
Puncte:2
drapel ng

Din nou, nu suntem un site de revizuire a codului, mai ales pentru codul într-un limbaj rar folosit pentru criptografie. Și există probleme evidente cu codul:

  • sha256_num_vals_control este calculat, dar nu este utilizat, atunci când se presupune că intenția a fost aceea că este.
  • Nu văd nici o încercare de a normaliza materialul generat la interval $[0,1)$, nici o intrare la OneSampleADTest specificarea unui interval.

Închei mostrele pentru OneSampleADTest nu sunt formatate conform așteptărilor pentru acest test. Malformat înăuntru, gunoiul afară.

Chiar dacă mostrele ar fi formatate corect, criptografiei nu i-ar păsa de erori în OneSampleADTest într-o anumită versiune a Julia și a bibliotecii utilizate. Ar avea grijă de o afirmație validă că ieșirea SHA-256 pentru intrări distincte pregătite independent de constantele din SHA-256 poate fi distinsă de aleatorie. Dar o astfel de afirmație extraordinară ar avea nevoie de dovezi extraordinare. Și, în prealabil, o descriere independentă de limbă și de bibliotecile sale.

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.