Комментарии 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 на данном этапе развития.
Возможно когда (и если) эти процессоры станут массовыми, можно будет говорить о необходимости добавлять другие блоки.
Реализация шифра «Кузнечик» на языке RUST