Симметричные схемы аутентичного шифрования

From CryptoWiki
Jump to: navigation, search

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

Contents

Постановка задачи

Симметричные поточные шифры и некоторые режимы работы симметричных блочных шифров подвержены ряду атак, проведение которых возможно за счет того, что целостность и подлинность авторства зашифрованных данных не обеспечивается. Злоумышленник имеет возможность изменять шифртекст при передаче, а так как подлинность авторства передаваемых данных не обеспечивается, получатель не может определить, что полученное сообщение было изменено. Примером таких атак могут служить атака манипуляцией битами (Bit-Flipping attack), атака на алгоритм WEP, описанный в стандарте IEEE 802.11. Концепция аутентичного шифрования предложена для того, чтобы исключить атаки, проводимые путем изменения зашифрованных сообщений.

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

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

Условные обозначения

Далее будут использованы следующие условные обозначения:

  • E() — некоторый симметричный алгоритм шифрования;
  • D() — соответствующий E симметричный алгоритм расшифрования;
  • k — секретный ключ, использующийся для E;
  • MAC() — некоторый алгоритм выработки имитовставки;
  • kmac — секретный ключ, использующийся для MAC;
  • m — открытое сообщение;
  • c — шифртекст;
  • out — результат работы схемы аутентичного шифрования;
  • d — результат расшифрования;
  • || — операция объединения строк;
  • MSBk() — функция, возвращающая k битов аргумента справа (по умолчанию 1);
  • LSBk() — функция, возвращающая k битов аргумента слева (по умолчанию 1);
  • len() — функция, возвращающая длину аргумента.

Теоретические основы решения задачи

Существует ряд подходов к построению симметричных схем аутентичного шифрования, однако наибольшую известность и распространенность получил подход называющийся "обобщенная композиция" (англ. generic composition).

Обобщенная композиция

Идея обобщенной композиции[BN00] состоит в совмещении симметричной схемы шифрования и схемы аутентификации сообщений. Существует три основных варианта совмещения схем:

Три варианта совмещения схем
  • Encrypt-and-MAC (E&M): проводится шифрование открытого текста и к полученному сообщению добавляется имитовставка, сформированная с использованием открытого текста. Формально описывается следующим образом:
out = E(k, m) || MAC(kmac, m)
Такой подход (точнее его вариация) используется на транспортном уровне протокола SSH;
  • Mac-then-encrypt (MtE): проводится добавление имитовставки, полученной с использованием открытого текста, к открытому тексту и полученное сообщение шифруется. Формально описывается следующим образом:
out = E(k, m || MAC(kmac, m))
Такой подход используется в протоколе SSL;
  • Encrypt-then-MAC (EtM): проводится шифрование открытого текста и к полученному сообщению добавляется имитовставка, сформированная с использованием зашифрованного сообщения. Формально описывается следующим образом:
out = E(k, m) || MAC(kmac, c)
Такой подход используется в наборе протоколов IPsec.

Стоит отметить, что вариант композиции Encrypt-and-MAC в чистом виде не является безопасным. Тем не менее, при определенной доработке этот вариант приобретает свойства, делающие его безопасным.

Недостатки обобщенной композиции

Описанный подход имеет ряд ограничений.

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

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

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

Другие подходы к построению симметричных схем аутентичного шифрования

Помимо обобщенной композиции можно выделить некоторые другие варианты реализации симметричных схем аутентичного

Шифрование с избыточностью

Идея шифрования с избыточностью[AB01] похожа на идею подхода Mac-then-Encrypt. Для аутентификации сообщений предлагается добавлять к открытому тексту контрольную сумму, которая является результатом применения некоторой функции к открытому тексту. В качестве функции, к примеру, может использоваться хэш-функция. После объединения исходного открытого сообщения и проверочной суммы результат объединения шифруется.

Формально процесс может быть описан следующим образом:

r = E(k, m || h(m)), где r — результат работы схемы, реализующей шифрование с избыточностью, h() — функция, используемая для расчета контрольной суммы.

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

