Các thuật toán băm 'phản xạ' có tồn tại không?


11

Có một lớp các thuật toán băm, cho dù là lý thuyết hay thực tế, sao cho một thuật toán trong lớp có thể được coi là 'phản xạ' theo một định nghĩa được đưa ra dưới đây:

  • hash1 = algo1 ("văn bản đầu vào 1")
  • hash1 = algo1 ("văn bản đầu vào 1" + hash1)

Toán tử + có thể được nối hoặc bất kỳ thao tác được chỉ định nào khác để kết hợp đầu ra (hash1) trở lại đầu vào ("văn bản đầu vào 1") để thuật toán (algo1) sẽ tạo ra kết quả chính xác như nhau. tức là va chạm vào đầu vào và đầu vào + đầu ra. Toán tử + phải kết hợp toàn bộ cả hai đầu vào và thuật toán có thể không loại bỏ một phần của đầu vào.

Thuật toán phải tạo ra entropy cao trong đầu ra. Nó có thể, nhưng không cần, khó mã hóa để đảo ngược đầu ra trở lại một hoặc cả hai đầu vào có thể.

Tôi không phải là một nhà toán học, nhưng một câu trả lời tốt có thể bao gồm một bằng chứng về lý do tại sao một loại thuật toán như vậy không thể tồn tại. Đây không phải là một câu hỏi trừu tượng, tuy nhiên. Tôi thực sự quan tâm đến việc sử dụng một thuật toán như vậy trong hệ thống của mình, nếu nó tồn tại.

Đây là bản sao của câu hỏi được đăng lần đầu tiên tại /programming/4823680/reflexive-hash



2
Bạn có quan tâm đến thuộc tính này giữ cho tất cả văn bản đầu vào hoặc cho một văn bản đầu vào không? Nếu bạn muốn nó giữ cho tất cả các văn bản đầu vào thì việc xây dựng các xung đột là không đáng kể theo thiết kế vì vậy tôi không nghĩ rằng nó có thể được coi là một hàm băm tốt.
Peter Taylor

Ai đó muốn băm các tập tin có chứa băm của riêng họ! ;)
Raphael

@Peter Taylor - Tôi đang tìm kiếm một chức năng hoạt động như được mô tả cho văn bản đầu vào tùy ý. Mỗi đầu vào khác nhau tạo ra một hàm băm mà nói chung có entropy cao cho mọi đầu vào có thể khác. Nhiều như một hàm băm không thể đảo ngược hoạt động tốt. Tuy nhiên, hàm băm tôi đang tìm kiếm không cần phải có thuộc tính không thể đảo ngược. Entropy cao là đủ.

@Raphael - Đúng, đó là một cách ngắn gọn để đặt nó.

Câu trả lời:


9

Tôi đưa ra một công trình tầm thường thỏa mãn yêu cầu. Tôi cung cấp nó để chỉ trả lời sự tồn tại của hàm băm "phản xạ".

GGkk+|x|x

Hx

  1. |x|kH(x)=defG(x)
  2. |x|>kLR(|x|k)kxx=L+R|R|=kR=H(L)H(L)H(x)=defRH(x)=defG(x)

Như tôi đã nói, đây là một công trình tầm thường. Nó có thể được áp dụng cho bất kỳ hàm băm nào, thực tế (như MD5, SHA-1, ...) hoặc lý thuyết.


H|R|=k

@Raphael: Cảm ơn bạn đã chỉ ra lỗi đánh máy (đã sửa). H có cùng entropy với G, trừ khi trong điều kiện R = G (L). Theo yêu cầu, trong điều kiện này, H (x) phải bằng R. Chúng ta không thể làm gì ở đây để tăng entropy; vì yêu cầu "tính phản xạ" ngăn chúng ta thay đổi đầu ra.
MS Dousti

@Sadeq: Có yêu cầu hàm băm được tính toán đệ quy không? Tôi thuật toán được hưởng lợi từ thực tế này trong bất kỳ cách nào?
Yasser Sobhdel

H(M+H(M)+H(M)++H(M))H(M)

Sadeq, cảm ơn bạn. Tôi tin rằng điều này có thể trả lời câu hỏi của tôi, vì nó đã được hỏi. Bạn đã đi văng câu trả lời trong một cảnh báo phù hợp. Từ quan điểm thực dụng, tôi thích thực tế rằng đó là lớp phủ cho bất kỳ thuật toán nổi tiếng nào như SHA-1. Nếu tôi đã hiểu chính xác, thuật toán của bạn sẽ tiếp tục tính toán băm theo cách đệ quy cho đến khi nó chạm vào xung đột cần thiết và sau đó nó dừng lại. Trong trường hợp đó có lẽ chúng ta có thể gọi đây là giải pháp ngây thơ. Mối quan tâm của tôi là dường như có một giả định ngầm định rằng thuật toán nhúng (SHA-1 nói) cuối cùng sẽ đạt được hàm băm va chạm cần thiết, được đưa ra
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.