суббота, 31 октября 2015 г.

Weak IV in CBC mode

Что может произойти, если использовать предсказуемый IV.

Предположим, имеется алгоритм блочного шифрования E зависящий от ключа k с размером блока b. Также, имеется сообщение m, которое является тайной и используется, предположим, для аутентификации.
Общая схема работы протокола выглядит следующим образом:
  1. Сервер генерирует случайное IV и ключ k; ожидает данные от клиента.
  2. Клиент генерирует произвольную последовательность r и отправляет
    серверу для генерации токена.
  3. Сервер, получив данные от клиента, конкатенирует их с секретом, дополняет
    до длины кратной размеру блока (или добавляет новый блок, если длина
    получившейся последовательности уже кратна размеру блока) и шифрует
    при помощи E, k, IV в режиме CBC
  4. Сервер выбирает новый IV равным последнему блоку зашифрованного текста
  5. Сервер возвращает клиенту последовательность [IV, N-блоков шифротекста]
  6. Сервер ожидает получения новых данных и переходит к пункту 3
Задача клиента - узнать секретное сообщение. Для большей конкретики, предположим, что в роли алгоритма шифрования выступает AES128. Также, для простоты конструкции, предположим, что длина секрета нам известна (задача вычисления длины секрета в данном протоколе тривиальна). Рассмотрим на практике возможное решение этой задачи.

Код серверной части протокола.

Код, который решает задачу нахождения секрета

Вся суть приведенного выше сводится к:
E(IV ^ P_i) = E(IV ^ C_0 ^ IV ^ (r || i)) = E(C_0 ^ P_1)

Комментариев нет:

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