На Хабрахабре уже порядка 1000 статей так или иначе связанные с шифрованием, но иногда возникает ситуация, когда быстро нужна информация по тому или иному алгоритму.

Типизация КА


Итак, представляю вам статью, в которой собраны, известные и не очень, криптографические алгоритмы. Оговоримся, что все статьи из данной серии не претендует на новаторство, или уникальность. Скорее краткий справочник, кто-то даже назовет это прикроватным чтивом. Существуют различные классификации криптоалгоритмов, например, такая:


Для удобства я буду использовать деление на группы по количеству ключей:

  1. Бесключевые КА — не используют в вычислениях никаких ключей;
  2. Одноключевые КА — работают с одним ключевым параметром (секретным ключом);
  3. Двухключевые КА — на различных стадиях работы в них применяются два ключевых параметра: секретный и открытый ключи.

Терминология:
  • Открытый (исходный) текст — данные (не обязательно текстовые), передаваемые без использования криптографии.
  • Шифротекст, шифрованный (закрытый) текст — данные, полученные после применения криптосистемы (обычно — с некоторым указанным ключом).
  • Ключ — параметр шифра, определяющий выбор конкретного преобразования данного текста. В современных шифрах криптографическая стойкость шифра целиком определяется секретностью ключа (принцип Керкгоффса).
  • Шифр, криптосистема — семейство обратимых преобразований открытого текста в шифрованный.
  • Шифрование — процесс нормального применения криптографического преобразования открытого текста на основе алгоритма и ключа, в результате которого возникает шифрованный текст.
  • Расшифровывание — процесс нормального применения криптографического преобразования шифрованного текста в открытый.
  • Асимметричный шифр, двухключевой шифр, шифр с открытым ключом — шифр, в котором используются два ключа, шифрующий и расшифровывающий. При этом, зная лишь ключ зашифровывания, нельзя расшифровать сообщение, и наоборот.
  • Открытый ключ — тот из двух ключей асимметричной системы, который свободно распространяется. Шифрующий для секретной переписки и расшифровывающий — для электронной подписи.
  • Секретный ключ, закрытый ключ — тот из двух ключей асимметричной системы, который хранится в секрете.
  • Криптоанализ — наука, изучающая математические методы нарушения конфиденциальности и целостности информации.
  • Криптоаналитик — учёный, создающий и применяющий методы криптоанализа.
  • Криптографическая атака — попытка криптоаналитика вызвать отклонения в атакуемой защищённой системе обмена информацией. Успешную криптографическую атаку называют взлом или вскрытие.
  • Дешифрование (дешифровка) — процесс извлечения открытого текста без знания криптографического ключа на основе известного шифрованного. Термин дешифрование обычно применяют по отношению к процессу криптоанализа шифротекста (криптоанализ сам по себе, вообще говоря, может заключаться и в анализе криптосистемы, а не только зашифрованного ею открытого сообщения).
  • Криптографическая стойкость — способность криптографического алгоритма противостоять криптоанализу.
  • Имитозащита — защита от навязывания ложной информации. Другими словами, текст остаётся открытым, но появляется возможность проверить, что его не изменяли ни случайно, ни намеренно. Имитозащита достигается обычно за счет включения в пакет передаваемых данных имитовставки.
  • Имитовставка — блок информации, применяемый для имитозащиты, зависящий от ключа и данных.
  • Электронная цифровая подпись, или электронная подпись — асимметричная имитовставка (ключ защиты отличается от ключа проверки). Другими словами, такая имитовставка, которую проверяющий не может подделать.
  • Центр сертификации — сторона, чья честность неоспорима, а открытый ключ широко известен. Электронная подпись центра сертификации подтверждает подлинность открытого ключа.
  • Хеш-функция — функция, которая преобразует сообщение произвольной длины в число («свёртку») фиксированной длины. Для криптографической хеш-функции (в отличие от хеш-функции общего назначения) сложно вычислить обратную и даже найти два сообщения с общей хеш-функцией.



Бесключевые КА


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. Если кому интересно, то почти по всем алгоритмам, представленным в данной статье, имеются архивы, с реализацией на С, С++ или Ассемблере(на каком-то из языков), соответственно реализации не мои, скажу больше использовать их навряд ли получится, хотя кто знает.
Поделиться с друзьями
-->

