Второе пришествие ГОСТ 28147-89: Честные тесты

от автора

Второе пришествие ГОСТ 28147-89

Около десяти лет тому назад симметричная криптография, основанная на ГОСТ 28147-89, перестала удовлетворять потребностям аппаратных платформ по скоростным параметрам. Скорости криптопреобразований, обеспечиваемые алгоритмами реализованными на регистрах общего назначения процессоров, не успевали за скоростями обмена информацией в сетях и на дисковых накопителях.
С другой стороны (американской), появился AES-256, который показывал гораздо лучшие скоростные параметры при той же степени криптостойкости.

В этой ситуации 8 центр ФСБ начал работы над новым блочным шифром, который получил в последствии название «Кузнечик» от начальных букв фамилий авторов.
Изначально это была бесперспективная затея, поскольку повторялась логика шифра AES, но если тот был ускорен аппаратно в процессорах Интел и АМД, то у Кузнечика такого аппаратного ускорения на этих процессорах конечно быть не могло.
Так что Кузнечик, это классический пример выброшенных на ветер бюджетных денег и не малых…

Но был и другой вариант ускорения криптографических операций, он к сожалению не получил официальной поддержки в силу специфических причин. Этот вариант предполагал разработку алгоритмов реализации ГОСТ 28147-89 для многопоточности и доработку самого стандарта под требования многопоточности.
Многопоточность базируется на трех новых методах реализации ГОСТ 28147-89 в процессорах архитектуры х86-64.
Первый это конвейерная работа процессора в режиме шифрования.
Второй это реализации блока замен на SSE/AVX командах процессора.
Третий это использование специализированных регистров XMM/YMM/ZMM, имеющих разрядность 16/32/64 байта.

Эти новые методы в сумме позволили поднять быстродействие шифрования по ГОСТ 28147-89 как минимум на порядок и обеспечивать скоростные параметры шифрования ничуть не хуже американского AES-256, который использует специальный криптоускоритель в процессорах Интел/АМД.

Но, как говорится, бог шельму метит, а время расставляет все по своим законным местам.
В настоящее время шифр «Кузнечик» воспринимается как экзотика и не имеет практического применения из-за низкой скорости преобразований и сомнительной репутации, вместо него производители стали использовать многопоточное шифрование по ГОСТ 28147-89. Но об этом они стараются не говорить, поскольку знают, что нарушают авторские права.

Методы ускорения шифрования запатентованы.

Во многом из-за этого не было честных тестов на быстродействие разных систем шифрования, а в сетевых изданиях и на форумах гуляли всякие сказочные и абсолютно голословные цифры, ничего не имеющие общего с реальностью.
Поэтому и сложился устойчивый миф о превосходстве AES-256 над ГОСТ 28147-89 по скоростным параметрам чуть ли не в десяток раз…
Настало время провести честное тестирование.

Честные тесты

В статьях, посвященных криптографическим преобразованиям, приводятся разные «фантастические» данные по скорости работы криптофункции, очень много в этих цифрах лукавства. Мы же будем честными, никаких «синтетических» тестов, все «по-настоящему».
Шифрование по сути это служебный фоновый процесс. Криптопроцедура работает в фоне гораздо более важных задач и ситуация со 100% загрузкой процессора шифрованием это экзотика. Поэтому не будем ускорять криптофункцию за счет увеличения приоритета и числа используемых процессорных ядер, ограничим максимальную загрузку процессора криптофункцией уровнем в 15%.
В демонстрационной версии программы FastSecurityBoxs (собственная поделка, заинтересовавшимся просьба написать в комментарии) создание дампов дисков с шифрованием проводилось на четырех ядерном процессоре Skylake с частотой 2,6гГерца, гипертрейдинг активирован (всего 8 логических ядер). Криптопроцедура работает на одном логическом ядре (из 8 имеющихся), соответственно загрузка ЦП создаваемая им не превышает 12-15 процентов, что соответствует реальной работе фоновой задачи. Для копирования использовалось два SSD диска, скорость чтения/записи на них в режиме файловой системы составляет примерно 450-500Мбайт/сек. на очищенном устройстве, после выполнения TRIM.
Вот чистое копирование без криптографии:

image

Чтение секторов диска (ProjectFK.exe) занимают 5%, запись в файл (System) занимает 2% процессорного времени на скорости 449мбайт/сек. Запомним эти цифры, когда включим криптографию к ним будут добавляться затраты на криптопреобразования, соответственно можно будет оценить затраты на само криптопреобразование процессорной нагрузки.

Теперь, создавая дамп, включим криптографию. Сначала шифрование в 8 потоков по ГОСТ 28147-89:
image
Скриншот создания резервной копии дисков с использованием криптопреобразования строго по ГОСТ в 8 потоков.
Скорость реально создаваемого криптографического дампа 190мбайт/сек. Скорость ограничена криптопреобразованием, поскольку загрузка ЦП создаваемая программой ProjectFK.ехе составляет 12%, в нашем случае это предел по загрузке логического ядра процессора. SSD диски могут работать гораздо быстрее, но их тормозит ограничение на использование в криптопроцедуре только «половинки» одного физического ядра процессора.

