Câu trả lời:
CRC hoạt động tốt để phát hiện các lỗi ngẫu nhiên trong dữ liệu có thể xảy ra, ví dụ, từ nhiễu mạng, nhiễu đường truyền, méo, v.v.
CRC tính toán ít phức tạp hơn nhiều so với MD5 hoặc SHA1. Sử dụng hàm băm như MD5 có thể là quá mức cần thiết để phát hiện lỗi ngẫu nhiên. Tuy nhiên, sử dụng CRC cho bất kỳ loại kiểm tra bảo mật nào sẽ kém an toàn hơn nhiều so với chức năng băm phức tạp hơn như MD5.
Và vâng, CRC dễ thực hiện hơn trên phần cứng nhúng, thậm chí bạn có thể nhận được các giải pháp đóng gói khác nhau cho việc này trên IC.
MD5
, SHA-1
cũng nên tránh, một số biến thể của SHA-2
được khuyến nghị.
CRC được thiết kế để chống lại những thay đổi không chủ ý trong dữ liệu. Đó là, tốt cho việc phát hiện các lỗi vô ý, nhưng sẽ vô ích vì cách đảm bảo dữ liệu không bị xử lý độc hại.
Cũng thấy điều này .
Tôi đã tìm thấy một nghiên cứu cho thấy mức băm CRC không phù hợp đối với các bảng băm . Nó cũng giải thích các đặc điểm thực tế của thuật toán. Nghiên cứu cũng bao gồm đánh giá các thuật toán băm khác và là một tài liệu tham khảo tốt để giữ.
Các kết luận có liên quan về CRC cho băm:
CRC32 không bao giờ được dự định để sử dụng bảng băm. Thực sự không có lý do chính đáng để sử dụng nó cho mục đích này và tôi khuyên bạn nên tránh làm như vậy. Nếu bạn quyết định sử dụng CRC32, điều quan trọng là bạn sử dụng các bit băm từ đầu đối diện với các octet chính được đưa vào. Việc kết thúc này phụ thuộc vào việc triển khai CRC32 cụ thể. Không coi CRC32 là hàm băm "hộp đen" và không sử dụng nó làm hàm băm cho mục đích chung. Hãy chắc chắn để kiểm tra từng ứng dụng của nó cho phù hợp.
CẬP NHẬT
Có vẻ như các trang web là xuống. Các kho lưu trữ internet có một bản sao mặc dù.
Tôi đã chạy mọi dòng mã PHP này trong vòng lặp 1.000.000. Kết quả là trong các ý kiến (#).
hash('crc32', 'The quick brown fox jumped over the lazy dog.');# 750ms 8 chars
hash('crc32b','The quick brown fox jumped over the lazy dog.');# 700ms 8 chars
hash('md5', 'The quick brown fox jumped over the lazy dog.');# 770ms 32 chars
hash('sha1', 'The quick brown fox jumped over the lazy dog.');# 880ms 40 chars
hash('sha256','The quick brown fox jumped over the lazy dog.');# 1490ms 64 chars
hash('sha384','The quick brown fox jumped over the lazy dog.');# 1830ms 96 chars
hash('sha512','The quick brown fox jumped over the lazy dog.');# 1870ms 128 chars
Kết luận của tôi:
Sử dụng "sha256" (hoặc cao hơn) khi bạn cần thêm lớp bảo mật.
Không sử dụng "md5" hoặc "sha1" vì chúng có:
"The quick brown fox jumped over the lazy dog."
), bạn sẽ thấy CRC nhanh hơn MD5 bao nhiêu.
Để biết thông tin về CRC về triển khai, tốc độ và độ tin cậy, hãy xem Hướng dẫn không đau về thuật toán phát hiện lỗi CRC . Nó có mọi thứ trên CRC.
Trừ khi ai đó sẽ cố gắng sửa đổi dữ liệu của bạn một cách độc hại và ẩn CRC thay đổi là đủ. Chỉ cần sử dụng một đa thức "Tốt" (tiêu chuẩn).
Tất cả phụ thuộc vào yêu cầu và mong đợi của bạn.
Dưới đây là những khác biệt ngắn gọn giữa các thuật toán hàm băm :
là một thuật toán băm mật mã,
tạo ra giá trị băm 160 bit (20 byte) được gọi là thông báo
nó là một hàm băm mật mã và từ năm 2005 nó không còn được coi là an toàn nữa,
có thể được sử dụng cho mục đích mã hóa,
xuất bản lần đầu năm 1993 (dưới dạng SHA-0), sau đó là 1995 với tên SHA-1,
loạt: SHA-0, SHA-1, SHA-2, SHA-3,
Nói tóm lại, bằng cách sử dụng SHA-1 không còn được coi là an toàn so với đối thủ cũng tài trợ, bởi vì trong năm 2005, phân tích mật mã phát hiện các cuộc tấn công trên SHA-1 điều này cho thấy nó có thể là không đủ an toàn để sử dụng liên tục Schneier . NIST Hoa Kỳ khuyên rằng các cơ quan liên bang nên ngừng sử dụng SHA1-1 cho ứng dụng yêu cầu chống va chạm và phải sử dụng SHA-2 sau NIST 2010 .
Do đó, nếu bạn đang tìm giải pháp đơn giản và nhanh chóng để kiểm tra tính toàn vẹn của tệp (chống tham nhũng) hoặc cho một số mục đích lưu trữ đơn giản về mặt hiệu suất, bạn có thể xem xét CRC-32, để băm bạn có thể xem xét sử dụng Tuy nhiên, MD5 nếu bạn đang phát triển ứng dụng chuyên nghiệp (cần bảo mật và nhất quán), để tránh mọi xác suất va chạm - hãy sử dụng SHA-2 trở lên (như SHA-3).
Một số bài kiểm tra điểm chuẩn đơn giản trong PHP:
# Testing static text.
$ time php -r 'for ($i=0;$i<1000000;$i++) crc32("foo");'
real 0m0.845s
user 0m0.830s
sys 0m0.008s
$ time php -r 'for ($i=0;$i<1000000;$i++) md5("foo");'
real 0m1.103s
user 0m1.089s
sys 0m0.009s
$ time php -r 'for ($i=0;$i<1000000;$i++) sha1("foo");'
real 0m1.132s
user 0m1.116s
sys 0m0.010s
# Testing random number.
$ time php -r 'for ($i=0;$i<1000000;$i++) crc32(rand(0,$i));'
real 0m1.754s
user 0m1.735s
sys 0m0.012s\
$ time php -r 'for ($i=0;$i<1000000;$i++) md5(rand(0,$i));'
real 0m2.065s
user 0m2.042s
sys 0m0.015s
$ time php -r 'for ($i=0;$i<1000000;$i++) sha1(rand(0,$i));'
real 0m2.050s
user 0m2.021s
sys 0m0.015s
Liên quan:
Bạn không nói những gì bạn đang cố gắng bảo vệ.
CRC thường được sử dụng trong các hệ thống nhúng để kiểm tra chống tham nhũng dữ liệu do vô tình thay vì ngăn chặn sửa đổi hệ thống độc hại. Ví dụ về những nơi mà CRC có thể hữu ích là xác thực hình ảnh EPROM trong quá trình khởi tạo hệ thống để bảo vệ chống tham nhũng phần sụn. Bộ tải khởi động hệ thống sẽ tính toán CRC cho mã ứng dụng và so sánh với giá trị được lưu trữ trước khi cho phép mã chạy. Điều này bảo vệ chống lại khả năng tham nhũng chương trình tình cờ hoặc tải xuống không thành công.
CRC cũng có thể được sử dụng theo cách tương tự để bảo vệ dữ liệu cấu hình được lưu trữ trong FLASH hoặc EEPROM. Nếu CRC không chính xác thì dữ liệu có thể được gắn cờ là không hợp lệ và một bộ dữ liệu mặc định hoặc sao lưu được sử dụng. CRC có thể không hợp lệ do lỗi thiết bị hoặc nếu người dùng đã ngắt nguồn trong quá trình cập nhật kho dữ liệu cấu hình.
Đã có ý kiến cho rằng băm cung cấp xác suất phát hiện tham nhũng cao hơn CRC với nhiều lỗi bit. Điều này là đúng và quyết định về việc sử dụng CRC 16 hay 32 bit hay không sẽ ảnh hưởng đến hậu quả an toàn của khối dữ liệu bị hỏng đang được sử dụng và liệu bạn có thể biện minh cho cơ hội 1 trong 2 ^ 16 hoặc 2 ^ 32 không khối dữ liệu được khai báo không chính xác hợp lệ.
Nhiều thiết bị có bộ tạo CRC tích hợp cho các thuật toán tiêu chuẩn. Sê-ri MSP430F5X từ Texas có triển khai phần cứng của Tiêu chuẩn CRC-CCITT.
CRC32 nhanh hơn và hàm băm chỉ dài 32 bit.
Sử dụng nó khi bạn chỉ muốn kiểm tra nhanh và nhẹ. CRC được sử dụng trong ethernet.
Nếu bạn cần độ tin cậy cao hơn, tốt hơn là sử dụng chức năng băm hiện đại.
Chỉ sử dụng CRC nếu tài nguyên tính toán rất chặt chẽ (tức là một số môi trường nhúng) hoặc bạn cần lưu trữ / vận chuyển nhiều giá trị đầu ra và không gian / băng thông chặt chẽ (vì CRC thường là 32 bit trong đó đầu ra MD5 là 128 bit, SHA1 160 bit và các biến thể SHA khác lên tới 512 bit).
Không bao giờ sử dụng CRC để kiểm tra bảo mật vì CRC rất dễ "giả".
Ngay cả đối với phát hiện lỗi vô tình (chứ không phải phát hiện thay đổi độc hại), băm vẫn tốt hơn CRC đơn giản. Một phần vì cách tính đơn giản của CRC (và một phần vì các giá trị CRC thường ngắn hơn các đầu ra băm thông thường nên có phạm vi giá trị nhỏ hơn nhiều), nhiều khả năng, trong trường hợp có hai hoặc nhiều lỗi , một lỗi sẽ che dấu một lỗi khác để bạn kết thúc với cùng một CRC mặc dù có hai lỗi.
Tóm lại: trừ khi bạn có lý do không sử dụng thuật toán băm đàng hoàng, hãy tránh các CRC đơn giản.
Gần đây tôi đã bắt gặp việc sử dụng CRC rất thông minh. Tác giả của công cụ nhận dạng và loại bỏ trùng lặp tệp jdupe (cùng tác giả của tiêu đề công cụ exif phổ biến) sử dụng nó trong lần đầu tiên chuyển qua các tệp. CRC được tính trên 32K đầu tiên của mỗi tệp để đánh dấu các tệp có vẻ giống nhau, các tệp phải có cùng kích thước. Các tệp này được thêm vào danh sách các tệp để thực hiện so sánh nhị phân đầy đủ. Nó tăng tốc độ kiểm tra các tập tin phương tiện lớn.
Hãy bắt đầu với những điều cơ bản.
Trong Mật mã học, thuật toán băm chuyển đổi nhiều bit thành ít bit hơn thông qua thao tác phân loại. Băm được sử dụng để xác nhận tính toàn vẹn của tin nhắn và tệp.
Tất cả các thuật toán băm tạo ra va chạm. Xung đột là khi một số kết hợp nhiều bit tạo ra cùng một đầu ra ít bit hơn. Độ mạnh mật mã của thuật toán băm được xác định bởi việc một cá nhân không có khả năng xác định đầu ra sẽ là gì cho một đầu vào nhất định bởi vì nếu họ có thể xây dựng một tệp có hàm băm khớp với tệp hợp pháp và làm tổn hại tính toàn vẹn giả định của hệ thống. Sự khác biệt giữa CRC32 và MD5 là MD5 tạo ra hàm băm lớn hơn khó dự đoán hơn.
Khi bạn muốn triển khai tính toàn vẹn của tin nhắn - có nghĩa là tin nhắn đã không bị can thiệp trong quá trình vận chuyển - không có khả năng dự đoán va chạm là một thuộc tính quan trọng. Một 32-bit hash có thể mô tả 4 tỷ thông điệp khác nhau hoặc các tập tin sử dụng 4 tỷ băm độc đáo khác nhau. Nếu bạn có 4 tỷ và 1 tệp, bạn được đảm bảo có 1 xung đột. Không gian 1 TB có khả năng xảy ra hàng tỷ va chạm. Nếu tôi là kẻ tấn công và tôi có thể dự đoán băm 32 bit đó sẽ là gì, tôi có thể tạo một tệp bị nhiễm va chạm với tệp đích; có cùng hàm băm.
Ngoài ra, nếu tôi thực hiện truyền 10mbps thì khả năng gói bị hỏng vừa phải để vượt qua crc32 và tiếp tục đi đến đích và thực thi là rất thấp. Hãy nói với tốc độ 10mbps tôi nhận được 10 lỗi \ giây . Nếu tôi tăng tốc lên tới 1gb / giây , thì bây giờ tôi nhận được 1.000 lỗi mỗi giây . Nếu tôi ram tối đa 1 exabit mỗi giây, thì tôi có tỷ lệ lỗi là 1.000.000.000 lỗi mỗi giây . Giả sử chúng ta có tỷ lệ va chạm là 1 \ 1.000.000lỗi truyền, có nghĩa là 1 trong một triệu lỗi truyền dẫn dẫn đến dữ liệu bị hỏng không bị phát hiện. Với tốc độ 10mbps tôi nhận được dữ liệu lỗi được gửi cứ sau 100.000 giây hoặc khoảng một lần một ngày. Với tốc độ 1gbps, cứ sau 5 phút lại xảy ra một lần. Với tốc độ 1 exabit mỗi giây, chúng ta đang nói chuyện nhiều lần trong một giây.
Nếu bạn mở Wireshark, bạn sẽ thấy tiêu đề Ethernet thông thường của bạn có CRC32, tiêu đề IP của bạn có CRC32 và Tiêu đề TCP của bạn có CRC32 và ngoài các giao thức lớp cao hơn có thể làm gì; ví dụ IPSEC có thể sử dụng MD5 hoặc SHA để kiểm tra tính toàn vẹn ngoài các mục trên. Có một số lớp kiểm tra lỗi trong các giao tiếp mạng thông thường và chúng VẪN đi ngay bây giờ và ở tốc độ 10mbps phụ.
Kiểm tra dự phòng chu kỳ (CRC) có một số phiên bản phổ biến và một số phiên bản không phổ biến nhưng thường được thiết kế để chỉ thông báo khi tin nhắn hoặc tệp bị hỏng trong quá trình chuyển đổi (lật nhiều bit). Bản thân CRC32 không phải là một giao thức kiểm tra lỗi rất tốt theo các tiêu chuẩn ngày nay trong môi trường doanh nghiệp lớn, vô hướng vì tỷ lệ va chạm; người dùng trung bình ổ cứng có thể có tới 100 nghìn tệp và chia sẻ tệp trên một công ty có thể có hàng chục triệu. Tỷ lệ không gian băm so với số lượng tệp quá thấp. CRC32 được tính toán rẻ để thực hiện trong khi MD5 thì không.
MD5 được thiết kế để ngăn chặn việc sử dụng va chạm có chủ ý để làm cho một tệp độc hại trông lành tính. Nó được coi là không an toàn vì không gian băm đã được ánh xạ đủ để cho phép một số cuộc tấn công xảy ra và một số va chạm có thể dự đoán được. SHA1 và SHA2 là những đứa trẻ mới trong khối.
Để xác minh tập tin, Md5 bắt đầu được sử dụng bởi rất nhiều nhà cung cấp vì bạn có thể thực hiện nhanh chóng các tệp multigigabyte hoặc multiterrabyte với nó và xếp chồng lên trên việc sử dụng và hỗ trợ CRC32 của hệ điều hành chung. Đừng ngạc nhiên nếu trong thập kỷ tới, các hệ thống tập tin bắt đầu sử dụng MD5 để kiểm tra lỗi.