Tôi đã chơi với SHA-2-256 ở Julia và tôi nhận thấy rằng các giá trị băm được tạo ra dường như không tuân theo phân phối đồng đều. Sự hiểu biết của tôi về các thuật toán băm an toàn là chúng phải xấp xỉ phân phối đồng đều, vì vậy chúng không thể dự đoán được.
Đây là mã Julia tôi đang sử dụng:
sử dụng BitIntegers, Phân phối, Thử nghiệm Giả thuyết, Ngẫu nhiên, SHA
hàm sha256_rounds()
round::Array{Array{UInt8,1}} = Array{Array{UInt8,1}}(undef, 10000) # 10000 Mẫu
hash::Array{UInt8} = Array{UInt8}(undef, 64) # Mảng 64 byte
với tôi = 1:10000
hash = sha2_256(string(rand(UInt64), base = 16)) # Số ngẫu nhiên, chuyển đổi thành chuỗi hex, sau đó khởi tạo
vòng [i] = băm
chấm dứt
lượt về
chấm dứt
sha256_str_vals = [join([string(x, base = 16) for x in y]) for y in sha256_rounds()] # Ghép các byte lại với nhau thành chuỗi
sha256_num_vals_control = [parse(UInt256, x, base = 16) for x in sha256_str_vals] # Lấy giá trị số từ các chuỗi
OneSampleADTest(sha256_num_vals, Uniform()) # Một bài kiểm tra Anderson-Darling mẫu
Và kết quả của bài kiểm tra:
Một bài kiểm tra Anderson-Darling mẫu
--------------------------------
Chi tiết dân số:
tham số quan tâm: chưa được triển khai
giá trị dưới h_0: NaN
ước tính điểm: NaN
Tóm tắt thử nghiệm:
kết quả với độ tin cậy 95%: từ chối h_0
giá trị p một phía: <1e-7
Chi tiết:
số quan sát: 10000
trung bình mẫu: 8.73991847621225e75
SD mẫu: 2.2742656031884893e76
thống kê A²: Inf
Đối với tôi, điều này nói rằng các giá trị băm được tạo ra không tuân theo phân phối đồng đều. Tôi đang sử dụng bài kiểm tra không chính xác hay mẫu của tôi bị lỗi? Cảm ơn bạn đã suy nghĩ của bạn.