CBC-MAC: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
м вычислть→вычислить - typos.toolforge.org
 
(не показаны 32 промежуточные версии 25 участников)
Строка 1: Строка 1:
В [[криптография|криптографии]], '''CBC MAC''' является технологией построения [[message authentication code|аутенфикационного кода сообщения]] из [[Блочный шифр|блочного шифра]]. Сообщение шифруется при помощи некоторого блочного алгоритма шифрования в [[Режим шифрования|режиме CBC]], для создания цепочки блоков с правилом — каждый блок зависит от надлежащего(верного) шифрования предыдущего. Эта взаимозависимость гарантирует, что изменение в любом бите открытого текста приведёт к изменению конечного зашифрованного блока в сторону, которая не может быть предсказана или высчитана в случае, если ключ блочного шифра не известен. Использовался (с подстановкой в качестве E алгоритма DES) как государственный стандарт США - DAA.
'''CBC MAC''' — в [[криптография|криптографии]] является технологией построения [[имитовставка|аутентификационного кода сообщения]] из [[Блочный шифр|блочного шифра]]. Сообщение [[Шифрование|шифруется]] при помощи некоторого блочного алгоритма шифрования в [[Режим шифрования|режиме CBC]], для создания цепочки блоков с правилом — каждый блок зависит от надлежащего(верного) шифрования предыдущего. Эта взаимозависимость гарантирует, что изменение в любом бите [[Открытый текст|открытого текста]] приведёт к изменению конечного зашифрованного блока в сторону, которая не может быть предсказана или высчитана в случае, если [[Ключ (криптография)|ключ]] блочного шифра не известен.
Использовался (с подстановкой в качестве E алгоритма [[DES]]) как государственный стандарт [[Соединённые Штаты Америки|США]] — [[DAA]].


== Справочная информация ==
== Справочная информация ==
[[Файл:CBC-MAC structure (en).svg]]


Алгоритм '''CBC MAC''' является хорошо известным методом для генерации [[имитовставка|имитовставки]] ({{lang-en|message authentication code}} — код аутентичности сообщения), основанный на [[Блочный шифр|блочном шифре]].
[[Image:CBC-MAC structure (en).svg]]


Алгоритм '''CBC MAC''' является хорошо известным методом для генерации [[message authentication code|имитовставки]] (имитовставка, {{lang-en|message authentication code}} — код аутентичности сообщения), основанный на [[Блочный шифр|блочном шифре]]. Bellare, Kilian и Rogaway доказали безопасность (защищённость) алгоритма при фиксированной длине сообщения в m*n бит, где n — длина базового [[Блочный шифр|блочного шифра]] Е. Однако, хорошо известно, что '''CBC MAC''' не является безопасным, если длина сообщения не является фиксированной.
Bellare, Kilian и Rogaway доказали безопасность ([[защищённость]]) алгоритма при фиксированной длине сообщения в m*n бит, где n — длина базового блочного шифра Е.

Таким образом, было предложено несколько вариантов алгоритма для варьируемой длины сообщения. Сначала была предложена зашифрованная [[message authentication code|имитовставка(EMAC)]]. Она получается шифрованием '''CBC MAC''' значения с помощью E и новым ключом <math>K^2</math>. То есть
Однако, хорошо известно, что '''CBC MAC''' не является безопасным, если длина сообщения не является фиксированной.
<math>EMAC_{K_1,K_2}(M) = E_{K_2}(CBC_{K_1}(M)))</math>,
Таким образом, было предложено несколько вариантов алгоритма для варьируемой длины сообщения. Сначала была предложена ''зашифрованная имитовставка'' (EMAC), она получается шифрованием '''CBC MAC''' значения с помощью E и новым ключом <math>K^2</math>. То есть
: <math>EMAC_{K_1,K_2}(M) = E_{K_2}(CBC_{K_1}(M)))</math>,
где M — сообщение, <math>K_1</math> — ключ CBC MAC и <math>CBC_{K_1}(M)</math> — значение CBC MAC сообщения М. Petrank и Rackoff позже доказали, что EMAC защищён, если длина сообщения кратна n (Vaudenay используя [[decorrelation theory|декорреляционную теорию]], опубликовал другое доказательство). Однако, EMAC требует два ключевых расписания базового блочного шифра E.
где M — сообщение, <math>K_1</math> — ключ CBC MAC и <math>CBC_{K_1}(M)</math> — значение CBC MAC сообщения М. Petrank и Rackoff позже доказали, что EMAC защищён, если длина сообщения кратна n (Vaudenay используя [[decorrelation theory|декорреляционную теорию]], опубликовал другое доказательство). Однако, EMAC требует два ключевых расписания базового блочного шифра E.

Далее Black и Rogaway предложили XCBC, который требует только одного ключевого расписания базового блочного шифра E. XCBC даёт три ключа: один ключ блочного шифра K1, и два ключа по n бит. XCBC описывается следующей схемой
Далее Black и Rogaway предложили XCBC, который требует только одного ключевого расписания базового блочного шифра E. XCBC даёт три ключа: один ключ блочного шифра K1, и два ключа по n бит. XCBC описывается следующей схемой
<gallery>
<gallery>
Строка 26: Строка 32:
Однако, недостатком XCBC заключается в требовании трёх ключей, то есть в сумме (k + 2n) бит.
Однако, недостатком XCBC заключается в требовании трёх ключей, то есть в сумме (k + 2n) бит.
В итоге, Kurosawa и Iwata предложили двуключевой CBC MAC (TMAC).
В итоге, Kurosawa и Iwata предложили двуключевой CBC MAC (TMAC).
TMAC принимает два ключа, в сумме (k + n) бит: ключ <math> K_1 </math> блочного шифра и ключ <math> K_2 </math> (n бит). TMAC получается из XCBC перемещением (или заменой) <math> \ (K_2,K_3) </math> на <math> (K_2 \cdot u,K_2) </math>, где u — некоторая ненулевая константа, а «•» обозначает умножение в <math> \ GF(2^n)</math>.
TMAC принимает два ключа, в сумме (k + n) бит: ключ <math> K_1 </math> блочного шифра и ключ <math> K_2 </math> (n бит). TMAC получается из XCBC перемещением (или заменой) <math> \ (K_2,K_3) </math> на <math> (K_2 \cdot u,K_2) </math>, где u — некоторая ненулевая константа, а «•» обозначает [[умножение]] в <math> \ GF(2^n)</math>.
Как уже было сказано, OMAC ('''one-key CBC MAC''') принимает только один ключ К блочного шифра Е. Длина ключа, k бит, минимальна, так как базовый шифр должен содержать ключ K, состоящий из k бит в любом случае.
Как уже было сказано, OMAC ('''one-key CBC MAC''') принимает только один ключ К блочного шифра Е. Длина ключа, k бит, минимальна, так как базовый шифр должен содержать ключ K, состоящий из k бит в любом случае.


