Входные данные
- 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 8x8 для S-преобразования) + 16 * 13 (ROM 8x8 для R-преобразования)) = 2016 шт ROM 8x8, что для ПЛИС как-то уже жирновато, даже если участь что двухпортовые BlockRAM на 18К можно использовать как две независимые ROM, т.о. это около ~1000 BlockRAM. Истина явно где-то посередине….
Исходники
Все работы по реализации ГОСТ 34.12-2015 “Кузнечик” на HDL ведутся тут.