Журнал Эмбеддед-Инженера

ГОСТ 34.12-2015 «Кузнечик». Производительность в железе.

Входные данные

 

Оценки

В некоторых докладах [ Рудской В. Российские криптографические стандарты: функции хэширования, блочные шифры и режимы их работы ] слышны цифры что на Си под 64битный линукс удаётся достичь скорости шифрования до 130 МБайт/с. Теперь подсчитаем экономную реализацию (некий tradeoff между утилизацией логики и скорострельностью алгоритма), притом примем для прстоты все фазы расчета ключа выполненными:

  1. XOR с ключом — 1 такт
  2. S-преобразование — 1 такт (реализация в виде ROM)
  3. L-преобразование (по сути — 16 раз повторённое R-преобразование):
    • 16 раз х 8 тактов (обычное)
    • 16 тактов + 1 такт (скоростное, реализация R-преобразования не на LFSR, а на ROM)

Итого

  1. tradeoff+обычный:      16 байт * 100 МГц : (130 тактов * 9 раундов) = 1.4 МБайт/с
  2. tradeoff+скоростной:    16 байт * 100 МГц : (19 тактов * 9 раундов) = 9.3 МБайт/с

негусто…  предшественник «Кузнечика» (тот, который сейчас «Магма» (ех. ГОСТ 28147-89)) да или тот же AES не такие прожорливые до ресурсов… Конечно, можно сделать конвейер и «гнать» результаты каждый такт, это будет:

..но, это 9 * (16 (ROM 8×8 для S-преобразования) +  16 * 13 (ROM 8×8 для R-преобразования)) = 2016 шт ROM 8×8, что для ПЛИС как-то уже жирновато, даже если участь что двухпортовые BlockRAM на 18К можно использовать как две независимые ROM, т.о. это около ~1000 BlockRAM. Истина явно где-то посередине….

Исходники

Все работы по реализации ГОСТ 34.12-2015 «Кузнечик» на HDL ведутся тут .

PS: если заметка помогла Вам, поделитесь ей с друзьями или коллегами: