Шифр “Кузнечик” и язык Go

“Кузнечик” это новый российский блочный шифр, в прошлом году стандартизованный ГОСТ Р 34.12-2015. Шифр работает с блоками в 128 бит, ключ имеет длину 256 бит. (Текущим аналогом является шифр AES.) На досуге я реализовал “Кузнечик” на языке Go. Это, конечно, реализация пока далёкая от оптимальной и строгой (в смысле “криптокода”). Например, работа с блоками написана “побайтово”, не используются другие достаточно очевидные оптимизации и штатные языковые конструкции Go (я пока не очень освоился с данным языком). Так сказать, альфа-версия. Приветствуются комментарии, поправки. Возможно, имеет смысл развивать дальше.

Исходники выкладываю на dxdt.ru:

исходный код модуля grasshopper (Kuznyechik, GOST R 34.12-2015);
небольшая программа для проверки работоспособности (реализован стандартный вектор проверки и один дополнительный);
оба файла в .tar.gz.

(Внутри исходников комментарии на английском.)

Некоторые технические пояснения. Работу данного шифра можно ускорить, если использовать достаточно большие таблицы с предвычисленными преобразованиями. Именно этот вариант и реализован. Впрочем, функций Decrypt – две. Одна версия использует все таблицы, вторая – только одну, в которой содержатся предвычисленные значения линейного преобразования. Сами таблицы не содержатся в исходном коде, а вычисляются вызовом функции инициализации. В Go есть штатная библиотека, реализующая режим аутентифицированного шифрования GCM. Обычно этот режим используют в связке с AES, но годится и другой шифр подходящей разрядности. Соответственно, есть идея реализовать связку Kuznyechik-GCM, которая уже является практически полезным инструментом (update: реализовал режим GCM).

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

Англоязычное пояснение:

This post describes GOST R 34.12-2015 Kuznyechik reference implementation in Golang. More comments – in Go source code for Kuznyechik. There is a different version available.

()

Похожие записки:



Далее - мнения и дискуссии

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

Комментарии читателей блога: 5

  • 1. 31st May 2016, 03:51 // Читатель Jeff Zanooda написал:

    А смысл? В больших процессорах AES поддерживается аппаратно, а для маленьких есть Speck. Замечательный кстати блочный шифр, и по размеру кода и по скорости. Годится даже для генерации псевдослучайных чисел.

  • 2. 31st May 2016, 14:36 // Читатель sarin написал:

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

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

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

    так что представленная Вами реализация наверняка будет использована во множестве проектов.

    вот только в шапке не смог найти ничего про условия использования.

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

  • 3. 31st May 2016, 16:13 // Александр Венедюхин ответил:

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

  • 4. 31st May 2016, 22:49 // Александр Венедюхин ответил:

    > А смысл?

    В принципе, смысл только в том, что неплохо иметь выбор. “Кузнечик”, в отличии от предыдущих ГОСТовых шифров, выглядит довольно-таки современно. Конечно, по популярности ему с AES никак не сравниться, как и по степени, так сказать, исследованности, но некоторые всё же предпочитают российские шифры, по разным причинам. Более строго я не готов сформулировать. (Конкретно, в данном случае – я просто написал пример на Go, который ещё довольно серьёзно нужно дорабатывать.)

  • 5. 2nd June 2016, 01:16 // Читатель Андрей П. написал:

    Не нужно откладывать публикацию в github/bitbucket на потом. Сразу там – может, кто поправит уже на ранней стадии

Написать комментарий

Ваш комментарий:

Преграда для ботов: * Time limit is exhausted. Please reload CAPTCHA.

Если видите "капчу", то решите её. Это необходимо для отправки комментария. Обычно, комментарии поступают на премодерацию. Премодерация иногда занимает заметное время.