Encode-then-Encipher

В данном подходе[BR00] предлагается отказаться от шифрования в общем виде и для обеспечения конфиденциальности и аутентичности использовать кодирование и шифрование перестановкой. Идея заключается в кодировании сообщения каким-либо образом, а затем применении к закодированному сообщению шифрованию перестановкой при некотором случайном индексе.

Формально процесс может быть описан следующим образом:

r = F(Enc(M), k), где r — результат работы схемы, работающей в соответствии с подходом Encode-then-Encipher, Enc() — некоторая функция кодирования, k — случайный индекс, использующийся для проведения шифрования перестановкой, F() — алгоритм шифрования перестановкой.

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

Подход Encode-then-Encipher выгодно использовать в случае, если открытый текст заранее можно рассматривать как закодированный (то есть, если в открытом тексте присутствуют какие-то случайные значения и/или в него внедрена избыточность) и нет возможности добавить код аутентификации сообщения к тексту. Примером такой ситуации могут служить сетевые пакеты, которые обычно включают в себя избыточность и/или случайное значение (в соответствии со своим форматом), но не имеют полей для внедрения кода аутентификации.

Тем не менее в подавляющем большинстве случаев стоит использовать обобщенную композицию, т.к. надежность Encode-then-Encipher обеспечивается выбором криптографически стойкой псевдослучайной перестановки, использование которой менее эффективно по сравнению с использование алгоритма шифрования.

Практические применения криптографических конструкций, особенности их реализации

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

Наиболее распространены режимы шифрования GCM, CCM, OCB, EAX.

GCM

GCM[McGV04] (от англ. Galois/Counter mode) — режим блочного шифрования, использующий универсальное хеширование над двоичным полем Галуа. Режим делает возможным использование аутентичного шифрования на скорости от 10 Гб/сек и выше (при аппаратной реализации режима).

Среди полезных характеристик режима GCM можно выделить использование IV произвольной длины и возможность использования GCM в качестве схема выработки имитовставки, если на вход не подается открытый текст. Также необходимо отметить, что ни одна из технологий, использованных в режиме GCM не защищена патентом.

Входные и выходные данные

Для аутентичного шифрования в режиме GCM на вход подаются следующие данные:

  • K — секретный ключ, длина которого соответствует требованиям блочного шифра режима;
  • IV — вектор инициализации, длина которого лежит в интервале [1, 264] битов. Для фиксированного ключа K значения вектора инициализации должны различаться (их длина также может быть различной);
  • P — открытый текст, длина которого лежит в интервале [0, 239-256] битов;
  • A — дополнительные аутентифицированные данные (англ. Additional authenticated data, AAD), т.е. данные, аутентичность которых будет обеспечена, в результате работы режима GCM, но зашифрованы эти данные не будут. Например, дополнительные аутентифицированные данные могут использоваться в транспортных сетевых протоколах, для подтверждения подлинности служебной информации пакета (в этом случае шифровать необходимо только его полезную нагрузку). Длина дополнительных аутентифицированных данных лежит в интревале [0, 264] битов.

В результате работы схемы аутентичного шифрования в режиме GCM получаются следующие данные:

  • С — шифртекст, длина которого соответствует длине P;
  • T — аутентифицирующий тэг, длина которого лежит в интервале [0, 128]. Криптографическая стойкость операции, обеспечивающей аутентификацию сообщений зависит от длина аутентифицирующего тэга.

Для расшифрования на вход подаются следующие данные:

  • K;
  • IV;
  • C;
  • A;
  • T.

В результате расшифрования является или P, или специальный символ FAIL, означающий, что входные данные невалидны. Входные данные IV, C, A, T считаются валидными для ключа K, если они были сгенерированы в результате операции шифрования P, входными данными, которой были K, IV, A.

Процесс шифрования

