2010-04-14 33 views
31

Tôi không muốn nói đây là một cuộc tranh luận, nhưng tôi đang cố gắng hiểu lý do kỹ thuật đằng sau lý do tại sao rất nhiều ứng dụng sử dụng SHA1 cho các bí mật băm, khi SHA512 an toàn hơn. Có lẽ nó chỉ đơn giản là cho khả năng tương thích ngược.Tại sao lại sử dụng SHA1 cho các bí mật băm khi SHA-512 an toàn hơn?

Bên cạnh kích thước lớn hơn rõ ràng (128 ký tự so với 40) hoặc chênh lệch tốc độ nhỏ, có lý do nào khác khiến mọi người sử dụng tên cũ không?

Ngoài ra, SHA-1 tôi tin lần đầu tiên bị bộ xử lý của VCR bẻ khóa năm trước. Có ai nứt 512 chưa (có lẽ với một lá quạt), hoặc là nó vẫn còn an toàn để sử dụng mà không có muối?

+2

SHA-1 chưa bị nứt. – Joe

+12

không phải tất cả các ứng dụng băm đều liên quan đến bảo mật – Javier

+0

@Joe bạn có chắc chắn không? Tôi đã nghe nói về tất cả các loại mã hóa được hack gần đây với tất cả các máy tính lượng tử này xảy ra, có thể crack rất nhiều thuật toán trong vài giây. – Earlz

Trả lời

41

Hầu hết các ứng dụng của SHA-1 là khả năng tương tác: chúng tôi sử dụng SHA-1 khi chúng tôi triển khai các giao thức mà SHA-1 được bắt buộc. Dễ phát triển cũng được đưa vào tài khoản: triển khai SHA-1 trong nhiều ngôn ngữ và môi trường lập trình phổ biến hơn so với triển khai SHA-512.

Ngoài ra, hầu hết các hàm băm không có vấn đề về hiệu suất (ít nhất, không có vấn đề về hiệu suất trong đó hàm băm là nút cổ chai), có một số kiến ​​trúc mà SHA-1 hiệu quả hơn SHA-512 . Hãy xem xét một bộ định tuyến Linksys cơ bản: nó sử dụng một CPU Mips-phái sinh, tốc độ 200 MHz. Một máy như vậy có thể được lập trình lại, ví dụ: với OpenWRT (một Linux nhỏ cho các hệ thống nhúng). Là một bộ định tuyến, nó có mạng nhanh (100Mbit/s). Giả sử bạn muốn băm một số dữ liệu (ví dụ như một phần của một số phần mềm VPN - một bộ định tuyến trông giống như một ứng cử viên tốt để chạy VPN). Với SHA-1, bạn sẽ nhận được khoảng 6 MB/s, sử dụng CPU đầy đủ. Điều đó đã khá thấp so với băng thông mạng. SHA-512 sẽ cung cấp cho bạn không quá 1,5 MB/s trên cùng một máy. Trên một hệ thống như vậy, sự khác biệt về hiệu suất không phải là không đáng kể. Ngoài ra, nếu tôi sử dụng SHA-1 trên router Linksys của tôi cho một số giao thức truyền thông, thì máy ở đầu kia của liên kết cũng sẽ phải sử dụng SHA-1.

Tin vui là có sự cạnh tranh liên tục để chọn hàm băm chuẩn mới, có tên mã là SHA-3. Một số ứng cử viên cạnh tranh cung cấp hiệu suất tương tự như SHA-1, hoặc thậm chí tốt hơn một chút, trong khi vẫn cho năng suất 512 bit và có thể (chắc chắn) an toàn như SHA-512.

+0

@Thomas cảm ơn thông tin tuyệt vời. Tôi chỉ đơn giản là sử dụng SHA512 để bảo vệ mật khẩu trong một máy riêng trong một colo, bởi vì tôi không muốn dữ liệu muối (vì một số lý do OCD) nhưng tôi muốn nó là bằng chứng crack (ít nhất là trong một thời gian). An ninh là một mối quan tâm, nhưng không có nguy cơ số thẻ tín dụng bị mất, vv – orokusaki

+0

@Thomas Wow, đã bị ấn tượng bởi câu trả lời của bạn vì vậy tôi đã kiểm tra trang web và CV của bạn. Tiến sĩ trong công cụ này eh. Vì vậy, bạn có nghĩ rằng sheesh mật khẩu của tôi là một ý tưởng tồi? – orokusaki

+0

@orokusaki: để bảo vệ bằng mật khẩu máy tính cá nhân trong một colo, mật mã là quá mức cần thiết. _If_ những kẻ tấn công tiềm năng thực sự có động cơ, truy cập vật lý vào hệ thống là tất cả những gì họ cần (ví dụ: để cài đặt thiết bị ghi nhật ký chính, khi bạn nhập mật khẩu của mình). Vì vậy, bạn có thể sử dụng bất cứ điều gì làm cho bạn cảm thấy "an toàn". –

23

Cả SHA1 và SHA512 đều là hàm băm. Nếu bạn đang sử dụng chúng như một băm mật mã, thì có lẽ đó là lý do tốt để sử dụng SHA512; tuy nhiên, có những ứng dụng sử dụng chức năng này đơn giản chỉ để xác định các đối tượng. Ví dụ, Git sử dụng SHA1 để phân biệt một cách rẻ tiền giữa các đối tượng. Trong trường hợp đó, vì khả năng va chạm giữa hai tài liệu là cực kỳ nhỏ với SHA1, nên thực sự không có biện minh cho yêu cầu không gian bổ sung của SHA512 khi SHA1 phù hợp hơn với nhiệm vụ.

Về mặt băm mật mã và lựa chọn sử dụng muối hay không, bạn có thể quan tâm đến việc đọc Don't Hash Secrets. Ngay cả với SHA512, việc sử dụng muối là một ý tưởng hay (và cũng rất rẻ để làm, vậy tại sao bạn không làm điều đó?), Bởi vì bạn có thể đoán được mật khẩu hàng đầu và xem chúng có cùng mã băm không, nhưng tác giả chỉ ra rằng HMAC là cơ chế bảo mật hơn. Trong mọi trường hợp, bạn sẽ phải xác định chi phí liên quan đến thời gian + không gian thêm và các chi phí liên quan đến khả năng vi phạm và xác định bạn muốn bị hoang tưởng như thế nào. Như đã được phát hiện gần đây bởi Microsoft, constantly changing passwords is a waste of money and doesn't pay off, do đó, trong khi hoang tưởng thường là tốt khi nói đến an ninh, bạn thực sự phải làm toán để xác định xem nó có ý nghĩa .... làm lợi nhuận trong thời gian an ninh lớn hơn và chi phí lưu trữ?

+0

@Michael Tôi thực sự có nghĩa là: Tại sao mọi người vẫn sử dụng SHA1 như một thiết bị bảo mật (không dành cho mục đích kiểm tra, hoặc những người khác). – orokusaki

+5

@orokusaki; bạn có thể muốn cập nhật câu hỏi để nói điều đó. :-) –

+0

@Dean J Tôi nghĩ phần "an toàn hơn" trong tiêu đề và trong câu hỏi sẽ giải quyết vấn đề đó. Tôi có thể đề cập đến điều gì khác liên quan đến 'sha1' và bảo mật? – orokusaki

3

Nếu bạn cần một cái gì đó được băm nhanh chóng, hoặc chỉ cần một băm 160 bit, bạn sẽ sử dụng SHA-1.

Để so sánh các mục nhập cơ sở dữ liệu với nhau nhanh chóng, bạn có thể lấy 100 trường và tạo hàm băm SHA-1 từ chúng, năng suất 160 bit. 160 bit đó là 10^giá trị 50.

Nếu tôi không bao giờ có nhiều hơn một phần nhỏ của 10^giá trị thứ 50, sẽ nhanh hơn nếu chỉ băm những gì tôi có bằng thuật toán đơn giản và nhanh hơn.