2012-07-27 32 views
7

Tôi đang cố gắng băm một số lượng lớn tệp có dữ liệu nhị phân bên trong để: (1) kiểm tra tham nhũng trong tương lai và (2) loại bỏ các tệp trùng lặp (có thể có tên hoàn toàn khác nhau) siêu dữ liệu khác).Một số thuật toán băm tốt nhất để sử dụng cho tính toàn vẹn dữ liệu và pc?

Tôi biết về md5 và sha1 và người thân của họ, nhưng sự hiểu biết của tôi là chúng được thiết kế để bảo mật và do đó được cố tình chậm để giảm hiệu quả của các cuộc tấn công bạo lực. Ngược lại, tôi muốn các thuật toán chạy nhanh nhất có thể, đồng thời giảm thiểu xung đột càng nhiều càng tốt.

Mọi đề xuất?

Trả lời

4

Bạn là người phù hợp nhất. Nếu hệ thống của bạn không có bất kỳ đối thủ nào, việc sử dụng hàm băm mật mã là quá mức cần thiết cho các thuộc tính bảo mật của chúng.


Va chạm phụ thuộc vào số lượng bit, b, các hàm băm của bạn và số của băm giá trị, N, bạn ước tính để tính toán. Tài liệu học thuật bảo vệ xác suất va chạm này phải dưới xác suất lỗi phần cứng, do đó ít có khả năng gây xung đột với hàm băm hơn so sánh dữ liệu byte-by-byte [ref1, ref2, ref3, ref4, ref5]. Xác suất lỗi phần cứng nằm trong phạm vi 2^-122^-15 [ref6]. Nếu bạn mong muốn tạo ra N = 2^q giá trị băm thì khả năng va chạm của bạn có thể được đưa ra bởi phương trình này, trong đó đã đưa vào tài khoản birthday paradox:
Equation

Số bit của hàm băm của bạn là tỷ lệ thuận với độ phức tạp tính toán của nó. Vì vậy, bạn quan tâm đến việc tìm kiếm hàm băm với các bit tối thiểu có thể, trong khi có thể duy trì xác suất va chạm ở các giá trị chấp nhận được.


Dưới đây là một ví dụ về cách làm cho phân tích rằng:

  • Hãy nói rằng bạn có f = 2^15 file;
  • Kích thước trung bình của mỗi tệp lf2^20 byte;
  • Bạn giả vờ chia từng tệp thành các khối có kích thước trung bình lc bằng 2^10 byte;
  • Mỗi tệp sẽ được chia thành c = lf/lc = 2^10 khối;

  • Sau đó, bạn sẽ băm q = f * c = 2^25 đối tượng.

Từ phương trình rằng xác suất va chạm trong vài kích thước băm như sau:

  • P (hash = 64 bit) = 2^(2 * 25-64 + 1) = 2^-13 (nhỏ hơn 2^-12)
  • P (băm = 128 bit) = 2^(2 * 25-128 + 1) 2^-77 (cách nhỏ hơn 2^-12)

Bây giờ bạn chỉ cần quyết định hàm băm không mã hóa nào của 64 hoặc 128 bit bạn sẽ sử dụng, biết 64 bit nó khá gần với xác suất lỗi phần cứng (nhưng sẽ nhanh hơn) và 128 bit là một lựa chọn an toàn hơn nhiều (mặc dù chậm hơn).


Dưới đây bạn có thể tìm thấy một danh sách nhỏ được xóa khỏi wikipedia các hàm băm mật mã không. Tôi biết Murmurhash3 và nó là nhanh hơn nhiều so với bất kỳ hàm băm mật mã:

  1. Fowler–Noll–Vo: 32, 64, 128, 256, 512 và 1024 bit
  2. Jenkins: 64 và 128 bit
  3. MurmurHash: 32, 64, 128, và 160 bit
  4. CityHash: 64, 128 và 256 bit
+1

Trước hết, cảm ơn bạn đã dành thời gian giải thích điều này; Tôi rất trân trọng điều này. Thứ hai, tôi muốn hỏi một câu hỏi làm rõ: làm thế nào để bạn bảo vệ khác với một đối thủ so với một số lượng lớn các tệp? Không phải là kết quả cuối cùng giống nhau: thế hệ của đủ dữ liệu mà cuối cùng bạn tìm thấy hai mẩu dữ liệu mà băm giống nhau không? (Hoặc ngẫu nhiên, hoặc thông qua phân tích nhắm mục tiêu của thuật toán.) –

1

MD5 và SHA1 không được thiết kế để bảo mật, không, vì vậy chúng không đặc biệt an toàn và do đó cũng không thực sự rất chậm. Tôi đã sử dụng MD5 cho pc bản thân mình (với Python), và hiệu suất là tốt.

This article máy xác nhận quyền sở hữu ngày hôm nay có thể tính toán số băm MD5 của 330 MB dữ liệu mỗi giây.

SHA-1 được phát triển như một giải pháp thay thế an toàn hơn cho MD5 khi phát hiện ra rằng bạn có thể tạo đầu vào sẽ băm với cùng giá trị với MD5, nhưng tôi nghĩ rằng mục đích của bạn MD5 sẽ hoạt động tốt. Nó chắc chắn đã làm cho tôi.

+5

MD5 và SHA1 là hàm băm mật mã, do đó được thiết kế cho mục đích bảo mật. Chỉ vì an ninh của họ đã bị xâm phạm (SHA1 không bị xâm phạm), điều đó không có nghĩa là chúng không được thiết kế để bảo mật. – Leaurus

+0

(SHA1 không bị xâm phạm nhiều) * – Leaurus

-1

Nếu an ninh không phải là một mối quan tâm cho bạn, bạn có thể mất một trong những hàm băm an toàn và r giáo dục số vòng. Điều này làm cho mật mã không rõ ràng nhưng vẫn hoàn hảo cho việc kiểm tra bình đẳng.

Skein rất mạnh. Nó có 80 viên đạn. Hãy thử giảm xuống còn 10 điểm.

Hoặc mã hóa bằng AES và XOR, khối đầu ra sẽ cùng nhau. AES được tăng tốc phần cứng trên các CPU hiện đại và cực kỳ nhanh.