ГОСТ 28147-89 «Системы обработки информации. Защита криптографическая. Алгоритм криптографического преобразования» — устаревший (см. хронологию использования) государственный стандарт СССР (а позже межгосударственный стандарт СНГ), описывающий алгоритм симметричного блочного шифрования и режимы его работы.
Является примером DES-подобных криптосистем, созданных по классической итерационной схеме Фейстеля.
История создания шифра и критерии разработчиков были впервые публично представлены в 2014 году руководителем группы разработчиков алгоритма Заботиным Иваном Александровичем на лекции, посвященной 25-летию принятия российского стандарта симметричного шифрования.
Работы над алгоритмом, положенным впоследствии в основу стандарта, начались в рамках темы «Магма» (защита информации криптографическими методами в ЭВМ ряда Единой системы) по поручению Научно-технического совета Восьмого главного управления КГБ СССР (ныне в структуре ФСБ), в марте 1978 года после длительного предварительного изучения опубликованного в 1976 году стандарта DES. В действительности работы по созданию алгоритма (или группы алгоритмов), схожего с алгоритмом DES, начались уже в 1976 году.
Изначально работы имели гриф «Совершенно секретно». Затем были понижены до грифа «Секретно». В 1983 году гриф алгоритма был понижен до пометки «Для служебного пользования». Именно с последней пометкой алгоритм был подготовлен для публикации в 1989 году. 9 марта 1987 года группа разработчиков-криптографов (заявитель — в/ч 43753) получила авторское свидетельство с приоритетом № 333297 на изобретение на устройство шифрования по алгоритму «Магма-2».
Хронология использования
СССР и межгосударственный стандарт Утверждён постановлением Госстандарта СССР № 1409 от 2 июня 1989 года, введен в действие с 1 июля 1990 года.
С 31 марта 1996 года переиздан и введен в действие как межгосударственный стандарт СНГ.
Беларусь Постановлением Госстандарта Республики Беларусь № 3 от 17 декабря 1992 года введен в действие в качестве государственного стандарта Республики Беларусь. Переиздан в марте 2011 года.
Украина Приказом № 495 от 22 декабря 2008 года ГОСТ 28147-89 был переиздан на территории Украины и введён в действие с 1 февраля 2009 года под наименованием ДСТУ ГОСТ 28147:2009.
В дальнейшем стандарт был отменён приказом от 14 декабря 2015 года № 184 с последующим переносом сроков отмены (приказы от 27 декабря 2017 года № 472 и от 28 декабря 2018 года № 539).
Действие стандарта было временно восстановлено на период с 1 декабря 2023 года до 1 декабря 2025 года.
В 2024 году принят новый национальный стандарт ДСТУ 9311:2024, который вводится в действие с 1 декабря 2025 года и заменяет ДСТУ ГОСТ 28147:2009.
Параллельно осуществляется постепенный переход на (шифр «Калина»).
Россия и СНГ Стандарт отменён на территории России и СНГ с 31 мая 2019 года в связи с принятием новых полностью его заменяющих межгосударственных стандартов ГОСТ 34.12-2018 (описывает шифры «Магма» и «Кузнечик») и ГОСТ 34.13-2018 (описывает режимы работы блочных шифров).
Согласно извещению ФСБ о порядке использования алгоритма блочного шифрования ГОСТ 28147-89, разработка новых средств криптографической защиты информации, не содержащей сведений, составляющих государственную тайну, с использованием данного алгоритма не допускается после 1 июня 2019 года. Использование ГОСТ 28147-89 допускается только для обеспечения совместимости с ранее созданными средствами. В новых разработках вместо него применяются алгоритмы, определённые стандартами ГОСТ 34.12-2018 (шифры «Магма» и «Кузнечик»).
Магма
В 2015 году вместе с новым алгоритмом «Кузнечик» один из вариантов алгоритма ГОСТ 28147-89 был опубликован под названием «Магма» как часть стандарта ГОСТ Р 34.12-2015, а позже — как часть стандарта ГОСТ 34.12-2018. В 2020 году алгоритм «Магма» был опубликован в виде RFC 8891.
Особенности:
использование фиксированного узла замены id-tc26-gost-28147-param-Z; значение ключа читается как одно целое число с прямым порядком байт (в отличие от обратного порядка байт, используемого в ГОСТ 28147-89), что в результате даёт другие раундовые ключи; шифруемые данные тоже читаются как целое число с прямым порядком байт (в отличие от обратного порядка байт, используемого в ГОСТ 28147-89).
Описание шифра ГОСТ 28147-89 — блочный шифр с 256-битным ключом и 32 циклами (называемыми раундами) преобразования, оперирующий 64-битными блоками. Основа алгоритма шифра — сеть Фейстеля.
Выделяют четыре режима работы ГОСТ 28147-89: простой замены гаммирование гаммирование с обратной связью режим выработки имитовставки.
Режимы работы
Режим простой замены
Для зашифровывания в этом режиме 64-битный блок открытого текста сначала разбивается на две половины: В описании стандарта ГОСТ обозначены как и соответственно.. На -м цикле используется подключ :
( = двоичное «исключающее или»),
Для генерации подключей исходный 256-битный ключ разбивается на восемь 32-битных чисел: .
Подключи являются циклическим повторением . Подключи являются .
Результатом выполнения всех 32 раундов алгоритма является 64-битный блок шифртекста: .
Расшифрование осуществляется по тому же алгоритму, что и зашифрование, с тем изменением, что инвертируется порядок подключей: являются , а являются циклическим повторением .
Во входных и выходных данных 32-битные числа представляются в порядке от младшего бита к старшему (little endian).
Функция вычисляется следующим образом:
и складываются по модулю 232.
Результат разбивается на восемь 4-битовых подпоследовательностей, каждая из которых поступает на вход своего узла таблицы замен (в порядке возрастания старшинства битов), называемого ниже S-блоком. Общее количество S-блоков стандарта — восемь, то есть столько же, сколько и подпоследовательностей. Каждый S-блок представляет собой перестановку чисел от 0 до 15 (конкретный вид S-блоков в стандарте не определен). Первая 4-битная подпоследовательность попадает на вход первого S-блока, вторая — на вход второго и т. д.
Если узел S-блока выглядит так:
1, 15, 13, 0, 5, 7, 10, 4, 9, 2, 3, 14, 6, 11, 8, 12
и на входе S-блока 0, то на выходе будет 1; если на входе 4, то на выходе будет 5; если на входе 12, то на выходе 6 и т. д.
Выходы всех восьми S-блоков объединяются в 32-битное слово, затем всё слово циклически сдвигается влево (к старшим разрядам) на 11 битов.
Режим простой замены имеет следующие недостатки: Может применяться только для шифрования открытых текстов с длиной, кратной 64 битА. Винокуров. Алгоритм шифрования ГОСТ 28147-89, его использование и реализация для компьютеров платформы Intel x86 При шифровании одинаковых блоков открытого текста получаются одинаковые блоки шифротекста, что может дать определенную информацию криптоаналитику.
Таким образом, применение ГОСТ 28147-89 в режиме простой замены желательно лишь для шифрования ключевых данных.
Гаммирование
При работе ГОСТ 28147-89 в режиме гаммирования описанным выше образом формируется криптографическая гамма, которая затем побитно складывается по модулю 2 с исходным открытым текстом для получения шифротекста. Шифрование в режиме гаммирования лишено недостатков, присущих режиму простой замены. Так, даже идентичные блоки исходного текста дают разный шифротекст, а для текстов с длиной, не кратной 64 бит, «лишние» биты гаммы отбрасываются. Кроме того, гамма может быть выработана заранее, что соответствует работе шифра в поточном режиме.
Выработка гаммы происходит на основе ключа и так называемой синхропосылки, которая задает начальное состояние генератора. Алгоритм выработки следующий: Синхропосылка шифруется с использованием описанного алгоритма простой замены, полученные значения записываются во вспомогательные 32-разрядные регистры и — младшие и старшие биты соответственно. суммируется по модулю 232 с константой = 101010116 суммируется по модулю 232−1 с константой = 101010416 и переписываются соответственно в и , которые затем шифруются с использованием алгоритма простой замены. Полученный результат является 64 битами гаммы. Шаги 2-4 повторяются в соответствии с длиной шифруемого текста.
Для расшифровывания необходимо выработать такую же гамму, после чего побитно сложить её по модулю 2 с зашифрованным текстом. Очевидно, для этого нужно использовать ту же синхропосылку, что и при шифровании. При этом, исходя из требований уникальности гаммы, нельзя использовать одну синхропосылку для шифрования нескольких массивов данных. Как правило, синхропосылка тем или иным образом передается вместе с шифротекстом.
Особенность работы ГОСТ 28147-89 в режиме гаммирования заключается в том, что при изменении одного бита шифротекста изменяется только один бит расшифрованного текста. С одной стороны, это может оказывать положительное влияние на помехозащищённость; с другой — злоумышленник может внести некоторые изменения в текст, даже не расшифровывая его.
Гаммирование с обратной связью
Алгоритм шифрования похож на режим гаммирования, однако гамма формируется на основе предыдущего блока зашифрованных данных, так что результат шифрования текущего блока зависит также и от предыдущих блоков. По этой причине данный режим работы также называют гаммированием с зацеплением блоков.
Алгоритм шифрования следующий: Синхропосылка заносится в регистры и . Содержимое регистров и шифруется в соответствии с алгоритмом простой замены. Полученный результат является 64-битным блоком гаммы. Блок гаммы побитно складывается по модулю 2 с блоком открытого текста. Полученный шифротекст заносится в регистры и . Операции 2-3 выполняются для оставшихся блоков требующего шифрования текста.
При изменении одного бита шифротекста, полученного с использованием алгоритма гаммирования с обратной связью, в соответствующем блоке расшифрованного текста меняется только один бит, так же затрагивается последующий блок открытого текста. При этом все остальные блоки остаются неизменными.
При использовании данного режима следует иметь в виду, что синхропосылку нельзя использовать повторно (например, при шифровании логически раздельных блоков информации — сетевых пакетов, секторов жёсткого диска и т. п). Это обусловлено тем, что первый блок шифр-текста получен всего лишь сложением по модулю два с зашифрованной синхропосылкой; таким образом, знание всего лишь 8 первых байт исходного и шифрованного текста позволяют читать первые 8 байт любого другого шифр-текста после повторного использования синхропосылки.
Режим выработки имитовставки
Этот режим не является в общепринятом смысле режимом шифрования. При работе в режиме выработки имитовставки создаётся некоторый дополнительный блок, зависящий от всего текста и ключевых данных. Данный блок используется для проверки того, что в шифротекст случайно или преднамеренно не были внесены искажения. Это особенно важно для шифрования в режиме гаммирования, где злоумышленник может изменить конкретные биты, даже не зная ключа; однако и при работе в других режимах вероятные искажения нельзя обнаружить, если в передаваемых данных нет избыточной информации.
Имитовставка вырабатывается для ≥ 2 блоков открытого текста по 64 бит. Алгоритм следующий: Блок открытых данных записывается в регистры и , после чего подвергается преобразованию, соответствующему первым 16 циклам шифрования в режиме простой замены. К полученному результату побитно по модулю 2 прибавляется следующий блок открытых данных. Последний блок при необходимости дополняется нулями. Сумма также шифруется в соответствии с пунктом 1. После добавления и шифрования последнего блока из результата выбирается имитовставка длиной бит: с бита номер до 32 (отсчёт начинается с 1). Стандарт рекомендует выбирать исходя из того, что вероятность навязывания ложных данных равна . Имитовставка передается по каналу связи после зашифрованных блоков.
Для проверки принимающая сторона проводит аналогичную описанной процедуру. В случае несовпадения результата с переданной имитовставкой все соответствующие M блоков считаются ложными.