Входные данные
- 9 [честных] раундов
- 128 бит [16 байт] блок данных
- 100 МГц частота ПЛИС [при реализации криптоалгоритма]
Оценки
В некоторых докладах [ Рудской В. Российские криптографические стандарты: функции хэширования, блочные шифры и режимы их работы ] слышны цифры что на Си под 64битный линукс удаётся достичь скорости шифрования до 130 МБайт/с. Теперь подсчитаем экономную реализацию (некий tradeoff между утилизацией логики и скорострельностью алгоритма), притом примем для прстоты все фазы расчета ключа выполненными:
- XOR с ключом — 1 такт
- S-преобразование — 1 такт (реализация в виде ROM)
- L-преобразование (по сути — 16 раз повторённое R-преобразование):
- 16 раз х 8 тактов (обычное)
- 16 тактов + 1 такт (скоростное, реализация R-преобразования не на LFSR, а на ROM)
Итого
- tradeoff+обычный: 16 байт * 100 МГц : (130 тактов * 9 раундов) = 1.4 МБайт/с
- tradeoff+скоростной: 16 байт * 100 МГц : (19 тактов * 9 раундов) = 9.3 МБайт/с
негусто… предшественник «Кузнечика» (тот, который сейчас «Магма» (ех. ГОСТ 28147-89)) да или тот же AES не такие прожорливые до ресурсов… Конечно, можно сделать конвейер и «гнать» результаты каждый такт, это будет:
- 16 байт * 100 МГц : (1 такт) = 1600 МБайт/с
..но, это 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 ведутся тут .