SHA-256 hoặc MD5 cho tính toàn vẹn của tệp


81

Tôi biết rằng SHA-256 được ưu tiên hơn MD5 về bảo mật, v.v., nhưng nếu tôi sử dụng một phương pháp để chỉ kiểm tra tính toàn vẹn của tệp (nghĩa là không liên quan gì đến mã hóa mật khẩu, v.v.), thì có lợi thế nào của sử dụng SHA-256?

Vì MD5 là 128-bit và SHA-256 là 256-bit (do đó lớn gấp đôi) ...

  1. Sẽ mất đến hai lần thời gian để mã hóa?

  2. Trong trường hợp thời gian không phải là bản chất, như trong một chương trình sao lưu và tính toàn vẹn của tệp là tất cả những gì cần thiết, liệu có ai phản đối MD5 cho một thuật toán khác hoặc thậm chí đề xuất một kỹ thuật khác không?

  3. Sử dụng MD5 có tạo ra tổng kiểm tra không?


42
Thuật ngữ nitpick: Cả MD5 và SHA- * đều không mã hóa bất kỳ thứ gì. Chúng là các hàm băm.

1
@delnan Thực ra, tôi rất vui vì bạn đã chọn nó, cảm ơn bạn. Nhưng, không phải đại diện băm của một thứ gì đó là mã hóa?
Dave

16
Không. Đối với người mới bắt đầu, mã hóa có thể đảo ngược (theo định nghĩa) trong khi mã băm không thể đảo ngược (theo nguyên tắc chuồng chim bồ câu).

1
Chà, cả hai khác nhau về cơ bản và do đó, các kiểu tấn công khác nhau đối với một trong hai thậm chí không có ý nghĩa đối với người kia, vì vậy "an toàn hơn" không có ý nghĩa nhiều lắm IMHO. Bạn muốn làm rõ ý của bạn là gì?

1
Chà, đúng là như vậy, nhưng điều đó chỉ có nghĩa là chúng phục vụ các mục đích khác nhau và do đó bị tấn công theo cách khác nhau. Đối với hàm băm, cuộc tấn công phổ biến nhất là tạo ra xung đột vì đó là cách bạn đánh bại các phép đo bảo mật dựa trên hàm băm (ví dụ: mật khẩu băm hoặc ký chứng chỉ). Bạn không che giấu bất cứ thứ gì bằng cách chỉ lưu trữ hàm băm của nó, bởi vì sau đó nó "bị mất" / không thể truy cập được đối với mọi người , không chỉ đối với những kẻ tấn công.

Câu trả lời:


79

Cả SHA256 và MDA5 đều là thuật toán băm. Họ lấy dữ liệu đầu vào của bạn, trong trường hợp này là tệp của bạn và xuất ra một số 256/128-bit. Con số này là một tổng kiểm tra. Không có mã hóa nào diễn ra bởi vì vô số đầu vào có thể dẫn đến cùng một giá trị băm, mặc dù trong thực tế rất hiếm khi xảy ra va chạm.

SHA256 mất nhiều thời gian hơn để tính toán so với MD5, theo câu trả lời này .

Nói cách khác, tôi muốn nói rằng MD5 có lẽ sẽ phù hợp với những gì bạn cần.


Cảm ơn bạn, nhưng là một câu hỏi lạc đề, bạn đang nói rằng mã hóa phải tạo ra một 'mã' / 'id' duy nhất như GUID?
Dave

8
@DaveRook Sau đó, bạn sẽ giải mã tin nhắn bằng cách nào khác?
Paul Manta

@PaulManta - Tôi không biết, vì tôi chỉ làm điều này vì sự chính trực, tôi chưa bao giờ thực sự coi mã hóa như thế này, nhưng điều này thật tuyệt vời khi biết. Cảm ơn bạn.
Dave

5
@dave Tôi nghĩ rằng có một chút nhầm lẫn về chủ đề này vì SHA được gọi là hàm băm mật mã. Điều đó có nghĩa là (tôi không phải là một chuyên gia) là bạn có thể sử dụng nó để băm mật khẩu. Bằng cách đó, nếu kẻ tấn công lấy được tệp mật khẩu người dùng của bạn, chúng không thể sử dụng hàm băm để tạo lại mật khẩu ban đầu. Mã hóa khác ở chỗ nó có nghĩa là có thể đảo ngược.
dandan78

@Bạn đã đề cập bên dưới rằng bạn đang tìm kiếm danh sách các hàm băm. Hãy xem bài viết trên wikipedia về hàm băm: en.wikipedia.org/wiki/List_of_hash_functions
Rob

18

Mọi câu trả lời dường như gợi ý rằng bạn cần sử dụng các hàm băm an toàn để thực hiện công việc nhưng tất cả chúng đều được điều chỉnh là chậm để buộc kẻ tấn công bruteforce phải có nhiều sức mạnh tính toán và tùy thuộc vào nhu cầu của bạn, đây có thể không phải là giải pháp tốt nhất.

Có các thuật toán được thiết kế đặc biệt để băm các tệp nhanh nhất có thể nhằm kiểm tra tính toàn vẹn và so sánh ( murmur, XXhash...). Rõ ràng là chúng không được thiết kế để bảo mật vì chúng không đáp ứng các yêu cầu của thuật toán băm an toàn (tức là tính ngẫu nhiên) nhưng có tỷ lệ xung đột thấp đối với các tin nhắn lớn . Các tính năng này làm cho chúng trở nên lý tưởng nếu bạn không tìm kiếm bảo mật mà là tốc độ.

Có thể tìm thấy các ví dụ về thuật toán này và so sánh trong câu trả lời tuyệt vời này: Thuật toán băm nào là tốt nhất cho tính duy nhất và tốc độ? .

Ví dụ: chúng tôi tại trang web Hỏi và Đáp của chúng tôi sử dụng murmur3để băm các hình ảnh do người dùng tải lên, vì vậy chúng tôi chỉ lưu trữ chúng một lần ngay cả khi người dùng tải lên cùng một hình ảnh trong một số câu trả lời.


18

Để 1): Có, trên hầu hết các CPU, SHA-256 chỉ nhanh hơn MD5 khoảng 40%.

Để 2): Tôi sẽ tranh luận cho một thuật toán khác với MD5 trong trường hợp như vậy. Tôi chắc chắn sẽ thích một thuật toán được coi là an toàn. Tuy nhiên, đây là một cảm giác nhiều hơn. Các trường hợp mà điều này quan trọng sẽ được xây dựng hơn là thực tế, ví dụ: nếu hệ thống sao lưu của bạn gặp phải trường hợp ví dụ về cuộc tấn công vào chứng chỉ dựa trên MD5, bạn có thể có hai tệp trong ví dụ như vậy với dữ liệu khác nhau, nhưng tổng kiểm tra MD5 giống hệt nhau. Đối với những trường hợp còn lại, điều đó không thành vấn đề, vì tổng kiểm tra MD5 có xung đột (= tổng kiểm tra giống nhau cho các dữ liệu khác nhau) hầu như chỉ khi bị kích động có chủ ý. Tôi không phải là chuyên gia về các thuật toán băm (tạo tổng kiểm tra) khác nhau, vì vậy tôi không thể đề xuất một thuật toán khác. Do đó phần này của câu hỏi vẫn còn bỏ ngỏ. Đề xuất đọc thêm làHàm băm mật mã - Định danh tệp hoặc dữ liệu trên Wikipedia. Ngoài ra, sâu hơn trên trang đó có một danh sách các thuật toán băm mật mã.

Đến 3): MD5 là một thuật toán để tính toán tổng kiểm tra. Một tổng kiểm tra được tính bằng thuật toán này sau đó được gọi là tổng kiểm tra MD5.


10

Thuật toán MD5 cơ bản không còn được coi là an toàn nữa, do đó, mặc dù md5sum rất thích hợp để xác định các tệp đã biết trong các tình huống không liên quan đến bảo mật, nhưng bạn không nên dựa vào thuật toán này nếu có khả năng tệp đã bị giả mạo có chủ đích và độc hại. Trong trường hợp thứ hai, bạn nên sử dụng một công cụ băm mới hơn như sha256sum.

Vì vậy, nếu bạn chỉ muốn kiểm tra lỗi tệp hoặc sự khác biệt tệp, khi nguồn của tệp được tin cậy, MD5 sẽ là đủ. Nếu bạn đang tìm cách xác minh tính toàn vẹn của tệp đến từ một nguồn không đáng tin cậy hoặc từ một nguồn đáng tin cậy qua kết nối không được mã hóa, MD5 là không đủ.

Một nhà bình luận khác lưu ý rằng Ubuntu và những người khác sử dụng tổng kiểm tra MD5. Ubuntu đã chuyển sang PGP và SHA256, ngoài MD5, nhưng khó tìm thấy tài liệu về các chiến lược xác minh mạnh hơn. Xem trang HowToSHA256SUM để biết thêm chi tiết.


1
Tôi biết tôi đến muộn bữa tiệc, nhưng cảm ơn bạn đã đưa ra quan điểm này! Nếu bạn đang sử dụng tổng kiểm tra để xác minh rằng kẻ tấn công không làm hỏng các tệp của bạn, MD5 là một ý tưởng tồi. Nếu kẻ tấn công biết họ đang làm gì, về mặt lý thuyết, họ có thể tìm thấy va chạm phù hợp cho phép họ thực thi mã của mình mà không làm thay đổi tổng kiểm tra của tệp, do đó loại bỏ mọi xác minh bảo mật dựa trên tổng kiểm tra. SHA algos hoạt động đủ tốt trên các CPU hiện đại và mở rộng quy mô tốt hơn rất nhiều (khi kích thước tệp lớn hơn, tổng kiểm tra của chúng tôi cũng vậy). Nếu bạn đang xử lý các tệp video HD lớn, tôi sẽ sử dụng SHA-512.
Kris Craig

