CBC-MAC

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

У криптографії, код автентифікації повідомлення ланцюгуванням шифроблоків (CBC-MAC) — техніка побудови кода автентифікації повідомлення з блочного шифру. Повідомлення шифроване деяким алгоритмом блочного шифрування в режимі CBC для створення ланцюга блоків таких, що кожен блок залежить від правильного шифрування попередніх блоків. Ця взаємозалежність гарантує. що зміна в будь-якому біті відкритого тексту спричинить зміну в останньому зашифрованому блоці, яку не можна передбачити або запобігти без знання ключа блочного шифру.

Для обчислення CBC-MAC повідомлення m користувач шифрує m в режимі CBC з нульовим ініціалізаційним вектором. Наступне зображення є нарисом обчислення CBC-MAC повідомлення з блоків m_1\|m_2\|\cdots\|m_x, секретним ключем k і PRP F:K\times X \to X (блочним шифром):

Діаграма CBC-MAC.png

Отримуємо PRF F_{CBC}:K\times X^{\le L} \to X.

Безпека з повідомленнями встановленої і змінної довжини[ред.ред. код]

Якщо використовний блочний шифр безпечний (тобто є псевдовипадковою переставкою), тоді CBC-MAC безпечний для повідомлень встановленого розміру.[1] Однак, не є безпечним для повідомлень змінної довжини. Отже, кожен окремий ключ треба використовувати для повідомлень встановленої і відомої довжини. Нападник, який знає правильну пару повідомлення-тег (тобто CBC-MAC) (m, t) і (m', t') може утворити третє повідомлення m'' чий CBC-MAC також буде t'. Це робиться простим XOR-енням першого блоку m' з t і тоді приєднанням m' до m; тобто через утворення m'' = m \| [(m_1' \oplus t) \| m_2' \| \dots \| m_x'].

Цю проблему не можна розв'язати через додавання блоку з розміром повідомлення наприкінці. Існує три головних способи зміни CBC-MAC так, щоб убезпечити його для повідомлень змінної довжини[1]:33:

  • Додавання довжини повідомлення в перший блок (англ. length-prepend CBC MAC). Це може бути проблематичним якщо довжина повідомлення не відома, коли почалось опрацювання.
  • Використання різних ключів для повідомлень різних довжин (англ. input-length key separation).
  • ECBC-MAC, XCBC-MAC.

Також, для захисту цілісності повідомлень змінної довжини, можна розглянути інші режими, наприклад, CMAC (фактично різновид XCBC-MAC) або HMAC.

ECBC-MAC[ред.ред. код]

Діаграма ECBC-MAC.png

XCBC-MAC[ред.ред. код]

Діаграма XCBC-MAC.png

pad(b) =  \begin{cases} b, & \mbox{if }|b| = n \\ b 10...0, & \mbox{if }|b| < n  \end{cases}

Переваги[ред.ред. код]

  • Робить найменшу кількість викликів блочного шифру для MAC такого типу
  • Правильно обробляє повідомлення будь-якої довжини
  • Блочний шифр викликається лише з одним ключем: k_1
  • Блочний шифр викликається лише в напрямку шифрування
  • Дозволяє обробку по ходу
  • Легкий у втіленні, знайомий користувачам
  • Вільний
  • XCBC — це PRF (не тільки MAC)
    – Безпечна PRF завжди є MAC
    – Не використовується нонс/IV
    – Тегі коротші
    – Тегі можна обрізати
    – Інші застосування
    • Розділення ключа
    • PRG
    • Протоколи квитування (підтвердження) зв'язку
  • Доведеннєво безпечний (припускаючи, що E є PRP)

Вади[ред.ред. код]

  • Обмежені можливості розпаралелювання (притаманно CBC-MAC)
  • Довжина ключа k + 2n

Порівняння різновидів CBC-MAC [2][3][ред.ред. код]

Ім'я Домен #E викликів #E ключів Довжина ключа #E викликів до обробки
CBC-MAC (\{0,1\}^n)^m |M|/n 1 k 0
EMAC \{0,1\}^* 1 + \mathcal {d} (|M| + 1)/n  \mathcal {e} 2 2k 0
RMAC \{0,1\}^* 1 + \mathcal {d} (|M| + 1)/n  \mathcal {e} 1 + \#M 2k 0
XCBC \{0,1\}^* 1 + \mathcal {d} |M|/n  \mathcal {e} 1 k+2n 0
TMAC \{0,1\}^* 1 + \mathcal {d} |M|/n  \mathcal {e} 1 k+n 0
XCBC+kst \{0,1\}^* 1 + \mathcal {d} |M|/n  \mathcal {e} 2 k 3 або 4
TMAC+kst \{0,1\}^* 1 + \mathcal {d} |M|/n  \mathcal {e} 2 k 2 або 3
OMAC \{0,1\}^* 1 + \mathcal {d} |M|/n  \mathcal {e} 1 k 1

«#E викликів до обробки» — позначає кількість викликів блочного шифру в попередньому опрацюванні. Ці виклики можна робити без повідомлення. Для XCBC+kst і TMAC+kst за блочний шифр припускаємо AES.

kst — техніка розділення ключів (англ. key separation technique).

Примітки[ред.ред. код]

  1. а б M. Bellare, J. Kilian and P. Rogaway. The security of the cipher block chaining message authentication code. JCSS 61(3):362-399, 2000.
  2. Kaoru Kurosawa, Tetsu Iwata. Two-key CBC MAC стор. 3, 2002
  3. Fast Software Encryption: 10th International Workshop, FSE 2003, Lund, Sweden, February 24-26, 2003 : Revised Papers, Том 10, стор. 143

Посилання[ред.ред. код]