У криптографії, код автентифікації повідомлення ланцюгуванням шифроблоків (CBC-MAC) — техніка побудови кода автентифікації повідомлення з блочного шифру. Повідомлення шифроване деяким алгоритмом блочного шифрування в режимі CBC для створення ланцюга блоків таких, що кожен блок залежить від правильного шифрування попередніх блоків. Ця взаємозалежність гарантує. що зміна в будь-якому біті відкритого тексту спричинить зміну в останньому зашифрованому блоці, яку не можна передбачити або запобігти без знання ключа блочного шифру.
Для обчислення CBC-MAC повідомлення користувач шифрує в режимі CBC з нульовим ініціалізаційним вектором. Наступне зображення є нарисом обчислення CBC-MAC повідомлення з блоків секретним ключем і PRP (блочним шифром):
Безпека з повідомленнями встановленої і змінної довжини
Якщо використовний блочний шифр безпечний (тобто є псевдовипадковою переставкою), тоді CBC-MAC безпечний для повідомлень встановленого розміру.[1] Однак, не є безпечним для повідомлень змінної довжини. Отже, кожен окремий ключ треба використовувати для повідомлень встановленої і відомої довжини. Нападник, який знає правильну пару повідомлення-тег (тобто CBC-MAC) і може утворити третє повідомлення чий CBC-MAC також буде . Це робиться простим XOR-енням першого блоку з і тоді приєднанням до ; тобто через утворення .
Цю проблему не можна розв'язати через додавання блоку з розміром повідомлення наприкінці. Існує три головних способи зміни CBC-MAC так, щоб убезпечити його для повідомлень змінної довжини[1]:33:
Додавання довжини повідомлення в перший блок (англ.length-prepend CBC MAC). Це може бути проблематичним якщо довжина повідомлення не відома, коли почалось опрацювання.
Використання різних ключів для повідомлень різних довжин (англ.input-length key separation).
ECBC-MAC, XCBC-MAC.
Також, для захисту цілісності повідомлень змінної довжини, можна розглянути інші режими, наприклад, CMAC (фактично різновид XCBC-MAC) або HMAC.
ECBC-MAC
XCBC-MAC
Переваги
Робить найменшу кількість викликів блочного шифру для MAC такого типу
Правильно обробляє повідомлення будь-якої довжини
Блочний шифр викликається лише з одним ключем:
Блочний шифр викликається лише в напрямку шифрування
«#E викликів до обробки» — позначає кількість викликів блочного шифру в попередньому опрацюванні. Ці виклики можна робити без повідомлення. Для XCBC+kst і TMAC+kst за блочний шифр припускаємо AES.