Оптимизация шифрования на Байкал-Т1 по ГОСТ28147-89 (Алексей Колотников, OSSDEVCONF-2018)
Материал из 0x1.tv
(перенаправлено с «20180930G»)
Короткая ссылка: 20180930G
- Докладчик
- Алексей Колотников
Содержание
Видео
Посмотрели доклад? Понравился? Напишите комментарий! Не согласны? Тем более напишите.
Презентация
Thesis
Обзор
- Важно
- построение шифрующего маршрутизатора потребует использования всех алгоритмов для разных размеров шифруемого пакета.
Шифрование на CPU и регистрах общего назначения
- Шифруется 1 блок размером 64бит.
- Время шифрования 1 блока по 64 бит — 450 ns
- Наиболее гибкий подход, позволяет реализовать любой вариант зацепления(CTR, CBC и тд.), но достаточно медленный.
Скорость модели ~150 Mbit/s на ядро. (Байкал Т — 2 ядра.)
Шифрование с применением векторного сопроцессора MSA
- Шифруется 4 блока по 64 бит.
- Время шифрования 4 блоков по 64 бит — 720 ns
- Скорость модели ~350Mbit/s на ядро. (Байкал Т — 2 ядра.)
- Работает для данных без зацепления (ECB, CTR)
Прим. Есть некоторые сложности с использованием MSA в ядре линукс т. к. текущая реализация предполагает, что использование MSA возможно только для некоторых процессов пользовательского уровня
- Решения
- полностью отключать поддержку MSA+FPU и использовать MSA только для шифрования
- включить поддержку для всех процессов и всегда сохранять контекст MSA
Шифрование на модулярном сопроцессоре
Иллюстрация ниже показывает сильную зависимость скорости шифрования от размера пакета. т. к. в сетевом трафике много пакетов небольшого размера (64байт) ,то использование только модулярного сопроцессора не даёт хороших результатов.
Тестирование туннеля
- Iperf режим: TCP/IP
- IPsec ESP (MTU=1500)
Модельный пример для проверки концепта смешанного алгоритма шифрования с зависимостью от размера пакета.
Частота CPU 1.2GHz
ECB
- Пакет менее 128байт шифруется на CPU+MSA
- Пакеты больше 128байт шифруются модулярным сопроцессором:
- поток 231 Мбит/с
- дуплекс 159+152 Мбит/с
- Разнесение прерываний по ядрам даёт значительный прирост:
- поток 282 Мбит/с
- дуплекс 235+184 Мбит /с
- Смесь 7*66+4*518+1*1450 дуплекс 109+109 Мбит/с
CTR
- Пакет менее 128 байт шифруется на CPU+MSA
- Пакеты больше 128 байт шифруются модулярным сопроцессором (счётчик готовится на CPU модулярный сопроцессор шифрует в режиме ECB):
- поток 200 Мбит/с
- дуплекс 115+101 Мбит/с
- Разнесение прерываний по ядрам с отключённым модулярным сопроцессором:
- поток 177 Мбит/с
- дуплекс 166+126 Мбит/с
- Смесь 7*66+4*518+1*1450 дуплекс 87+87 Мбит/с
CBC + Imito
- Пакет менее 128 байт шифруется на CPU
- Пакеты больше 128 байт шифруются модулярным сопроцессором:
- поток 224 Мбит/с
- дуплекс 181+108 Мбит/с
- Разнесение прерываний по ядрам даёт значительный прирост:
- поток 281 Мбит/с
- дуплекс 216+188 Мбит/с
- Смесь 7*66+4*518+1*1450 дуплекс 92+92 Мбит/с
Примечания и ссылки
Plays:286 Comments:0