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.