Схема операции шифрования для схемы аутентифицирующего шифрования, работающей в режиме GCM. Для удобства показан случай шифрования одного блока дополнительных аутентифицирующих данных и двух блоков открытого текста. Здесь incr() — функция увеличения значения счетчика, mult() — операция умножения по модулю 2128 на H

Процесс аутентичного шифрования в режиме GCM описывается следующими уравнениями:

GCM equations.gif

, где Pi — блок открытого текста длиной 128 битов; Ci — блок шифртекста длиной 128 битов; Ai — блок дополнительных аутентифицированных данных длиной 128 битов; H — ключ использующийся хэш-функцией; n и u — уникальная пара натуральных чисел, таких что размер P = (n - 1)*128 + u битов, u может принимать значение в интервале [1, 128] битов; m и v — уникальная пара натуральных чисел, таких что размер A = (m - 1)*128 + v битов, v может принимать значение в интервале [1, 128] битов.

Функция GHASH определяется следующим образом:

GHASH.gif, где:


GHASH equations.gif

Процесс расшифрования

Схема операции расшифрования для схемы аутентифицирующего шифрования, работающей в режиме GCM.

Процесс расшифрования аналогичен процессу шифрования. Отличие заключается в том, что операции хеширования и блочного шифрования при расшифровании меняются в схеме местами.

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

GCM decryption equations.gif

