На выходных решил поискать open-source реализации отечественных криптографических стандартов. Прежде всего интересовали новые: хэш-функция Стрибог (ГОСТ Р 34.11-2012), Кузнечик (ГОСТ Р 34.12-2015) и ЭЦП (ГОСТ Р 34.10-2012 или 2001 (без 512-бит) ). Старый ГОСТ 28147-89 специально не искал, поскольку найти его реализацию никаких проблем нет уже давно.
Итак, давайте посмотрим, что же получилось. Сразу предупреждаю, что корректность реализаций не проверял.

Кузнечик




Стрибог




Подпись





Если указал не все — пишите добавлю.

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


  1. omegicus
    14.12.2015 14:19
    +1

    в копилку по Кузнечику http://omegicus.org/get/gost14.zip
    (инструмент чисто для себя делал, так что AS IS)


  1. milabs
    14.12.2015 15:17

    Забыли вот этот мега-проект на JS — gostcrypto.com


    1. milabs
      14.12.2015 15:18

      А, не, не забыли :)


  1. SamDark
    14.12.2015 17:35

    ГОСТ 28147-89, если вдруг кому надо: gostash.it/ru/stashes/1425


  1. Ivan_83
    15.12.2015 01:18
    +1

    Мою реализацию ЭЦП забыли:
    http://netlab.linkpc.net/download/software/SDK/core/include/ecdsa.h
    http://netlab.linkpc.net/download/software/SDK/core/include/math_ec.h
    http://netlab.linkpc.net/download/software/SDK/core/include/math_bn.h

    Ещё в LibreSSL вроде как обратно добавили гостовские алгоритмы.

    SamDark:
    Так се реализация: чтение по одному байту = просадка производительности, ИМХО, в сравнении с чтением в 4 байта в регистр и дальше работой с масками/сдвигами, и собственно форматирование, оформление, отсутствие коментов…
    По работе делал?

    Я видел по лучше.

    Вот весьма оригинальный алгоритм, в котором разворачивают таблицу перестановок: https://github.com/sftp/gost28147/blob/master/gost28147.h
    в итоге она занимает не 128 байт а 4 кб и не влезает в кеш линии, зато все доп битовые операции практически исключены.

    Вот чуть более каноничный вариант: https://github.com/yaruson/GostPlugin
    при этом алгоритм реализован достаточно понятно, взято у: http://habrahabr.ru/post/256843/

    Есть ещё: http://habrahabr.ru/post/81032/ но код читать трудно и алгоритм трудно понять из него.


  1. lumag
    15.12.2015 08:41

    LibreSSL.
    В куске про ЭЦП надо уточнять, поддерживается ли версия -2012 года, с размером ключа 512 бит.
    Про 28147-89/Р 34.11-94. Их много кто поддерживает, но не много где есть возможность использовать разные S-BOX.


  1. lumag
    15.12.2015 08:42

    Потихоньку пилится код для nettle/GnuTLS, но пока далеко до завершения.


  1. m08pvv
    15.12.2015 09:01
    +1

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


  1. Disasm
    15.12.2015 13:04
    +1

    Все подписались?
    https://habrastorage.org/files/084/c25/36f/084c2536fe7044cf83f19fbcaaf45cd0.png