На криптопреобразование в программе ProjectFK тратится 7% загрузки процессора.

Теперь шифрование в 16потоков по ГОСТ 28147-89:
image
Скриншот создания резервной копии дисков с использованием криптопреобразования строго по ГОСТ в 16 потоков. Этот режим работает эффективно только на процессорах Интел поколения Skylake и выше, но об этом будет сказано позже.
Скорость выросла до 334мБайт/сек. Загрузка ЦП 10,5%, здесь еще ограничение создает криптопреобразование, но загрузка на логическое процессорное ядро снижается.

На криптопреобразование в программе ProjectFK тратится 5.5% загрузки процессора.

Ну а что же может обеспечить американское шифрование AES?
Возьмем самое продвинутое решение использующее этот шифр,- Битлокер. Функция шифрования встроена у него в ядро ОС и максимально оптимизирована, это вам не пользовательское приложение как FastSecurityBoxs, так что фора у него есть значительная…
Вот что дает Битлокер (AES-128 на 10 раундах ) когда идет создание дампа на зашифрованном диске:
image
Здесь программа ProjectFK.exe только создает дамп, этот дамп шифруется битлокером непосредственно в процессе System который записывает его на диск, соответственно нужно суммировать нагрузки процессора создаваемую обоими этими процессами. Нагрузка составляет 12,5 процентов процессорного времени на скорости создания шифрованного дампа 392Мбайт/сек.
На криптопреобразование в процессе System тратится 5% загрузки процессора.

Совсем не плохо, только нужно учитывать, что AES-128 не ровня ГОСТ 28147-89, они из разных весовых категорий криптостойкости.

«Сухой остаток» тестов

Шифрование по ГОСТ 28147-89 в фоновом режиме (5-7% загрузки ЦП), на скорости 200мбайт/сек., уже фантастика, эти параметры в реальных приложениях ни одна система, с аппаратно ускоренной AES-256 криптографией на 14 раундах обеспечить не в состоянии.
В режиме AES-128 на 10 раундах удается работать чуть быстрее, но криптостойкость этого алгоритма значительно ниже криптостойкости ГОСТ 28147-89 из-за вдвое меньшего размера ключа.

Констатируем очевидное. Криптографическая процедура по строгому ГОСТ 28147-89 в многопоточном варианте способна выполняться в фоновом режиме на скоростях 200-400мбайт/сек., загружая процессор всего на 5-7 процентов. Но ничто не мешает поднять скорости и выше, увеличив загрузку процессора.
Сертифицированное ФСБ средство криптографии по строгому ГОСТ 28147-89 может в многопоточном режиме обеспечивать фоновую шифрацию современных SSD и HDD дисков на интерфейсе SATA с загрузкой процессора этой операцией не более 7%. Это позволяет использовать ГОСТ 28147-89 в программах типа Битлокер даже более эффективно чем применяемый сейчас американский стандарт AES-128, но с гораздо более «сильной» криптографической защитой…
Для дисков на интерфейсе NVMe уже сейчас работающих на скоростях 2-3Гбайта/сек. и для сетей 10G/10G+ нужно увеличить скорость еще как минимум в два раза.

Тут есть два пути. Первый, пассивный путь уже опробован, когда переходили с 8 потоков на 16 потоков при реализации ГОСТ 28147-89. Можно подождать внедрения в процессора набора команд AVX-512. Эти команды оперируют с регистрами размером в 64 байта и могут обеспечить многопоточное выполнение по строгому ГОСТ 28147-89 сразу в 32 потоках. Что автоматически удвоит производительность криптофункции.
Здесь есть маленькое «но», процессора с поддержкой AVX-512 появятся только в следующем году, и команды AVX-512 будут сначала эмулироваться микропрограмно, а значит выполняться они будут очень медленно. Так медленно, что использование их в реальных программах бессмысленно.
Это мы уже видели на примере внедрения команд AVX2, между появлением этого набора команд и переводом его выполнением на аппаратный цикл прошло 3года. Только в 2016году Интел ввела аппаратную поддержку AVX2 команд на процессорах поколения Skylake.
Ждать когда Интел переведет AVX-512 на аппаратную реализацию нужно будет еще примерно 3 года…

Второй путь активный, он заключается в разработке нового алгоритма шифрования, изначально заточенного на многопоточность, ведь сейчас используется только малая часть потенциала параллельных вычислений.
Вот этим и займемся далее, не ждать же 3 года…
Так что ожидайте в скором будущем третьего пришествия ГОСТ 28147-89.
ссылка на оригинал статьи https://habrahabr.ru/post/318768/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *