id: Гость   вход   регистрация
текущее время 15:18 26/04/2024
Автор темы: Гость, тема открыта 19/06/2012 01:20 Печать
Категории: криптография, хэширование
http://www.pgpru.com/Форум/Криптография/ПростойВопросОСкоростиРаботыSHA1ИMD5ВКонтекстеАлгоритмаНаКвазигруппах
создать
просмотр
ссылки

Простой вопрос о скорости работы SHA1 и MD5


Прошу простить мое невежество, вопрос, наверное, не только простой, но даже наивный, но не могу ниггже найти ответа в каких-то ясных, доступных для сравнения цифрах, например так: хэширование методом SHA1 в оптимальной реализации расходует 100 (или сколько там) машинных команд на один байт текста. Либо так: хэширование этим методом производится со скоростью 1 Мб (или сколько там) в секунду на машине AMD Sempron с тактовой частотой 2,3 ГГц. Просто и хорошо!


Но как раз таких понятных цифр я найти не могу, везде только описание алгоритма, а сам получить эти цифры не умею, разве что написать своими руками ассемблерную реализацию этих хэшей на ассемблере, сосчитать операторы… Если кто-то избавит меня от этой нудной работы, подскажет цифру, буду признателен.



 
На страницу: 1, 2, 3, 4, 5, 6, 7 След.
Комментарии
— unknown (19/06/2012 09:42, исправлен 19/06/2012 09:43)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664


Насчёт оптимальности реализации думайте сами.

— Agathon (19/06/2012 18:22)   <#>
Unknown, спасибо, очень Вам благодарен!
Ходил по Вашей ссылке, видел ихний benchmark-speed, видел цифры, они очень мне пригодились. Надеюсь, что все понял правильно.

(Замечание в скобках: надеюсь, но самому верится с трудом, потому что впечатления странные: по-ихнему выходит, что RC4 быстрее DES всего в 4.75 раз, а мне помнилось, что разница гораздо больше – реализация RC4 на 16-разрядном ассемблере это всего 11 команд на букву текста, она лупит с ужасной скоростью – 16-разрядное приложение запускается под Windows XP и обрабатывает 50 или 60 мегабайт в секунду. Совсем другие цифры! Но это так, в сторону, те цифры, которые опубликованы, лучше тем, что они официальные, это источник, на который можно сослаться…)
— unknown (20/06/2012 22:40)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664
Не очень понял про ссылку. Я имел ввиду предложение набрать вам самим на вашем компьютере эту команду и самому посмотреть её вывод.

Наверное, можно подложить в исходник модуль и со своей реализацией, хоть с ассемблерной, если и такая возможность/потребность есть.
— Гость (21/06/2012 00:54)   <#>
Unknoun!
Насчет ссылки мудрено понять, конечно, — я уже признался в своем невежестве. Слова, которые Вы написали, я вставил не в командную строку своей операционки, а в окошко поиска Гугл, и меня быстро выкинуло куда надо — по адресу http://www.madboa.com/geek/openssl/#benchmark-speed я нашел сравнительную таблицу скоростей всяких шифров и хэшей. Она мне очень пригодилась, еще раз Вас благодарю, сам бы в жизни не догадался, где искать.

Также не могу себе вообразить, что будет, если эту строку запустить как команду на моей машине — так далеко мои технические познания не простираются, я не только программирования под Windows не знаю, но и пользуюсь этой штукой с трудом, и в Интернете совсем недавно, путаюсь ужасно, тычусь как слепой котенок. Зато я еще немножко помню 16-разрядный ассемблер и голимый язык C в версии Turbo C 2.01 1988 года от Borland — на этом мое техническое образование закончилось, и вообще история прекратила свое течение, я ровно 15 лет к машине не подходил… Ну, за это время многое переменилось, эпоха другая.

Агафон
— Agathon (21/06/2012 01:32)   <#>
Виноват, опять чертовщина из-за моей неумелости. В предыдущем сообщении я, во-первых, переврал Ваше имя, Unknown, а во-вторых, не выставил в надлежащем месте свое, поэтому называюсь там просто Гость... Но я учусь, впредь буду аккуратнее.
— Гость (21/06/2012 06:57)   <#>
Слова, которые Вы написали, я вставил не в командную строку своей операционки, а в окошко поиска Гугл
Вообще говоря, да, на "общие места" надёжнее давать "ссылку" в виде поискового запроса.
— Гость (08/07/2012 05:25)   <#>
Зато я еще немножко помню 16-разрядный ассемблер и голимый язык C в версии Turbo C 2.01 1988 года от Borland — на этом мое техническое образование закончилось, и вообще история прекратила свое течение, я ровно 15 лет к машине не подходил… Ну, за это время многое переменилось, эпоха другая.
Да, по вам видно :) Вы не только запятые не забываете ставить, но даже знаете про такой знак препинания, как тире, и пользуетесь им по правилам. Прям моральный дауншифтер какой-то! Были бы 15 лет в интернете — скатились бы на общий уровень.
— neverward (08/07/2012 12:22)   профиль/связь   <#>
комментариев: 43   документов: 0   редакций: 7
— Agathon (08/07/2012 20:59)   <#>
1. Выражаю признательность господину Neverward за предоставленные им данные о работе хэшей MD5 и SHA1. К сожалению, опять не могу похвастать, что все правильно понял, а просить более подробных разъяснений не решаюсь, это будет нахальство. Ну, разве что кто-то снизойдет, не поленится…
Вот эти строки:
type 16 bytes 64 bytes 256 bytes ....
md5 31024.03k 95228.42k 216469.55k ....
— я понял их так, что алгоритм MD5 при использовании блоков размером 16 байт обрабатывает 31 мегабайт в секунду. Правда, неизвестно, на какой машине, с какой тактовой частотой, в один поток или в несколько потоков (thread of execution) параллельно на разных ядрах, но в любом случае получается что-то очень быстро. К тому же довольно смутно понимаю, что в данном случае значит размер блока 16 байт, — до сих пор я полагал, что распространенные хэши, как правило, работают с блоками текста по 512 байт, при этом все или почти все операции выполняются над 32-разрядными операндами. Или здесь речь о каких-то других блоках?
Да, и что в таком случае значит строка:
Doing md5 for 3s on 16 size blocks: 5720055 md5's in 2.95s
Это 5,7 мегабайт за три секунды? Или что-то другое? В любом случае какие-то другие цифры, не могу сообразить, как они соотносятся с теми, которые были приведены выше, а также с теми, которые опубликованы на сайте http://www.madboa.com/geek/openssl/#benchmark-speed

    1. Также благодарю Гостя, который высоко оценил мое умение расставлять запятые. Вообще ничего сложного в этом искусстве нет, не думал, что можно кого-то этим удивить, да и вообще каждый человек должен уметь хоть что-то — если мало смыслит в математике и программировании, так по крайней мере должен знать русскую орфографию и пунктуацию. Этот Гость еще назвал меня дауншифтером, очень трудное слово, пришлось по словарям лазить. Lukmore утверждает, что слово не ругательное, на том спасибо, но по существу вопроса решительно утверждаю, что это не мой случай.

