CBC-MAC

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

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

Отримуємо PRF F C B C : K × X L X . {\displaystyle F_{CBC}:K\times X^{\leq L}\to X.}

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

Якщо використовний блочний шифр безпечний (тобто є псевдовипадковою переставкою), тоді CBC-MAC безпечний для повідомлень встановленого розміру.[1] Однак, не є безпечним для повідомлень змінної довжини. Отже, кожен окремий ключ треба використовувати для повідомлень встановленої і відомої довжини. Нападник, який знає правильну пару повідомлення-тег (тобто CBC-MAC) ( m , {\displaystyle (m,} t ) {\displaystyle t)} і ( m , {\displaystyle (m',} t ) {\displaystyle t')} може утворити третє повідомлення m {\displaystyle m''} чий CBC-MAC також буде t {\displaystyle t'} . Це робиться простим XOR-енням першого блоку m {\displaystyle m'} з t {\displaystyle t} і тоді приєднанням m {\displaystyle m'} до m {\displaystyle m} ; тобто через утворення m = m [ ( m 1 t ) m 2 m x ] {\displaystyle 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

XCBC-MAC

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

Переваги

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

Вади

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

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

Ім'я Домен #E викликів #E ключів Довжина ключа #E викликів до обробки
CBC-MAC ( { 0 , 1 } n ) m {\displaystyle (\{0,1\}^{n})^{m}} | M | / n {\displaystyle |M|/n} 1 {\displaystyle 1} k {\displaystyle k} 0
EMAC { 0 , 1 } {\displaystyle \{0,1\}^{*}} 1 + d ( | M | + 1 ) / n e {\displaystyle 1+{\mathcal {d}}(|M|+1)/n{\mathcal {e}}} 2 {\displaystyle 2} 2 k {\displaystyle 2k} 0
RMAC { 0 , 1 } {\displaystyle \{0,1\}^{*}} 1 + d ( | M | + 1 ) / n e {\displaystyle 1+{\mathcal {d}}(|M|+1)/n{\mathcal {e}}} 1 + # M {\displaystyle 1+\#M} 2 k {\displaystyle 2k} 0
XCBC { 0 , 1 } {\displaystyle \{0,1\}^{*}} 1 + d | M | / n e {\displaystyle 1+{\mathcal {d}}|M|/n{\mathcal {e}}} 1 {\displaystyle 1} k + 2 n {\displaystyle k+2n} 0
TMAC { 0 , 1 } {\displaystyle \{0,1\}^{*}} 1 + d | M | / n e {\displaystyle 1+{\mathcal {d}}|M|/n{\mathcal {e}}} 1 {\displaystyle 1} k + n {\displaystyle k+n} 0
XCBC+kst { 0 , 1 } {\displaystyle \{0,1\}^{*}} 1 + d | M | / n e {\displaystyle 1+{\mathcal {d}}|M|/n{\mathcal {e}}} 2 {\displaystyle 2} k {\displaystyle k} 3 або 4
TMAC+kst { 0 , 1 } {\displaystyle \{0,1\}^{*}} 1 + d | M | / n e {\displaystyle 1+{\mathcal {d}}|M|/n{\mathcal {e}}} 2 {\displaystyle 2} k {\displaystyle k} 2 або 3
OMAC { 0 , 1 } {\displaystyle \{0,1\}^{*}} 1 + d | M | / n e {\displaystyle 1+{\mathcal {d}}|M|/n{\mathcal {e}}} 1 {\displaystyle 1} k {\displaystyle 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. [Архівовано 5 лютий 2012 у Wayback Machine.] JCSS 61(3):362-399, 2000.
  2. Kaoru Kurosawa, Tetsu Iwata. Two-key CBC MAC [Архівовано 9 травня 2012 у Wayback Machine.] стор. 3, 2002
  3. Fast Software Encryption: 10th International Workshop, FSE 2003, Lund, Sweden, February 24-26, 2003 : Revised Papers, Том 10, стор. 143

Посилання

  • XCBC: Версія CBC MAC для опрацювання повідомлень довільної довжини [Архівовано 4 червня 2011 у Wayback Machine.] на сайті NIST. (англ.)
  • п
  • о
  • р
Загальні функції
  • MD5 (скомпрометована)
  • SHA-1 (скомпрометована)
  • SHA-2
  • SHA-3
  • BLAKE2
Фіналісти SHA-3
  • BLAKE
  • Grøstl[en]
  • JH[en]
  • Skein
  • Keccak (переможець)
Інші функції
  • BLAKE3[en]
  • CubeHash[en]
  • ECOH[en]
  • FSB[en]
  • Fugue[en]
  • ГОСТ 34.311-95[ru]
  • HAS-160[en]
  • HAVAL
  • Купина
  • LSH[en]
  • Lane[en]
  • MASH-1[en]
  • MASH-2[en]
  • MD2
  • MD4
  • MD6
  • MDC-2[en]
  • N-Hash
  • RIPEMD[en] (128 160 256[ru])
  • RadioGatún[en]
  • SIMD[en]
  • SM3[en]
  • SWIFFT
  • Shabal[en]
  • Snefru[en]
  • Streebog[en]
  • Tiger
  • VSH[en]
  • Whirlpool
Гешування паролів/
розтягування ключів[en]
Формування ключа
  • HKDF[en]
  • KDF1/KDF2
Коди автентифікації
повідомлення
  • CBC-MAC
  • DAA[en]
  • GMAC
  • HMAC
  • NMAC[en]
  • OMAC[en]/CMAC[en]
  • PMAC[en]
  • Poly1305[en]
  • SipHash[en]
  • UMAC[en]
  • VMAC[en]
Режими аутентифікованого
шифрування
  • CCM[en]
  • ChaCha20-Poly1305[en]
  • CWC[en]
  • EAX[en]
  • GCM
  • IAPM[en]
  • OCB[en]
Контрольні сумми та
некриптографічні[en]
функції
Атаки (огляд[en])
Конструкції
Стандартизація
  • CAESAR Competition[en]
  • CRYPTREC
  • NESSIE
  • NIST SHA-3
  • Password Hashing Competition[en]
Використання