В каком году был получен патент на первый алгоритм поточного шифрования

Обновлено: 18.05.2024

Открытый текст (англ. plain text) — в криптографии исходный текст, подлежащий шифрованию, либо получившийся в результате расшифровки. Может быть прочитан без дополнительной обработки (без расшифровки).

Бло́чный шифр — разновидность симметричного шифра, оперирующего группами бит фиксированной длины — блоками, характерный размер которых меняется в пределах 64‒256 бит. Если исходный текст (или его остаток) меньше размера блока, перед шифрованием его дополняют. Фактически, блочный шифр представляет собой подстановку на алфавите блоков, которая, как следствие, может быть моно- или полиалфавитной. Блочный шифр является важной компонентой многих криптографических протоколов и широко используется для защиты.

Сеть Фе́йстеля, или конструкция Фейстеля (англ. Feistel network, Feistel cipher), — один из методов построения блочных шифров. Сеть состоит из ячеек, называемых ячейками Фейстеля. На вход каждой ячейки поступают данные и ключ. На выходе каждой ячейки получают изменённые данные и изменённый ключ. Все ячейки однотипны, и говорят, что сеть представляет собой определённую многократно повторяющуюся (итерированную) структуру. Ключ выбирается в зависимости от алгоритма шифрования/расшифрования и меняется.

Симметри́чные криптосисте́мы (также симметричное шифрование, симметричные шифры) (англ. symmetric-key algorithm) — способ шифрования, в котором для шифрования и расшифровывания применяется один и тот же криптографический ключ. До изобретения схемы асимметричного шифрования единственным существовавшим способом являлось симметричное шифрование. Ключ алгоритма должен сохраняться в тайне обеими сторонами, осуществляться меры по защите доступа к каналу, на всем пути следования криптограммы, или сторонами.