Нет, ребята, мой случай совсем другой! Вот он, мой случай, недавно на другой странице форума видел, по адресу https://www.pgpru.com/comment51698(прошу прощения, не умею правильно оформлять цитаты):
Если просмотреть в сети подобные темы (как эта), можно выделить некие отличительные особенности:
Автор, мужчина от 13 до 60-ти лет.
Безгранично уверен в новизне, инновационности, безграничной стойкости своего "творения". Он не хочет его показывать, ибо вездесущие спецслужбы уведут его алгоритм. Или другие пользователи сети присвоят и выдадут за свой. А автор же хочет получить патент и уверен что за его алгоритм ему отвалят несметную кучу буржуйских бабосов $. Он прославится и будет богат...
Прочел и пришел в восторг — да это же про меня! Все точно.
Вот какого черта я пристаю к людям с вопросами о скорости известных хэш-функций? А это я сочинил парочку своих алгоритмов хэширования и сравниваю, пытаюсь понять, они у меня быстрые или медленные, как они выглядят на фоне остальных. Но выкладывать подробности стесняюсь, потому что автор мужчина не 13 лет, а почти полных 60, то есть дедушка уже старенький, но из ума еще не выжил, не хочет смешить публику. Ну, раньше времени не хочет, пока не огреб эту несметную кучу буржуйских бабосов… Все же у меня эта работа отняла много лет, и конца ей не видно — все работает, хэш от строки из 4 нулей отличается от хэша строки из 5 нулей, но законченной теории нет, похоже, эта теория вообще выше моих возможностей. Чтобы все было хорошо, надо доказать теоремочку об одной хитрой нециклической подгруппе симметрической группы подстановок — является ли подгруппа от данного набора образующих истинной подгруппой или покрывает группу целиком, а у меня от этой теоремы ум за разум заходит. Жуть, тоска… Эх, брошу все, займусь квадратурой круга и трисекцией угла! А как жаль, что Великая теорема Ферма уже доказана! Ведь многим жизнь скрашивала…

    1. Еще один Гость по ходу полемики употребил слово грамар-наци, такого слова я тоже не знаю, но на этот раз даже в словарь смотреть не стал, потому что всех остальных слов этого коллеги я не понял. Против кого направлен его пафос? Если кто-то пишет грамотно, он тролль и администрация не должна смотреть сквозь пальцы на это отвратительное явление? Или наоборот?
— Гость (08/07/2012 21:27)   <#>
Если кто-то пишет грамотно, он тролль и администрация не должна смотреть сквозь пальцы на это отвратительное явление?
Да, примерно так :) Как оформлять цитаты, описано по ссылкам здесь.
— Agathon (08/07/2012 22:46)   <#>
Люди!
Я только про скорость хэшей спросил.
На мой вопрос добросовестно ответили, я искренне поблагодарил, сказал спасибо.
Где здесь повод для драчки?
Знал бы, что народ такой раздражительный, я бы даже насчет теоремы о нециклической подгруппе шутить не стал. Ну, если люди шуток не понимают…
А бывает, что понимают, видел такие случаи. Написал на одном математическом форуме такое: «каждая нециклическая подгруппа включает в себя не менее трех циклических, не считая тривиальных, то есть без единицы» — и нашелся человек, который не только оценил шутку, он это предложение доказал. С ходу, моментально!
А вы сразу драться… Эх, люди, люди…
— neverward (09/07/2012 17:30)   профиль/связь   <#>
комментариев: 43   документов: 0   редакций: 7


По моему это означает сколько раз вычислится соответствующий хеш за 1000 секунд.

Машина – простаивавший в тот момент сервер amazone aws m1.medium

подробнее:
— Agathon (09/07/2012 19:25)   <#>
Neverward!
Еще раз спасибо — на этот раз за подробности.
Жаль, однако же, что остается неясность — что эти цифры в точности означают.

Если это количество итераций — сколько раз хэш вычисляется за 1000 секунд, — то, мне кажется, я знаю местечко, где на этот вопрос могут ответить в точности, там этим предметом занимаются вплотную. Но я, признаться, боюсь к ним соваться, я на это милое местечко набрел случайно, а когда понял, что там делают, был в ужасе: не думал, что такое возможно, это превосходит мои устарелые понятия о границах вычислительных возможностей бытовых машин. Находятся эти ребята по адресу http://forum.insidepro.com/viewforum.php?f=10, а занимаются странным делом, подбирают пароли по известному хэшу. Именно подбирают, как я понял, действуют полным перебором, грубой силой, иногда в ход идут заранее составленные таблицы (радужные таблицы), различия алгоритмов хэширования этих парней не останавливает, они берут любые известные хэши, в том числе MD5 и SHA1, а работает ихняя механика, как ни странно, на видеокартах, графических ускорителях семейства Джифорс — вроде бы эта штука многопроцессорная, подходит для параллельных вычислений. Цифры, которые я видел на том сайте, просто жуткие, волосы дыбом встают, речь идет о переборе миллионов паролей в секунду — именно так, не операций в секунду, а паролей в секунду, и для каждого вычисляется хэш. Положим, пароль не слишком длинная строка, но и алгоритмы хэширования не слишком быстрые, по моим прикидкам должно получаться не меньше сотни команд на букву входного текста, причем это на 32-разрядной машине, где команда исполняется сразу для 32-битового операнда. Жуть! Техника на грани фантастики… Забыл свой пароль на сайте ирригаторов и гидромелиораторов — приходи, тебе его подберут, только не забудь хэш притащить.