Проверка аутентичности заключается в сравнении тэгов T и T`. Если тэги равны, то результатом операции расшифрования является расшифрованный текст. Иначе возвращается символ FAIL.








Недостатки режима GCM

Основным недостатком режима GCM является сложность его практической реализации. Одним из наиболее сложных моментов является необходимость совершения математических операций над полем Галуа при шифровании и добавлении кода аутентификации.

CCM

CCM[Ni04] (от англ. Counter with Cipher Block Chaining-Message Authentication Code) — режим блочного шифрования, сочетающий в себе технологию CBC-MAC и шифрование в режиме счетчика. Эти криптографические примитивы применяются в соответствие с подходом Authenticate-then-Encrypt. Технологии, используемые в режиме CCM не защищены патентами.

CCM предназначен для работы с сохраненными данными и не поддерживет частичную или поточную обработку.

Входные и выходные данные

Для шифрования в режиме CCM необходимо выбрать два параметра:

  • M — число байтов выделяемых для хранения кода аутентификации. Принадлежит множеству {4, 6, 8, 10, 12, 14, 16};
  • L — число байтов, определяемых длину случайного значения (nonce), использующегося при шифровании сообщения. Находится в интервале [2, 8].

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

Также необходимо дать некоторые определения, которые будут использованы при описании процесса шифрования и расшифрования:

Flags — байт, определенный следующим образом:
Номер бита Значение
7 Зарезервирован (всегда 0)
6 Зарезервирован (всегда 0)
5 ... 3 0
2 ... 0 L'=L-1
Ai — значение длиной 15 байтов, имеющее смысл в контексте шифрования (использует значение счетчика); определено следующим образом:
Номер байта Значение
0 Flags
1 ... 15-L nonce
15-L+1 ... 15 значение счетчика

Для аутентичного шифрования в режиме CCM на вход подаются следующие данные:

  • N — nonce, размер которого составляет 15 - L байтов. Значение nonce должно быть уникальным для каждого сообщения в рамках использования с одним и тем же ключом;
  • K — секретный ключ, который будет использован для блочного шифрования;
  • m — сообщение (открытый текст), длина которого лежит в интервале [0, 28L);
  • A — дополнительные аутентифицированные данные, длина которых лежит в интервале [0, 264).

В результате работы схемы аутентичнго шифрования в режиме CCM получаются следующие данные:

  • C — зашифрованное на ключе K сообщение;
  • U — аутентифицирующее значение. Вычисляется на основе расчитанного в режиме CBC-MAC значения аутентифицирующего тэга следующим образом: AuthenticatedEncryptionCCMAuthenticationValue.gif.

Для расшифрования на вход подаются следующие данные:

  • K;
  • N;
  • A;
  • C.

В процессе расшифрования вычисляется значение T`, если значение T` не совпадает со значением T (это проверяется), то результатом расшифрования является специальный символ FAIL, сигнализирующий о том, что не соблюдена целостность сообщения. Иначе, результатом расшифрования является исходный текст m.

Процесс шифрования

Процесс шифрования описывается следующей последовательностью действий:

  1. Применение некоторой форматирующей функции к величинам (N, A, m) для получения блоков B0, B1, ..., Br, которые используются для вычисления аутентифицирующего тега;
  2. Y0 = E(K, B0);
  3. For i = 1 to r : Yi = E(K, Bi Oplus.gif Yi-1);
  4. T=MSBlen(T)(Yr);
  5. Генерация блоков счетчика Ctr0, Ctr1, ... , Ctrk, где k = Lceil.giflen(m)/128Rceil.gif
  6. For j = 0 to k : Sj = E(K, Ctrj);
  7. S = S1||S2||...||Sk
  8. C = (mOplus.gifMSBlen(m)(S))||(T Oplus.gifMSBlen(T)(S0)).

Процесс расшифрования

Процесс расшифрования описывается следующей последовательностью действий:

  1. If len(C) Leq.gif len(T) return FAIL;
  2. Генерация блоков счетчика Ctr0, Ctr1, ... , Ctrk, где k = Lceil.gif(len(C)-len(T))/128Rceil.gif;
  3. For j = 0 to k : Sj = E(K, Ctrj);
  4. S = S1||S2||...||Sk
  5. m = (MSBlen(C)-len(T)(C))Oplus.gifMSBlen(T)(S));
  6. T = (LSBlen(T)(C))Oplus.gifMSBlen(T)(S0)).
  7. Проверить с помощью некоторой функции проверки значения (N, A, m). Если хотя бы одно из них невалидно вернуть FAIL, иначе сгенерировать последовательность блоков B0, B1, ..., Br;
  8. Y0 = E(K, B0);
  9. For i = 1 to r : Yi = E(K, Bi Oplus.gif Yi-1);
  10. Если T Neq.gif MSBlen(T)(Yr), то вернуть FAIL, иначе вернуть m.

Если результатом расшифрования является символ FAIL, то ни m, ни T не должны раскрываться.

Недостатки режима CCM

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

OCB

OCB[RB03] (от англ. Offset Codebook Mode) – параллелизуемый режим блочного шифрования с фиксированным размером блока, равным 128 битам. Шифрование в режиме OCB можеты выполняться "на лету": для шифрования не надо заранее знать ни длину открытого текста, ни длину дополнительных аутентифицированных данных.

Не смотря на то, что последняя версия OCB может свободно использоваться любым ПО сертифицированным организацией Open Source Initiative, вопрос патентования данной технологии все еще остается открытым, что не позволяет OCB использоваться повсеместно.

Входные и выходные данные

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

  • TAGLEN – длина аутентифицирующего тега (не превосходит 128 битов);
  • bitlen(n) – функция, возвращающую длину n в битах;
  • zeros(n) – функция, возвращающая строку, состоящую из n нулей;
  • ntz(n) – функция, возвращающая наибольшое натуральное число x такое, что 2x делит n (фактически, количество нулей в конце двоичного представления числа n);
  • str2num(S) — функция, возвращающая десятичное представление двоичного числа, содержащегося в строке S (например, str2num(1110) = 14);
  • num2str(i, n) – функция возвращающая двоичное представление десятичного числа i, количество цифр двоичного представления равно числу n (например, num2str(14, 5) = 01110);
  • double(S) – функция, которую можно определить следующим образом: если S[1] == 0, то double(S) = (S[2..128] | 0); иначе double(S) = (S[2..128] | 0) Oplus.gif (zeros(120) | 10000111).

Для аутентичного шифрования в режиме OCB на вход подаются следующие данные:

  • K — секретный ключ, который будет использован для блочного шифрования;
  • N — nonce, размер которого составляет не превосходит 120 битов;
  • m — сообщение (открытый текст) неограниченной длины;
  • A — дополнительные аутентифицированные данные неограниченной длины.

В результате работы схемы аутентичного шифрования в режиме OCB получаются следующие данные:

  • C – шифртекст, длина которого равняется сумме длины открытого сообщения и TAGLEN.

Для аутентичного расшифрования в режиме OCB на вход подаются следующие данные:

  • K — секретный ключ, который будет использован для блочного шифрования;
  • N — nonce, размер которого составляет не превосходит 120 битов;
  • С — шифртекст неограниченной длины;
  • A — дополнительные аутентифицированные данные неограниченной длины.

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

Процесс шифрования

Схема операции шифрования для схемы аутентифицирующего шифрования, работающей в режиме OCB.

Необходимо задать некоторые переменные, которые будут использоваться при описании процесса шифрования:

  • Переменные, зависящие от ключа:
    • L* = Enc(zeros(128), K);
    • L$ = double(L*);
    • L0 = double(L$);
    • Li = double(Li-1), i > 0,
  • Переменные, зависящие от N:
    • Nonce = num2str(TAGLEN mod 128, 7) | zeros(120 - bitlen(N) | 1 | N;
    • bottom = str2num(Nonce[123..128]);
    • Ktop = Enc(Nonce[1..122] | zeros(6), K);
    • Stretch = Ktop | (Ktop[1..64] Oplus.gif Ktop[9..72]);
    • Offset0 = Stretch[1+bottom..128+bottom];
    • Checksum0 = zeros(128);

Процесс шифрования описывается следующей последовательностью действий:

  1. Разбиение m на блоки: m -> m1 | m2 | ... | mk | m*. Здесь длина блоков m1, ... , mk = 128 битам, длина блока m* может быть нулевой.
  2. Поблочное шифрование m и генерация контрольных сумм для k блоков (i изменяется в интервале [1, k]):
    1. Ci = Offseti Oplus.gif E(mi Oplus.gif Offseti, K), i = (1, k), где Offseti = Offseti-1 Oplus.gif Lntz(i);
    2. Checksumi = Checksumi-1 Oplus.gif mi
  3. Шифрование блока m* и генерация его контрольной суммы (если длина этого блока ненулевая; в ином случае этот шаг пропускается):
    1. Offset* = Offsetk Oplus.gif L*;
    2. Pad = Enc(Offset*, K);
    3. C* = m* Oplus.gif Pad[1..bitlen(m*)];
    4. Checksum* = Checksumk Oplus.gif (m* | 1 | zeros(127 - bitlen(m*)));
  4. Генерация аутентифицирующего тега: если длина блока m* не нулевая, то Tag = Enc(Checksum* Oplus.gif Offset* Oplus.gif L$) Oplus.gif HASH(A, K); иначе, Tag = Enc(Checksumm Oplus.gif Offsetm Oplus.gif L$) Oplus.gif HASH(A, K).

Результатом операции шифрования является шифртекст C: C = C1 | C2 | ... | Cm | C* | Tag[1..TAGLEN].

Процесс расшифрования

Переменные, использующиеся при описании процесса расшифрования, соответствуют переменным, использованным для описания процесса шифрования.

Процесс расшифрования описываетсфя следующией последовательностью действий:

  1. Разбиение C на блоки: C -> C1 | C2 | ... | Ck | C*. Здесь длина блоков C1, ... , Ck = 128 битам, длина блока C* может быть нулевой.
  2. Поблочное расшифрование C и генерация контрольных сумм для k блоков (i изменяется в интервале [1, k]):
    1. mi = Offseti Oplus.gif D(Ci Oplus.gif Offseti, K), i = (1, k), где Offseti = Offseti-1 Oplus.gif Lntz(i);
    2. Checksumi = Checksumi-1 Oplus.gif mi
  3. Расшифрование блока m* и генерация его контрольной суммы (если длина этого блока ненулевая; в ином случае этот шаг пропускается):
    1. Offset* = Offsetk Oplus.gif L*;
    2. Pad = Enc(Offset*, K);
    3. m* = C* Oplus.gif Pad[1..bitlen(C*)];
    4. Checksum* = Checksumk Oplus.gif (m* | 1 | zeros(127 - bitlen(m*)));
  4. Генерация аутентифицирующего тега: если длина блока C* не нулевая, то Tag = Enc(Checksum* Oplus.gif Offset* Oplus.gif L$) Oplus.gif HASH(A, K); иначе, Tag = Enc(Checksumm Oplus.gif Offsetm Oplus.gif L$) Oplus.gif HASH(A, K).

Далее производится проверка валидности вычисленного аутентифицирующего тега: если Tag[1..TAGLEN] == T, то возвращается открытый текст m; иначе возвращается специальный символ FAIL.

Недостатки режима OCB

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

Также опубликованы результаты, согласно которым использование одного ключа в режиме OCB возможно для шифрования не более чем 64 Гбайтов данных, иначе возможна колизионная атака[F02].

EAX

EAX[BRW04] – режим блочного шифрования, построенный в соответствие с концепцией обобщенной композиции. Этот режим использует шифрование в режиме счетчика и OMAC для аутентификации сообщений. Это двухпроходный режим, потому он является менее эфективным, чем режимы OCB и GCM. Шифрование в этом режиме может проводиться "на лету". Режим EAX непараллелизуемый. За счет просторы шифрования и расшифрования в режиме EAX, его реализация может быть достаточно компактной.

EAX доступен для свободного использования.

Входные и выходные данные

Для аутентичного шифрования в режиме EAX на вход подаются следующие данные:

  • K — секретный ключ, который будет использован для блочного шифрования;
  • N — фиксированное случайное значение, использующееся для генерации тега (nonce);
  • m — сообщение (открытый текст);
  • A — дополнительные аутентифицированные данные.

В результате работы схемы аутентичного шифрования в режиме EAX получаются следующие данные:

  • C – шифртекст, длина которого равняется сумме длины открытого сообщения и длины аутентифицирующего тега.

Для аутентичного расшифрования в режиме EAX на вход подаются следующие данные:

  • K;
  • N;
  • С;
  • A.

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

Процесс шифрования

Далее используются следующие обозначения:

  • OMAC(S, K) – функция, возвращающая код аутентификации строки S. Код аутентификации вычисляется в соответствие со схемой работы алгоритма OMAC и с использованием ключа K.
  • TAGLEN – длина тега, который будет использоваться в качестве аутентифицирующего тега в процессе работы режима EAX. Выбирается в начале каждой сессии.

Процесс шифрования описывается следующей последовательностью действий:

  1. Nmac = OMAC(N, K);
  2. Amac = OMAC(A, K);
  3. Получение шифртекста: C = E(m, K);
  4. Cmac = OMAC(C, K);
  5. Генерация аутентифицирующего тега: Tag = Nmac Oplus.gif Cmac Oplus.gif Amac;
  6. T = Tag[TAGLEN];
  7. На выходе получается: C | T.

Процесс расшифрования

Процесс расшифрования описывается следующей последовательностью действий:

  1. Nmac = OMAC(N, K);
  2. Amac = OMAC(A, K);
  3. Cmac = OMAC(C, K);
  4. Вычисление аутентифицирующего тега: Tag* = Nmac Oplus.gif Cmac Oplus.gif Amac;
  5. T* = Tag*[TAGLEN];
  6. Если T* не равен T, то вернуть специальный символ FAIL; иначе вернуть m = E(C, K).

Недостатки режима EAX

Основным недостатком EAX является его низкая производительность: так как этот является двухпроходным режимом аутентичного шифрования, он менее эффективен, чем однопроходные режимы (например, OCB, GCM).

Глоссарий

Библиографический указатель

Список литературы к разделу "Симметричные схемы аутентичного шифрования"

Назад



Шпак Сергей, 2014