Điểm:0

SHA-256 không tuân theo phân phối thống nhất?

lá cờ vn
Bob

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.

kelalaka avatar
lá cờ in
giá trị băm của bạn lưu trữ $64*8 = 512$ bit, tuy nhiên, SHA-256 có 256 bit, hãy xác định nó là `hash::Array{UInt8} = Array{UInt8}(undef, 32) # mảng 32 byte`
fgrieu avatar
lá cờ ng
Tôi nhớ những tuyên bố tương tự trước đó rằng đầu ra của [a hash](http://eprint.iacr.org/2002/099) hoặc [a block cipher](http://eprint.iacr.org/2003/003) là không ngẫu nhiên. Họ [hóa ra là sai](https://eprint.iacr.org/2003/022). Đầu ra của SHA-256 (dành cho các đầu vào riêng biệt được chuẩn bị độc lập với các hằng số trong SHA-256) có thể sử dụng để xác thực các thử nghiệm thống kê. Độc lập: tuyên bố cần được thể hiện độc lập với mã Julia và bao gồm mô tả về thử nghiệm thống kê được thực hiện.
kelalaka avatar
lá cờ in
Xem tương tự [Làm cách nào để có đầu ra SHA-1 với 2 bit đầu tiên là số không?](https://crypto.stackexchange.com/q/83224/18298)
Meir Maor avatar
lá cờ in
Tôi đã bỏ phiếu để mở lại ngay cả khi không có những cải tiến mà fgrieu đề xuất. SHA256 sẽ không thất bại trong một bài kiểm tra thống kê đơn giản, tôi sẽ thử kiểm tra các bit riêng lẻ và các cặp bit để thuyết phục bản thân rằng nó gần như đồng nhất. Nếu bạn nhấn mạnh vào bài kiểm tra mà bạn đã áp dụng, hãy xem cách bạn đang chuyển đổi sang dạng số, rất có khả năng xảy ra lỗi ở đó.
Paul Uszak avatar
lá cờ cn
Điều này thực sự rất đơn giản. Tạo 1GB nội dung ở chế độ bộ đếm và chạy `ent` trên đó. Nếu nó trôi qua thì cũng vậy thôi. Nếu nó không thành công, thì mã của bạn cũng vậy ...
Điểm:2
lá cờ ng

Một lần nữa, chúng tôi không phải là trang web đánh giá mã, đặc biệt là mã bằng ngôn ngữ hiếm khi được sử dụng cho mật mã. Và có những vấn đề rõ ràng với mã:

  • sha256_num_vals_control được tính toán nhưng không được sử dụng, khi có lẽ mục đích là như vậy.
  • Tôi không thể thấy một nỗ lực nào để bình thường hóa tài liệu được tạo thành khoảng thời gian $[0,1)$, cũng không phải là đầu vào cho Một MẫuADTest chỉ định một phạm vi.

Tôi kết luận các mẫu cho Một MẫuADTest không được định dạng như mong đợi cho thử nghiệm này. Không đúng định dạng trong, rác ra.

Ngay cả khi các mẫu được định dạng chính xác, mật mã sẽ không quan tâm đến các lỗi trong OneSampleADTest trong một phiên bản nhất định của Julia và thư viện được sử dụng. Nó sẽ quan tâm đến một tuyên bố hợp lệ rằng đầu ra SHA-256 cho các đầu vào riêng biệt được chuẩn bị độc lập với các hằng số trong SHA-256 có thể được phân biệt với ngẫu nhiên. Nhưng tuyên bố phi thường như vậy sẽ cần bằng chứng phi thường. Và sơ bộ, một mô tả độc lập với ngôn ngữ và thư viện của nó.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.