Điểm:2

SHA-256 có khả năng chống va chạm bit (128-time + 128-space = 256-overall) không?

lá cờ vu

Đầu tiên, chúng tôi xem xét các hàm băm thực sự có thể cung cấp bảo mật trước hình ảnh 256-bit chứ không phải thứ gì đó giống như LẮC128<l=256bit> trong đó các tham số miếng bọt biển chỉ cung cấp khả năng bảo mật là 128-bit.

Chúng tôi biết rằng phân tích mật mã không chỉ có một chiều thời gian - nó còn có một chiều không gian, tức là dung lượng bộ nhớ làm việc cần thiết để thực thi thuật toán phân tích mã. Vì vậy, nếu chúng tôi mong muốn tìm thấy một vụ va chạm SHA-256 sau khoảng $2^{128}$ cố gắng, điều này về lý thuyết cũng có nghĩa là nó cần $2^{128}$ không gian để chứa đầu vào va chạm của ứng cử viên.

Vậy điều này có đúng không? Điều này có nghĩa là SHA-256 có khả năng chống va chạm tổng thể 256 bit khi tính đến không gian?

lá cờ vn
Ngoài thực tế là bạn không cần $2^{128}$ không gian để tiến hành tấn công va chạm, như câu trả lời được chấp nhận, còn có một thực tế là $2^{128} + 2^{128} = 2^{ 129}$, do đó, ngay cả khi không có cuộc tấn công vào bộ nhớ thấp và chúng tôi đã tính (sai) mức sử dụng tài nguyên theo cách này, thì nó vẫn không bằng $2^{256}$.
Điểm:4
lá cờ ng

Không, việc phá vỡ thuộc tính va chạm của SHA-256 không yêu cầu bất kỳ $2^{128}$ khoảng trống. Chúng tôi biết làm thế nào để thể hiện sự va chạm trong bất kỳ $n$-bit băm $H$ với $\mathcal O(2^{n/2})$ đánh giá băm và $\mathcal O(n)$ khoảng trống.

Phương pháp phù hợp đơn giản nhất là Phát hiện chu kỳ của Floyd, sẽ thể hiện với xác suất không biến mất hai khác biệt $n$-bit chuỗi bit $r$$s$ với $H(r)=H(s)$, trên quỹ đạo một điểm ban đầu nhất định $t$ khi lặp lại $H$

  • $m\gets\lceil\,2^{n/2+1}\,\rceil$ (tăng dần $+1$ giảm sự cố).
  • $u\được H(t)$ .
  • $r\được u$MỘT ; $s\được H(u)$ .
  • trong khi $r\ne s$ :Â (tìm chu kỳ)
    • nếu $m=0$ sau đó dừng lại trong thất bại (quỹ đạo dài, hiếm).
    • $m\được m-1$ .
    • $r\được H(r)$MỘT ; $s\được H(H(s))$ .
  • nếu $t=s$ sau đó dừng lại trong thất bại ($t$ trong chu kỳ, biến mất rất hiếm).
  • $s\được H(s)$ .
  • trong khi $r\ne s$ :Â (bù $u$ theo một chu kỳ)
    • $s=H(s)$MỘT ; $u=H(u)$ .
  • trong khi $t\ne u$:Â (xác định vị trí va chạm)
    • $r\được t$MỘT ; $s\được u$ .
    • $t\được H(t)$MỘT ; $u\được H(u)$ .
  • đầu ra $(r,s)$ và dừng lại trong thành công.

Hãy thử nó trực tuyến! đối với xung đột của hàm băm 24 bit (lần đầu tiên $k=3$ byte của SHA-256). Vui lòng chạy mã Python này trên máy của bạn nếu tăng $k$.

Phương pháp này sử dụng quỹ đạo của $t$, được định nghĩa là $u$ đạt được bằng cách lặp đi lặp lại $u\được H(u)$ bắt đầu từ $u=t$, có xu hướng quay vòng trong $\mathcal \Theta(2^{n/2})$ các bước. Thuật toán phát hiện một chu kỳ đã đạt, tìm $u$ sau bao nhiêu bước từ $t$ như độ dài của chu kỳ, sau đó chu kỳ được nhập vào đâu, dẫn đến va chạm. Có thể chỉ ra rằng đối với hàm ngẫu nhiên $H:\{0,1\}^*\mapsto\{0,1\}^n$ và ngoại trừ rất nhỏ $n$, xác suất thành công của thuật toán này từ bất kỳ điểm bắt đầu nào $t$ là ít nhất $3/4$ (thất bại là do quỹ đạo quá dài của $t$, Hoặc khi nào $t$ thuộc một chu kỳ).

Trong trường hợp không thành công, việc khởi động lại từ một điểm ngẫu nhiên khác là đủ.Điều đó thường hoạt động tốt đối với các hàm băm mật mã phổ biến $H$, nhưng ngay cả đối với những điều này, điều có thể xảy ra là hầu hết các điểm bắt đầu đều dẫn đến một chu trình quá lớn không thể tìm thấy. Trong trường hợp chung, chúng tôi muốn chuyển sang sử dụng thuật toán với $H'$ Được định nghĩa bởi $H'(x)=H(F(x))$ cho một lần tiêm ngẫu nhiên phù hợp có thể tính toán hiệu quả và có thể đảo ngược $F$ được chọn khi bắt đầu thuật toán. Điều đó thể hiện sự va chạm đối với $H'$ sử dụng thuật toán thể hiện một xung đột cho $H$, nhưng $H'$ có thể có cấu trúc chu trình khác. Cho hầu hết $n$-bit băm $H$ thích hợp cho việc sử dụng mật mã, $F$ có thể là XOR với một cố định $n$-bit chuỗi bit hoặc thêm tiền tố hoặc/và hậu tố cố định. Điều này không được minh họa trong mã giả ở trên và mã Python được liên kết.

Có thể phân phối công việc trên nhiều máy chạy song song, mỗi máy có ít bộ nhớ, giao tiếp vừa phải và công việc phụ vừa phải. Xem Paul C. van Oorschot và Michael J. Wiener, 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.

gnasher729 avatar
lá cờ kz
Bên ngoài tiền điện tử, bài viết mà bạn liên kết có vẻ rất khó áp dụng cho chính thuật toán bao thanh toán pollard-rho, bởi vì ở đó chúng tôi không tìm x=y mà tìm gcd(x-y, N) > 1.
DannyNiu avatar
lá cờ vu
Tôi nghĩ rằng nếu các kết quả thử nghiệm của thuật toán Floyd đối với các phép biến đổi nhỏ hơn (ví dụ: 24 hoặc 32 bit) được thêm vào, thì điều đó sẽ còn hơn cả thuyết phục.
fgrieu avatar
lá cờ ng
@DannyNiu: Thuật toán ban đầu đã sai. Cái này đi kèm với một bản demo đang hoạt động.
gnasher729 avatar
lá cờ kz
Thuật toán Pollard-tho có thể dễ dàng tìm ra thừa số của một số 128 bit trong vài giây. Điều này liên quan đến việc tìm xung đột giữa các số 64 bit. Thường mất khoảng 2^32 bước.
Điểm:0
lá cờ kz

Không, có thể tìm thấy va chạm SHA-256 mà thực tế không có khoảng trống nào.

Bí quyết là bạn không tính toán ví dụ H(1), H(2), H(3), v.v., điều này sẽ yêu cầu lưu trữ tất cả các kết quả trong một bảng. Thay vào đó, chúng ta để x0 = một giá trị nào đó, x1 = H(x0), x2 = H(x1), v.v. Sau đó, chúng tôi so sánh x1 và x2, x2 và x4, x3 và x6, xk và x2k và điều này sẽ tìm thấy xung đột trong khoảng 2^128 bước mà không có bộ nhớ.

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