2010-04-27 2 views
91

Рассчитывает хеш MD5 менее интенсивным процессором, чем SHA-1 или SHA-2 на «стандартном» ноутбуке x86? Меня интересует общая информация, не относящаяся к определенному чипу.Рассчитывает хеш-память MD5 меньше, чем процессор, чем функции семейства SHA?

ОБНОВЛЕНИЕ: В моем случае, я заинтересован в вычислении хеша файла. Если размер файла имеет значение, допустим его 300K.

+0

Это не ответ на ваш вопрос, но сторонники Skein выдвинули свою скорость, и это, конечно же, не слабее, чем MD5 в конце жизни. В сообщениях, которые вы используете для хэша, очень короткие, скорость может быть недостатком криптографической хэш-функции (особенно, насколько быстро кто-то может ее реализовать, а не как быстро она работает на вашем ноутбуке). http://www.schneier.com/skein1.2.pdf –

+4

@Pascal: Skein не самый быстрый из кандидатов SHA-3, хотя, особенно на 32-битных платформах. На 64-битной x86 Skein достигает около 300 Мбайт/с (Skein-512 работает несколько быстрее Skein-256), что сопоставимо с SHA-1, но в 32-битном режиме производительность падает до менее 60 МБ/с, вдвое медленнее, чем SHA-256. С другой стороны, SHABAL, еще один кандидат SHA-3, предлагает производительность, аналогичную SHA-1, как на 32-битной, так и на 64-битной платформах. –

ответ

102

Да, MD5 несколько менее интенсивен. На моем Intel x86 (Core2 Quad Q6600, 2,4 ГГц, используя одно ядро), я получаю это в 32-битном режиме:

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

и это в 64-битном режиме:

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

Цифры в мегабайтах в секунду для «длинного» сообщения (это то, что вы получаете для сообщений длиной более 8 кБ). Это с sphlib, библиотекой реализации хеш-функций в C (и Java). Все реализации принадлежат одному автору (мне) и были сделаны с сопоставимыми усилиями при оптимизации; таким образом, разности скоростей можно считать действительно неотъемлемой частью функций.

В качестве точки сравнения подумайте, что последний жесткий диск будет работать со скоростью около 100 МБ/с, а что-то через USB будет ниже 60 МБ/с. Хотя SHA-256 выглядит «медленным» здесь, он достаточно быстр для большинства целей.

Заметим, что OpenSSL включает 32-разрядную реализацию SHA-512, которая намного быстрее, чем мой код (но не так быстро, как 64-разрядный SHA-512), поскольку реализация OpenSSL находится в сборке и использует регистры SSE2 , то, что невозможно сделать на простом C. SHA-512 является единственной функцией среди тех четырех, которые выигрывают от реализации SSE2.

Edit: на this page, можно найти отчет о скорости многих хэш-функций (нажмите на «Téléchargez Maintenant» ссылка). Отчет находится на французском языке, но в основном он заполнен таблицами и цифрами, а номера являются международными. Реализованные хэш-функции не включают кандидатов SHA-3 (кроме SHABAL), но я над этим работаю.

+1

Я не думаю, что ваши тесты полезны. Сравнение скорости двух алгоритмов, основанных на эквивалентной, но неполной оптимизации, не имеет значения. В реальном мире вы не сворачиваете свою собственную реализацию, а используете полностью оптимизированные реализации. Результаты этого - это то, что следует сравнивать. –

+6

@EdwardBrey На самом деле они довольно близки к полной оптимизации. Фактически его реализация md5 работает намного быстрее, чем предлагает OpenSSL, поэтому не всякая реализация будет оптимизирована в «реальном мире», как вы говорите. Кроме того, хотя они не идеальны (вы правы в этом) imho, они служат идеальным ответом на этот конкретный вопрос. – Gaspa79

1

MD5 также извлекает выгоду из использования SSE2, проверьте BarsWF, а затем скажите мне, что это не так. Все, что требуется, - это небольшое знание ассемблера, и вы можете создавать свои собственные MD5 SSE2 (ы). Однако при больших объемах пропускной способности существует компромисс скорости во время хэширования, а не время, затрачиваемое на переупорядочивание входных данных для совместимости с используемыми инструкциями SIMD.

+3

При первом взгляде неясно, используется ли SSE2 для ускорения потока * one * MD5 или для сопряжения нескольких параллельных потоков MD5; последнее, конечно, легко для большинства алгоритмов, но это не значит, что вы пользуетесь SSE2, как обычно, нужен один поток данных. – lapo

36

На моем 2012 MacBook Air (Intel Core i5-3427U, 2x 1,8 ГГц, 2,8 ГГц Turbo), SHA-1 немного быстрее, чем MD5 (с использованием OpenSSL в 64-битном режиме):

$ 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 

Update: через 10 месяцев с OS X 10.9, SHA-1 все медленнее на той же машине:

$ 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 

Второе обновление: в OS X 10.10, SHA-1 скорость назад к 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 
+2

странный, мой воздух такой же, как у вас, и я получил противоположные результаты тестов. с 8192 байтами: md5 305549.52k; sha1 204668.57k –

+3

Хмм, я также получаю разные результаты, чем в прошлом году на том же компьютере: md5 381756.70k, sha1 313881.86k. Возможно, из-за обновления до 10.9 (OpenSSL 0.9.8y). – nwellnhof

+2

Это отличный ответ. это показывает вам заботу. спасибо человеку за обмен –

10

Реальный ответ: Это зависит

Есть несколько факторов, которые необходимо учитывать, наиболее очевидные из них: CPU вы работаете эти алгоритмы, и реализация алгоритмов ,

Например, я и мой друг запускают ту же самую версию openssl и получают несколько разные результаты с помощью различных процессоров Intel Core i7.

Мой тест на работе с Intel (R) сердцевиной (TM) i7-2600 CPU @ 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 

И его с Intel (R) ядро ​​(TM) i7 CPU 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 

Мы оба работают точно такие же двоичные файлы OpenSSL 1.0.1j 15 октября 2014 года с официального пакета Archlinux.

Мое мнение об этом заключается в том, что с добавленной безопасностью sha1 разработчики cpu с большей вероятностью улучшат скорость sha1, и больше программистов будут работать над оптимизацией алгоритма, чем md5sum.

Я предполагаю, что md5 больше не будет использоваться в какой-то день, поскольку кажется, что он не имеет преимущества перед sha1. Я также тестировал некоторые случаи на реальных файлах, и результаты всегда были одинаковыми в обоих случаях (вероятно, они ограничены дисковыми вводами/выводами).

md5sum большого файла объемом 4,6 ГБ занимает то же самое время, что и sha1sum того же файла, то же самое относится ко многим небольшим файлам (488 в том же каталоге). Я провел тесты десятки раз, и они последовательно получали одинаковые результаты.

-

Было бы очень интересно исследовать этот вопрос. Я думаю, есть некоторые эксперты, которые могли бы дать твердый ответ на вопрос, почему sha1 становится быстрее, чем md5 на новых процессорах.

+6

Вам серьезно нужно купить SSD (и/или удалить McAfee) :) –

+0

@owlstead damn Я забыл обойти отключить «медленный режим» ящиков Linux, когда я это пробовал. – Johnride

+4

@Johnride, не проверяйте файл. Запустите его из данных в памяти или еще проще просто перефразировать одно и то же значение. – Robino