Ну, насмотрелся я этих футуристических ужасов, зато стал лучше понимать некоторые подробности программы, которая у меня на руках — не могу объяснить, откуда она взялась, тут чужие секреты, но я начал разбирать ее устройство, в этой связи и заинтересовался хэшами, даже нашел такие таинственные места, где хэши ломают. Похоже, создатель этой маленькой утилиты знал все фокусы с быстрым перебором, она среди прочих функций (поразительно много можно запихать в восемь килобайт машинного кода!) умеет вычислять хэши довольно занятным способом, причем берет плату за вход: сама работа с текстом умеренно медленная, примерно 120 команд на букву, все операции простенькие, над байтами и двухбайтовыми словами, но работе с текстом предшествует функция инициализации, заполняются необходимые для работы таблицы, и вот там, похоже, нарочно накручены лишние расходы — таблицы большие, а процедура их вычисления включает явно ненужные итерации, это редуктор, замедлитель, идет просто пересыпание из пустого в порожнее, некая переменная установлена в 256 — и пошел холостой ход, нехитрая процедура исполняется 256 раз вместо одного раза, в итоге все эти предварительные вычисления требуют, по моим подсчетам, от 15 до 300 миллионов операций, в зависимости от параметра. Это как раз плата за вход, миллионы хэшей в секунду эта штука перебрать не позволит, у любых цифр надо отбросить три или четыре нуля…

Да, и еще у этой штуки есть занятные свойства, не знаю, как их описать на правильном языке. Наверное, можно сказать так: есть различие между физической длиной хэша и эффективной длиной. Полная длина, положим, 32 байта, но я производил пробы, нарочно портил текст и смотрел, как при этом изменяется хэш, — так вот, один испорченный байт текста меняет не все 32 байта хэша, а меньшее количество, от 18 до 25, в среднем набегает 21 ошибка. По мере роста количества ошибок в тексте растет и количество ошибок хэша, но потихоньку, чтобы все 32 байта хэша были неправильными, нужно испортить 10 или 12 байтов текста. Я это отследил эмпирически, но не знаю, что это значит. Может быть, это значит, что хэш-функция поганая, у нее этот самый лавинный эффект, про который пишут умные люди, недостаточно лавинный… А может, ничего, и так сойдет… Главное, что эти свойства не зависят от длины текста, текст коротенький, 4 байта, и порча любого из четырех отзывается в 20 неправильных байтах хэша, и то же самое с романом «Война и мир», в котором три мегабайта.

И еще остался загадкой вопрос, с которого я начал — 120 машинных команд на букву текста это много или мало, это быстрая функция или медленная?
На моей машине (AMD Sempron LE-1300, 2.31 GHz) обрабатывается ровно 10 мегабайт текста в секунду, это на одном ядре, да больше и не нужно, программа написана в старомодном стиле, в те времена о многопоточности и не слыхали…

Агафон
— Гость (09/07/2012 21:57)   <#>
все? все криптопрограммы в топку?
— Agathon (09/07/2012 22:24)   <#>
все? все криптопрограммы в топку?
Пожалуйста, выражайтесь яснее!

Мне каждый день приходится смотреть в словарь, вчера искал, что такое дауншифтер, потом поленился смотреть, что такое грамар-наци, но не помогло, вслед посыпались какие-то двачеватели, куны и лоровцы.

Ей-богу, ребята, я в молодости, когда хотел сильно выразиться, просто ругался матом, и это было приличнее, как-то понятнее, вообще больше по-человечески. А если на нашей улице кто-то выражался непонятно, так на него смотрели с недоверием — под блатного косит, по фене ботает...

Сейчас вижу что-то похожее, огорчаюсь. Вот скажите, почему криптограммы в топку? Зачем в топку?

С уважением, Агафон
На страницу: 1, 2, 3, 4, 5, 6, 7 След.
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3