Как стать автором
Обновить

Реализация шифра «Кузнечик» на языке RUST

Уровень сложностиПростой
Время на прочтение17 мин
Количество просмотров7.5K
Всего голосов 22: ↑17 и ↓5+16
Комментарии11

Комментарии 11

Байт 0b00110011 будет отображать многочлен вида x^6 + x^5 + x + 1.

Что-то здесь не то. Байт "0b00110011" отображает многочлен "x^5 + x^4 + x + 1"

Да, вы правы! Спасибо за бдительность!

Небольшая правка:

Байт 0b00110011 будет отображать многочлен вида x^6...

Для данного байта или от x^5 многочлен, или байт указать 0b01100011.

И вы тоже правы! Сейчас исправлю.

А где способ генерации сидбоксов?

Пока сидбоксов нет, сколько бы ГОСТов ни было принято, называть это криптостойким шифром нельзя.

Способ генерации констант выходит за рамки алгоритма шифра.

Ссылка на crate?

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

Вот более точная ссылка: https://gitverse.ru/digit4lsh4d0w/cryptography/content/main/7-semester/hand-made-block-encryption

И все же ваш комментарий не давал мне покоя. Вынес код библиотеки блочного шифрования в отдельный репозиторий — теперь можно спокойно подключать в качестве зависимости.

На crates.io не публиковал, по крайней мере пока.

Репозиторий: https://gitverse.ru/digit4lsh4d0w/block-encryption

Скорость?

Кузнечик сделан по канонам, позволяющим эффективную хардварную реализацию. Увы, они же обрекают софтварную на тормоза. Эта проблема была и у AES, пока во все процессоры не завезли соответствующие инструкции. Но, по не понятной причине, даже Эльбрус не содержит инструкций для Магмы и Кузнечика.

Сколько получилось выжать?

Скорость не измерял. Честно говоря — я не знаю как корректно измерить скорость шифрования. Можно, конечно, прицепить профилировщик и шифровать какую-то большую нагрузку, например, 100/1000 Мб файл, а затем примерно оценить сколько времени занял весь процесс. Опять же — будет привязка к конкретной модели ЦП и ее условиям.

Думаю несколько нецелесообразно измерять скорость шифрования на неоптимизированной версии — часть расчетов можно выполнить заранее. К тому же — я не применяю многопоточность или SIMD.

Но чисто ради интереса — почему бы и нет. Если подскажете более-менее корректный способ это сделать — буду благодарен.

Про аппаратное шифрование знаю только, что у нас в России есть отдельные блоки, выполненные в виде небольших микросхем, которые могут ускорять необходимые операции: Стрибог, Магма, Кузнечик и так далее. Думаю там, где нужно, такие блоки прикрепить проще, чем в Эльбрусы добавлять аналог AES на данном этапе развития.

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации