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

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

Скорости криптопреобразований, обеспечиваемые алгоритмами реализованными на  регистрах общего назначения процессоров, не успевали за скоростями обмена  информацией в сетях и на дисковых накопителях.

Автор: R_T_T

Около десяти лет тому назад симметричная криптография, основанная на ГОСТ 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.

Вот чистое копирование без криптографии:


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

Теперь создавая дамп включим криптографию, сначала шифрование в 8потоков по ГОСТ 28147-89:


Скриншот создания резервной копии дисков с использованием криптопреобразования строго по ГОСТ в 8 потоков.

Скорость реально создаваемого криптографического дампа 190мбайт/сек. Скорость ограничена криптопреобразованием, поскольку загрузка ЦП создаваемая программой ProjectFk.ехе составляет 12%, в нашем случае это предел по загрузке логического ядра процессора. SSD диски могут работать гораздо быстрее, но их тормозит ограничение на использование в криптопроцедуре только «половинки» одного физического ядра процессора.

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

Теперь шифрование в 16потоков по ГОСТ 28147-89:


Скриншот создания резервной копии дисков с использованием криптопреобразования строго по ГОСТ в 16 потоков. Этот режим работает эффективно только на процессорах Интел поколения Skylake и выше, но об этом будет сказано позже.

Скорость выросла до 334мБайт/сек. Загрузка ЦП 10,5%, здесь еще ограничение создает криптопреобразование, но загрузка на логическое процессорное ядро снижается.

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

Ну а что же  может обеспечить американское шифрование AES?

Возьмем самое продвинутое решение использующее этот шифр,- Битлокер. Функция шифрования встроена у него в ядро ОС и максимально оптимизирована, это вам не пользовательское приложение как FastSecurityBoxs, так что фора у него есть значительная…

Вот что дает Битлокер (AES-128 на 10 раундах ) когда идет создание дампа на зашифрованном диске:

Здесь программа 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.

Где кванты и ИИ становятся искусством?

На перекрестке науки и фантазии — наш канал

Подписаться