Việc tính toán một băm MD5 có ít CPU chuyên sâu hơn các hàm họ SHA không?


115

Việc tính toán băm MD5 có ít tốn CPU hơn SHA-1 hoặc SHA-2 trên phần cứng x86 của máy tính xách tay "tiêu chuẩn" không? Tôi quan tâm đến thông tin chung, không cụ thể cho một chip nhất định.

CẬP NHẬT: Trong trường hợp của tôi, tôi quan tâm đến việc tính toán băm của một tệp. Nếu kích thước tệp quan trọng, hãy giả sử 300K của nó.


Đó không phải là câu trả lời cho câu hỏi của bạn, nhưng những người ủng hộ Skein đã đưa ra tốc độ của nó, và nó chắc chắn không yếu hơn MD5 cuối đời vào thời điểm này. Trong các thông báo bạn phải băm rất ngắn, tuy nhiên, tốc độ có thể là một bất lợi cho một hàm băm mật mã (cụ thể là tốc độ người khác có thể thực hiện nó chứ không phải tốc độ chạy trên máy tính xách tay của bạn). schneier.com/skein1.2.pdf
Pascal Cuoq,

4
@Pascal: Tuy nhiên, Skein không phải là ứng viên nhanh nhất trong số các ứng cử viên SHA-3, đặc biệt là trên nền tảng 32-bit. Trên x86 64 bit, Skein đạt khoảng 300 MB / s (Skein-512 nhanh hơn một chút so với Skein-256), tương đương với SHA-1, nhưng ở chế độ 32 bit, hiệu suất giảm xuống dưới 60 MB / s, chậm hơn hai lần so với SHA-256. Mặt khác, SHABAL, một ứng cử viên SHA-3 khác, cung cấp hiệu suất tương tự như SHA-1 trên cả nền tảng 32-bit và 64-bit.
Thomas Pornin

Câu trả lời:


123

Có, MD5 có phần ít tốn CPU hơn. Trên Intel x86 của tôi (Core2 Quad Q6600, 2,4 GHz, sử dụng một lõi), tôi nhận được điều này ở chế độ 32-bit:

MD5       411
SHA-1     218
SHA-256   118
SHA-512    46

và điều này ở chế độ 64-bit:

MD5       407
SHA-1     312
SHA-256   148
SHA-512   189

Số liệu tính bằng megabyte / giây cho một tin nhắn "dài" (đây là những gì bạn nhận được cho các tin nhắn dài hơn 8 kB). Điều này là với sphlib , một thư viện triển khai hàm băm trong C (và Java). Tất cả các triển khai đều của cùng một tác giả (tôi) và được thực hiện với những nỗ lực tương đương trong việc tối ưu hóa; do đó sự khác biệt về tốc độ có thể được coi là thực sự nội tại của các chức năng.

Để so sánh, hãy xem xét rằng một đĩa cứng gần đây sẽ chạy với tốc độ khoảng 100 MB / s và bất kỳ thứ gì qua USB sẽ ở mức dưới 60 MB / s. Mặc dù SHA-256 có vẻ "chậm" ở đây, nó đủ nhanh cho hầu hết các mục đích.

Lưu ý rằng OpenSSL bao gồm triển khai 32-bit SHA-512 khá nhanh hơn mã của tôi (nhưng không nhanh bằng SHA-512 64-bit), bởi vì triển khai OpenSSL đang được lắp ráp và sử dụng thanh ghi SSE2, điều không thể được thực hiện bằng C. SHA-512 là chức năng duy nhất trong số bốn chức năng được hưởng lợi từ việc triển khai SSE2.

Chỉnh sửa: trên trang này ( kho lưu trữ ), người ta có thể tìm thấy một báo cáo về tốc độ của nhiều hàm băm (nhấp vào liên kết "Người bảo trì Telechargez"). Báo cáo bằng tiếng Pháp, nhưng chủ yếu có đầy đủ các bảng và con số, và các con số là quốc tế. Các hàm băm được triển khai không bao gồm các ứng cử viên SHA-3 (ngoại trừ SHABAL) nhưng tôi đang làm việc trên nó.


2
Tôi không nghĩ điểm chuẩn của bạn hữu ích. So sánh tốc độ của hai thuật toán dựa trên sự tối ưu hóa tương đương nhưng không đầy đủ là không thích hợp. Trong thế giới thực, bạn không tự triển khai mà sử dụng các triển khai được tối ưu hóa hoàn toàn. Kết quả từ những thứ đó là những gì nên được so sánh.
Edward Brey

10
@EdwardBrey Trên thực tế, những thứ này gần như đã được tối ưu hóa hoàn toàn. Trên thực tế, việc triển khai md5 của anh ấy hoạt động nhanh hơn nhiều so với cách mà OpenSSL cung cấp, vì vậy không phải mọi triển khai đều sẽ được tối ưu hóa trong "thế giới thực" như bạn nói. Ngoài ra, trong khi những điều này không hoàn hảo (bạn nói đúng về điều đó) nhưng chúng đóng vai trò là câu trả lời hoàn hảo cho câu hỏi cụ thể này.
Gaspa79,

50

Trên MacBook Air 2012 của tôi (Intel Core i5-3427U, 2x 1,8 GHz, 2,8 GHz Turbo), SHA-1 nhanh hơn một chút so với MD5 (sử dụng OpenSSL ở chế độ 64 bit):

$ openssl speed md5 sha1
OpenSSL 0.9.8r 8 Feb 2011
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5              30055.02k    94158.96k   219602.97k   329008.21k   384150.47k
sha1             31261.12k    95676.48k   224357.36k   332756.21k   396864.62k

Cập nhật: 10 tháng sau với OS X 10.9, SHA-1 chạy chậm hơn trên cùng một máy:

$ openssl speed md5 sha1
OpenSSL 0.9.8y 5 Feb 2013
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5              36277.35k   106558.04k   234680.17k   334469.33k   381756.70k
sha1             35453.52k    99530.85k   206635.24k   281695.48k   313881.86k

Bản cập nhật thứ hai: Trên OS X 10.10, tốc độ SHA-1 trở lại mức 10.8:

$ openssl speed md5 sha1
OpenSSL 0.9.8zc 15 Oct 2014
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5              35391.50k   104905.27k   229872.93k   330506.91k   382791.75k
sha1             38054.09k   110332.44k   238198.72k   340007.12k   387137.77k

Cập nhật thứ ba: OS X 10.14 với LibreSSL nhanh hơn rất nhiều (vẫn trên cùng một máy). SHA-1 vẫn xuất hiện trên đầu trang:

$ openssl speed md5 sha1
LibreSSL 2.6.5
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5              43128.00k   131797.91k   304661.16k   453120.00k   526789.29k
sha1             55598.35k   157916.03k   343214.08k   489092.34k   570668.37k

2
kỳ lạ, không khí của tôi giống với của bạn và tôi nhận được kết quả điểm chuẩn khác nhau. với 8192 byte: md5 305549,52k; sha1 204668.57k
Carlos Fontes

3
Hmm, tôi cũng nhận được kết quả khác với năm ngoái trên cùng một máy: md5 381756.70k, sha1 313881.86k. Có thể do nâng cấp lên 10.9 (OpenSSL 0.9.8y).
nwellnhof

6
Đó là một câu trả lời tuyệt vời. nó cho thấy bạn quan tâm. cảm ơn người đàn ông đã chia sẻ
M lúc

13

Câu trả lời thật là: Nó phụ thuộc

Có một số yếu tố cần xem xét, rõ ràng nhất là: cpu bạn đang chạy các thuật toán này và việc triển khai các thuật toán.

Ví dụ: tôi và bạn tôi đều chạy cùng một phiên bản openssl giống hệt nhau và nhận được kết quả hơi khác với các CPU Intel Core i7 khác nhau.

Thử nghiệm của tôi tại nơi làm việc với CPU Intel (R) Core (TM) i7-2600 @ 3,40GHz

The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5              64257.97k   187370.26k   406435.07k   576544.43k   649827.67k
sha1             73225.75k   202701.20k   432679.68k   601140.57k   679900.50k

Và của anh ấy với CPU Intel (R) Core (TM) i7 920 @ 2,67GHz

