Có an toàn để bỏ qua khả năng va chạm SHA trong thực tế?


209

Giả sử chúng ta có một tỷ hình ảnh độc đáo, mỗi hình ảnh một megabyte. Chúng tôi tính toán hàm băm SHA-256 cho nội dung của mỗi tệp. Khả năng va chạm phụ thuộc vào:

  • số lượng tập tin
  • kích thước của tập tin duy nhất

Làm thế nào đến nay chúng ta có thể bỏ qua khả năng này, giả sử nó bằng không?


1
Nó phụ thuộc vào những gì bạn đang sử dụng các khóa băm cho. Nếu đó là một loại nhận dạng tệp, thì xung đột cũng có thể có nghĩa là các tệp giống hệt nhau và do đó bạn cũng cần so sánh các tệp trong các trường hợp va chạm. Tôi muốn nói rằng sẽ khá an toàn khi chỉ so sánh kích thước tệp.
mojuba

Có, trong trường hợp này, nếu bạn so sánh kích thước tệp, khả năng sẽ giảm đáng kể. Bạn cũng có thể sử dụng hai thuật toán băm và nối các kết quả. Sau đó, khả năng va chạm của cả hai cùng một lúc giảm nhiều hơn. Nhưng, câu hỏi là, "khá" an toàn đến mức nào? Có lẽ chúng ta cần một công thức và số.
Hristo Hristov

2
@Hristo Hristov: nếu chúng ta giả sử rằng khóa băm là số ngẫu nhiên giả (theo lý thuyết là chính xác) thì một tỷ khóa 128 bit cho xác suất va chạm là 2,9 * 10 ^ -30. Bạn thậm chí không thể gọi nó là "miniscule", nó ít hơn thế;)
mojuba

3
@mojuba: thậm chí tốt hơn, anh ấy hỏi về hàm băm 256 bit.
Michael Borgwardt

FWIW: hệ thống kiểm soát phiên bản GIT xác định các tệp theo SHA nội dung của chúng.
snemarch

Câu trả lời:


385

Do đó, câu trả lời thông thường là: xác suất một tiểu hành tinh bất hảo gặp nạn trên Trái đất trong giây tiếp theo, xóa sổ nền văn minh như chúng ta đã biết và giết chết vài tỷ người là gì? Có thể lập luận rằng bất kỳ sự kiện không may mắn nào có xác suất thấp hơn mức đó không thực sự rất quan trọng.

Nếu chúng ta có một "hoàn hảo" hàm băm với kích thước đầu ra n , và chúng tôi có p tin nhắn đến băm (chiều dài nhắn cá nhân không phải là quan trọng), sau đó xác suất va chạm là về p 2 /2 n + 1 (đây là một xấp xỉ là hợp lệ cho p "nhỏ" , tức là nhỏ hơn 2 n / 2 ). Chẳng hạn, với SHA-256 ( n = 256 ) và một tỷ tin nhắn ( p = 10 9 ) thì xác suất là khoảng 4,3 * 10 -60 .

Một tảng đá không gian giết người hàng loạt xảy ra trung bình cứ khoảng 30 triệu năm một lần. Điều này dẫn đến một xác suất của một sự kiện như vậy xảy ra trong lần thứ hai bên cạnh khoảng 10 -15 . Đó là 45 đơn đặt hàng có cường độ lớn hơn nhiều so với vụ va chạm SHA-256. Nói ngắn gọn, nếu bạn thấy va chạm SHA-256 đáng sợ thì các ưu tiên của bạn là sai.

Trong một thiết lập bảo mật, nơi kẻ tấn công được chọn các tin nhắn sẽ được băm, sau đó kẻ tấn công có thể sử dụng đáng kể hơn một tỷ tin nhắn; tuy nhiên, bạn sẽ thấy rằng xác suất thành công của kẻ tấn công sẽ vẫn còn nhỏ. Đó là toàn bộ quan điểm của việc sử dụng hàm băm với đầu ra 256 bit: do đó có thể bỏ qua các rủi ro va chạm.

Tất nhiên, tất cả các giả định ở trên cho rằng SHA-256 là hàm băm "hoàn hảo", còn lâu mới được chứng minh. Tuy nhiên, SHA-256 có vẻ khá mạnh mẽ.


12
Đây là một câu trả lời rất tốt, cảm ơn! Nhưng, nếu trong trường hợp va chạm, một nhà máy điện hạt nhân sẽ phát nổ, và nó phụ thuộc vào bạn, bạn sẽ chấp nhận rủi ro đó chứ? Nếu bạn hoàn toàn đúng, thì chúng ta có thể chấp nhận rủi ro, bởi vì nó có độ lớn hơn 45 bậc có thể xảy ra cho nền văn minh bị phá hủy. Đúng?
Hristo Hristov

46
@Hristo Tôi nghĩ là có, người ta sẽ mạo hiểm. Một nhà máy điện hạt nhân đã có một xa cơ hội cao hơn của các vụ nổ do những thứ khác, như trục trặc kỹ thuật, lỗi của con người trong việc xây dựng nó hay lỗi điều hành khi chạy nó, và chúng tôi đang dùng những cơ hội. Nếu va chạm SHA-256 là điều duy nhất gây ra sự cố hạt nhân thì gần như chắc chắn chúng ta đã có chính xác số 0 trong số đó.
Roman Starkov

27
foxnews.com/science/2013/02/11/ ích Tôi bắt đầu nghĩ về SHA512.
Dustin Oprea

37
Bây giờ tôi có thể yên tâm khi biết rằng tôi có khả năng bị xóa sổ bởi một tiểu hành tinh từ lâu trước khi tôi sống để trải qua vụ va chạm SHA-256.
AaronLS

