Оптимизация шифрования на Байкал-Т1 по ГОСТ28147-89 (Алексей Колотников, OSSDEVCONF-2018) — различия между версиями
Материал из 0x1.tv
StasFomin (обсуждение | вклад) (Новая страница: «;{{SpeakerInfo}}: {{Speaker|Алексей Колотников}} <blockquote> </blockquote> {{VideoSection}} {{vimeoembed||800|450}} <!-- {{youtubelink|}} -->…») |
StasFomin (обсуждение | вклад) (→Шифрование на модулярном сопроцессоре) |
||
=== Шифрование на модулярном сопроцессоре === Иллюстрация ниже показывает сильную зависимость скорости шифрования от размера пакета. т. к. в сетевом трафике много пакетов небольшого размера (64байт) ,то использование только модулярного сопроцессора не даёт хороших результатов. [[File:kolotnikov/CryptoBaikalT1OpenProgs-img002|imageОптимизация шифрования на Байкал-Т1 по ГОСТ28147-89 (Алексей Колотников, OSSDEVCONF-2018)_2018-10-03_22-17-15_image0.png|center|640px]] <span id="baikal-img1" label="baikal-img1">[baikal-img1]</span> === Тестирование туннеля === |
Версия 19:17, 3 октября 2018
- Докладчик
- Алексей Колотников
Содержание
Видео
Презентация
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 Мбит/с