The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5              51859.12k   156255.78k   350252.00k   513141.73k   590701.52k
sha1             56492.56k   156300.76k   328688.76k   452450.92k   508625.68k

Cả hai chúng tôi đều đang chạy các tệp nhị phân giống hệt nhau của OpenSSL 1.0.1j ngày 15 tháng 10 năm 2014 từ gói chính thức của ArchLinux.

Ý kiến ​​của tôi về điều này là với sự bảo mật được bổ sung của sha1, các nhà thiết kế cpu có nhiều khả năng cải thiện tốc độ của sha1 và nhiều lập trình viên sẽ làm việc để tối ưu hóa thuật toán hơn md5sum.

Tôi đoán rằng md5 sẽ không còn được sử dụng vào một ngày nào đó vì có vẻ như nó không có lợi thế hơn sha1. Tôi cũng đã thử nghiệm một số trường hợp trên các tệp thực và kết quả luôn giống nhau trong cả hai trường hợp (có thể bị giới hạn bởi I / O đĩa).

md5sum của một tệp lớn 4,6 GB mất cùng thời gian so với sha1sum của cùng một tệp, tương tự với nhiều tệp nhỏ (488 trong cùng một thư mục). Tôi đã chạy thử nghiệm hàng chục lần và họ đều nhận được kết quả tương tự.

-

Sẽ rất thú vị nếu điều tra thêm về điều này. Tôi đoán có một số chuyên gia xung quanh có thể đưa ra câu trả lời chắc chắn cho việc tại sao sha1 lại nhanh hơn md5 trên các bộ vi xử lý mới hơn.


6
Bạn nghiêm túc cần phải mua một ổ SSD (và / hoặc loại bỏ McAfee) :)
Maarten Bodewes

1
@owlstead chết tiệt Tôi đã quên tắt "chế độ chậm" của hộp Linux của tôi khi tôi thử điều này.
Johnride

4
@Johnride, không đánh giá điểm chuẩn từ tệp. Chạy nó từ dữ liệu trong bộ nhớ hoặc đơn giản hơn chỉ cần rehash cùng một giá trị.
Robino,

1
@Robino đó là những gì openssl speedlàm, đó là điểm chuẩn đầu tiên và có ý nghĩa nhất.
Johnride,

1

MD5 cũng được hưởng lợi từ việc sử dụng SSE2, hãy kiểm tra BarsWF và sau đó nói với tôi rằng nó không. Tất cả chỉ cần một ít kiến ​​thức về trình lắp ráp và bạn có thể tạo (các) quy trình MD5 SSE2 của riêng mình. Tuy nhiên, đối với lượng lớn thông lượng, có sự đánh đổi tốc độ trong quá trình băm thay vì thời gian dành cho việc sắp xếp lại dữ liệu đầu vào để tương thích với các hướng dẫn SIMD được sử dụng.


3
Thoạt nhìn, không rõ SSE2 được sử dụng để tăng tốc một luồng MD5 hay để ghép nối một vài luồng MD5 song song; thứ hai tất nhiên là dễ dàng đối với hầu hết các thuật toán, nhưng điều đó không được tính là hưởng lợi từ SSE2 vì thông thường những gì cần thiết là một luồng dữ liệu.
lapo

0

sha1sum trên Power9 nhanh hơn một chút so với md5sum

$ uname -mov
#1 SMP Mon May 13 12:16:08 EDT 2019 ppc64le GNU/Linux

$ cat /proc/cpuinfo
processor       : 0
cpu             : POWER9, altivec supported
clock           : 2166.000000MHz
revision        : 2.2 (pvr 004e 1202)

$ ls -l linux-master.tar
-rw-rw-r-- 1 x x 829685760 Jan 29 14:30 linux-master.tar

$ time sha1sum linux-master.tar
10fbf911e254c4fe8e5eb2e605c6c02d29a88563  linux-master.tar

real    0m1.685s
user    0m1.528s
sys     0m0.156s

$ time md5sum linux-master.tar
d476375abacda064ae437a683c537ec4  linux-master.tar

real    0m2.942s
user    0m2.806s
sys     0m0.136s

$ time sum linux-master.tar
36928 810240

real    0m2.186s
user    0m1.917s
sys     0m0.268s
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.