На Хабрахабре уже порядка 1000 статей так или иначе связанные с шифрованием, но иногда возникает ситуация, когда быстро нужна информация по тому или иному алгоритму.
Типизация КА
Итак, представляю вам статью, в которой собраны, известные и не очень, криптографические алгоритмы. Оговоримся, что все статьи из данной серии не претендует на новаторство, или уникальность. Скорее краткий справочник, кто-то даже назовет это прикроватным чтивом. Существуют различные классификации криптоалгоритмов, например, такая:
Для удобства я буду использовать деление на группы по количеству ключей:
- Бесключевые КА — не используют в вычислениях никаких ключей;
- Одноключевые КА — работают с одним ключевым параметром (секретным ключом);
- Двухключевые КА — на различных стадиях работы в них применяются два ключевых параметра: секретный и открытый ключи.
Терминология:
- Открытый (исходный) текст — данные (не обязательно текстовые), передаваемые без использования криптографии.
- Шифротекст, шифрованный (закрытый) текст — данные, полученные после применения криптосистемы (обычно — с некоторым указанным ключом).
- Ключ — параметр шифра, определяющий выбор конкретного преобразования данного текста. В современных шифрах криптографическая стойкость шифра целиком определяется секретностью ключа (принцип Керкгоффса).
- Шифр, криптосистема — семейство обратимых преобразований открытого текста в шифрованный.
- Шифрование — процесс нормального применения криптографического преобразования открытого текста на основе алгоритма и ключа, в результате которого возникает шифрованный текст.
- Расшифровывание — процесс нормального применения криптографического преобразования шифрованного текста в открытый.
- Асимметричный шифр, двухключевой шифр, шифр с открытым ключом — шифр, в котором используются два ключа, шифрующий и расшифровывающий. При этом, зная лишь ключ зашифровывания, нельзя расшифровать сообщение, и наоборот.
- Открытый ключ — тот из двух ключей асимметричной системы, который свободно распространяется. Шифрующий для секретной переписки и расшифровывающий — для электронной подписи.
- Секретный ключ, закрытый ключ — тот из двух ключей асимметричной системы, который хранится в секрете.
- Криптоанализ — наука, изучающая математические методы нарушения конфиденциальности и целостности информации.
- Криптоаналитик — учёный, создающий и применяющий методы криптоанализа.
- Криптографическая атака — попытка криптоаналитика вызвать отклонения в атакуемой защищённой системе обмена информацией. Успешную криптографическую атаку называют взлом или вскрытие.
- Дешифрование (дешифровка) — процесс извлечения открытого текста без знания криптографического ключа на основе известного шифрованного. Термин дешифрование обычно применяют по отношению к процессу криптоанализа шифротекста (криптоанализ сам по себе, вообще говоря, может заключаться и в анализе криптосистемы, а не только зашифрованного ею открытого сообщения).
- Криптографическая стойкость — способность криптографического алгоритма противостоять криптоанализу.
- Имитозащита — защита от навязывания ложной информации. Другими словами, текст остаётся открытым, но появляется возможность проверить, что его не изменяли ни случайно, ни намеренно. Имитозащита достигается обычно за счет включения в пакет передаваемых данных имитовставки.
- Имитовставка — блок информации, применяемый для имитозащиты, зависящий от ключа и данных.
- Электронная цифровая подпись, или электронная подпись — асимметричная имитовставка (ключ защиты отличается от ключа проверки). Другими словами, такая имитовставка, которую проверяющий не может подделать.
- Центр сертификации — сторона, чья честность неоспорима, а открытый ключ широко известен. Электронная подпись центра сертификации подтверждает подлинность открытого ключа.
- Хеш-функция — функция, которая преобразует сообщение произвольной длины в число («свёртку») фиксированной длины. Для криптографической хеш-функции (в отличие от хеш-функции общего назначения) сложно вычислить обратную и даже найти два сообщения с общей хеш-функцией.
Бесключевые КА
md2/4/5/6
MD2 — криптографическая хеш-функция, разработанная Рональдом Ривестом в 1989 году, и описанная в RFC 1319. На входе сообщение произвольный длины. Размер хеша — 128 бит.
Как писал в свое время braindamagedman о MD5 и MD6:
Алгоритм MD5 имел некогда большую популярность, но первые предпосылки взлома появились еще в конце девяностых, и сейчас его популярность стремительно падает.
Алгоритм MD6 — очень интересный с конструктивной точки зрения алгоритм. Он выдвигался на конкурс SHA-3, но, к сожалению, авторы не успели довести его до кондиции, и в списке кандидатов, прошедших во второй раунд этот алгоритм, отсутствует.
Tiger
Криптографическая хеш-функция, разработанная Росом Андерсоном и Эли Бихамом в 1995 году. Tiger был предназначен для особенно быстрого выполнения на 64-разрядных компьютерах. Tiger не имеет патентных ограничений, может использоваться свободно как с эталонной реализацией, так и с её модификациями. Размер значения хеша — 192 бита (Tiger/192), хотя имеются также более короткие версии для совместимости с SHA-1 (Tiger/160) и с MD4, MD5, RIPEMD, Snefru (Tiger/128). Скорость работы — 132 Мбит/с (проверено на одном процессоре Alpha 7000, модель 660). На современных процессорах значительно быстрее (даже при тесте на 32-битном AMD Sempron 3000+ скорость около 225 Мбит/с).
Так же была реализована Вторая версия Tiger2 —отличается от основной только другим алгоритмом добавления битов, сходным с MD5/SHA-1. Для Tiger2 доступны тестовые векторы.
Sha-1/2
Алгоритм криптографического хеширования. Описан в RFC 3174. Для входного сообщения произвольной длины (максимум 22^64-1 бит, что примерно равно 2 эксабайта) алгоритм генерирует 160-битное хеш-значение, называемое также дайджестом сообщения. Используется во многих криптографических приложениях и протоколах. Также рекомендован в качестве основного для государственных учреждений в США. Принципы, положенные в основу SHA-1, аналогичны тем, которые использовались Рональдом Ривестом при проектировании MD4.
SHA-3
Алгоритм хеширования переменной разрядности, разработанный группой авторов во главе с Йоаном Дайменом, соавтором Rijndael, автором шифров MMB, SHARK, Noekeon, SQUARE и BaseKing. 2 октября 2012 года Keccak стал победителем конкурса криптографических алгоритмов, проводимым Национальным институтом стандартов и технологий США. 5 августа 2015 года алгоритм утверждён и опубликован в качестве стандарта FIPS 202. В программной реализации авторы заявляют о 12,5 циклах на байт при выполнении на ПК с процессором Intel Core 2. Однако в аппаратных реализациях Keccak оказался намного быстрее, чем все другие финалисты. Алгоритм SHA-3 построен по принципу криптографической губки.
Ripemd
Криптографическая хеш-функция, разработанная в Католическом университете Лувена Хансом Доббертином (Hans Dobbertin), Антоном Босселарсом (Antoon Bosselaers) и Бартом Пренелом (Бартом Пренелем). Для произвольного входного сообщения функция генерирует 160-разрядное хеш-значение, называемое дайджестом сообщения. RIPEMD-160 является улучшенной версией RIPEMD, которая, в свою очередь, использовала принципы MD4 и по производительности сравнима с более популярной SHA-1.
Существуют так же 128-, 256- 320-битные версии алгоритма, имеющие соответственные названия.
Haval
Криптографическая хеш-функция, разработанная Yuliang Zheng (англ.), Josef Pieprzyk (англ.) и Jennifer Seberry (англ.) в 1992 году. Для произвольного входного сообщения функция генерирует хеш-значение, называемое дайджестом сообщения, которое может иметь длину 128, 160, 192, 224 или 256 бит. Количество итераций — переменное, от 3 до 5. Количество раундов на каждой итерации — 32. Является модификацией MD5.
P.S. Если кому интересно, то почти по всем алгоритмам, представленным в данной статье, имеются архивы, с реализацией на С, С++ или Ассемблере(на каком-то из языков), соответственно реализации не мои, скажу больше использовать их навряд ли получится, хотя кто знает.
Поделиться с друзьями
smxfem
den_golub
О, спасибо! Думаю в заключительную статью добавлю нечто подобное.
Sash_V
Не упомянули хеш-функцию Whirlpool
den_golub
Благодарствую, думаю до праздников добавлю и её.
icoz
А про ГОСТ даже и не вспомнили…
den_golub
А каком госте речь? Честно скажу в одноключевых есть пару ростов, но вот в бесключевых что-то не припомню. Буду благодарен если поделитесь ссылкой.
icoz
Сами же сказали, что на хабре много статей. Вот например.
den_golub
Действительно, как и говорил выше, постораюсь до праздников добавить.
icoz
Более того. Есть ГОСТы на всё: хэш, блочный, Эцп.
Номера с 34.10 по 34.13, года не помню, но без труда найдёте.
den_golub
Благодарю, еще раз. Учту.
den_golub
Госты, как -то совсем из головы вылетели.
hdfan2
Забегая вперёд, по поводу таблицы классификации — а почему для 2-ключевых алгоритмов эл. подпись вынесена в отдельный блок? Насколько я понимаю, любой алгоритм асимметричного шифрования можно использовать для создания ЭЦП. Т.е. нет отдельно алгоритмов для шифрования, и отдельно для подписи.
icoz
Из вашего замечания следует, что операции шифрования и расшифрования всегда коммутативны. Я не был бы так уверен. Для схем типа Эль-Гамаля и RSA это так. А с эллиптическими кривыми — не знаю.
mrxak
А с эллиптическими кривыми это тоже так, потому что они (в области криптографии) строятся над конечными полями, а в математическом поле по определению операции сложения и умножения коммутативны, есть нулевые элементы по сложению и умножению и т. п. Скорее всего, чисто математически, можете придумать криптографию через операции над неабелевыми группами, но вроде как этим никто не занимался.
icoz
Ок. Но вы говорите про примитивы. А я про протоколы уже. И если из протокола выдернуть конкретные блоки и переставить их местами, то может ничего не выйти. Или, что намного хуже, получится, но будет нестойким.
Я к чему? А к тому, что должны быть разработаны соответствующие протоколы с учётом всех нюансов взятых примитивов.
VAAKAraceGUM
Также можно было бы упомянуть и про хэш-функции серии BLAKE1/2, у которых взрывной рост популярности сейчас. ссылка на википедию
den_golub
Благодарю, добавлю. Если про ГОСТы слышал, то про эту как-то вообще не слышал.
novoselov
Не-криптографическое хэширование тоже бывает полезно
http://cyan4973.github.io/xxHash/
Labunsky
Довольно странная классификация, с каких пор хэширование стали причислять к шифрованию?
Более того, само по себе криптографическое хеширование подразумевает, что исходный текст получить (почти) нельзя, в то время как шифрование подразумевает простой доступ к информации авторизированым пользователям
Labunsky
Виноват, замыленный мозг принял «криптоалгоритмы» за шифрование.
Тогда другой вопрос — почему вообще криптоалгоритмы решили классифицировать на основе количества используемых ключей?
Dimly
Наверное чтобы в одну тему запихать как обратимое, так и не обратимое «криптование». Если обратимое использует 1-2 ключа, то сразу возникает вопрос, а что если нет ключа, но есть функция.
icoz
Согласен, выбор критерия очень странный. Да и статья вызывает намного больше вопросов, чем даёт ответов. Очень странная статья, имхо. Лично я считаю, что автору надо сначала разобраться в теме прежде, чем придумывать классификацию.
den_golub
Классификация не придумано мной, это я бы сказал стандартная классификация, просто в силу привычки люди привыкли делить, на хэш-функции, электронные подписи и (а-)симметричное шифрование.
Сразу же объясню про статью, Вы сами же ответили на вопрос почему она такая
Именно таккая у нее цели.
icoz
Не знаю, как остальным, но мне жутко режет глаз фраза «двухключевые».
Обычно делят на бесключевые и ключевые алгоритмы. Ключевые уже делят на симметричное и асимметричное шифрование. А дальше как у вас.
icoz
Кстати, глупый вопрос: а где вы такую классификацию подсмотрели? Дайте ссылку, пожалуйста.
den_golub
Да, соглашусь «двухключевые» не самое лучшее название.
Насчет ссылки не подскажу.
Labunsky
По-моему, такая классификация применима больше к шифрованию (правда, тогда придется выкинуть хеши), чем к понятию «криптоалгоритм» в целом. Потому что криптографическим алгоритмом можно назвать безумное количество вещей, которые не попадут в данную классификацию в принципе
den_golub
Если не секрет, какие??
Labunsky
Ну вот протокол банально — протокол распределения ключей kerberos.
Крипто? Крипто. Алгоритм? Ну а что еще-то? Вот только куда его в такой классификации засунуть — непонятно ;)
Тут проблема в том, что можно понимать криптоалгоритм привычным образом — как алгоритм шифрования. Но тогда схема не пройдет по хешам (ну нифига это не шифрование, хоть режьте)
А можно буквально, как «криптографический алгоритм». И тогда можно дать волю фантазии и сюда записывать и протоколы распределения ключей, и подписи, и хеши, да хоть майнинг. Вот только в классификации тогда все это пролетает
den_golub
Ну вообще учитывая что там используется пароль то, скорее это одноключевые. Опять же он в больше части основан на симметричной версии протокола Нидхема — Шрёдера, а это опять же отсылка к одноключевым.
И все же этот пример не совсем удачен, хоть и среди криптоалгоритмов выделяют протоколы аутентификации, это протокол в привычном понимании не является криптоалгоритмом, скорее это сетевой протокол, который использует возможности других криптоалгоритмов, в частности AES(он же Rijndael).
Во всех областях существуют разные классификации, почему бы собственно не рассмотреть со стороны количества ключей? Тем более как оказалось многие не рассматривали с такой стороны.
Labunsky
Valeriy_K
А ещё в прошлом году проскакивала здесь вот эта коллекция реализованных хеш-функций: https://github.com/MaciejCzyzewski/retter
Там их действительно много.
den_golub
О, огромное спасибо, посмотрю, может всеми что не хватает дополню.
monah_tuk
Если честно, то хотелось бы именно такой "цикл" иметь как раз не циклом, а одной статьёй.
den_golub
Изначально так и задумывалось, возможно в следующей статье я сделаю вместе и 1-ключевые и 2-ключевые КА, а эту статью закину под спойлер. Главное чтоб это нее получилось как не читаемое полотно)))
den_golub
Просто даже написанная таким образом она представляет собой не хилое такое полотнище)
monah_tuk
Да нет. Просто ключевые заголовки выделить цветом ещё. А то дефолтный форматтер не так заметно их выделяет. Плюс сделать оглавление в начале, хотя тут это не сильно удобно.