Комментарии (37)


  1. smxfem
    25.12.2016 01:17
    +6

    что-то типа такого бы увидеть
    image


    1. den_golub
      25.12.2016 01:24

      О, спасибо! Думаю в заключительную статью добавлю нечто подобное.


  1. Sash_V
    25.12.2016 02:12
    +1

    Не упомянули хеш-функцию Whirlpool


    1. den_golub
      25.12.2016 02:13

      Благодарствую, думаю до праздников добавлю и её.


    1. icoz
      25.12.2016 02:14
      +1

      А про ГОСТ даже и не вспомнили…


      1. den_golub
        25.12.2016 02:28

        А каком госте речь? Честно скажу в одноключевых есть пару ростов, но вот в бесключевых что-то не припомню. Буду благодарен если поделитесь ссылкой.


        1. icoz
          25.12.2016 02:31
          +3

          Сами же сказали, что на хабре много статей. Вот например.


          1. den_golub
            25.12.2016 02:35

            Действительно, как и говорил выше, постораюсь до праздников добавить.


        1. icoz
          25.12.2016 02:34

          Более того. Есть ГОСТы на всё: хэш, блочный, Эцп.
          Номера с 34.10 по 34.13, года не помню, но без труда найдёте.


          1. den_golub
            25.12.2016 02:38

            Благодарю, еще раз. Учту.


          1. den_golub
            25.12.2016 02:41

            Госты, как -то совсем из головы вылетели.


  1. hdfan2
    25.12.2016 08:45
    +1

    Забегая вперёд, по поводу таблицы классификации — а почему для 2-ключевых алгоритмов эл. подпись вынесена в отдельный блок? Насколько я понимаю, любой алгоритм асимметричного шифрования можно использовать для создания ЭЦП. Т.е. нет отдельно алгоритмов для шифрования, и отдельно для подписи.


    1. icoz
      25.12.2016 12:50
      +2

      Из вашего замечания следует, что операции шифрования и расшифрования всегда коммутативны. Я не был бы так уверен. Для схем типа Эль-Гамаля и RSA это так. А с эллиптическими кривыми — не знаю.


      1. mrxak
        26.12.2016 00:09
        +1

        А с эллиптическими кривыми это тоже так, потому что они (в области криптографии) строятся над конечными полями, а в математическом поле по определению операции сложения и умножения коммутативны, есть нулевые элементы по сложению и умножению и т. п. Скорее всего, чисто математически, можете придумать криптографию через операции над неабелевыми группами, но вроде как этим никто не занимался.


        1. icoz
          26.12.2016 01:03

          Ок. Но вы говорите про примитивы. А я про протоколы уже. И если из протокола выдернуть конкретные блоки и переставить их местами, то может ничего не выйти. Или, что намного хуже, получится, но будет нестойким.
          Я к чему? А к тому, что должны быть разработаны соответствующие протоколы с учётом всех нюансов взятых примитивов.


  1. VAAKAraceGUM
    25.12.2016 13:19
    +3

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


    1. den_golub
      25.12.2016 13:20

      Благодарю, добавлю. Если про ГОСТы слышал, то про эту как-то вообще не слышал.


      1. novoselov
        25.12.2016 22:48

        Не-криптографическое хэширование тоже бывает полезно
        http://cyan4973.github.io/xxHash/


  1. Labunsky
    25.12.2016 13:50
    +2

    Довольно странная классификация, с каких пор хэширование стали причислять к шифрованию?
    Более того, само по себе криптографическое хеширование подразумевает, что исходный текст получить (почти) нельзя, в то время как шифрование подразумевает простой доступ к информации авторизированым пользователям


    1. Labunsky
      25.12.2016 14:00
      +1

      Виноват, замыленный мозг принял «криптоалгоритмы» за шифрование.
      Тогда другой вопрос — почему вообще криптоалгоритмы решили классифицировать на основе количества используемых ключей?


      1. Dimly
        26.12.2016 00:11
        +1

        Наверное чтобы в одну тему запихать как обратимое, так и не обратимое «криптование». Если обратимое использует 1-2 ключа, то сразу возникает вопрос, а что если нет ключа, но есть функция.


      1. icoz
        26.12.2016 01:10

        Согласен, выбор критерия очень странный. Да и статья вызывает намного больше вопросов, чем даёт ответов. Очень странная статья, имхо. Лично я считаю, что автору надо сначала разобраться в теме прежде, чем придумывать классификацию.


        1. den_golub
          26.12.2016 10:05

          Классификация не придумано мной, это я бы сказал стандартная классификация, просто в силу привычки люди привыкли делить, на хэш-функции, электронные подписи и (а-)симметричное шифрование.

          Сразу же объясню про статью, Вы сами же ответили на вопрос почему она такая

          Да и статья вызывает намного больше вопросов, чем даёт ответов.

          Именно таккая у нее цели.


          1. icoz
            26.12.2016 12:02

            Не знаю, как остальным, но мне жутко режет глаз фраза «двухключевые».
            Обычно делят на бесключевые и ключевые алгоритмы. Ключевые уже делят на симметричное и асимметричное шифрование. А дальше как у вас.


          1. icoz
            26.12.2016 12:03

            Кстати, глупый вопрос: а где вы такую классификацию подсмотрели? Дайте ссылку, пожалуйста.


            1. den_golub
              26.12.2016 14:07

              Да, соглашусь «двухключевые» не самое лучшее название.

              Насчет ссылки не подскажу.


          1. Labunsky
            26.12.2016 12:25

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


            1. den_golub
              26.12.2016 14:07

              Если не секрет, какие??


              1. Labunsky
                26.12.2016 15:43

                Ну вот протокол банально — протокол распределения ключей kerberos.
                Крипто? Крипто. Алгоритм? Ну а что еще-то? Вот только куда его в такой классификации засунуть — непонятно ;)

                Тут проблема в том, что можно понимать криптоалгоритм привычным образом — как алгоритм шифрования. Но тогда схема не пройдет по хешам (ну нифига это не шифрование, хоть режьте)

                А можно буквально, как «криптографический алгоритм». И тогда можно дать волю фантазии и сюда записывать и протоколы распределения ключей, и подписи, и хеши, да хоть майнинг. Вот только в классификации тогда все это пролетает


                1. den_golub
                  26.12.2016 16:17

                  Ну вообще учитывая что там используется пароль то, скорее это одноключевые. Опять же он в больше части основан на симметричной версии протокола Нидхема — Шрёдера, а это опять же отсылка к одноключевым.

                  И все же этот пример не совсем удачен, хоть и среди криптоалгоритмов выделяют протоколы аутентификации, это протокол в привычном понимании не является криптоалгоритмом, скорее это сетевой протокол, который использует возможности других криптоалгоритмов, в частности AES(он же Rijndael).

                  Во всех областях существуют разные классификации, почему бы собственно не рассмотреть со стороны количества ключей? Тем более как оказалось многие не рассматривали с такой стороны.


                  1. Labunsky
                    26.12.2016 16:42

                    почему бы собственно не рассмотреть со стороны количества ключей?
                    Да рассматривайте, а я с удовольствием почитаю. Просто высказал мнение, что выбран не совсем удачный термин, который как не трактуй — не вписывается


  1. Valeriy_K
    26.12.2016 00:12
    +1

    А ещё в прошлом году проскакивала здесь вот эта коллекция реализованных хеш-функций: https://github.com/MaciejCzyzewski/retter
    Там их действительно много.


    1. den_golub
      26.12.2016 00:12

      О, огромное спасибо, посмотрю, может всеми что не хватает дополню.


  1. monah_tuk
    26.12.2016 09:22

    Если честно, то хотелось бы именно такой "цикл" иметь как раз не циклом, а одной статьёй.


    1. den_golub
      26.12.2016 09:49

      Изначально так и задумывалось, возможно в следующей статье я сделаю вместе и 1-ключевые и 2-ключевые КА, а эту статью закину под спойлер. Главное чтоб это нее получилось как не читаемое полотно)))


    1. den_golub
      26.12.2016 10:09

      Просто даже написанная таким образом она представляет собой не хилое такое полотнище)


      1. monah_tuk
        26.12.2016 10:14

        Да нет. Просто ключевые заголовки выделить цветом ещё. А то дефолтный форматтер не так заметно их выделяет. Плюс сделать оглавление в начале, хотя тут это не сильно удобно.