10
  1. Không, nó ít nhanh hơn nhưng không chậm
  2. Đối với một chương trình sao lưu, có thể cần phải có thứ gì đó nhanh hơn MD5

Nói chung, tôi muốn nói rằng MD5 ngoài tên tệp là hoàn toàn an toàn. SHA-256 sẽ chậm hơn và khó xử lý hơn vì kích thước của nó.

Bạn cũng có thể sử dụng thứ gì đó kém an toàn hơn MD5 mà không gặp vấn đề gì. Nếu không ai cố gắng hack tính toàn vẹn tệp của bạn thì điều này cũng an toàn.


Cảm ơn bạn, nhưng vấn đề là tôi không biết tôi có thể sử dụng gì khác! Tôi không yêu cầu đề xuất và tôi rất vui khi nghiên cứu các cách tiếp cận khác, nhưng bạn có thể đề xuất điều gì đó khác ngoài MD5 / SHA256 không?
Dave

1
Phụ thuộc vào ngôn ngữ lập trình và môi trường thời gian chạy mà bạn đang sử dụng.
Genesis Rock

6

Về mặt kỹ thuật, MD5 được phê duyệt nhanh hơn SHA256 nên chỉ cần xác minh tính toàn vẹn của tệp, nó sẽ đủ và tốt hơn cho hiệu suất.

Bạn có thể kiểm tra các tài nguyên sau:


À, và liên kết bạn đã cung cấp cũng hiển thị các thuật toán khác. Tôi đoán tôi cần tìm những cái nào có sẵn cho .NET ngay bây giờ và tìm nhanh nhất. Cảm ơn bạn
Dave

3
@DaveRook Ngoài ra, nếu bạn tìm kiếm trang web nổi tiếng như Sun, Ubuntu và các trang web khác, bạn có thể nhận thấy rằng họ cung cấp MD5 tổng kiểm tra tính toàn vẹn của tệp. Điều này có thể hỗ trợ giá trị của nó cho các nhiệm vụ như vậy.
SaidbakR

4
  1. Có, trên hầu hết các CPU, SHA-256 chậm hơn MD5 từ hai đến ba lần, mặc dù không phải chủ yếu do hàm băm dài hơn của nó. Xem các câu trả lời khác tại đây và câu trả lời cho các câu hỏi Stack Overflow này .
  2. Đây là một tình huống dự phòng trong đó MD5 sẽ không phù hợp:
    • Chương trình sao lưu của bạn băm từng tệp đang được sao lưu. Sau đó, nó lưu trữ dữ liệu của mỗi tệp bằng hàm băm của nó, vì vậy nếu bạn sao lưu cùng một tệp hai lần, bạn chỉ nhận được một bản sao của nó.
    • Kẻ tấn công có thể khiến hệ thống sao lưu các tệp mà chúng kiểm soát.
    • Kẻ tấn công biết mã băm MD5 của tệp mà chúng muốn xóa khỏi bản sao lưu.
    • Sau đó, kẻ tấn công có thể sử dụng các điểm yếu đã biết của MD5 để tạo một tệp mới có cùng hàm băm với tệp cần xóa. Khi tệp đó được sao lưu, nó sẽ thay thế tệp cần xóa và dữ liệu đã sao lưu của tệp đó sẽ bị mất.
    • Hệ thống sao lưu này có thể được tăng cường một chút (và hiệu quả hơn) bằng cách không thay thế các tệp có hàm băm mà nó đã gặp phải trước đó, nhưng sau đó kẻ tấn công có thể ngăn không cho tệp mục tiêu có hàm băm đã biết được sao lưu bằng cách sao lưu trước một bản sao được xây dựng đặc biệt tệp có cùng hàm băm.
    • Rõ ràng là hầu hết các hệ thống, sao lưu và nếu không, không đáp ứng các điều kiện cần thiết để cuộc tấn công này trở nên thực tế, nhưng tôi chỉ muốn đưa ra một ví dụ về tình huống mà SHA-256 sẽ thích hợp hơn MD5. Liệu đây có phải là trường hợp của hệ thống bạn đang tạo hay không phụ thuộc nhiều hơn vào các đặc điểm của MD5 và SHA-256.
  3. Có, các hàm băm mật mã như các hàm được tạo bởi MD5 và SHA-256 là một loại tổng kiểm tra.

Chúc bạn băm vui vẻ!

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.