Рейтинг:1

Понимание алгебры безопасности GCM

флаг ru

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

Для простоты предположим, что только один блок зашифрованного текста $с$. Мы хотим, чтобы наш тег имел два свойства:

  1. $тег_к(с)$ должен быть универсальным единым хэшем $с$: то есть для всех $с$, если $к$ является равномерно случайным, $P[tag_k(c) = у]$ един для всех $у$.

  2. $тег_к(с)$ не должен раскрывать информацию о $к$, даже когда $с$ известен.

Свойство 1 легко выполняется умножением на ненулевое $к$ в $GF(2^n)$, так как в $GF(2^n)$, $f(x) = топор$ является уникальной перестановкой для всех $а\ne 0$, и $f$ поэтому является универсальным равномерным хешем.

Свойство 2, однако, нет быть удовлетворенным $tag_k(c) = кс$, так как мы можем вычислить $с{^-1}$ и решить $k = tag_k(c)c^{-1}$. Чтобы соответствовать свойству 2, мы вводим «секретный зашифрованный текст», $c_0$и определить $tag_k(c) = kc + c_0$ (дополнение является побитовым XOR в $GF(2^n)$). $c_0$ эффективно работает как одноразовый блокнот для шифрования «корневого» тега $кс$.

Что, если мы хотим аутентифицировать два блока зашифрованного текста? Мы могли бы повторить эту процедуру, убедившись, что используем новый $c_0$ каждый раз. На практике AES-GCM использует c_0 = AES_k (счетчик++).

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

$$tag_k(c_1, c_2,...c_n) = kc_0 + \sum k^nc_n.$$ (Для простоты я опускаю поле длины, а также аутентифицированный открытый текст). Это сохраняет оба свойства.

У нас может возникнуть соблазн упростить это до $\сумма kc_n$, но это не удается, так как мы можем заменить $c_a, c_b$ с $fake_a, подделка_b$ так долго как $fake_a + fake_b = c_a + c_b$. Например, мы можем инвертировать бит в любом шифрблоке, пока мы инвертируем соответствующий бит в другом блоке. (Этот тип атаки использовался против WEP, который использует CRC в качестве своего «MAC»).

  1. Верно ли вышесказанное?
  2. Как AES-GCM выбирает $к$?

Что еще более важно, как нам избежать следующих явных режимов отказа:

  1. Если $к = 0$, $тег(любой\_шифротекст) = 0$
  2. Делает $c_n = 0$ поставить проблему? Кажется, это не нарушает никаких свойств, но все же вызывает беспокойство. (Обратите внимание, что мы не можем просто добавить нулевые блоки, так как это изменит поле длины.)
  3. Мне кажется правильным будет многоблочный алгоритм если каждый $к$ был генератором $GF(2^n)$ или, по крайней мере, очень высокого порядка. Но если $к$ окажется низкого порядка, схема не сработает.

Например: Представьте $к$ имеет порядок 2. Тогда мы можем немного перевернуть $c_1$ пока мы переворачиваем один и тот же бит в $c_3$, поскольку $$\begin{выравнивание} k^2c_1 + k^4c_3 &= k^2(c_1 + c_3) \ &= k^2(c_1 + c_3 + d + d) \ &= k^2(c_1 + d) + k^4(c_3 + d)\end{align}.$$ Как GCM избежать этого режима отказа?

kelalaka avatar
флаг in
Очень длинный вопрос и сразу 5 вопросов! GCM очень хрупок, как в этом [Понимание влияния атак секционирования оракула на потоковые шифры] (https://crypto.stackexchange.com/q/88716/18298) и [Насколько плохо он использует один и тот же IV дважды с AES/ GCM?](https://crypto.stackexchange.com/a/68525/18298) и [Каковы ограничения на использование GCM с размером тега 96 и 128 бит?](https://crypto.stackexchange.com /q/27374/18298)
kelalaka avatar
флаг in
Также см. [документ Жу] (https://csrc.nist.gov/csrc/media/projects/block-cipher-techniques/documents/bcm/comments/800-38-series-drafts/gcm/joux_comments.pdf)
Рейтинг:2
флаг my

Я хотел бы понять алгебру безопасности GCM.

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

GCM использует арифметику в $GF(2^{128})$; это поле; важно то, что в поле любой ненулевой многочлен степени не выше $n$ имеет не более $n$ нули; то есть для любого уравнения:

$$a_n x^n + a_{n-1} x^{n-1} + ... + a_0 x^0 = 0$$

имеет не более $n$ решения для $х$ (при условии, что хотя бы один из $a_i$ значение не равно нулю).

Почему это критично, станет ясно позже.

Что GCM делает для аутентификации, так это то, что он берет зашифрованные данные (и AAD) и переводит их в полином; затем он преобразует одноразовый номер в постоянное значение полинома, а затем оценивает этот полином как секретное значение. $к$, и результатом этой оценки является тег; это:

$$tag := a_n k^n + a_{n-1} k^{k-1} + ... + a_1 k^1 + \text{хэш}(nonce)$$

Теперь предположим, что у нас есть другая пара сообщение/тег для одного и того же одноразового номера; это сообщение/тег пройдет проверку целостности GCM, если:

$$tag' := a'_n k^n + a'_{n-1} k^{k-1} + ... + a'_1 k^1 + \text{хэш}(nonce)$$

Что мы можем сделать, так это вычесть два полинома (один, соответствующий хорошему зашифрованному тексту, сгенерированному действительным шифровальщиком, и один, соответствующий догадке злоумышленника); получаем тогда [1]:

$$0 = (a_n-a'_n)k^n + (a_{n-1} - a'_{n-1})k^{n-1} + ... + (a_1 - a'_1) k^1 + (тег - тег')k^0$$

Это уравнение выполняется только в том случае, если вторая пара зашифрованный текст/метка действительна.

Теперь вернемся к нашему исходному наблюдению: это многочлен степени не выше $n$ и так есть максимум $n$ различные значения $к$ для которых это равенство верно. Мы также знаем, что по крайней мере один коэффициент многочлена отличен от нуля (многочлен со всеми нулями верен, если «поддельный» зашифрованный текст точно такой же, как действительный, что не считается подделкой). И если $к$ выбирается непредсказуемо, то есть $2^{128}$ возможные значения, и, таким образом, вероятность того, что это просто одно из этих $n$ значения не более $n2^{-128}$, который действительно крошечный.

Теперь, чтобы превратить этот аргумент в фактическое доказательство (что и было сделано), нам нужно предположить, что а) $к$ выбирается равномерно случайным образом, и б) $\text{хэш}(одноразовый номер)$ также выбирается случайным образом (потому что в противном случае злоумышленник может вывести некоторые вещи о значении полинома, что было бы плохо); оказывается, мы можем связать и то, и другое с криптографической силой AES.

