Điểm:4

Tại sao hàm băm quá nhanh không an toàn?

lá cờ cn

Tôi hiểu tại sao chúng ta cần các hàm băm đủ nhanh để xử lý nhưng đủ chậm để bảo mật. Nhưng tôi không hiểu tại sao hàm băm rất nhanh có thể gây ra xung đột. Tôi đoán là một hàm băm rất nhanh tạo ra một số lượng nhỏ bit làm đầu ra, điều đó có nghĩa là xác suất va chạm cao hơn. Ai đó có thể sửa tôi?

kelalaka avatar
lá cờ in
Bạn lấy "hàm băm rất nhanh có thể gây ra xung đột" ở đâu? Bạn đang nói về loại hàm băm nào? Bạn xem xét loại ứng dụng nào? Bạn có biết rằng các thuật toán băm mật khẩu không cần khả năng chống va chạm không?... Bạn sử dụng số liệu nào cho quá nhanh?
Seif Ashraf avatar
lá cờ cn
kiểm tra cái này: https://youtu.be/b4b8ktEV4Bg?t=279
kelalaka avatar
lá cờ in
Tôi hiểu rồi, dựa trên các lập luận của video, tôi [đã viết phản hồi cho họ](https://crypto.stackexchange.com/a/95430/18298)
Điểm:22
lá cờ ng

Trong hầu hết các ứng dụng, điều mong muốn là hàm băm phải nhanh và sẽ không có vấn đề gì nếu nó cực nhanh (giả sử, nhanh như đầu vào trong bộ nhớ cache có thể tiếp cận CPU) nếu đó không phải là chi phí bảo mật. Điều này bao gồm việc sử dụng chữ ký, đệm mã hóa, xây dựng mật mã khối.

Trong ứng dụng đang làm kéo dài phím, bao gồm kiểm soát truy cập bằng mật khẩu hoặc lấy khóa mã hóa đối xứng từ cụm mật khẩu, nên có các hàm băm chậm. Chính xác hơn, một tham số sẽ kiểm soát thời lượng và chi phí tính toán cho mỗi hàm băm không được thấp hơn nhiều đối với đối thủ so với chi phí dành cho người dùng hợp pháp¹. Trong các ứng dụng như vậy, khi chúng tôi quản lý để làm chậm hàm băm theo hệ số $c$ đối với đối thủ, chúng tôi nhận được tương đương với $\log_2(c)$ các bit bổ sung trên entropy trong đầu vào mật khẩu/cụm mật khẩu. Ví dụ: khi chúng tôi tăng chi phí lên một nghìn (đối với $c\khoảng 2^{10}$ ), đối với các cuộc tấn công bẻ khóa mật khẩu, chúng tôi nhận được mức độ bảo mật tương đương với việc thêm ba chữ số thập phân ngẫu nhiên vào mật khẩu mà không cần phải nhớ chúng.

Việc xem xét tốc độ đó phần lớn khác với khả năng chống va chạm (nghĩa là không thể thực tế để hiển thị hai thông báo có cùng hàm băm). Để giữ được khả năng chống va chạm, điều đó là cần thiết (không đủ)

  • Rằng hàm băm đủ rộng, bởi vì có các cuộc tấn công chung, được phân phối hiệu quả² tìm thấy các xung đột trong một $n$-bit băm với khoảng $2^{n/2+2}$ băm. Do đó, bất kỳ hàm băm nhanh nào có kết quả nhỏ hơn 192 bit (cho hoặc nhận 32) đều dễ bị xung đột (đối với các đối thủ có phương tiện tương đương với phương tiện được sử dụng bởi một số công cụ khai thác bitcoin). Khi chúng tôi làm cho hàm băm chậm hơn, điều đó sẽ làm tăng chi phí tính toán để tìm ra xung đột. Tăng chi phí theo hệ số $c$ cho phép thu hẹp hàm băm khoảng $2\log_2(c)$ bit từ quan điểm về khả năng chống va chạm (báo trước: đối với các hàm băm rất nhanh chỉ có thể áp dụng cho $c$ qua một số ngưỡng nhỏ). Ví dụ: nếu thay vì SHA-224, chúng tôi đã sử dụng PBKDF2-HMAC-SHA-256 với đầu ra 184 bit và sáu trăm nghìn lần lặp (đối với $c\khoảng 2^{20}$ ), chúng tôi sẽ có được khả năng bảo mật tương đương với khả năng chống va chạm.
  • Rằng hàm băm không quá nhanh bằng cách đơn giản hóa quá mức các phần bên trong của nó, cho phép các cuộc tấn công cụ thể, khác nhau. Như một thái cực, loại trừ-HOẶC các khối đầu vào rộng bằng đầu ra là một hàm băm cực nhanh, nhưng nó không có khả năng chống va chạm. Có những cuộc tấn công chống lại MD5, SHA(-0)SHA-1, được cho là do thiết kế của họ chú trọng quá nhiều vào tốc độ. Và có những cuộc tấn công³ chống lại SHA-256 nếu chúng ta giảm số vòng xuống còn 31 (giảm từ 64).

¹ Cách tốt nhất chúng ta phải đạt được điều này là tạo hàm băm trí nhớ khó, nghĩa là quá trình đánh giá sẽ yêu cầu nhiều lần truy cập bộ nhớ trong một lượng lớn bộ nhớ dành riêng cho việc sử dụng đó trong toàn bộ quá trình đánh giá. Các chức năng như vậy bao gồm các chức năng hiện đại Argon2, mật mã, và ở một mức độ nào đó lỗi thời bcrypt, nhưng không phải là xấu thẳng PBKDF2 (điều này thật tai hại vì dung lượng RAM thấp mang lại lợi thế rất lớn cho các đối thủ sử dụng ASIC, FPGA hoặc GPU so với hầu hết người dùng sử dụng CPU).

² Xem Paul C. van Oorschot và Michael J. Wiener's Tìm kiếm va chạm song song với các ứng dụng phân tích mật mã, Trong Tạp chí Mật mã học, 1999.

³ Xem Florian Mendel, Tomislav Nad và Martin Schläffer's Cải thiện va chạm cục bộ: Các cuộc tấn công mới trên SHA-256 đã giảm, Trong thủ tục tố tụng của Eurocrypt 2013

lá cờ za
```Sẽ không có vấn đề gì nếu nó cực kỳ nhanh.``` - [blake3 nói xin chào](https://github.com/BLAKE3-team/BLAKE3/blob/master/media/speed.svg)
kelalaka avatar
lá cờ in
@hanshenrik Blake3 là hàm băm song song. Chỉ có thể so sánh thực sự với ParallelHash [có nguồn gốc từ SHA3](https://csrc.nist.gov/projects/hash-functions).
lá cờ za
@kelalaka blake3 có hỗ trợ song song hóa, nhưng điểm chuẩn đó là từ việc chạy blake3 chỉ với một luồng duy nhất, không có sự song song hóa trong điểm chuẩn đó! (nếu họ đang sử dụng song song hóa, blake3 sẽ chạy nhanh hơn những gì được hiển thị trong biểu đồ đó)
Điểm:9
lá cờ jp

Câu trả lời hiện được chấp nhận là tốt, nhưng tôi muốn thêm một số thứ. "bảo mật" là một thuật ngữ rộng trong ngữ cảnh này và bạn nên hỏi bạn muốn chống lại mối đe dọa nào. Trong hầu hết các cuộc thảo luận, "va chạm" là tìm kiếm một đầu vào khác với một đầu ra giống hệt nhau.Nhưng đối với trường hợp mật khẩu, "băm nhanh" là vấn đề chỉ đối với việc cưỡng bức vũ phu cũ đơn thuần. Với hàm băm nhanh, kẻ tấn công dễ dàng tấn công từ điển nhiều đầu vào có thể, tìm kiếm kết quả khớp với hàm băm.

Đây không phải là trường hợp "băm nhanh == quá ít bit đầu ra" như OP đã hỏi. Chỉ là nếu hàm băm quá nhanh, thì cũng dễ dàng tìm thấy đầu vào ban đầu (không phải xung đột), điều đó khiến nó không an toàn.

Maarten Bodewes avatar
lá cờ in
Tôi không đồng ý với điều này. Trong ví dụ: băm mật khẩu, tất cả những gì bạn quan tâm là tốc độ *sự khác biệt* giữa máy chủ/người dùng dự định và đối thủ. Tuy nhiên, điều đó được khắc phục bằng cách đảm bảo rằng bạn sử dụng triển khai nhanh và bằng cách đảm bảo rằng có một hệ số công việc/số lần lặp quan trọng. Tuy nhiên, điều đó ít liên quan đến tốc độ của hàm băm an toàn bằng mật mã được sử dụng. Vấn đề này có thể được giải quyết bằng cách tạo ra sự khác biệt rõ ràng hơn giữa hàm băm bảo mật bằng mật mã và hàm băm mật khẩu.
Điểm:3
lá cờ id

Đưa ra một hàm băm có thể điều chỉnh theo "tốc độ", (có lẽ là lặp lại), việc tăng tốc độ băm của nó không tạo ra nhiều va chạm hơn. Vấn đề bảo mật với hàm băm quá nhanh là trong khoảng thời gian X cho trước, hàm băm nhanh hơn sẽ tạo ra số lượng đầu ra lớn hơn, vì vậy kẻ tấn công có cơ hội cao hơn Phát hiện một sự va chạm.

Điểm:2
lá cờ in

OP lấy ý tưởng từ một bài đăng trên YouTube điều đó tranh luận xung quanh MD5.

Đây là lập luận đơn giản nếu có ai xem video.

Tốc độ không ngụ ý rằng hàm băm không an toàn, thiết kế giúp nó an toàn.

Qua nhiều năm, các nhà nghiên cứu đã tìm ra điểm yếu trong thiết kế của MD5 và cải tiến theo thời gian. Sau khi MD5 được phát hành, năm 1992, các cuộc tấn công bắt đầu, và vào năm 2010 Xie và Dengguo Feng tuyên bố xung đột MD5 đơn khối (512-bit) đầu tiên được xuất bản. Tất nhiên, sự cải tiến của CPU và các chu kỳ của chúng đang giúp cuộc tấn công diễn ra nhanh hơn, tuy nhiên, đóng góp chính là các phương pháp tấn công. Hãy xem xét điều đó, cuộc tấn công va chạm chung (cuộc tấn công sinh nhật) yêu cầu $2^{64}$ Băm MD5 với xác suất thành công là 1/2. Thậm chí ngày nay, không một CPU thông thường nào có thể tạo ra $2^{64}$ Trong một thời gian hợp lý. Mặt khác, hiện tại chúng ta có xung đột tức thì đối với MD5, xem corkami.

Mặt khác, Blake2 là một hàm băm rất nhanh, nhanh hơn MD5 và SHA-1 và không có cuộc tấn công kéo dài do nó sử dụng cấu trúc HAIFA, sửa lỗi thiết kế MD. Nó nhanh hơn MD5 và an toàn ít nhất là trong một tính năng có thể thấy trước. Kích thước đầu ra của nó đủ an toàn cho các cuộc tấn công song song lớn hoặc thậm chí cho Thuật toán tìm kiếm lượng tử của Grover. Dòng Blake hiện có BLACK3, nó là một hàm băm song song và rất nhanh.

Điều quan trọng về tốc độ và mối quan hệ của nó với bảo mật là kích thước thông báo. Các cuộc tấn công chung cho tấn công trước hình ảnh, tấn công trước hình ảnh thứ cấp và xung đột chung là $2^n$,$2^n$, và $2^{n/2}$, tương ứng. Nếu bạn có đầu ra 256 hoặc 512 bit, bạn sẽ ổn với các cuộc tấn công chung. Hãy nhớ rằng không gian đầu vào ngắn là một vấn đề đối với các cuộc tấn công trước hình ảnh và HMAC được khuyên dùng.


PS: băm mật khẩu (không yêu cầu khả năng chống va chạm), nơi chúng tôi muốn tốc độ có thể kiểm soát được, độ cứng bộ nhớvà số lượng luồng của hàm băm mật khẩu. Người ta nên đọc câu hỏi kinh điển từ trang web đáng kính của chúng tôi, bảo mật thông tin.. Cũng thế, giấy Argon2, người chiến thắng cuộc thi băm mật khẩu năm 2015, là một lựa chọn tốt để đọc.


Lưu ý cuối cùng: Người ta nên xác định cẩn thận vấn đề của mình để có thể đạt được một thiết kế an toàn. Không có bảo mật thực sự nếu bạn không biết rủi ro của mình.

Điểm:0
lá cờ my

Hãy xem xét việc sử dụng hàm băm để bảo vệ mật khẩu và lấy một vài ví dụ.

  • Trường hợp đầu tiên: chúng ta có một hàm băm cần 1 giây để thực hiện trên một máy tính bình thường. Nếu kẻ tấn công có quyền truy cập vào 1 triệu máy tính (ví dụ: qua mạng botnet), chúng có thể thực hiện 1 triệu lần thử mỗi giây, 86 tỷ lần thử mỗi ngày. Nhưng mật khẩu gồm 8 ký tự sử dụng chữ hoa, chữ thường, chữ số và ký hiệu là khoảng 50 bit entropy, do đó, ở hiệu suất hiện tại, nó vẫn sẽ chiếm trung bình khoảng 18 năm để bẻ khóa mật khẩu đó, ngay cả với mạng botnet khổng lồ đó (tất nhiên trong 18 năm nữa, mọi thứ có thể sẽ tăng tốc khá nhiều nên nó sẽ ngắn hơn thế, nhưng vẫn vậy). Trường hợp xấu nhất sẽ mất 36 năm.

  • Trường hợp thứ hai: chúng ta có một hàm băm cần 1 phần triệu giây để thực thi. Cùng một kẻ tấn công sử dụng cùng một mạng botnet triệu máy tính giờ đây có thể thực hiện thêm một triệu lần thử mỗi giây. Bây giờ mất 1125 giây (ít hơn 20 phút) để thử từng và tất cả mọi người trong số khoảng 2^50 mật khẩu 8 ký tự có thể có. Vì vậy, trung bình khoảng một nửa thời gian.

Nếu bạn nghĩ một mạng botnet với một triệu máy tính là điều viển vông, nghĩ lại.

Vì vậy, vấn đề không phải là tạo ra nhiều xung đột hơn (đối với bất kỳ hàm băm tốt nào, điều này được liên kết trực tiếp với kích thước của đầu ra, không phải tốc độ của hàm băm), mà là vấn đề có thể tìm thấy các xung đột (hoặc thực tế là bản gốc đầu vào, nhưng bạn không nhất thiết phải biết điều đó), đánh bại mục đích của hàm băm.

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