10
Xin lỗi, bạn đang bỏ lỡ cái gọi là "nghịch lý sinh nhật". Có một cái nhìn tốt hơn về "bảng đẹp", nó không hoạt động theo cách bạn nghĩ. Đối với các số liệu tôi đưa ra, trong bảng đó, nó sẽ là một giá trị "10 ^ 9" trong một cột có nhãn "4.3 * 10 ^ -60" và hàng "128 bit" (nhưng bảng không đi dưới 10 ^ -18 ).
Thomas Pornin

47

Khả năng va chạm không phụ thuộc vào kích thước của các tệp, chỉ phụ thuộc vào số lượng của chúng.

Đây là một ví dụ về nghịch lý sinh nhật . Trang Wikipedia đưa ra ước tính về khả năng xảy ra va chạm. Nếu bạn chạy các số, bạn sẽ thấy rằng tất cả các ổ cứng được sản xuất trên Trái đất không thể chứa đủ các tệp 1MB để có khả năng xảy ra va chạm thậm chí 0,01% cho SHA-256.

Về cơ bản, bạn có thể chỉ cần bỏ qua khả năng.


5
Tôi không thể đồng ý với kết luận. Có, không có hardisks nào có thể lưu trữ số lượng tệp đó, nhưng bạn IMO hiểu sai tình huống. Nó chỉ mất hai tập tin để tạo ra một vụ va chạm. Mặc dù khả năng rất thấp nhưng nó vẫn có thể xảy ra.
sharptooth

11
@sharptooth: không, tôi không trình bày sai tình huống. Khả năng bạn và mọi người bạn biết chết vì tai nạn đường bộ trong cùng một ngày là rất thấp, nhưng nó vẫn có thể xảy ra (và nó cao hơn nhiều so với vụ va chạm SHA-256). Tuy nhiên, bạn đang bỏ qua khả năng đó.
Michael Borgwardt

11
@sharptooth: Mình đang nói về những vụ tai nạn đường bộ riêng biệt , đồng thời của vài trăm người cụ thể. Bạn thực sự không thể thực hiện bất kỳ bước nào để làm cho nó thấp hơn. Nó sẽ là vô nghĩa, vì nó đã thấp một cách kỳ lạ. Nhưng vẫn có nhiều khả năng hơn một vụ va chạm SHA-256 mà bạn thậm chí không thể tưởng tượng được. Đó là lập luận tương tự như Thomas đã đưa ra.
Michael Borgwardt

12
@sharptooth: Không, cơ hội không tăng đáng kể, vì số lượng vẫn hoàn toàn bị lấn át bởi kích thước của không gian băm SHA-256. Đây là một điều bạn không tính đến một cách chính xác - tất cả các yếu tố phải được cân nhắc bởi độ lớn thực tế của chúng, không bằng nhau. Nếu bạn tạo ra một tỷ băm mỗi giây cho mỗi người trên Trái đất và thực hiện điều đó trong một nghìn năm, bạn vẫn có ít hơn 1% khả năng xảy ra va chạm.
Michael Borgwardt

3
Nếu bạn không kiểm tra khả năng của một lỗi uncorrected trên mỗi lấy từ bộ nhớ hoặc đọc từ đĩa (trong đó có một xa khả năng cao hơn so với một vụ va chạm SHA-256), bạn có thể không hoàn toàn hiểu được xác suất.
Barshe

17

Trước hết, nó không phải là số không, nhưng rất gần với số không .

Câu hỏi chính là những gì xảy ra nếu một vụ va chạm thực sự xảy ra ? Nếu câu trả lời là "một nhà máy điện hạt nhân sẽ nổ tung" thì có lẽ bạn không nên bỏ qua khả năng va chạm. Trong hầu hết các trường hợp, hậu quả không phải là nghiêm trọng và vì vậy bạn có thể bỏ qua khả năng va chạm.

Cũng đừng quên rằng phần mềm của bạn (hoặc một phần rất nhỏ của nó) có thể được triển khai và sử dụng đồng thời trong một lượng lớn máy tính (một số máy vi tính nhúng nhỏ gần như có ở mọi nơi hiện nay). Trong trường hợp như vậy, bạn cần nhân số ước tính bạn có với số lượng bản sao lớn nhất có thể.


... không phải bởi # bản sao, mà là # bộ dữ liệu tất cả các bản sao.
Andreas Spindler

1
Điều này là sai, số lượng bản sao của phần mềm đang chạy là không liên quan. Điều duy nhất quan trọng là số lượng tệp duy nhất được xử lý và nghịch lý sinh nhật là phép tính cho phép tính.
Dirk Bester

1
Tôi đã nghe một người khác đề cập rằng khả năng xảy ra lỗi phần cứng - tức là một chút bị lật ở đâu đó do phóng xạ, v.v. - có nhiều khả năng hơn là va chạm băm, và do đó, lo lắng về va chạm băm là ngớ ngẩn. Cá nhân, tôi sẽ cố gắng bảo vệ cả hai trường hợp, để an toàn (càng an toàn trong nhà máy điện hạt nhân càng tốt), nhưng va chạm băm có lẽ sẽ rất thấp trong danh sách các mối nguy hiểm tiềm ẩn (giả sử không gian băm đủ lớn) . Tuy nhiên, tất cả điều này giả định rằng không có một số hành vi ẩn trong hàm băm gây ra xung đột thường xuyên hơn.
Chris Middleton


@GreenTree Điều bạn liên kết đến là về việc cố tình tạo ra các va chạm.
sharptooth
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.