Теперь, чтобы ответить на ваши вопросы:

  1. Верно ли вышесказанное?

Закрывать; вы ошиблись в одной детали; используя вашу нотацию, мы получаем вычисление тега как $tag_k(c_1, c_2,...c_n) = c_0 + \сумма k^nc_n$ (Обратите внимание, что $c_0$ не умножается на $к$):

  1. Как AES-GCM выбирает $к$?

Он шифрует нулевой блок с помощью AES с помощью ключа GCM.

  1. Если $к=0$, $тег(\текст{любой_шифртекст})=0$

Нет, $c_0$ не умножается на $к$, поэтому в этом случае имеем:

$$тег(\текст{любой_шифртекст}) = c_0$$

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

Очевидный вопрос: «Разве это не все еще плохо?». Что ж, при 128-битном теге у злоумышленника всегда есть вероятность $2^{-128}$ просто слепого угадывания действительной пары зашифрованный текст/тег - $к=0$ имеет ту же вероятность появления и, следовательно, не увеличивает вероятность подделки.

  1. Делает $c_n=0$ поставить проблему?

Нет; если вы пройдёте вышеописанную логику, $c_n=0$ не является частным случаем.

  1. Но если $к$ окажется низкого порядка, схема не сработает.

Этот конкретный сценарий отказа по-прежнему находится в пределах вероятности $n2^{-128}$ как показано выше; если вы (скажете) проверите, если $к$ имели небольшой заказ и отклонили эти значения, вы на самом деле не уменьшите вероятность подделки.


[1]: В четном характеристическом поле, таком как $GF(2^{128})$, сложение и вычитание — это одна и та же операция, поэтому мы обычно записываем обе как $+$; Я сохранил это как $-$ сделать несколько понятнее для тех, кто не привык к таким условностям.

флаг ru
Блестящий ответ! Если я правильно понимаю, вы говорите: да, бывают случаи, когда $tag_{forgery}$ имеет очень простое отношение к $tag_{real}$: когда $k = 0$, они идентичны, а когда $ k$ имеет порядок 2, они следуют показанной мной схеме переворота битов. Но что с того? Это не ослабляет безопасность: пока мы не пропускаем _ничего_ о $k$, факт остается фактом: для каждой подделки существует не более $n$ тегов (из $2^{128}$), которые ей соответствуют; для некоторых $k$ эти измененные теги легко вычисляются из $tag_{real}$, а для некоторых $k$ — нет. Это верно?
poncho avatar
флаг my
@SRobertJames: на самом деле с этим полем нет $k$ с порядком 2; с другой стороны, есть ровно два значения $k$, которые имеют порядок 3, поэтому ваша точка зрения по-прежнему верна.
флаг ru
Вы показали, что для заданных $c'$ и $k$ существует не более $n$ $tag'$, удостоверяющих подлинность $c'$. Откуда мы знаем, что эти $tag'$s являются случайными функциями от $k$? Возможно, некоторые $теги работают для очень большого количества $k$, а некоторые работают для нескольких или вообще без $k$. Для линейной функции $ax + b$ это не проблема, потому что линейная функция в конечном поле является перестановкой; но для полиномиальной функции это неверно. Например. $x^2 ​​+ x$ отправляет половину $GF(2^2)$ в $0$.
poncho avatar
флаг my
@SRobertJames: больше соответствует тому, что вы действительно просите; на самом деле довольно легко взять набор из $n$ значений для $k$ и создать подделку, которая совпала бы с ним, если бы какое-либо из этих значений $k$ было правильным. Вычисление немного больше, чем «переворачивание двух битов», но все же вполне выполнимо.
poncho avatar
флаг my
@SRobertJames: для «равномерно ли распределено сопоставление между сообщениями и тегами», ну, помните $hash(\text{nonce})$, который мы включаем в вычисление тега? Пока это равномерно распределено и не зависит от остальных вычислений тегов (а поскольку оно основано на AES, это кажется правдоподобным), то сами теги распределяются равномерно.

Ответить или комментировать

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