it-swarm-vi.com

Sự khác biệt giữa Hàm Hash và Hàm Hash Mật mã là gì?

Ý tôi là, đó chỉ là vấn đề "khó khăn như thế nào để đảo ngược chức năng với công nghệ hiện tại"?

Hoặc có một khái niệm toán học hoặc tài sản làm cho chúng khác nhau?

Nếu đó là vấn đề "khó khăn như thế nào để đảo ngược chức năng", thì có đúng không khi nói rằng với sự tiến bộ của công nghệ, một số Hàm băm mật mã ngừng trở thành Mật mã chỉ là Hàm băm? Đây có phải là những gì đã xảy ra với MD5?

56
Mr.Eddart

Mỗi hàm băm mật mã là một hàm băm. Nhưng không phải mọi hàm băm đều là hàm băm mật mã.

Hàm băm mật mã nhằm đảm bảo một số thuộc tính bảo mật. Quan trọng nhất là khó tìm thấy va chạm hoặc hình ảnh trước và đầu ra xuất hiện ngẫu nhiên. (Có một vài thuộc tính nữa và "cứng" có giới hạn được xác định rõ trong bối cảnh này, nhưng điều đó không quan trọng ở đây.)

Các hàm băm không mật mã chỉ cố gắng tránh va chạm cho đầu vào không độc hại. Một số nhằm mục đích phát hiện các thay đổi ngẫu nhiên trong dữ liệu (CRC), một số khác cố gắng đặt các đối tượng vào các nhóm khác nhau trong một bảng băm với càng ít va chạm càng tốt.

Để đổi lấy sự đảm bảo yếu hơn, chúng thường nhanh hơn (nhiều).

Tôi vẫn gọi MD5 là hàm băm mật mã, vì nó nhằm mục đích cung cấp bảo mật. Nhưng nó đã bị hỏng và do đó không còn có thể sử dụng như một hàm băm mật mã. Mặt khác, khi bạn có hàm băm không mã hóa, bạn thực sự không thể gọi nó là "bị hỏng", vì nó không bao giờ cố gắng bảo mật ở vị trí đầu tiên.

62
CodesInChaos

Có một số thuộc tính mà các hàm băm bảo mật bằng mật mã yêu cầu mạnh mẽ, không yêu cầu quá cao đối với các hàm băm không bảo mật bằng mật mã:

  • kháng tiền đề (được đưa ra một hàm băm h rất khó tìm thấy thông báo m mang lại h khi được băm
  • khả năng chống va chạm yếu (đưa ra một thông báo m1 thật khó để tìm thấy một tin nhắn khác m2 vậy nên m1m2 mang lại cùng một hàm băm)
  • khả năng chống va chạm mạnh (rất khó tìm thấy bất kỳ tin nhắn nào m1m2 mang lại cùng một hàm băm)

Trong những điểm đó, bạn thấy rất nhiều khó, đây là thước đo định tính thay vì định lượng. Câu trả lời tốt nhất ở đây là tính khả thi: có một dòng mờ khi một thứ gì đó trở nên khả thi và những dòng đó di chuyển theo thời gian (vì khả năng tính toán tăng theo cấp số nhân theo Định luật Moore, một khi các vấn đề khó có thể được giải quyết bằng điện thoại di động của bạn).

Nói chung, thực tế tốt khi cho rằng khó có nghĩa là thời gian để đạt được mục tiêu nào đó đã hoàn thành NP. Điều này có nghĩa là thời gian cần thiết để phá vỡ băm phát triển mạnh mẽ khi bạn tăng chiều dài băm.

Một điểm khác là, thuật toán băm bảo mật bằng mật mã có thể hữu ích trong một số ứng dụng, nhưng không phải trong các ứng dụng khác. Nó phụ thuộc vào mô hình kẻ tấn công của bạn, bản chất của thông tin bạn muốn bảo vệ và những thứ như yêu cầu về hiệu suất (theo nguyên tắc chung, các đặc tính mật mã của hàm băm càng tốt, hành vi thời gian chạy của nó càng tệ).

21
jupp0r

Tôi muốn nói rằng hai điều quan trọng cần hiểu ở đây là:

  1. Thuật ngữ "hàm băm" là mơ hồ hoặc chính xác hơn, polysemous: nó có một "họ" nghĩa có liên quan chặt chẽ nhưng khác biệt. Nếu ai đó gắn nhãn một hàm là "hàm băm", thì nhãn đơn giản là không cho bạn biết các thuộc tính mà hàm đó phải có. Bạn phải kiểm tra bối cảnh sử dụng thuật ngữ này và các yêu cầu của bối cảnh đó.
  2. Thuật ngữ "hàm băm mật mã" là một cách hiểu sai một chút, nó trông giống như một mô tả, nhưng nó có một định nghĩa kỹ thuật liên quan mà bản thân thuật ngữ này không thực sự mô tả. Nói một cách đơn giản, có các hàm như mã xác thực tin nhắn (MAC) thường được gắn nhãn là hàm băm và cung cấp một số dạng bảo mật mã hóa, nhưng không phải là "hàm băm mật mã" theo cách thông thường Định nghĩa.

Thuật ngữ "hàm băm mật mã" thường được sử dụng để chỉ những gì có thể được gắn nhãn tốt hơn là hàm băm chống va chạm , là công khai Hàm ("công khai" = không yêu cầu khóa bí mật) bắt buộc phải có ba thuộc tính này:

  • Kháng tiền giả thứ hai: Với giá trị ngẫu nhiên m1 Được chọn bởi một bên trung thực, sẽ rất tốn kém khi kẻ tấn công tìm thấy bất kỳ giá trị nào m2 ≠ m1 Sao cho hash(m1) = hash(m2).
  • Kháng chiến trước: Đối với một giá trị ngẫu nhiên h được chọn bởi một bên trung thực, sẽ rất tốn kém khi kẻ tấn công tìm thấy bất kỳ giá trị nào m sao cho hash(m) = h.
  • Kháng va chạm: Kẻ tấn công rất tốn kém khi tìm bất kỳ cặp giá trị nào m1 ≠ m2 Sao cho hash(m1) = hash(m2).

Có một thuộc tính thứ tư mà các hàm băm mật mã cũ không thành công nhưng các hàm mới hơn như SHA-3 và Blake2 được thiết kế để đạt được:

  • Tính không phân biệt ngẫu nhiên của Oracle: Điều này hoàn toàn không thể giải thích ngắn gọn, nhưng chúng ta hãy bỏ qua điều này: rất tốn kém cho kẻ tấn công để tìm ra bất kỳ mối tương quan giữa các đầu ra của đầu vào của sự lựa chọn của họ.

Thuộc tính Oracle ngẫu nhiên (khi được xây dựng chính xác) ngụ ý ba thuộc tính trước đó, cũng như các thuộc tính bổ sung như không có hiệu quả tấn công mở rộng chiều dài . (Tiện ích mở rộng độ dài là lý do rõ ràng nhất khiến các hàm băm cũ hơn như SHA-256 và SHA-512 không thành công thuộc tính Oracle ngẫu nhiên.)

3
Luis Casillas