Điểm:3

Các thuộc tính của một hàm băm là gì?

lá cờ gr

Tôi đã tạo một hàm băm. Nếu tôi được hỏi liệu nó có phù hợp với định nghĩa của hàm băm hay không, tôi chỉ biết rằng nó phải có đầu ra có kích thước cố định. Tôi sử dụng phép nhân và cộng mọi ký tự văn bản gốc với số ngẫu nhiên mà tôi đã chỉ định.

Ngoài đầu ra có kích thước cố định, hàm băm phải có những đặc điểm nào khác và tại sao?

poncho avatar
lá cờ my
Bạn đang hỏi về hàm băm mật mã hay chỉ là hàm băm (giả sử, để sử dụng trong bảng băm)?
lá cờ gr
Tôi đang yêu cầu một hàm băm.
Maarten Bodewes avatar
lá cờ in
Điều đó thật tuyệt, nhưng đây là [crypto.se]. Nếu bạn muốn một định nghĩa rộng hơn, bạn có thể muốn truy cập ví dụ: [cs.se].
Điểm:6
lá cờ ng

Từ quan điểm mật mã, hàm băm với đầu ra có kích thước cố định:

  • Phải là một hàm xác định: cùng một đầu vào phải luôn tạo ra cùng một đầu ra.
  • Phải chấp nhận thông báo đầu vào trong một bộ đầu vào rộng. Lý tưởng nhất đó phải là chuỗi bit tùy ý, nhưng thường là chuỗi byte hoặc chuỗi ký tự tùy ý, có thể lên đến một số kích thước.
  • Baring vòng loại đặc biệt (như có khóa hoặc bí mật hoặc ngẫu nhiên), phải được công khai: tất cả các bước và hằng số cần thiết để tính toán đầu ra cho bất kỳ đầu vào cụ thể nào đều được biết đến.
  • Phải tính toán kết quả của nó trong đa thức thời gian với kích thước đầu vào. Đó phải là thời gian gần như tuyến tính với kích thước đầu vào.
  • Nên có chống va chạm: không thể tính toán để hiển thị hai thông báo riêng biệt với cùng một đầu ra (thuộc tính này ngụ ý điện trở tiền ảnh thứ hai, tức là được cung cấp một đầu vào ngẫu nhiên, về mặt tính toán không thể tìm thấy một đầu vào khác mang lại cùng một đầu ra). Chú ý rằng nếu có $n$ đầu ra có thể, có những cuộc tấn công chung phá vỡ khả năng chống va chạm với khoảng $\sqrt n$ đánh giá chức năng, do đó khả năng chống va chạm ngụ ý $n$ là lớn (giả sử, ít nhất $2^{192}$ ngày nay); nếu không, định nghĩa về khả năng chống va chạm phải được nới lỏng thành: phương pháp tốt nhất để thể hiện hai thông báo riêng biệt với cùng một đầu ra là một cuộc tấn công chung.
  • Nên có (đầu tiên) kháng ảnh trước: được cung cấp đầu ra cho một đầu vào ngẫu nhiên chưa biết, về mặt tính toán không thể tìm thấy đầu vào đó (hoặc một đầu vào khác có cùng đầu ra) dễ dàng hơn bằng cách thử các đầu vào. Chú ý rằng nếu có $n$ các kết quả đầu ra có thể, có các cuộc tấn công chung phá vỡ khả năng kháng ảnh trước với khoảng $n$ các đánh giá của chức năng, do đó, khả năng chống ảnh hưởng ngụ ý $n$ là lớn (giả sử, ít nhất $2^{96}$ ngày nay); nếu không, định nghĩa về khả năng chống tạo ảnh trước phải được nới lỏng.

Tổng quát hơn, hàm băm mật mã hiện đại nên hoạt động rộng rãi như một tiên tri ngẫu nhiên, đó là một hộp thực hiện một chức năng, đầu ra này là ngẫu nhiên cho mọi đầu vào cụ thể. Đối với bộ đầu ra đủ lớn, điều đó có nghĩa là khả năng chống va chạm, khả năng chống tạo ảnh trước, v.v.:

  • Đối với đầu vào ngẫu nhiên không xác định có bất kỳ đặc tính tự nhiên nào (nghĩa là không phụ thuộc vào định nghĩa của hàm băm; ví dụ: đầu vào bao gồm 40 chữ số thập phân có tổng chia hết cho 10), đầu ra phải không thể phân biệt bằng tính toán với ngẫu nhiên thống nhất trong bộ đầu ra.
  • Khả năng chống tấn công kéo dài: đầu ra được cung cấp cho đầu vào không xác định $M$, không thể tính toán đầu ra cho đầu vào một phần mở rộng của $M$ (đó là $M\mathbin\|E$ cho không trống $E$) dễ dàng hơn bằng cách tìm $M$ bằng cách thử đầu vào. Lưu ý rằng các giá trị băm phổ biến như SHA-256 không có thuộc tính sau này.
user3742898 avatar
lá cờ jp
Tôi sẽ phân biệt giữa "hàm băm có" (đầu ra có kích thước cố định, là một hàm, chấp nhận tất cả các đầu vào có liên quan) và "hàm băm _worthwhile_ có" (thời gian tuyến tính, chống va chạm, chống ảnh hưởng trước). "trả về 0;" là một hàm băm. Đó là một hàm băm khủng khiếp, nhưng nó là một hàm băm. Hàm băm xấu thường hữu ích khi tìm lỗi trong thuật toán sử dụng hàm băm hoặc để giúp làm rõ thuộc tính nào (tốc độ, khả năng chống va chạm,...) là quan trọng nhất đối với một ứng dụng nhất định.
Blindy avatar
lá cờ in
Vì OP đã làm rõ rằng anh ấy không nói về các hàm băm bảo mật bằng mật mã, tôi tin rằng ba điểm nên được nới lỏng trong định nghĩa của bạn: 1. không cần phải công khai hàm này để nó trở thành một hàm băm tốt (đánh giá ngang hàng là hữu ích, nhưng không cần thiết), 2. Với đầu vào lớn và nhu cầu băm nhanh, các phép trùng lặp "không thể tính toán" chỉ là một gợi ý và 3. việc đảo ngược hàm không thể về cơ bản là không cần thiết, `f(x) = x` là một cách rất nhanh và hiệu quả để băm một số nguyên.
fgrieu avatar
lá cờ ng
@Blindly: vì OP đã đồng thời hỏi [câu hỏi dành cho người mới bắt đầu sử dụng tiền điện tử](https://crypto.stackexchange.com/q/92044/555), nên tôi đã quyết định nhận câu hỏi và "Tôi đang yêu cầu một hàm băm function" như một dấu hiệu cho thấy OP không biết hàm băm mật mã là gì, chứ không phải là dấu hiệu cho thấy câu hỏi không phải về tiền điện tử.
poncho avatar
lá cờ my
Trên thực tế, hàm băm xấu về mật mã có thể được sử dụng tốt hơn trong bảng băm so với hàm tốt - nghĩa là, nó có thể gây ra ít lần nén băm dự kiến ​​hơn so với hàm tìm kiếm ngẫu nhiên. Điều đó có thể xảy ra tùy thuộc vào sự phân phối của các yếu tố đầu vào; một hàm băm (không mã hóa) được lựa chọn tốt có thể trải rộng các kết quả đầu ra của nó tốt hơn mong đợi.

Đă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.