Строка 33: Строка 39:
XCBC с помощью замены <math> \ (K_2,K_3) </math> на <math> (L \cdot u, L \cdot u^2) </math> для некоторой не равной нулю константе u в
XCBC с помощью замены <math> \ (K_2,K_3) </math> на <math> (L \cdot u, L \cdot u^2) </math> для некоторой не равной нулю константе u в
<math> \ GF(2^n)</math>, где L — даётся с помощью следующего выражения: <math> L \ = \ EK( 0 ^ n ) </math>.
<math> \ GF(2^n)</math>, где L — даётся с помощью следующего выражения: <math> L \ = \ EK( 0 ^ n ) </math>.
OMAC2 аналогично получается используя <math>(L \cdot u, L \cdot u^{-1})</math>. Мы можем вычислть <math>(L \cdot u)</math>, <math>(L \cdot u^{-1}) </math> и <math> (L \cdot u^2) = \{(L \cdot u) \cdot u\} </math> эффективно одним сдвигом и условием XOR на <math> \ L</math> и <math>(L \cdot u)</math>, соответственно.
OMAC2 аналогично получается используя <math>(L \cdot u, L \cdot u^{-1})</math>. Мы можем вычислить <math>(L \cdot u)</math>, <math>(L \cdot u^{-1}) </math> и <math> (L \cdot u^2) = \{(L \cdot u) \cdot u\} </math> эффективно одним сдвигом и условием XOR на <math> \ L</math> и <math>(L \cdot u)</math>, соответственно.
OMAC1 (соотв. OMAC2) описывается следующей схемой:
OMAC1 (соотв. OMAC2) описывается следующей схемой:
<gallery>
<gallery>
[[Файл:schema2.jpg|Рис. 2. Иллюстрация OMAC1.]] Замечание: <math> \ L = EK(0^n)</math>. OMAC2 получается заменой <math> (L \cdot u^2) </math> с <math> (L \cdot u^{-1}) </math> [справа].
[[Файл:schema2.jpg|Рис. 2. Иллюстрация OMAC1.]] Замечание: <math> \ L = EK(0^n)</math>. OMAC2 получается заменой <math> (L \cdot u^2) </math> с <math> (L \cdot u^{-1}) </math> [справа].
</gallery>
</gallery>
<br />
<br>
1. Если <math> \left | M \right | = mn </math> для некоторого m > 0, тогда OMAC вычисляется в точности, как CBC MAC, за исключением операции XOR для <math> (L \cdot u)</math> до шифрования последнего блока.<br />
1. Если <math> \left | M \right | = mn </math> для некоторого m > 0, тогда OMAC вычисляется в точности, как CBC MAC, за исключением операции XOR для <math> (L \cdot u)</math> до шифрования последнего блока.<br>
2. В противном случае, <math> \ 10^i </math> (где <math> i = n-1-\left | M \right | \mod \ n </math>) добавляется к M и OMAC
2. В противном случае, <math> \ 10^i </math> (где <math> i = n-1-\left | M \right | \mod \ n </math>) добавляется к M и OMAC
Вычисляется в точности, как CBC MAC для полученного сообщения М, за исключением операции XOR для <math> (L \cdot u^2)</math>(соотв. <math>(L \cdot u^{-1})</math> до шифрования последнего блока.
Вычисляется в точности, как CBC MAC для полученного сообщения М, за исключением операции XOR для <math> (L \cdot u^2)</math>(соотв. <math>(L \cdot u^{-1})</math> до шифрования последнего блока.


Кроме того, в TMAC, ключ <math>K_2</math> является частью ключа, в то время как в OMAC, L не является частью ключа и генерируется из K.
Кроме того, в TMAC, ключ <math>K_2</math> является частью ключа, в то время как в OMAC, L не является частью ключа и генерируется из K.
Эта сохранность длины ключа делает доказательство безопасности OMAC значительно сложнее чем для TMAC, как показано ниже. На рисунке 2, пусть M[1] = <math>0^n</math>. Тогда L является выходом первого <math>E_K</math>. L всегда появляется снова в последнем блоке. В основном, подобное повторное использование L могло бы привести к тупику в доказательстве безопасности. (В OCB режиме и PMAC, <math> L = EK(0^n)</math> так же используется как ключ универсальной хэш-функции. Однако L появляется как выход некоторого внутреннего блока с незначительной вероятностью.)
Эта сохранность длины ключа делает доказательство безопасности OMAC значительно сложнее чем для TMAC, как показано ниже. На рисунке 2, пусть M[1] = <math>0^n</math>. Тогда L является выходом первого <math>E_K</math>. L всегда появляется снова в последнем блоке. В основном, подобное повторное использование L могло бы привести к тупику в доказательстве безопасности. (В OCB режиме и PMAC, <math> L = EK(0^n)</math> так же используется как ключ универсальной хеш-функции. Однако L появляется как выход некоторого внутреннего блока с незначительной вероятностью.)
Тем не менее, мы доказали, что OMAC является таким же защищённым как и XCBC, где анализ безопасности является образцом абсолютной защищённости [1]. Дальнейший OMAC получил все другие положительные свойства, которыми были наделены XCBC (и TMAC). Таким образом, область OMAC — {0,1}, необходимо одноключевое расписание базового блочного шифра E и <math> \max\{1,[\left|M\right|/n]\}</math> блочно-шифровых вызовов(обращений).
Тем не менее, мы доказали, что OMAC является таким же защищённым как и XCBC, где анализ безопасности является образцом абсолютной защищённости [1]. Дальнейший OMAC получил все другие положительные свойства, которыми были наделены XCBC (и TMAC). Таким образом, область OMAC — {0,1}, необходимо одноключевое расписание базового блочного шифра E и <math> \max\{1,[\left|M\right|/n]\}</math> блочно-шифровых вызовов(обращений).


== Обозначения ==
== Обозначения ==
Для набора A, x←A означает, что x выбирается из A случайно, причём выбор любого значения из набора А является равновероятным. Если a, b (∈ {0, 1}*) равновеликие строки, тогда a ⊕ b является их побитовой операцией XOR. Если a, b (∈ {0, 1}*) не равновеликие строки, то a ◦ b обозначает их конкатенацию. (Для упрощения далее вводится обозначение: ab:= a ◦ b).
Для набора A, x←A означает, что x выбирается из A случайно, причём выбор любого значения из набора А является равновероятным. Если a, b (∈ {0, 1}*) равновеликие строки, тогда a ⊕ b является их побитовой операцией XOR. Если a, b (∈ {0, 1}*) не равновеликие строки, то a ◦ b обозначает их [[Конкатенация|конкатенацию]]. (Для упрощения далее вводится обозначение: ab:= a ◦ b).
Для n-битной строки <math>a = a_{n-1} ... a_1a_0 </math> ∈ {0, 1}*, обозначим <math>a</math> << 1 = <math>a_{n-2}...a_1a_00</math> n-битную строку, которая сдвинута влево на 1 бит, в это же время обозначим a >> 1 =
Для n-битной строки <math>a = a_{n-1} ... a_1a_0 </math> ∈ {0, 1}*, обозначим <math>a</math> << 1 = <math>a_{n-2}...a_1a_00</math> n-битную строку, которая сдвинута влево на 1 бит, в это же время обозначим a >> 1 =
<math>0a_{n-1} ... a_2a_1</math> n-битную строку, которая сдвинута вправо на один бит. Если a ∈ {0, 1}* является строкой, то |a| обозначим её битовую длину. Для любого бита строка
<math>0a_{n-1} ... a_2a_1</math> n-битную строку, которая сдвинута вправо на один бит. Если a ∈ {0, 1}* является строкой, то |a| обозначим её битовую длину. Для любого бита строка
a ∈ {0, 1}* такова что |a| ≤ n, положим что
a ∈ {0, 1}* такова что |a| ≤ n, положим что
<br />
<br>
<math> (1) \ pad_n(a) = \begin{cases}
<math> (1) \ pad_n(a) = \begin{cases}
& \ a10^{n-\left| a \right|-1}, \ if \left| a \right|<n,\\
& \ a10^{n-\left| a \right|-1}, \ if \left| a \right|<n,\\
Строка 58: Строка 64:
\end{cases}
\end{cases}
</math>
</math>
<br />
<br>
Определим <math>\left \| a \right \|_n = max\{1, [\left|a\right|/n]\}</math>, где пустая строка считается как один блок.
Определим <math>\left \| a \right \|_n = max\{1, [\left|a\right|/n]\}</math>, где [[пустая строка]] считается как один блок.


=== CBC MAC ===
=== CBC MAC ===
Блочный шифр Е является функцией Е : <math>K_E</math> × <math> \{0, 1\}^n </math> → <math> \{0,1\}^n</math>, где каждое E(K, •) = EK(•) является перестановкой <math>\{0,1\}^n</math>, в свою очередь <math>K_E</math> является набором всевозможных ключей, а n — длина блока. CBC MAC [6, 7] является наипростейшим и наиболее известным алгоритмом для того, чтобы сделать MAC из блочного шифра Е. Пусть сообщение будет иметь вид M = M[1] ◦M[2] ◦ … ◦M[m], где |M[1]| = |M[2]| = … = |M[m]| = n. Тогда CBCK(M), CBC MAC сообщения M при условии ключа K, определяется как Y [m], где Y [i] = EK(M[i] ⊕ Y [i − 1]) для i = 1, … ,m и Y [0] = <math>0^n</math>. Bellare, Kilian и Rogaway доказали безопасность CBC MAC для фиксированной длины сообщения в mn бит.

Блочный шифр Е является функцией Е : <math>K_E</math> × <math> \{0, 1\}^n </math> → <math> \{0,1\}^n</math>, где каждое E(K, •) = EK(•) является перестановкой <math>\{0,1\}^n</math>, в свою очередь <math>K_E</math> является набором всевозможных ключей, а n — длина блока. CBC MAC [6, 7] является наипростейшим и наиболее известным алгоритмом, для того что бы сделать MAC из блочного шифра Е. Пусть сообщение будет иметь вид M = M[1] ◦M[2] ◦ … ◦M[m], где |M[1]| = |M[2]| = … = |M[m]| = n. Тогда CBCK(M), CBC MAC сообщения M при условии ключа K, определяется как Y [m], где Y [i] = EK(M[i] ⊕ Y [i − 1]) для i = 1, … ,m и Y [0] = <math>0^n</math>. Bellare, Kilian и Rogaway доказали безопасность CBC MAC для фиксированной длины сообщения в mn бит.


=== Поле с <math>2^n</math> точками ===
=== Поле с <math>2^n</math> точками ===
Мы вправе рассматривать точку '''a''' в <math>GF(2^n)</math> любым из следующих способов: (1) как абстрактная точка в поле '''а'''; (2) как n-битную строку <math> a_{n-1} ... a_1a_0</math> ∈ <math>\{0, 1\}^n</math>; (3) как формальный полином <math> a(u) = a_{n-1}u^{n-1}+ ... +a_1u + a_0 </math> с бинарными коэффициентами. Для того что бы добавить 2 точки в <math>GF(2^n)</math>, рассмотрим битовую операцию ХOR над ними. Обозначим эту операцию с помощью a ⊕ b. Для того что бы перемножить две точки, зафиксируем некоторый полином f(u) с бинарными коэффициентами и степенью n. Для большей точности, выберем лексикографически первым полином среди таких же полиномов степени n имеющий минимальное число коэффициентов. Перечислим некоторые из указанных полиномов
Мы вправе рассматривать точку '''a''' в <math>GF(2^n)</math> любым из следующих способов: (1) как абстрактная точка в поле '''а'''; (2) как n-битную строку <math> a_{n-1} ... a_1a_0</math> ∈ <math>\{0, 1\}^n</math>; (3) как формальный полином <math> a(u) = a_{n-1}u^{n-1}+ ... +a_1u + a_0 </math> с бинарными коэффициентами. Для того, чтобы добавить 2 точки в <math>GF(2^n)</math>, рассмотрим битовую операцию ХOR над ними. Обозначим эту операцию с помощью a ⊕ b. Для того, чтобы перемножить две точки, зафиксируем некоторый полином f(u) с бинарными коэффициентами и степенью n. Для большей точности, выберем лексикографически первым полином среди таких же полиномов степени n имеющий минимальное число коэффициентов. Перечислим некоторые из указанных полиномов
<br />
<br>
<math> \ f(u) = u^{64} + u^4 + u^3 + u + 1</math> для n = 64,
<math> \ f(u) = u^{64} + u^4 + u^3 + u + 1</math> для n = 64,
<br />
<br>
<math> \ f(u) = u^{128} + u^7 + u^2 + u + 1</math> для n = 128, и
<math> \ f(u) = u^{128} + u^7 + u^2 + u + 1</math> для n = 128, и
<br />
<br>
<math> \ f(u) = u^{256} + u^{10} + u^5 + u^2 + 1</math> для n = 256.
<math> \ f(u) = u^{256} + u^{10} + u^5 + u^2 + 1</math> для n = 256.
<br />
<br>
Для того, что бы перемножить две точки '''a''' ∈ <math>GF(2^n)</math> и '''b''' ∈ <math>GF(2^n)</math>, рассмотрим '''a''' и '''b''' как полиномы <math>a(u) = a_{n-1}u^{n-1} + ... + a_1u + a_0</math> и <math>b(u) = b_{n-1}u^{n-1} + ... + b_1u + b_0</math>,
Для того, чтобы перемножить две точки '''a''' ∈ <math>GF(2^n)</math> и '''b''' ∈ <math>GF(2^n)</math>, рассмотрим '''a''' и '''b''' как полиномы <math>a(u) = a_{n-1}u^{n-1} + ... + a_1u + a_0</math> и <math>b(u) = b_{n-1}u^{n-1} + ... + b_1u + b_0</math>,
результат операции c(u), где коэффициенты в GF(2) прибавляются и умножаются, и берётся остаток отделения c(u) на f(u).
результат операции c(u), где коэффициенты в GF(2) прибавляются и умножаются, и берётся остаток отделения c(u) на f(u).
Кроме того особенно просто умножить точку '''a''' ∈ <math> \{0, 1\}^n</math> на u. Например, если n = 128,
Кроме того особенно просто умножить точку '''a''' ∈ <math> \{0, 1\}^n</math> на u. Например, если n = 128,
<br /> <math> (2) \ a \cdot u = \begin{cases}
<br> <math> (2) \ a \cdot u = \begin{cases}
& \ a\ll 1 \ if \ a_{127} = 0, \\
& \ a\ll 1 \ if \ a_{127} = 0, \\
& \ (a\ll 1)\oplus 0^{120}10000111 \ otherwise.
& \ (a\ll 1)\oplus 0^{120}10000111 \ otherwise.
\end{cases}</math>
\end{cases}</math>
<br />
<br>
Также, просто разделить точку '''a''' ∈ <math> \{0, 1\}^n</math> на u, имея ввиду, что '''а''' умножается на обратную величину u в поле: <math>a \cdot u^{-1}</math>. Например,
Также, просто разделить точку '''a''' ∈ <math> \{0, 1\}^n</math> на u, имея в виду, что '''а''' умножается на обратную величину u в поле: <math>a \cdot u^{-1}</math>. Например,
<br /><math> (3) \ a \cdot u = \begin{cases}
<br><math> (3) \ a \cdot u = \begin{cases}
& \ a\gg 1 \ if \ a_{0} = 0, \\
& \ a\gg 1 \ if \ a_{0} = 0, \\
& \ (a\gg 1)\oplus 0^{120}10000111 \ otherwise.
& \ (a\gg 1)\oplus 0^{120}10000111 \ otherwise.
Строка 89: Строка 94:


== Основная конструкция семейства ОМАС ==
== Основная конструкция семейства ОМАС ==
Семейство '''ОМАС''' определяется блочным шифром Е : KE × <math> \{0, 1\}^n</math> → <math>\{0, 1\}^n</math>, n-битной константой Cst, универсальной хеш-функцией H : <math> \{0, 1\}^n</math> × X → <math>\{0, 1\}^n</math>, и две уникальных константы <math>Cst_1</math>, <math>Cst_2</math> ∈ X, где X является конечной областью функции H.

Семейство '''ОМАС''' определяется блочным шифром Е : KE × <math> \{0, 1\}^n</math> → <math>\{0, 1\}^n</math>, n-битной константой Cst, универсальной хэш-функцией H : <math> \{0, 1\}^n</math> × X → <math>\{0, 1\}^n</math>, и две уникальных константы <math>Cst_1</math>, <math>Cst_2</math> ∈ X, где X является конечной областью функции H.
H, <math>Cst_1</math> и <math>Cst_2</math> должны удовлетворять следующему условию: (константы являются случайными.
H, <math>Cst_1</math> и <math>Cst_2</math> должны удовлетворять следующему условию: (константы являются случайными.
Запишем HL(•) для H(L, •).
Запишем HL(•) для H(L, •).


<br />
<br>
1. Для любого y ∈ <math>\{0, 1\}^n</math>, число L ∈ <math>\{0, 1\}^n</math> таково, что HL(<math>Cst_1</math>) = y не более чем <math> \epsilon_1 \cdot 2^n</math> для некоторого достаточно малого <math> \epsilon_1</math>.
1. Для любого y ∈ <math>\{0, 1\}^n</math>, число L ∈ <math>\{0, 1\}^n</math> таково, что HL(<math>Cst_1</math>) = y не более чем <math> \epsilon_1 \cdot 2^n</math> для некоторого достаточно малого <math> \epsilon_1</math>.
<br />
<br>
2. Для любого y ∈ <math>\{0, 1\}^n</math>, число L ∈ <math>\{0, 1\}^n</math> таково, что HL(<math>Cst_2</math>) = y не более чем <math> \epsilon_2 \cdot 2^n</math> для некоторого достаточно малого <math> \epsilon_2</math>.
2. Для любого y ∈ <math>\{0, 1\}^n</math>, число L ∈ <math>\{0, 1\}^n</math> таково, что HL(<math>Cst_2</math>) = y не более чем <math> \epsilon_2 \cdot 2^n</math> для некоторого достаточно малого <math> \epsilon_2</math>.
<br />
<br>
3. Для любого y ∈ <math>\{0, 1\}^n</math>, число L ∈ <math>\{0, 1\}^n</math> таково, что HL(<math>Cst_1</math>) ⊕ HL(<math>Cst_2</math>) = y не более чем <math> \epsilon_3 \cdot 2^n</math> для некоторого достаточно малого <math> \epsilon_3</math>.
3. Для любого y ∈ <math>\{0, 1\}^n</math>, число L ∈ <math>\{0, 1\}^n</math> таково, что HL(<math>Cst_1</math>) ⊕ HL(<math>Cst_2</math>) = y не более чем <math> \epsilon_3 \cdot 2^n</math> для некоторого достаточно малого <math> \epsilon_3</math>.
<br />
<br>
4. Для любого y ∈ <math>\{0, 1\}^n</math>, число L ∈ <math>\{0, 1\}^n</math> таково, что HL(<math>Cst_1</math>) ⊕L = y не более чем <math> \epsilon_4 \cdot 2^n</math> для некоторого достаточно малого <math> \epsilon_4</math>.
4. Для любого y ∈ <math>\{0, 1\}^n</math>, число L ∈ <math>\{0, 1\}^n</math> таково, что HL(<math>Cst_1</math>) ⊕L = y не более чем <math> \epsilon_4 \cdot 2^n</math> для некоторого достаточно малого <math> \epsilon_4</math>.
<br />
<br>
5. Для любого y ∈ <math>\{0, 1\}^n</math>, число L ∈ <math>\{0, 1\}^n</math> таково, что HL(<math>Cst_2</math>) ⊕L = y не более чем <math> \epsilon_5 \cdot 2^n</math> для некоторого достаточно малого <math> \epsilon_5</math>.
5. Для любого y ∈ <math>\{0, 1\}^n</math>, число L ∈ <math>\{0, 1\}^n</math> таково, что HL(<math>Cst_2</math>) ⊕L = y не более чем <math> \epsilon_5 \cdot 2^n</math> для некоторого достаточно малого <math> \epsilon_5</math>.
<br />
<br>
6. Для любого y ∈ <math>\{0, 1\}^n</math>, число L ∈ <math>\{0, 1\}^n</math> таково, что HL(<math>Cst_1</math>) ⊕ HL(Cst2) ⊕ L = y не более чем <math> \epsilon_6 \cdot 2^n</math> для некоторого достаточно малого <math> \epsilon_6</math>.
6. Для любого y ∈ <math>\{0, 1\}^n</math>, число L ∈ <math>\{0, 1\}^n</math> таково, что HL(<math>Cst_1</math>) ⊕ HL(Cst2) ⊕ L = y не более чем <math> \epsilon_6 \cdot 2^n</math> для некоторого достаточно малого <math> \epsilon_6</math>.


Далее приведём пседвдокод, который описывает семейство OMAC.
Далее приведём псевдокод, который описывает семейство OMAC.
<br />
<br>
<br />
<br>
<code>
<code>
Algorithm <math>OMAC-family_K(M)</math><br />
Algorithm <math>OMAC-family_K(M)</math><br />
Строка 134: Строка 138:
== Предложенная спецификация ==
== Предложенная спецификация ==
В OMAC1 положим Cst = <math>0^n</math>, <math>H_L</math>(x) = L•x, <math>Cst_1</math> = u и <math>Cst_2</math> = <math>u^2</math>, где «•» означает умножение в <math>GF(2^n)</math>. <math>L = E_K(0^n)</math>, <math>H_L(Cst_1) = L \cdot u</math> и <math> H_L(Cst_2) = L \cdot u^2</math> равносильны. OMAC2 аналогичен OMAC1, исключая <math>Cst_2 = u^{-1}</math> вместо <math>Cst_2 = u^2</math>. <math>L = E_K(0^n)</math>, <math>H_L(Cst_1) = L \cdot u</math> и <math>H_L(Cst_2) = L \cdot u^{-1}</math> равносильны. Кроме того, <math>L \cdot u</math>, <math> L \cdot u^{-1}</math> и <math> L \cdot u^2 = (L \cdot u) \cdot u</math> могут быть эффективно вычислены с помощью одного сдвига и одной операции XOR от <math>L</math> и <math>L \cdot u</math>, соответственно как показано в (2) и (3). Легко заметить, что условия в Sec. 3 выполняются для <math> \epsilon_1 = ... = \epsilon_6 = 2-n </math> в OMAC1 и OMAC2. OMAC1 и OMAC2 проиллюстрированы на Рис.2 и описываются следующим образом:
В OMAC1 положим Cst = <math>0^n</math>, <math>H_L</math>(x) = L•x, <math>Cst_1</math> = u и <math>Cst_2</math> = <math>u^2</math>, где «•» означает умножение в <math>GF(2^n)</math>. <math>L = E_K(0^n)</math>, <math>H_L(Cst_1) = L \cdot u</math> и <math> H_L(Cst_2) = L \cdot u^2</math> равносильны. OMAC2 аналогичен OMAC1, исключая <math>Cst_2 = u^{-1}</math> вместо <math>Cst_2 = u^2</math>. <math>L = E_K(0^n)</math>, <math>H_L(Cst_1) = L \cdot u</math> и <math>H_L(Cst_2) = L \cdot u^{-1}</math> равносильны. Кроме того, <math>L \cdot u</math>, <math> L \cdot u^{-1}</math> и <math> L \cdot u^2 = (L \cdot u) \cdot u</math> могут быть эффективно вычислены с помощью одного сдвига и одной операции XOR от <math>L</math> и <math>L \cdot u</math>, соответственно как показано в (2) и (3). Легко заметить, что условия в Sec. 3 выполняются для <math> \epsilon_1 = ... = \epsilon_6 = 2-n </math> в OMAC1 и OMAC2. OMAC1 и OMAC2 проиллюстрированы на Рис.2 и описываются следующим образом:
<br />
<br>
1. Для OMAC1:
1. Для OMAC1:
<br />
<br>
<br />
<br>
<code>
<code>
Algorithm <math>OMAC1_K(M)</math><br />
Algorithm <math>OMAC1_K(M)</math><br />
Строка 155: Строка 159:
</code>
</code>


<br />
<br>
1. Для OMAC2:
1. Для OMAC2:
<br />
<br>
<br />
<br>
<code>
<code>
Algorithm <math>OMAC2_K(M)</math><br />
Algorithm <math>OMAC2_K(M)</math><br />
Строка 179: Строка 183:


=== Определение защищённости ===
=== Определение защищённости ===
Пусть Perm(n) означает набор всех перестановок из <math>\{0, 1\}^n</math>, так же пусть P является случайной перестановкой, если Р — случайная выборка из Perm(n). Безопасность блочного шифра E может быть количественно определена как <math>Adv^{prp}_E(t, q)</math>, максимальное преимущество, которое противник A может получить, когда пытается выделить <math>E_K( \cdot )</math> (со случайно выбранным ключём K) из случайной перестановки P(•), когда допускается вычисление времени t и q запросов (который является либо <math>E_K(\cdot)</math> либо <math>P(\cdot)</math>). Это преимущество определяется следующим образом.
Пусть Perm(n) означает набор всех перестановок из <math>\{0, 1\}^n</math>, так же пусть P является [[Случайные перестановки|случайной перестановкой]], если Р — случайная [[выборка]] из Perm(n). Безопасность блочного шифра E может быть количественно определена как <math>Adv^{prp}_E(t, q)</math>, максимальное преимущество, которое противник A может получить, когда пытается выделить <math>E_K( \cdot )</math> (со случайно выбранным ключом K) из случайной перестановки P(•), когда допускается вычисление времени t и q запросов (который является либо <math>E_K(\cdot)</math> либо <math>P(\cdot)</math>). Это преимущество определяется следующим образом.
<br />
<br>
<math>\begin{cases}
<math>\begin{cases}
& Adv^{prp}_E(A):= \left|Pr(K\overset{R}{\leftarrow}K_E : A^{E_K(\cdot)} = 1) - Pr((K\overset{R}{\leftarrow}Perm(n):A^{P(\cdot)} = 1)\right| \\
& Adv^{prp}_E(A):= \left|Pr(K\overset{R}{\leftarrow}K_E : A^{E_K(\cdot)} = 1) - Pr((K\overset{R}{\leftarrow}Perm(n):A^{P(\cdot)} = 1)\right| \\
& Adv_E^{prp}(t,q) := max\{Adv^{prp}_E(A)\}
& Adv_E^{prp}(t,q) := max\{Adv^{prp}_E(A)\}
\end{cases}</math>
\end{cases}</math>
<br />
<br>
Скажем, что блочный шифр E — защищён, если существенно мало. Аналогично, MAC-алгоритм — F : <math>K_F</math> × <math> \{0, 1\}^n</math> → <math>\{0, 1\}^n</math>, где <math>K_F</math> — набор ключей, тогда запишем <math>F_K(\cdot)</math> для F(K, •). Скажем, что противник <math>A^{F_K(\cdot)}</math> взламывает, если A выдаёт <math>(M,F_K(M))</math>, где A никогда не запрашивает M из <math>F_K(\cdot)</math>.
Скажем, что блочный шифр E — защищён, если существенно мало. Аналогично, MAC-алгоритм — F : <math>K_F</math> × <math> \{0, 1\}^n</math> → <math>\{0, 1\}^n</math>, где <math>K_F</math> — набор ключей, тогда запишем <math>F_K(\cdot)</math> для F(K, •). Скажем, что противник <math>A^{F_K(\cdot)}</math> взламывает, если A выдаёт <math>(M,F_K(M))</math>, где A никогда не запрашивает M из <math>F_K(\cdot)</math>.
Тогда мы определяем преимущество как
Тогда мы определяем преимущество как


Строка 196: Строка 200:
</math>
</math>


где максимум берётся по всем противникам, кто «работает» не мобее времени t, производит не более q запросов, и кадлый запрос не более μ бит. Будем говорить, MAC алгоритм защищён (безопасен), если величина пренебрежимо мала.
где максимум берётся по всем противникам, кто «работает» не более времени t, производит не более q запросов, и каждый запрос не более μ бит. Будем говорить, MAC алгоритм защищён (безопасен), если величина пренебрежимо мала.
Обозначим Rand(∗, n) набор всех функций из {0, 1}* в <math>\{0, 1\}^n</math>. Этот набор даётся вероятностной мерой в предположении, что случайный элемент R набора Rand(∗, n) связан или ассоциирован с каждой строкой M ∈ {0, 1}* случайной строки R(M)∈<math>\{0, 1\}^n</math>. Далее, мы определим преймущество как <br />
Обозначим Rand(∗, n) набор всех функций из {0, 1}* в <math>\{0, 1\}^n</math>. Этот набор даётся вероятностной мерой в предположении, что случайный элемент R набора Rand(∗, n) связан или ассоциирован с каждой строкой M ∈ {0, 1}* случайной строки R(M)∈<math>\{0, 1\}^n</math>. Далее, мы определим преимущество как <br>
<math>
<math>
\begin{cases}
\begin{cases}
Строка 203: Строка 207:
& Adv_F^{viprf}(t,q,\mu) := max\{Adv^{viprf}_F(A)\}
& Adv_F^{viprf}(t,q,\mu) := max\{Adv^{viprf}_F(A)\}
\end{cases}
\end{cases}
</math><br />
</math><br>
где максимум берётся по всем противникам, кто «работает» время не больше t, делает не более q запросов, и каждый запрос не более μ бит. Тогда можно сказать, что MAC алгоритм
где максимум берётся по всем противникам, кто «работает» время не больше t, делает не более q запросов, и каждый запрос не более μ бит. Тогда можно сказать, что MAC алгоритм
псевдослучайный, если величина пренебрежимо мала (viprf устанавливается для Variablelength Input PseudoRandom Function — входные псевдо случайные функции переменной длины).
псевдослучайный, если величина пренебрежимо мала (viprf устанавливается для Variablelength Input PseudoRandom Function — входные псевдо случайные функции переменной длины).
Без ограничения общности, как предполагается, противники никогда не делают запросы вне области <math>\{0, 1\}^n</math>, а так же никогда не повторяют запросы.
Без ограничения общности, как предполагается, противники никогда не делают запросы вне области <math>\{0, 1\}^n</math>, а также никогда не повторяют запросы.


Далее приведём основные теоремы(их формулировки без доказательств).
Далее приведём основные теоремы(их формулировки без доказательств).


Lemma 5.1 (Главная Лемма для семейства ОМАС). Предположим, что H, Cst1 и
Lemma 5.1 (Главная Лемма для семейства ОМАС). Предположим, что H, Cst1 и
Cst2 удовлетворяют условиям Sec. 3 для некоторых пренебрежимо малых <math> \epsilon_1, ... , \epsilon_6</math>, а так же пусть Cst — произвольная n-битная константа. Так же предположим, что случайная перестановка P ∈ Perm(n) используется в семействе OMAC(OMAC-family) как базовый блочный шифр. Пусть A — противник, который делает не более q запросов, и каждый запрос не более nm бит. (m — максимальное число блоков в каждом запросе.) Положим m ≤ 2n/4. Тогда<br />
Cst2 удовлетворяют условиям Sec. 3 для некоторых пренебрежимо малых <math> \epsilon_1, ... , \epsilon_6</math>, а также пусть Cst — произвольная n-битная константа. Так же предположим, что случайная [[перестановка]] P ∈ Perm(n) используется в семействе OMAC(OMAC-family) как базовый блочный шифр. Пусть A — противник, который делает не более q запросов, и каждый запрос не более nm бит. (m — максимальное число блоков в каждом запросе.) Положим m ≤ 2n/4. Тогда<br>
<math> \left|Pr(P\overset{R}{\leftarrow}Pern(n) : A^{OMAC-family_P(\cdot)} = 1) - Pr((R\overset{R}{\leftarrow}Rand(*,n):A^{R(\cdot)} = 1)\right|\leq \frac{q^2}{2} \cdot (\frac{7m^2+2}{2^n}+3m^2\epsilon )</math>
<math> \left|Pr(P\overset{R}{\leftarrow}Pern(n) : A^{OMAC-family_P(\cdot)} = 1) - Pr((R\overset{R}{\leftarrow}Rand(*,n):A^{R(\cdot)} = 1)\right|\leq \frac{q^2}{2} \cdot (\frac{7m^2+2}{2^n}+3m^2\epsilon )</math>
<br />
<br>
где <math> \epsilon = max{ \epsilon_1, . . . , \epsilon_6}</math>.
где <math> \epsilon = max{ \epsilon_1, . . . , \epsilon_6}</math>.
Следующие результаты присущи как OMAC1 так и OMAC2. Сначала, мы получили следущую лемму заменой є = 2−n в Lemma 5.1.
Следующие результаты присущи как OMAC1 так и OMAC2. Сначала, мы получили следующую лемму заменой є = 2−n в Lemma 5.1.


Lemma 5.2 (Главная Лемма для семейства ОМАС). Предположим, что случайная перестановка P ∈ Perm(n) используется в OMAC как базовый блочный шифр . Пусть A будет противником, который делает не более q запросов, и каждый запрос не более nm бит. Положим m ≤ 2n/4. Тогда
Lemma 5.2 (Главная Лемма для семейства ОМАС). Предположим, что случайная перестановка P ∈ Perm(n) используется в OMAC как базовый блочный шифр . Пусть A будет противником, который делает не более q запросов, и каждый запрос не более nm бит. Положим m ≤ 2n/4. Тогда
<br />
<br>
<math>
<math>
\left|Pr(P\overset{R}{\leftarrow}Pern(n) : A^{OMAC_P(\cdot)} = 1) - Pr((R\overset{R}{\leftarrow}Rand(*,n):A^{R(\cdot)} = 1)\right|\leq \frac{(5m^2+1)q^2}{2^n}
\left|Pr(P\overset{R}{\leftarrow}Pern(n) : A^{OMAC_P(\cdot)} = 1) - Pr((R\overset{R}{\leftarrow}Rand(*,n):A^{R(\cdot)} = 1)\right|\leq \frac{(5m^2+1)q^2}{2^n}
</math>
</math>
<br />
<br>
Далее покажем, что OMAC является псевдослучайным, если базовый блочный шифр Е защищён.
Далее покажем, что OMAC является псевдослучайным, если базовый блочный шифр Е защищён.


Замечание 5.1. Пусть E : <math>K_E</math> × <math>\{0, 1\}^n</math> → <math>\{0, 1\}^n</math> является базовым блочным шифром, который используется в OMAC. Тогда
Замечание 5.1. Пусть E : <math>K_E</math> × <math>\{0, 1\}^n</math> → <math>\{0, 1\}^n</math> является базовым блочным шифром, который используется в OMAC. Тогда
<math>Adv_{OMAC}^{viprf}(t,q,nm)\leq \frac{(5m^2+1)q^2}{2^n} + Adv_{E}^{prp}(t',q')</math>,
<math>Adv_{OMAC}^{viprf}(t,q,nm)\leq \frac{(5m^2+1)q^2}{2^n} + Adv_{E}^{prp}(t',q')</math>,
где t’ = t + O(mq) and q’ = mq + 1.
где t’ = t + O(mq) and q’ = mq + 1.
<br />
<br>
В конце покажем, что OMAC защищён как aMAC алгоритм из Замечание 5.1 в обычном смысле.
В конце покажем, что OMAC защищён как aMAC алгоритм из Замечание 5.1 в обычном смысле.
Theorem 5.1. Пусть E : KE × <math>\{0, 1\}^n</math> → <math>\{0, 1\}^n</math> является базовым блочным шифром, используемый в OMAC. Тогда<br />
Theorem 5.1. Пусть E : KE × <math>\{0, 1\}^n</math> → <math>\{0, 1\}^n</math> является базовым блочным шифром, используемый в OMAC. Тогда<br>
<math>Adv_{OMAC}^{mac}(t,q,nm)\leq \frac{(5m^2+1)q^2+1}{2^n} + Adv_{E}^{prp}(t',q')</math>,
<math>Adv_{OMAC}^{mac}(t,q,nm)\leq \frac{(5m^2+1)q^2+1}{2^n} + Adv_{E}^{prp}(t',q')</math>,
<br />
<br>
где t’ = t + O(mq) and q’ = mq + 1.
где t’ = t + O(mq) and q’ = mq + 1.


== Аналоги ==
== Аналоги ==
Большинство технологий построения аутентификационного кода сообщения представляются как [[хеш-функция]] от отправленного сообщения и определённого ключа, который знают отправитель и получатель, к ним относятся: RIPE-MAC, IBC-MAC, UMAC, VMAC. Принципиально CBC-MAC отличается от MAC с использованием потокового шифра (с помощью генератора псевдослучайных чисел поток информации разделяется на два потока, которые отправляются отдельно друг от друга), недостатком же является слабые изменения при небольшом изменении сообщения. Также рассмотрим Poly1305-AES, где в качестве ключа используется 128 битный ключ для AES, 106 битный дополнительный код, а также создаётся 128битная псевдослучайная генерация.
В качестве недостатка CBC-MAC можно указать меньшую защищённость, а в качестве преимущества — меньшую требовательность к вычислительным ресурсам.


== Примечания ==
Большинство технологий построения аутенфикационного кода сообщения представляются как хэш-функция от отправленного сообщения и определённого ключа, который знают отправитель и получатель, к ним относятся: RIPE-MAC, IBC-MAC, UMAC, VMAC. Принципиально от CBC-MAC отличается от MAC с использованием потокового шифра (с помощью генератора псевдослучайных чисел поток информации разделяется на два потока, которые отправляются отдельно друг от друга), недостатком же является слабые изменения при небольшом изменении сообщения. Также рассмотрим Poly1305-AES, где в качестве ключа используется 128 битный ключ для AES, 106 битный дополнительный код, а также создаётся 128битная псевдослучайная генерация.
{{примечания}}
В качестве недостатка CBC-MAC можно указать меньшую защищённость, а в качестве преимущества - меньшую требовательность в вычислительным ресурсам.


== Литература ==
== Литература ==
* {{книга
* {{книга
|автор = Tetsu Iwata and Kaoru Kurosawa
|автор = Tetsu Iwata and Kaoru Kurosawa.
|заглавие = OMAC: One-Key CBC MAC
|заглавие = OMAC: One-Key CBC MAC
|оригинал =
|оригинал =
Строка 253: Строка 259:
|isbn =
|isbn =
}}
}}
* {{книга|автор=M. Bellare, J. Kilian, and P. Rogaway.|заглавие=The security of the cipher block chaining message authentication code. JCSS, vol. 61, no. 3, 2000. Earlier version in Advances in Cryptology — CRYPTO ’94, LNCS 839, pp.341–358, Springer-Verlag, 1994|оригинал=|ссылка=https://web.archive.org/web/20120205061813/http://www.cs.ucdavis.edu/research/tech-reports/1997/CSE-97-15.pdf|издание=|место=|издательство=|год=|страницы=|isbn=}} {{Wayback|url=http://www.cs.ucdavis.edu/research/tech-reports/1997/CSE-97-15.pdf |date=20120205061813 }}

* {{книга
|автор = M. Bellare, J. Kilian, and P. Rogaway
|заглавие = The security of the cipher block chaining message authentication code. JCSS, vol. 61, no. 3, 2000. Earlier version in Advances in Cryptology — CRYPTO ’94, LNCS 839, pp.341–358, Springer-Verlag, 1994.
|оригинал =
|ссылка = http://www.cs.ucdavis.edu/research/tech-reports/1997/CSE-97-15.pdf
|издание =
|место =
|издательство =
|год =
|страницы =
|isbn =
}}

* {{книга
* {{книга
|автор = J. Black and P. Rogaway
|автор = J. Black and P. Rogaway.
|заглавие = CBC MACs for arbitrary-length messages: The three key constructions. Advances in Cryptology — CRYPTO 2000, LNCS 1880, pp. 197–215, Springer-Verlag, 2000.
|заглавие = CBC MACs for arbitrary-length messages: The three key constructions. Advances in Cryptology — CRYPTO 2000, LNCS 1880, pp. 197–215, Springer-Verlag, 2000
|оригинал =
|оригинал =
|ссылка = http://www.cs.ucdavis.edu/~rogaway/papers/3k.pdf
|ссылка = http://www.cs.ucdavis.edu/~rogaway/papers/3k.pdf
Строка 279: Строка 272:
|isbn =
|isbn =
}}
}}


* {{книга
* {{книга
|автор = J. Black and P. Rogaway
|автор = J. Black and P. Rogaway.
|заглавие = Comments to NIST concerning AES modes of operations: A suggestion for handling arbitrary-length messages with the CBC MAC. Second Modes of Operation Workshop
|заглавие = Comments to NIST concerning AES modes of operations: A suggestion for handling arbitrary-length messages with the CBC MAC. Second Modes of Operation Workshop
|оригинал =
|оригинал =
Строка 293: Строка 284:
|isbn =
|isbn =
}}
}}

* {{книга
* {{книга
|автор = R. Lidl and H. Niederreiter
|автор = R. Lidl and H. Niederreiter.
|заглавие = Introduction to finite fields and their applications, revised edition. Cambridge University Press, 1994.
|заглавие = Introduction to finite fields and their applications, revised edition. Cambridge University Press, 1994
|оригинал =
|оригинал =
|ссылка = http://assets.cambridge.org/97805214/60941/sample/9780521460941ws.pdf
|ссылка = http://assets.cambridge.org/97805214/60941/sample/9780521460941ws.pdf
Строка 306: Строка 296:
|isbn =
|isbn =
}}
}}

* {{книга
* {{книга
|автор = E. Petrank and C. Rackoff
|автор = E. Petrank and C. Rackoff.
|заглавие = CBC MAC for real-time data sources. J.Cryptology, vol. 13, no. 3, pp. 315–338, Springer-Verlag, 2000.
|заглавие = CBC MAC for real-time data sources. J.Cryptology, vol. 13, no. 3, pp. 315–338, Springer-Verlag, 2000
|оригинал =
|оригинал =
|ссылка = http://www.google.ru/url?sa=t&source=web&cd=16&ved=0CEkQFjAFOAo&url=http://citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.53.2421%26rep%3Drep1%26type%3Dpdf&rct=j&q=CBC%20MAC%20for%20real-time%20data%20sources.&ei=9IEPTcqTNMSZOpr-9PkI&usg=AFQjCNEyG45vJprx3qwcxoZ9KsbqlhqA_A&sig2=AXgdP5ed_d0VaPIZO2meqQ&cad=rjt
|ссылка = http://www.google.ru/url?sa=t&source=web&cd=16&ved=0CEkQFjAFOAo&url=http://citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.53.2421%26rep%3Drep1%26type%3Dpdf&rct=j&q=CBC%20MAC%20for%20real-time%20data%20sources.&ei=9IEPTcqTNMSZOpr-9PkI&usg=AFQjCNEyG45vJprx3qwcxoZ9KsbqlhqA_A&sig2=AXgdP5ed_d0VaPIZO2meqQ&cad=rjt
Строка 319: Строка 308:
|isbn =
|isbn =
}}
}}

* {{книга
* {{книга
|автор = S. Vaudenay
|автор = S. Vaudenay.
|заглавие = Decorrelation over infinite domains: The encrypted CBC-MAC case. Communications in Information and Systems (CIS), vol. 1, pp. 75–85, 2001. Earlier version in Selected Areas in Cryptography, SAC 2000, LNCS 2012, pp. 57–71, Springer-Verlag, 2001.
|заглавие = Decorrelation over infinite domains: The encrypted CBC-MAC case. Communications in Information and Systems (CIS), vol. 1, pp. 75–85, 2001. Earlier version in Selected Areas in Cryptography, SAC 2000, LNCS 2012, pp. 57–71, Springer-Verlag, 2001
|оригинал =
|оригинал =
|ссылка = http://seclab.cs.ucdavis.edu/papers/Rogaway/bucket.pdf
|ссылка = http://seclab.cs.ucdavis.edu/papers/Rogaway/bucket.pdf
Строка 332: Строка 320:
|isbn =
|isbn =
}}
}}

* {{книга
* {{книга
|автор = P. Rogaway
|автор = P. Rogaway.
|заглавие = Bucket hashing and its application to fast message authentication. Advances in Cryptology — CRYPTO ’95, LNCS 963, pp. 29–42, Springer-Verlag, 1995.
|заглавие = Bucket hashing and its application to fast message authentication. Advances in Cryptology — CRYPTO ’95, LNCS 963, pp. 29–42, Springer-Verlag, 1995
|оригинал =
|оригинал =
|ссылка = http://seclab.cs.ucdavis.edu/papers/Rogaway/bucket.pdf
|ссылка = http://seclab.cs.ucdavis.edu/papers/Rogaway/bucket.pdf
Строка 345: Строка 332:
|isbn =
|isbn =
}}
}}

* {{книга
* {{книга
|автор = P. Rogaway, M. Bellare, J. Black, and T. Krovetz
|автор = P. Rogaway, M. Bellare, J. Black, and T. Krovetz.
|заглавие = OCB: a block-cipher mode of operation for efficient authenticated encryption. Proceedings of ACM Conference on Computer and Communications Security, ACM CCS 2001, ACM, 2001.
|заглавие = OCB: a block-cipher mode of operation for efficient authenticated encryption. Proceedings of ACM Conference on Computer and Communications Security, ACM CCS 2001, ACM, 2001
|оригинал =
|оригинал =
|ссылка = http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.94.294&rep=rep1&type=pdf
|ссылка = http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.94.294&rep=rep1&type=pdf
Строка 359: Строка 345:
}}
}}


{{Нет сносок|дата=2016-04-24}}


[[Категория:Блочные шифры]]
[[Категория:Блочные шифры]]
[[Категория:Аутентификация]]
[[Категория:Аутентификация]]
[[Категория:Коды аутентификации сообщений]]

[[fr:CBC-MAC]]
[[en:CBC-MAC]]
[[it:CBC-MAC]]

Текущая версия от 08:53, 2 июля 2024

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

Использовался (с подстановкой в качестве E алгоритма DES) как государственный стандарт США — DAA.

Справочная информация

[править | править код]

Алгоритм CBC MAC является хорошо известным методом для генерации имитовставки (англ. message authentication code — код аутентичности сообщения), основанный на блочном шифре.

Bellare, Kilian и Rogaway доказали безопасность (защищённость) алгоритма при фиксированной длине сообщения в m*n бит, где n — длина базового блочного шифра Е.

Однако, хорошо известно, что CBC MAC не является безопасным, если длина сообщения не является фиксированной. Таким образом, было предложено несколько вариантов алгоритма для варьируемой длины сообщения. Сначала была предложена зашифрованная имитовставка (EMAC), она получается шифрованием CBC MAC значения с помощью E и новым ключом . То есть

,

где M — сообщение,  — ключ CBC MAC и  — значение CBC MAC сообщения М. Petrank и Rackoff позже доказали, что EMAC защищён, если длина сообщения кратна n (Vaudenay используя декорреляционную теорию, опубликовал другое доказательство). Однако, EMAC требует два ключевых расписания базового блочного шифра E.

Далее Black и Rogaway предложили XCBC, который требует только одного ключевого расписания базового блочного шифра E. XCBC даёт три ключа: один ключ блочного шифра K1, и два ключа по n бит. XCBC описывается следующей схемой

На таблице приведено сравнение длин ключей.

XCBC TMAC OMAC
Длина ключа (k + 2n) бит (k + n) бит k бит

Если для некоторого m > 0, то XCBC вычисляется в точности, как и CBC MAC, за исключением операции XOR(«исключающее или») ключа (n бит) до шифрования последнего блока.

В противном случае, (где ) добавляется к М и XCBC вычисляется в точности, как и CBC MAC для полученного сообщения. За исключением операции XOR другого ключа (n бит) до шифрования последнего блока. Однако, недостатком XCBC заключается в требовании трёх ключей, то есть в сумме (k + 2n) бит. В итоге, Kurosawa и Iwata предложили двуключевой CBC MAC (TMAC). TMAC принимает два ключа, в сумме (k + n) бит: ключ блочного шифра и ключ (n бит). TMAC получается из XCBC перемещением (или заменой) на , где u — некоторая ненулевая константа, а «•» обозначает умножение в . Как уже было сказано, OMAC (one-key CBC MAC) принимает только один ключ К блочного шифра Е. Длина ключа, k бит, минимальна, так как базовый шифр должен содержать ключ K, состоящий из k бит в любом случае.

OMAC является родительским названием для OMAC1 и OMAC2. OMAC1 получается из XCBC с помощью замены на для некоторой не равной нулю константе u в , где L — даётся с помощью следующего выражения: . OMAC2 аналогично получается используя . Мы можем вычислить , и эффективно одним сдвигом и условием XOR на и , соответственно. OMAC1 (соотв. OMAC2) описывается следующей схемой:


1. Если для некоторого m > 0, тогда OMAC вычисляется в точности, как CBC MAC, за исключением операции XOR для до шифрования последнего блока.
2. В противном случае, (где ) добавляется к M и OMAC Вычисляется в точности, как CBC MAC для полученного сообщения М, за исключением операции XOR для (соотв. до шифрования последнего блока.

Кроме того, в TMAC, ключ является частью ключа, в то время как в OMAC, L не является частью ключа и генерируется из K. Эта сохранность длины ключа делает доказательство безопасности OMAC значительно сложнее чем для TMAC, как показано ниже. На рисунке 2, пусть M[1] = . Тогда L является выходом первого . L всегда появляется снова в последнем блоке. В основном, подобное повторное использование L могло бы привести к тупику в доказательстве безопасности. (В OCB режиме и PMAC, так же используется как ключ универсальной хеш-функции. Однако L появляется как выход некоторого внутреннего блока с незначительной вероятностью.) Тем не менее, мы доказали, что OMAC является таким же защищённым как и XCBC, где анализ безопасности является образцом абсолютной защищённости [1]. Дальнейший OMAC получил все другие положительные свойства, которыми были наделены XCBC (и TMAC). Таким образом, область OMAC — {0,1}, необходимо одноключевое расписание базового блочного шифра E и блочно-шифровых вызовов(обращений).

Обозначения

[править | править код]

Для набора A, x←A означает, что x выбирается из A случайно, причём выбор любого значения из набора А является равновероятным. Если a, b (∈ {0, 1}*) равновеликие строки, тогда a ⊕ b является их побитовой операцией XOR. Если a, b (∈ {0, 1}*) не равновеликие строки, то a ◦ b обозначает их конкатенацию. (Для упрощения далее вводится обозначение: ab:= a ◦ b). Для n-битной строки ∈ {0, 1}*, обозначим << 1 = n-битную строку, которая сдвинута влево на 1 бит, в это же время обозначим a >> 1 = n-битную строку, которая сдвинута вправо на один бит. Если a ∈ {0, 1}* является строкой, то |a| обозначим её битовую длину. Для любого бита строка a ∈ {0, 1}* такова что |a| ≤ n, положим что

Определим , где пустая строка считается как один блок.

Блочный шифр Е является функцией Е :  × , где каждое E(K, •) = EK(•) является перестановкой , в свою очередь является набором всевозможных ключей, а n — длина блока. CBC MAC [6, 7] является наипростейшим и наиболее известным алгоритмом для того, чтобы сделать MAC из блочного шифра Е. Пусть сообщение будет иметь вид M = M[1] ◦M[2] ◦ … ◦M[m], где |M[1]| = |M[2]| = … = |M[m]| = n. Тогда CBCK(M), CBC MAC сообщения M при условии ключа K, определяется как Y [m], где Y [i] = EK(M[i] ⊕ Y [i − 1]) для i = 1, … ,m и Y [0] = . Bellare, Kilian и Rogaway доказали безопасность CBC MAC для фиксированной длины сообщения в mn бит.

Поле с точками

[править | править код]

Мы вправе рассматривать точку a в любым из следующих способов: (1) как абстрактная точка в поле а; (2) как n-битную строку ; (3) как формальный полином с бинарными коэффициентами. Для того, чтобы добавить 2 точки в , рассмотрим битовую операцию ХOR над ними. Обозначим эту операцию с помощью a ⊕ b. Для того, чтобы перемножить две точки, зафиксируем некоторый полином f(u) с бинарными коэффициентами и степенью n. Для большей точности, выберем лексикографически первым полином среди таких же полиномов степени n имеющий минимальное число коэффициентов. Перечислим некоторые из указанных полиномов
для n = 64,
для n = 128, и
для n = 256.
Для того, чтобы перемножить две точки a и b, рассмотрим a и b как полиномы и , результат операции c(u), где коэффициенты в GF(2) прибавляются и умножаются, и берётся остаток отделения c(u) на f(u). Кроме того особенно просто умножить точку a на u. Например, если n = 128,

Также, просто разделить точку a на u, имея в виду, что а умножается на обратную величину u в поле: . Например,

Основная конструкция семейства ОМАС

[править | править код]

Семейство ОМАС определяется блочным шифром Е : KE × , n-битной константой Cst, универсальной хеш-функцией H :  × X → , и две уникальных константы , ∈ X, где X является конечной областью функции H. H, и должны удовлетворять следующему условию: (константы являются случайными. Запишем HL(•) для H(L, •).


1. Для любого y ∈ , число L ∈ таково, что HL() = y не более чем для некоторого достаточно малого .
2. Для любого y ∈ , число L ∈ таково, что HL() = y не более чем для некоторого достаточно малого .
3. Для любого y ∈ , число L ∈ таково, что HL() ⊕ HL() = y не более чем для некоторого достаточно малого .
4. Для любого y ∈ , число L ∈ таково, что HL() ⊕L = y не более чем для некоторого достаточно малого .
5. Для любого y ∈ , число L ∈ таково, что HL() ⊕L = y не более чем для некоторого достаточно малого .
6. Для любого y ∈ , число L ∈ таково, что HL() ⊕ HL(Cst2) ⊕ L = y не более чем для некоторого достаточно малого .

Далее приведём псевдокод, который описывает семейство OMAC.

Algorithm
L ← ;
Y [0] ← ;
Partition M into M[1] ... M[m]
for i ← 1 to m − 1 do
X[i] ← M[i] ⊕ Y [i − 1];
Y [i] ← );
X[m] ← ) ⊕ Y [m − 1];
if |M[m]| = n then X[m] ← X[m] ⊕ ;
else X[m] ← X[m] ⊕ ;
T ← );
return T;

Алгоритм семейства ОМАС проиллюстрирован на Рис.3, где (•) определяется в (1). Пространство ключей К семейства ОМАС: . Оно принимает значения ключа K ∈ и сообщение M ∈ {0, 1}*, и возвращает строку из области .

Предложенная спецификация

[править | править код]

В OMAC1 положим Cst = , (x) = L•x, = u и = , где «•» означает умножение в . , и равносильны. OMAC2 аналогичен OMAC1, исключая вместо . , и равносильны. Кроме того, , и могут быть эффективно вычислены с помощью одного сдвига и одной операции XOR от и , соответственно как показано в (2) и (3). Легко заметить, что условия в Sec. 3 выполняются для в OMAC1 и OMAC2. OMAC1 и OMAC2 проиллюстрированы на Рис.2 и описываются следующим образом:
1. Для OMAC1:

Algorithm
L ← ;
Y [0] ← ;
Partition M into M[1] ... M[m]
for i ← 1 to m − 1 do
X[i] ← M[i] ⊕ Y [i − 1];
if |M[m]| = n
then X[m] ← X[m] ⊕ ;
else Y[i] ← E_k(X[i]);
X[m] ← ) ⊕ Y [m − 1];
if |M[m]| = n then X[m] ← X[m] ⊕ ;
else X[m] ← X[m] ⊕ ;
T ← );
return T;


1. Для OMAC2:

Algorithm
L ← ;
Y [0] ← ;
Partition M into M[1] ... M[m]
for i ← 1 to m − 1 do
X[i] ← M[i] ⊕ Y [i − 1];
if |M[m]| = n
then X[m] ← X[m] ⊕ ;
else Y[i] ← E_k(X[i]);
X[m] ← ) ⊕ Y [m − 1];
if |M[m]| = n then X[m] ← X[m] ⊕ ;
else X[m] ← X[m] ⊕ ;
T ← );
return T;

Безопасность семейства OMAC

[править | править код]

Определение защищённости

[править | править код]

Пусть Perm(n) означает набор всех перестановок из , так же пусть P является случайной перестановкой, если Р — случайная выборка из Perm(n). Безопасность блочного шифра E может быть количественно определена как , максимальное преимущество, которое противник A может получить, когда пытается выделить (со случайно выбранным ключом K) из случайной перестановки P(•), когда допускается вычисление времени t и q запросов (который является либо либо ). Это преимущество определяется следующим образом.

Скажем, что блочный шифр E — защищён, если существенно мало. Аналогично, MAC-алгоритм — F :  × , где  — набор ключей, тогда запишем для F(K, •). Скажем, что противник взламывает, если A выдаёт , где A никогда не запрашивает M из . Тогда мы определяем преимущество как

где максимум берётся по всем противникам, кто «работает» не более времени t, производит не более q запросов, и каждый запрос не более μ бит. Будем говорить, MAC алгоритм защищён (безопасен), если величина пренебрежимо мала. Обозначим Rand(∗, n) набор всех функций из {0, 1}* в . Этот набор даётся вероятностной мерой в предположении, что случайный элемент R набора Rand(∗, n) связан или ассоциирован с каждой строкой M ∈ {0, 1}* случайной строки R(M)∈. Далее, мы определим преимущество как

где максимум берётся по всем противникам, кто «работает» время не больше t, делает не более q запросов, и каждый запрос не более μ бит. Тогда можно сказать, что MAC алгоритм псевдослучайный, если величина пренебрежимо мала (viprf устанавливается для Variablelength Input PseudoRandom Function — входные псевдо случайные функции переменной длины). Без ограничения общности, как предполагается, противники никогда не делают запросы вне области , а также никогда не повторяют запросы.

Далее приведём основные теоремы(их формулировки без доказательств).

Lemma 5.1 (Главная Лемма для семейства ОМАС). Предположим, что H, Cst1 и Cst2 удовлетворяют условиям Sec. 3 для некоторых пренебрежимо малых , а также пусть Cst — произвольная n-битная константа. Так же предположим, что случайная перестановка P ∈ Perm(n) используется в семействе OMAC(OMAC-family) как базовый блочный шифр. Пусть A — противник, который делает не более q запросов, и каждый запрос не более nm бит. (m — максимальное число блоков в каждом запросе.) Положим m ≤ 2n/4. Тогда

где . Следующие результаты присущи как OMAC1 так и OMAC2. Сначала, мы получили следующую лемму заменой є = 2−n в Lemma 5.1.

Lemma 5.2 (Главная Лемма для семейства ОМАС). Предположим, что случайная перестановка P ∈ Perm(n) используется в OMAC как базовый блочный шифр . Пусть A будет противником, который делает не более q запросов, и каждый запрос не более nm бит. Положим m ≤ 2n/4. Тогда

Далее покажем, что OMAC является псевдослучайным, если базовый блочный шифр Е защищён.

Замечание 5.1. Пусть E :  ×  является базовым блочным шифром, который используется в OMAC. Тогда , где t’ = t + O(mq) and q’ = mq + 1.
В конце покажем, что OMAC защищён как aMAC алгоритм из Замечание 5.1 в обычном смысле. Theorem 5.1. Пусть E : KE ×  является базовым блочным шифром, используемый в OMAC. Тогда
,
где t’ = t + O(mq) and q’ = mq + 1.

Большинство технологий построения аутентификационного кода сообщения представляются как хеш-функция от отправленного сообщения и определённого ключа, который знают отправитель и получатель, к ним относятся: RIPE-MAC, IBC-MAC, UMAC, VMAC. Принципиально CBC-MAC отличается от MAC с использованием потокового шифра (с помощью генератора псевдослучайных чисел поток информации разделяется на два потока, которые отправляются отдельно друг от друга), недостатком же является слабые изменения при небольшом изменении сообщения. Также рассмотрим Poly1305-AES, где в качестве ключа используется 128 битный ключ для AES, 106 битный дополнительный код, а также создаётся 128битная псевдослучайная генерация. В качестве недостатка CBC-MAC можно указать меньшую защищённость, а в качестве преимущества — меньшую требовательность к вычислительным ресурсам.

Примечания

[править | править код]

Литература

[править | править код]