Линейный криптоанализ был изобретён японским криптологом Мицуру Мацуи (яп. 松井 充 Мацуи Мицуру). Предложенный им в 1993 году (на конференции Eurocrypt '93) алгоритм был изначально направлен на вскрытие DES и FEAL. Впоследствии линейный криптоанализ был распространён и на другие алгоритмы. На сегодняшний день наряду с дифференциальным криптоанализом является одним из наиболее распространённых методов вскрытия блочных шифров. Разработаны атаки на блочные и потоковые шифры.

Протокол Ди́ффи — Хе́ллмана (англ. Diffie–Hellman, DH) — криптографический протокол, позволяющий двум и более сторонам получить общий секретный ключ, используя незащищенный от прослушивания канал связи. Полученный ключ используется для шифрования дальнейшего обмена с помощью алгоритмов симметричного шифрования.

Раундом (или циклом) в криптографии называют один из последовательных шагов обработки данных в алгоритме блочного шифрования. В шифрах Фейстеля (построенных в соответствии с архитектурой сети Фейстеля) и близких ему по архитектуре шифрах — один шаг шифрования, в ходе которого одна или несколько частей шифруемого блока данных подвергается модификации путём применения круговой функции.

Псевдослуча́йная после́довательность (ПСП) — последовательность чисел, которая была вычислена по некоторому определённому арифметическому правилу, но имеет все свойства случайной последовательности чисел в рамках решаемой задачи.

Атака на основе подобранного открытого текста (англ. Chosen-plaintext attack, CPA) — один из основных способов криптоаналитического вскрытия. Криптоаналитик обладает определённым числом открытых текстов и соответствующих шифротекстов, кроме того, он имеет возможность зашифровать несколько предварительно выбранных открытых текстов.

Схема Эль-Гамаля (Elgamal) — криптосистема с открытым ключом, основанная на трудности вычисления дискретных логарифмов в конечном поле. Криптосистема включает в себя алгоритм шифрования и алгоритм цифровой подписи. Схема Эль-Гамаля лежит в основе бывших стандартов электронной цифровой подписи в США (DSA) и России (ГОСТ Р 34.10-94).

Криптографические хеш-функции — это выделенный класс хеш-функций, который имеет определенные свойства, делающие его пригодным для использования в криптографии.

Сдвиговая атака (англ. slide attack) – криптографическая атака, являющаяся, в общем случае, атакой на основе подобранного открытого текста, позволяющая проводить криптоанализ блоковых многораундовых шифров независимо от количества используемых раундов. Предложена Алексом Бирюковым и Дэвидом Вагнером в 1999 году.

Криптоаналитик — специалист по криптоанализу. Одним из первых криптоаналитиков был Аристотель, криптографически вскрывший скиталу — одно из первых известных криптографических устройств.

Неразличимость шифротекста — это свойство многих систем шифрования. Интуитивно понятно, что если система обладает свойством неразличимости, то злоумышленник не сможет отличить пары шифротекстов, основываясь на открытых текстах, которые они шифруют. Свойство неразличимости для атак на основе подобранного открытого текста рассматривается как основное требование для доказуемо наиболее безопасных криптосистем с открытым ключом, хотя некоторые системы шифрования также обладают свойством неразличимости.

Криптосистема Крамера–Шоупа (англ. Cramer–Shoup system) — алгоритм шифрования с открытым ключом. Первый алгоритм, доказавший свою устойчивость к атакам на основе адаптивно подобранного шифротекста.

Дополнение (англ. padding) в криптографии — добавление ничего не значащих данных к зашифровываемой информации, нацеленное на повышение криптостойкости. Различные техники дополнения применялись в классической криптографии , обширное применение техники дополнений нашли в компьютерных системах шифрования.

Постквантовая криптография — часть криптографии, которая остаётся актуальной и при появлении квантовых компьютеров и квантовых атак. Так как по скорости вычисления традиционных криптографических алгоритмов квантовые компьютеры значительно превосходят классические компьютерные архитектуры, современные криптографические системы становятся потенциально уязвимыми к криптографическим атакам. Большинство традиционных криптосистем опирается на проблемы факторизации целых чисел или задачи дискретного логарифмирования.

Эллиптическая криптография — раздел криптографии, который изучает асимметричные криптосистемы, основанные на эллиптических кривых над конечными полями. Основное преимущество эллиптической криптографии заключается в том, что на сегодняшний день не известно существование субэкспоненциальных алгоритмов решения задачи дискретного логарифмирования.

Интегральный криптоанализ — метод криптоанализа, объединяющий ряд атак на симметричные блочные криптографические алгоритмы. В отличие от дифференциального криптоанализа, который рассматривает воздействие алгоритма на пару открытых текстов, интегральный криптоанализ подразумевает исследование отображения в шифротекст множества открытых текстов. Впервые применен в 1997 Ларсом Кнудсеном.

В криптографии 'время атаки (англ. Time attack) — это атака по сторонним каналам, в которой атакующий пытается скомпрометировать криптосистему с помощью анализа времени, затрачиваемого на исполнение криптографических алгоритмов. Каждая логическая операция требует времени на исполнение на компьютере, и это время может различаться в зависимости от входных данных. Располагая точными измерениями времени для разных операций, атакующий может восстановить входные данные.

В криптоанализе методом встречи посередине или атакой "встречи посередине" (англ. meet-in-the-middle attack) называется класс атак на криптографические алгоритмы, асимптотически уменьшающих время полного перебора за счет принципа "разделяй и властвуй", а также увеличения объема требуемой памяти. Впервые данный метод был предложен Уитфилдом Диффи и Мартином Хеллманом в 1977 году.

Криптосистема Нидеррайтера — криптосистема с открытыми ключами, основанная на теории алгебраического кодирования, разработанная в 1986 году Харальдом Нидеррайтером. В отличие от криптосистемы McEliece, в криптосистеме Нидеррайтера используется проверочная матрица кода. Криптосистема Нидеррайтера позволяет создавать цифровые подписи и является кандидатом для постквантовой криптографии, поскольку устойчива к атаке с использованием алгоритма Шора.

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

Обучение с ошибками (англ. Learning with errors) — это концепция машинного обучения, суть которой заключается в том, что в простые вычислительные задачи (например, системы линейных уравнений) намеренно вносится ошибка, делая их решение известными методами неосуществимым за приемлемое время.

Шифрова́ние — обратимое преобразование информации в целях сокрытия от неавторизованных лиц, с предоставлением, в это же время, авторизованным пользователям доступа к ней. Главным образом, шифрование служит задачей соблюдения конфиденциальности передаваемой информации. Важной особенностью любого алгоритма шифрования является использование ключа, который утверждает выбор конкретного преобразования из совокупности возможных для данного алгоритма.

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

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

Алгоритм Берлекэмпа — Мэсси — алгоритм поиска кратчайшего регистра сдвига с линейной обратной связью для поданной на вход бинарной последовательности. Также алгоритм позволяет найти минимальный многочлен поданной на вход линейной рекуррентной последовательности над произвольным полем.

Криптосистема Накаша — Штерна (англ. Naccache — Stern cryptosystem)— криптографический алгоритм с открытым ключом, основывающийся на вычислительной сложности задачи дискретного логарифмирования. В отличии от RSA, гомоморфен по сложению и вычитанию, а не по умножению.

Атака по сторонним (или побочным) каналам (англ. side-channel attack) — класс атак, направленный на уязвимости в практической реализации криптосистемы. В отличие от теоретического криптоанализа, атака по сторонним каналам использует информацию о физических процессах в устройстве, которые не рассматриваются в теоретическом описании криптографического алгоритма. Хотя подобные атаки были хорошо известны уже в 1980-х годах, они получили широкое распространение после публикации результатов Полом Кохером.


А5 — это поточный алгоритм шифрования, используемый для обеспечения конфиденциальности передаваемых данных между телефоном и базовой станцией в европейской системе мобильной цифровой связи GSM (Group Special Mobile).

В этом алгоритме каждому символу открытого текста соответствует символ шифротекста. Текст не делится на блоки (как в блочном шифровании) и не изменяется в размере. Для упрощения аппаратной реализации и, следовательно, увеличения быстродействия используются только простейшие операции: сложение по модулю 2 (XOR) и сдвиг регистра.

Регистр сдвига с линейной обратной связью состоит из собственно регистра (последовательности бит заданной длины) и обратной связи. На каждом такте происходит следующие действия: крайний левый бит (старший бит) извлекается, последовательность сдвигается влево и в опустевшую правую ячейку (младший бит) записывается значение функции обратной связи. Эта функция является суммированием по модулю два определённых битов регистра и записывается в виде многочлена, где степень указывает номер бита. Извлечённые биты формируют выходную последовательность.

Для РСЛОС основным показателем является период псевдослучайной последовательности. Он будет максимален (и равен 2n−1), если многочлен функции обратной связи примитивен по модулю 2. Выходная последовательность в таком случае называется М-последовательностью.

Сам по себе РСЛОС легко поддаётся криптоанализу и не является достаточно надёжным, для использования в шифровании. Практическое применение имеют системы регистров переменного тактирования, с различными длинами и функциями обратной связи.

Структура РСЛОС в А5 выглядит следующим образом:

три регистра (R1, R2, R3) имеют длины 19, 22 и 23 бита,

многочлены обратных связей:

X 19 + X 18 + X 17 + X 14 + 1 для R1,

X 22 + X 21 + 1 для R2 и

X 23 + X 22 + X 21 + X 8 + 1 для R3,

управление тактированием осуществляется специальным механизмом:

в каждом регистре есть биты синхронизации: 8 (R1), 10 (R2), 10 (R3),

вычисляется функция F = x&y|x&z|y&z, где & — булево AND, | - булево OR, а x, y и z — биты синхронизации R1, R2 и R3 соответственно,

сдвигаются только те регистры, у которых бит синхронизации равен F,

фактически, сдвигаются регистры, синхробит которых принадлежит большинству,

выходной бит системы — результат операции XOR над выходными битами регистров. [1]

Полиномы обратных связей взяты из таблицы, приведенной в книге Б.Шнайера [2]. Как отмечалось ранее, в [1] неправильно указан порядок бит регистров, поэтому необходимо руководствоваться [2].

На Рис.1 приведена иллюстрация системы РСЛОС в А5/1, где голубым цветом выделены полиномы обратных связей для каждого регистра, на Рис.2 [2] все представлено иначе, именно этот вариант используется в реализации.

Рисунок – система РСЛОС в А5/1 [1]

Рисунок – порядок бит регистра и полиномы обратных связей [2]

Для шифра А5/1 были разработаны и реализованы программно-ориентированные алгоритмы в рамках изучения курса "Программно-аппаратная защита информации". На рис.3 показан пример работы программы, отражающий работу алгоритма на примере текстового файла.

Рисунок – текст до/после шифрования

Реализация А5/1 не составляет сложностей, затруднения вызывают различные описания. Это связано с тем, что информация о алгоритме держалась в секрете, дабы обеспечить его стойкость, но потом случилась утечка и каждый источник сейчас трактует полученные данные по-своему.

Алгоритм не разрабатывался для обычного поточного шифрования любых данных, для этих целей существуют более продвинутые и продуктивные шифры. А5/1 эффективен, удовлетворяет известным статистическим тестам, существенной слабостью является то, что его регистры слишком коротки, чтобы предотвратить поиск ключа перебором. Варианты A5 с более длинными сдвиговыми регистрами и более плотными многочленами обратной связи должны снизить вероятность взлома алгоритма через данную уязвимость.

Работа генератора потока ключей в A5 / 1 , потоковом шифре на основе LFSR, используемом для шифрования разговоров по мобильному телефону.

Потоковый шифр представляет собой симметричный ключ шифра , где цифры открытого текста в сочетании с псевдослучайной шифра значного потока ( ключевого потока ). В потоковом шифре каждая цифра открытого текста шифруется по очереди с соответствующей цифрой ключевого потока, чтобы получить цифру потока зашифрованного текста . Поскольку шифрование каждой цифры зависит от текущего состояния шифра, его также называют государственным шифром . На практике цифра обычно представляет собой бит, а операция объединения - это исключающее ИЛИ (XOR).

Псевдослучайный поток ключей обычно генерируется последовательно из случайного начального значения с использованием регистров цифрового сдвига . Начальное значение служит в качестве криптографического ключа для расшифровки зашифрованного потока. Потоковые шифры представляют собой другой подход к симметричному шифрованию, нежели блочные шифры . Блочные шифры работают с большими блоками цифр с фиксированным неизменным преобразованием. Это различие не всегда однозначно: в некоторых режимах работыпримитив блочного шифра используется таким образом, что эффективно действует как потоковый шифр. Потоковые шифры обычно выполняются с более высокой скоростью, чем блочные шифры, и имеют меньшую аппаратную сложность. Однако потоковые шифры могут быть подвержены серьезным проблемам безопасности при неправильном использовании (см. Атаки потокового шифра ); в частности, одно и то же начальное состояние (начальное состояние) никогда не должно использоваться дважды.

Содержание

Потоковые шифры можно рассматривать как приближение действия проверенного неразрывного шифра, одноразового блокнота (OTP). Одноразовый блокнот использует поток ключей из полностью случайных цифр. Ключевой поток комбинируется с цифрами открытого текста по одной для формирования зашифрованного текста. Клод Э. Шеннон в 1949 году доказал, что эта система безопасна . Однако ключевой поток должен генерироваться полностью случайным образом, по крайней мере, такой же длины, как и открытый текст, и не может использоваться более одного раза. Это делает систему громоздкой для реализации во многих практических приложениях, и в результате одноразовый блокнот не получил широкого распространения, за исключением наиболее важных приложений. Создание, распространение и управление ключами имеют решающее значение для этих приложений.

Потоковый шифр использует гораздо меньший и более удобный ключ, например 128 бит. На основе этого ключа он генерирует псевдослучайный поток ключей, который можно комбинировать с цифрами открытого текста аналогично одноразовому блокноту. Однако за это приходится платить. Ключевой поток теперь псевдослучайный, а значит, не совсем случайный. Доказательство безопасности, связанное с одноразовым блокнотом, больше не действует. Потоковый шифр вполне может оказаться полностью небезопасным.

Пример самосинхронизирующимися потокового шифра представляет собой блочный шифр в шифр обратной связи (CFB) режиме .

Шифры двоичного потока часто строятся с использованием регистров сдвига с линейной обратной связью (LFSR), потому что они могут быть легко реализованы аппаратно и могут быть легко проанализированы математически. Однако одного использования LFSR недостаточно для обеспечения хорошей безопасности. Были предложены различные схемы для повышения безопасности LFSR.

Один из подходов состоит в использовании n LFSR параллельно, их выходы объединяются с помощью n- входной двоичной булевой функции ( F ).

Поскольку LFSR по своей природе линейны, один из способов устранения линейности состоит в том, чтобы подать выходы нескольких параллельных LFSR в нелинейную логическую функцию для формирования комбинированного генератора . Различные свойства такой объединяющей функции критичны для обеспечения безопасности результирующей схемы, например, чтобы избежать атак корреляции .

Обычно LFSR меняются регулярно. Один из подходов к введению нелинейности состоит в том, чтобы LFSR синхронизировался нерегулярно, управляемый выходом второго LFSR. Такие генераторы включают в себя генератор стоп-энд-гоу , на генератор переменного шага и усадки генератора .

Переменный шаг генератор состоит из трех ЛРСОС, который мы будем называть LFSR0, LFSR1 и LFSR2 для удобства. Выход одного из регистров определяет, какой из двух других должен использоваться; например, если LFSR2 выдает 0, LFSR0 синхронизируется, а если он выдает 1, вместо этого синхронизируется LFSR1. Выход - это исключающее ИЛИ последнего бита, созданного LFSR0 и LFSR1. Начальное состояние трех LFSR является ключевым.

Импульсный генератор (Бет и Пайпер, 1984) состоит из двух LFSR. Один LFSR синхронизируется, если вывод секунды равен 1, в противном случае он повторяет свой предыдущий вывод. Затем этот вывод (в некоторых версиях) объединяется с выводом третьего LFSR, синхронизируемого с регулярной частотой.

Усадка генератор использует другой подход. Используются два LFSR, оба регулярно синхронизируются. Если выход первого LFSR равен 1, выход второго LFSR становится выходом генератора. Однако, если первый LFSR выводит 0, вывод второго отбрасывается, и генератор не выводит никаких битов. Этот механизм страдает от временных атак на второй генератор, поскольку скорость на выходе может изменяться в зависимости от состояния второго генератора. Этого можно избежать путем буферизации вывода.

Другой подход к повышению безопасности LFSR заключается в передаче всего состояния отдельного LFSR в функцию нелинейной фильтрации .

Вместо линейного приводного устройства можно использовать нелинейную функцию обновления. Например, Климов и Шамир предложили треугольные функции ( Т-функции ) с одним циклом на n-битных словах.

Чтобы потоковый шифр был безопасным, его ключевой поток должен иметь большой период, и должно быть невозможно восстановить ключ шифра или внутреннее состояние из ключевого потока. Криптографы также требуют, чтобы в потоке ключей не было даже незначительных искажений, которые позволили бы злоумышленникам отличить поток от случайного шума, и чтобы не было обнаруживаемых взаимосвязей между потоками ключей, которые соответствуют связанным ключам или связанным криптографическим одноразовым номерам . Это должно быть верно для всех ключей ( слабых ключей быть не должно ), даже если злоумышленник может знать или выбирать какой-либо открытый текст или зашифрованный текст .

Как и другие атаки в криптографии, атаки с использованием потокового шифра могут быть сертифицированными, поэтому они не обязательно являются практическими способами взлома шифра, но указывают на то, что у шифра могут быть другие недостатки.

Короткие периоды для потоковых шифров были практической проблемой. Например, 64-битные блочные шифры, такие как DES, могут использоваться для генерации ключевого потока в режиме выходной обратной связи (OFB). Однако, когда не используется полная обратная связь, результирующий поток имеет период в среднем около 2 32 блока; для многих приложений период слишком мал. Например, если шифрование выполняется со скоростью 8 мегабайт в секунду, поток с периодом 2 32 блока будет повторяться примерно через полчаса. [ сомнительно - обсудить ]

Некоторые приложения, использующие потоковый шифр RC4, могут быть атакованы из-за недостатков процедуры настройки ключей RC4; новые приложения должны либо избегать RC4, либо убедиться, что все ключи уникальны и в идеале не связаны (например, сгенерированы хорошо заполненным CSPRNG или криптографической хеш-функцией ) и что первые байты ключевого потока отбрасываются.

Элементы потоковых шифров часто намного проще для понимания, чем блочные шифры, и поэтому с меньшей вероятностью скрываются какие-либо случайные или злонамеренные уязвимости.

Еще одно преимущество потоковых шифров в военной криптографии состоит в том, что поток шифрования может быть сгенерирован в отдельном блоке, который подлежит строгим мерам безопасности, и передан на другие устройства, такие как радиостанция, которая будет выполнять операцию xor как часть своей функции. Последнее устройство может быть разработано и использовано в менее жестких условиях.

ChaCha становится наиболее широко используемым потоковым шифром в программном обеспечении; [1] другие включают: RC4 , A5 / 1 , A5 / 2 , Chameleon , FISH , Helix , ISAAC , MUGI , Panama , Phelix , Pike , Salsa20 , SEAL , SOBER , SOBER-128 и WAKE .

Одноразовый блокнот

Каждый бит открытого текста XOR-ится с таким же по порядку битом ключа

Рис 1. Каждый бит открытого текста XOR-ится с таким же по порядку битом ключа

Соответственно для расшифровки нужно XOR-рить полученный шифротекст с ключом.

Ключ должен быть одноразовым

Очевидно, что длина ключа должна быть не меньше чем длина шифруемого текста. Если ключ короче открытого текст можно попробовать его циклически повторять – рисунок 2:

Ключ короче открытого текста. Просто повторяем ключ что бы покрыть весь шифруемый текст

Рис 2. Ключ короче открытого текста. Просто повторяем ключ что бы покрыть весь шифруемый текст

Наложения ключа на текст называют гаммированием. В этой терминологии ключ “Одноразового блокнота” будет называться гаммой.

Пример метода циклического наложения гаммы


Посмотрим, что получится если текст будет длиннее ключа и мы будем просто циклически повторять гамму:


Не нужно быть криптографом что бы заметить, что шифротекст получился не слишком стойким (как минимум видно, что символы в открытом тексте повторяются):

Шифротекст при простом повторении гаммы нестойкий

Рис 3. Шифротекст при простом повторении гаммы нестойкий

По этой же причине блокнот называется одноразовым – нельзя использовать один и тот же ключ дважды.

Такой открытый текст в примере выбран для наглядности. Хороший шифр, даже для такой строки, выдаст шифротекст без повторяющихся паттернов.

Потоковый шифр

Как мы убедились гамма не должна повторяться. Каждый раз, когда гамма кончается для следующего раунда нужно как-то получить новую гамму:

Каждый раз, когда гамма заканчивается нужно сделать новую гамму. В каждом раунде своя гамма

Рис 4. Каждый раз, когда гамма заканчивается нужно сделать новую гамму. В каждом раунде своя гамма

Так же мы знаем, что гамма не только не должна повторяться, но и должна быть как можно более случайной. Однако если на каждом раунде генерировать истинно случайную гамму – мы получим Одноразовый блокнот: ключ будет размером с шифротекст. Это не то, что нам надо.

Нам нужен механизм генерации псевдослучайной гаммы, зависящий от ключа. При расшифровке, зная ключ, мы должны иметь возможность сгенерировать ту же самую гамму.

Схема потокового шифра

Рис 5. Схема потокового шифра

Если наш генератор будет делать псевдослучайную гамму, зависящую от ключа, для всего открытого текста – мы получим потоковый шифр.

Counter Mode Encryption CTR

Дополним рисунок 4: нам нужна функция, которая будет генерировать гамму в зависимости от ключа и номера раунда:

Гамму для каждого раунда делает функция, зависящая от ключа и номера раунда

Рис 6. Гамму для каждого раунда делает функция, зависящая от ключа и номера раунда

Это и есть Counter Mode Encryption CTR – генератор гаммы на вход получает счетчик (counter) раунда:

3 раунда потокового шифра при Counter Mode Encryption CTR (за исключение одного компонента, см. ниже)

Рис 7. 3 раунда потокового шифра при Counter Mode Encryption CTR (за исключение одного компонента, см. ниже)

Хеш функция как гамма генератор

Хеш функция – это функция, которая преобразует открытый текст в псевдослучайную последовательность заданной длины. Зная хеш (результат работы хеш функции) невозможно восстановить открытый текст. Изменение даже одного бита открытого текст приводит к совершенно другому, псевдослучайному хешу.

Т.е. мы можем использовать хеш функцию как генератор гаммы:

Gamma_раунда = HASH(key + RoundIndex)

Nonce, HMAC

Итак, добавляется еще одно требование: каждый раз при шифровании должен получаться разный шифротекст. В нашем случае это означает что генератор гаммы нужно доработать.

Проблема решается путем так называемого Nonce:

  • каждый раз, при шифровании, генерируется случайная последовательность бит – Nonce
  • Nonce участвует при формировании гаммы
  • Gamma_раунда = HASH(Nonce + key + RoundIndex)
  • Nonce один и тоже для всех раундов
  • Nonce распространяется/хранится вместе с шифротекстом. Т.е. знание Nonce, который был использован при создании шифротекста, не является секретом.

3 раунда потокового шифра при Counter Mode Encryption CTR с добавлением Nonce

Рис 8. 3 раунда потокового шифра при Counter Mode Encryption CTR с добавлением Nonce

HMAC – это способ добавить в хеш функцию зависимость от какого-нибудь дополнительного параметра. Того же результата (сделать кеш зависимым от нескольких пареметров) мы добивались с помощью конкатенации. Т.е. логически

То же самое что

Вывод разный, а логически одно и тоже.

Алгоритм

Кратко опишем получившейся алгоритм:

  1. Делаем случайный Nonce. Один Nonce используется для всех раундов
  2. Для каждого раунда вычисляем уникальный CounterBlock, который будет использован для генерации гаммы.

Disclaimer

Выше описан велосипед только для образовательных целей. Идея использовать хеш-функции в потоковых шифрах не нова (см. ниже). Насколько знаю однозначного мнения о стойкости таких схем нет. Возможно, этот вопрос просто не актуален – хеши работают медленней.

Если видите неточность, ошибку – отнеситесь с пониманием. Я не криптограф, ИБ занимаюсь только в прикладных целях при разработке проектов, без сверх требований к ИБ.

Читайте также: