MMH-Badger MAC

Badger — это код аутентификации сообщений (MAC), основанный на идее универсального хеширования , разработанный [ когда? ] Боэсгаардом, Скавениусом, Педерсеном, Кристенсеном и Зеннером. [1] Он построен путем усиления ∆-универсального хеш-семейства MMH с использованием ϵ-почти сильно универсального (ASU) семейства хеш-функций после применения ENH (см. ниже), где значение ϵ равно . [2] Поскольку Badger — это функция MAC, основанная на подходе универсальной хеш- функции, условия, необходимые для безопасности Badger, такие же, как и для других универсальных хеш-функций, таких как UMAC . 1 / ( 2 32 5 ) {\displaystyle 1/(2^{32}-5)}

Введение

MAC Badger обрабатывает сообщение длиной до бит и возвращает тег аутентификации длиной бит, где . В соответствии с требованиями безопасности пользователь может выбрать значение , то есть количество параллельных хэш-деревьев в Badger. Можно выбрать большие значения u , но эти значения не повлияют на безопасность MAC. Алгоритм использует 128-битный ключ, а ограниченная длина сообщения, обрабатываемого с помощью этого ключа, составляет . [3] 2 64 1 {\displaystyle 2^{64}-1} ты 32 {\displaystyle u\cdot 32} 1 ты 5 {\displaystyle 1\leq u\leq 5} ты {\displaystyle u} 2 64 {\displaystyle 2^{64}}

Настройка ключа должна быть выполнена только один раз для каждого ключа, чтобы запустить алгоритм Badger с данным ключом, поскольку полученное внутреннее состояние MAC можно сохранить для использования с любым другим сообщением, которое будет обработано позже.

ЭНХ

Семейства хэшей можно объединять для получения новых семейств хэшей. Для семейств ϵ-AU, ϵ-A∆U и ϵ-ASU последние содержатся в первых. Например, семейство A∆U также является семейством AU, ASU также является семейством A∆U и т. д. С другой стороны, более сильное семейство можно свести к более слабому, если только можно достичь прироста производительности. Метод сведения ∆-универсальной хэш-функции к универсальным хэш- функциям будет описан далее.

Теорема 2 [1]

Пусть будет хеш-семейством ϵ-AΔU из множества A в множество B. Рассмотрим сообщение . Тогда семейство H, состоящее из функций, есть ϵ-AU. ЧАС {\displaystyle H^{\треугольник}} ( м , м б ) А × Б {\displaystyle (m,m_{b})\in A\times B} час ( м , м б ) = ЧАС ( м ) + м б {\displaystyle h(м,м_{б})=H^{\треугольник}(м)+м_{б}}

Если , то вероятность того, что не больше ϵ, так как является семейством ϵ-A∆U. Если же , то вероятность тривиально равна 0. Доказательство теоремы 2 было описано в [1] м м {\displaystyle m\neq m'} час ( м , м б ) = час ( м , м б ) {\displaystyle h(м,м_{б})=h(м',м'_{б})} ЧАС {\displaystyle H^{\треугольник}} м = м {\displaystyle м=м'} м б м б {\displaystyle m_{b}\neq m_{b}'}

Семейство ENH построено на основе универсального семейства хэшей NH (которое также используется в UMAC ):

Н ЧАС К ( М ) = я = 1 2 ( к ( 2 я 1 ) + ж м ( 2 я 1 ) ) × ( к 2 я + ж м 2 я ) мод 2 2 ж {\displaystyle NH_{K}(M)=\sum _{i=1}^{\frac {\ell}{2}}(k_{(2i-1)}+_{w}m_{(2i-1)})\times (k_{2i}+_{w}m_{2i})\mod 2^{2w}}

Где ' ' означает 'сложение по модулю ', а . Это -A∆U хэш-семейство. + ж {\displaystyle +_{w}} 2 ж {\displaystyle 2^{w}} м я , к я { 0 , , 2 ж 1 } {\displaystyle m_{i},k_{i}\in {\big \{}0,\ldots ,2^{w}-1{\big \}}} 2 ж {\displaystyle 2^{-w}}

Лемма 1 [1]

Следующая версия NH — -A∆U: 2 ж {\displaystyle 2^{-w}}

Н ЧАС К ( М ) = ( к 1 + ж м 1 ) × ( к 2 + ж м 2 ) мод 2 2 ж {\displaystyle NH_{K}(M)=(k_{1}+_{w}m_{1})\times (k_{2}+_{w}m_{2})\mod 2^{2w}}

Выбрав w=32 и применив теорему 1, можно получить семейство функций -AU ENH, которое будет основным строительным блоком MAC барсука: 2 32 {\displaystyle 2^{-32}}

Э Н ЧАС к 1 , к 2 ( м 1 , м 2 , м 3 , м 4 ) = ( м 1 + 32 к 1 ) ( м 2 + 32 к 2 ) + 64 м 3 + 64 2 32 м 4 {\displaystyle ENH_{k_{1},k_{2}}(m_{1},m_{2},m_{3},m_{4})=(m_{1}+_{32}k_{1})(m_{2}+_{32}k_{2})+_{64}m_{3}+_{64}2^{32}m_{4}}

где все аргументы имеют длину 32 бита, а выходные данные имеют длину 64 бита.

Строительство

Badger создан с использованием семейства хэшей строгой универсальности и может быть описан как

ЧАС = ЧАС × Ф , {\displaystyle {\mathcal {H}}=H^{*}\times F,} [1]

где универсальное семейство функций -AU H* используется для хеширования сообщений любого размера в фиксированный размер, а семейство функций -ASU F используется для гарантии строгой универсальности общей конструкции. NH и ENH используются для построения H* . Максимальный размер входных данных семейства функций H* равен , а размер выходных данных составляет 128 бит, разделенных на 64 бита для сообщения и хеша. Вероятность коллизии для функции H* варьируется от до . Для построения строго универсального семейства функций F , ∆-универсальное хеш-семейство MMH* преобразуется в строго универсальное хеш-семейство путем добавления еще одного ключа. ϵ ЧАС {\displaystyle \epsilon _{H^{*}}} ϵ Ф {\displaystyle \epsilon _{F}} 2 64 1 {\displaystyle 2^{64}-1} 2 32 {\displaystyle 2^{-32}} 2 26.14 {\displaystyle 2^{-26.14}}

Два шага на Барсука

Для каждого сообщения необходимо выполнить два шага: фазу обработки и фазу завершения. [3]

Фаза обработки

На этом этапе данные хэшируются в 64-битную строку. Основная функция h  : используется на этом этапе обработки, которая хэширует 128-битную строку в 64-битную строку следующим образом: { 0 , 1 } 64 × { 0 , 1 } 128 { 0 , 1 } 64 {\displaystyle \left\{0,1\right\}^{64}\times \left\{0,1\right\}^{128}\to \left\{0,1\right\}^{64}} m 2 m 1 {\displaystyle m_{2}\parallel m_{1}} h ( k , m 2 , m 1 ) {\displaystyle h(k,m_{2},m_{1})}

h ( k , m 2 , m 1 ) = ( L ( m 1 ) + 32 L ( k ) ) ( U ( m 1 ) + 32 U ( k ) ) + 64 m 2 {\displaystyle h(k,m_{2},m_{1})=(L(m_{1})+_{32}L(k))\cdot (U(m_{1})+_{32}U(k))+_{64}m_{2}\,}

для любого n означает сложение по модулю . Для -битовой строки x , означает n младших бит, а ⁠ означает n старших бит. + n {\displaystyle +_{n}} 2 n {\displaystyle 2^{n}} 2 n {\displaystyle 2n} L ( x ) {\displaystyle L(x)} U ( x ) {\displaystyle U(x)}

Сообщение может быть обработано с помощью этой функции. Обозначим level_key[j][i]через . k j i {\displaystyle k_{j}^{i}}

Псевдокод этапа обработки выглядит следующим образом.

Л = | М | если  Л = 0      M  1   =  =  M  u   = 0   {\displaystyle M^{1}=\cdots =M^{u}=0}  Перейти к завершениюr = L mod 64, если  r ≠ 0: для i = 1 для u : для j = 1 для v ′:    M =  0  64  r    M   {\displaystyle M=0^{64-r}\parallel M}        M  i   = M   {\displaystyle M^{i}=M}       v   = max { 1 ,   log  2    L   6 }   {\displaystyle v'=\max\{1,\lceil \log _{2}L\rceil -6\}}    разделить ⁠ ⁠     M  i     {\displaystyle M^{i}}  на 64-битные блоки, ⁠ ⁠      M  i   =  m  t   i       m  1   i     {\displaystyle M^{i}=m_{t}^{i}\parallel \cdots \parallel m_{1}^{i}} если  t  четное : ⁠ ⁠      M  i   = h (  k  j   i   ,  m  t   i   ,  m  t  1   i   )    h (  k  j   i   ,  m  2   i   ,  m  1   i   )   {\displaystyle M^{i}=h(k_{j}^{i},m_{t}^{i},m_{t-1}^{i})\parallel \cdots \parallel h(k_{j}^{i},m_{2}^{i},m_{1}^{i})} иначе  ⁠ ⁠     M  i   =  m  t   i    h (  k  j   i   ,  m  t  1   i   ,  m  t  2   i   )    h (  k  j   i   ,  m  2   i   ,  m  1   i   )   {\displaystyle M^{i}=m_{t}^{i}\parallel h(k_{j}^{i},m_{t-1}^{i},m_{t-2}^{i})\parallel \cdots \parallel h(k_{j}^{i},m_{2}^{i},m_{1}^{i})} 

Завершение фазы

На этом этапе 64-строчный результат обработки преобразуется в желаемый тег MAC. Этот этап финализации использует потоковый шифр Rabbit и использует как настройку ключа, так и настройку IV, принимая ключ финализации как .final_key[j][i] k j i {\displaystyle k_{j}^{i}}

Псевдокод этапа завершения

RabbitKeySetup(K)RabbitIVSetup(N)для  i = 1 до  u : разделить  на 27-битные блоки, S = S ⨁ RabbitNextbit( u ∙32) вернуть S     Q  i   =  0  7    L   M  i     {\displaystyle Q^{i}=0^{7}\parallel L\parallel M^{i}}      Q  i     {\displaystyle Q^{i}}      Q  i   =  q  5   i       q  1   i     {\displaystyle Q^{i}=q_{5}^{i}\parallel \cdots \parallel q_{1}^{i}}       S  i   = (    j = 1   5   (  q  j   i    K  j   i   ) ) +  K  6   i    mod  p     {\displaystyle S^{i}=(\sum _{j=1}^{5}(q_{j}^{i}K_{j}^{i}))+K_{6}^{i}{\bmod {p}}}     S =  S  u       S  1     {\displaystyle S=S^{u}\parallel \cdots \parallel S^{1}} 

Обозначение

Из приведенного выше псевдокода k обозначает ключ в Rabbit Key Setup(K), который инициализирует Rabbit с 128-битным ключом k . M обозначает сообщение, которое должно быть хэшировано, а | M | обозначает длину сообщения в битах. ⁠ ⁠ q i {\displaystyle q_{i}} обозначает сообщение M , которое разделено на i блоков. Для данной ⁠ ⁠ 2 n {\displaystyle 2n} -битной строки x L ( x ) и U ( x ) соответственно обозначают ее n младших бит и n старших бит.

Производительность

Боесгард, Кристенсен и Зеннер сообщают о производительности Badger, измеренной на процессоре Pentium III 1,0 ГГц и на процессоре Pentium 4 1,7 ГГц . [1] Версии с оптимизированной скоростью были запрограммированы на языке ассемблера, встроенном в C, и скомпилированы с использованием компилятора Intel C++ 7.1.

В следующей таблице представлены свойства Badger для различных ограниченных длин сообщений. «Memory req.» обозначает объем памяти, необходимый для хранения внутреннего состояния, включая ключевой материал и внутреннее состояние потокового шифра Rabbit . «Setup» обозначает настройку ключа, а «Fin.» обозначает завершение с помощью IV-setup.

Макс. размер сообщенияПодделка связанаРегистр памяти.Установка Pentium IIIФин. Pentium IIIУстановка Pentium IIIФин. Pentium III
2 11 {\displaystyle 2^{11}} байты (например, IPsec) 2 57.7 {\displaystyle 2^{-57.7}} 400 байт1133 цикла409 циклов1774 цикла776 циклов
2 15 {\displaystyle 2^{15}} байты (например, TLS) 2 56.6 {\displaystyle 2^{-56.6}} 528 байт1370 циклов421 цикл2100 циклов778 циклов
2 32 {\displaystyle 2^{32}} байты 2 54.2 {\displaystyle 2^{-54.2}} 1072 байта2376 циклов421 цикл3488 циклов778 циклов
2 61 1 {\displaystyle 2^{61}-1} байты 2 52.2 {\displaystyle 2^{-52.2}} 2000 байт4093 цикла433 цикла5854 циклов800 циклов

MMH (многолинейное модульное хеширование)

Название MMH расшифровывается как Multilinear-Modular-Hashing (Многолинейное-модульное-хеширование). Например, приложения в мультимедиа проверяют целостность онлайн-мультимедийного заголовка. Производительность MMH основана на улучшенной поддержке целочисленных скалярных произведений в современных микропроцессорах.

MMH использует скалярные произведения одинарной точности в качестве своей самой базовой операции. Он состоит из (модифицированного) внутреннего произведения между сообщением и ключом по модулю простого числа . Конструкция MMH работает в конечном поле для некоторого простого целого числа . p {\displaystyle p} F p {\displaystyle F_{p}} p {\displaystyle p}

ММХ*

MMH* включает в себя построение семейства хэш-функций, состоящих из полилинейных функций на для некоторого положительного целого числа k . Семейство MMH* функций от до определяется следующим образом. F p k {\displaystyle F_{p}^{k}} F p k {\displaystyle F_{p}^{k}} F p {\displaystyle F_{p}}

M M H = { g x : F p k F p | x F p k } {\displaystyle \mathrm {MMH} ^{*}=\{g_{x}:F_{p}^{k}\rightarrow F_{p}|x\in F_{p}^{k}\}}

где x, m — векторы, а функции определяются следующим образом. g x {\displaystyle g_{x}}

g x ( m ) = m x mod p = i = 1 n m i x i mod p {\displaystyle g_{x}(m)=mx{\bmod {p}}=\sum _{i=1}^{n}m_{i}\,x_{i}{\bmod {p}}}

В случае MAC m — это сообщение, а x — это ключ, где и . m = ( m 1 , , m k ) {\displaystyle m=(m_{1},\ldots ,m_{k})} x = ( x 1 , , x k ) , x i , m i F p {\displaystyle x=(x_{1},\ldots ,x_{k}),x_{i},m_{i}\in \!F_{p}}

MMH* должен удовлетворять требованиям безопасности MAC, позволяя, скажем, Ане и Бобу общаться аутентифицированным способом. У них есть секретный ключ x . Допустим, Чарльз слушает разговор Аны и Боба и хочет изменить сообщение на свое собственное сообщение Бобу, которое должно пройти как сообщение от Аны. Таким образом, его сообщение m' и сообщение Аны m будут отличаться по крайней мере одним битом (например, ). m 1 m 1 {\displaystyle m_{1}\neq m'_{1}}

Предположим, что Чарльз знает, что функция имеет вид и он знает сообщение Аны m, но не знает ключ x, тогда вероятность того, что Чарльз сможет изменить сообщение или отправить свое собственное сообщение, можно объяснить с помощью следующей теоремы. g x ( m ) {\displaystyle g_{x}(m)}

Теорема 1 [4] : ​​Семейство MMH* является ∆-универсальным.

Доказательство:

Возьмем , и пусть будут два разных сообщения. Предположим без потери общности, что . Тогда для любого выбора , существует a F p {\displaystyle a\in F_{p}} m , m {\displaystyle m,m'} m 1 m 1 {\displaystyle m_{1}\neq m'_{1}} x 2 , x 3 , , x s {\displaystyle x_{2},x_{3},\ldots ,x_{s}}

Pr x 1 [ g x ( m ) g x ( m ) a mod p ] = Pr x 1 [ ( m 1 x 1 + m 2 x 2 + + m k x k ) ( m 1 x 1 + m 2 x 2 + + m k x k ) a mod p ] = Pr x 1 [ ( m 1 m 1 ) x 1 + ( m 2 m 2 ) x 2 + + ( m k m k ) x k ] a mod p ] = Pr x 1 [ ( m 1 m 1 ) x 1 + k = 2 s ( m k m k ) x k a mod p ] = Pr x 1 [ ( m 1 m 1 ) x 1 a k = 2 s ( m k m k ) x k mod p ] = 1 p {\displaystyle {\begin{aligned}{\Pr }_{x_{1}}[g_{x}(m)-g_{x}(m')\equiv a\mod p]&={\Pr }_{x_{1}}[(m_{1}x_{1}+m_{2}x_{2}+\cdots +m_{k}x_{k})-(m'_{1}x_{1}+m'_{2}x_{2}+\cdots +m'_{k}x_{k})\equiv a\mod p]\\&={\Pr }_{x_{1}}[(m_{1}-m'_{1})x_{1}+(m_{2}-m'_{2})x_{2}+\cdots +(m_{k}-m'_{k})x_{k}]\equiv a\mod p]\\&={\Pr }_{x_{1}}[(m_{1}-m'_{1})x_{1}+\textstyle \sum _{k=2}^{s}(m_{k}-m'_{k})x_{k}\equiv a\mod p]\\&={\Pr }_{x_{1}}[(m_{1}-m'_{1})x_{1}\equiv a-\textstyle \sum _{k=2}^{s}(m_{k}-m'_{k})x_{k}\mod p]\\&={\frac {1}{p}}\end{aligned}}}

Чтобы объяснить теорему выше, возьмем в качестве штриха поле, представим его как . Если взять элемент в , скажем, то вероятность того, что F p {\displaystyle F_{p}} p {\displaystyle p} F p = { 0 , 1 , , p 1 } p {\displaystyle F_{p}=\underbrace {{\big \{}0,1,\ldots ,p-1{\big \}}} _{p}} F p {\displaystyle F_{p}} 0 F p {\displaystyle 0\in F_{p}} x 1 = 0 {\displaystyle x_{1}=0}

Pr x 1 F p ( x 1 = 0 ) = 1 p {\displaystyle {\Pr }_{x_{1}\in \!{F_{p}}}(x_{1}=0)={\frac {1}{p}}}

Итак, на самом деле нужно вычислить

Pr ( x 1 , , x k ) F p k ( g x ( m ) g x ( m ) mod p ) {\displaystyle {\Pr }_{(x_{1},\ldots ,x_{k})\in \!{F_{p}^{k}}}(g_{x}(m)\equiv g_{x}(m')\mod p)}

Но,

Pr ( x 1 , , x k ) F p k ( g x ( m ) g x ( m ) mod p ) = ( x 2 , , x k ) F p k 1 Pr ( x 2 , x k ) F p k 1 ( x 2 = x 2 , , x k = x k ) Pr x 1 F p ( g x ( m ) g x ( m ) mod p ) = ( x 2 , , x k ) F p k 1 1 p k 1 1 p = p k 1 1 p k 1 1 p = 1 p {\displaystyle {\begin{aligned}{\Pr }_{(x_{1},\ldots ,x_{k})\in \!{F_{p}^{k}}}(g_{x}(m)\equiv g_{x}(m')\mod p)&=\sum _{(x_{2},\ldots ,x_{k})\in \!{F_{p}^{k-1}}}{\Pr }_{(x_{2}^{'}\cdots ,x_{k}^{'})\in \!{F_{p}^{k-1}}}({x_{2}=x_{2}^{'}},\ldots ,{x_{k}=x_{k}^{'}})\cdot {\Pr }_{x_{1}\in \!F_{p}}(g_{x}(m)\equiv g_{x}(m')\mod p)\\&=\sum _{(x_{2},\ldots ,x_{k})\in \!{F_{p}^{k-1}}}{\frac {1}{p^{k-1}}}\cdot {\frac {1}{p}}\\&=p^{k-1}\cdot {\frac {1}{p^{k-1}}}\cdot {\frac {1}{p}}\\&={\frac {1}{p}}\end{aligned}}}

Из приведенного выше доказательства следует, что вероятность столкновения злоумышленника в 1 раунде, поэтому в среднем p запросов проверки будет достаточно, чтобы принять одно сообщение. Чтобы уменьшить вероятность столкновения, необходимо выбрать большое p или объединить n таких MAC с использованием n независимых ключей, так что вероятность столкновения] становится . В этом случае количество ключей увеличивается в n раз , а выход также увеличивается в n раз . 1 p {\displaystyle {\frac {1}{p}}} 1 p n {\displaystyle {\frac {1}{p^{n}}}}

ММХ*32

Халеви и Кравчик [4] строят вариант, называемый . Конструкция работает с 32-битными целыми числами и с простым целым числом . На самом деле простое число p может быть выбрано любым простым числом, удовлетворяющим . Эта идея заимствована из предложения Картера и Вегмана использовать простые числа или . M M H 32 {\displaystyle \mathrm {MMH} _{32}^{*}} p = 2 32 + 15 {\displaystyle p=2^{32}+15} 2 32 < p < 2 32 + 2 16 {\displaystyle 2^{32}<p<2^{32}+2^{16}} 2 16 + 1 {\displaystyle 2^{16}+1} 2 31 1 {\displaystyle 2^{31}-1}

M M H 32 {\displaystyle \mathrm {MMH} _{32}^{*}} определяется следующим образом:
M M H 32 = { g x ( { 0 , 1 } 32 ) k } F p , {\displaystyle \mathrm {MMH} _{32}^{*}=\left\{g_{x}(\left\{0,1\right\}^{32})^{k}\right\}\to F_{p},}

где означает (т.е. двоичное представление) { 0 , 1 } 32 {\displaystyle \left\{0,1\right\}^{32}} { 0 , 1 , , 2 32 1 } {\displaystyle \left\{0,1,\ldots ,2^{32}-1\right\}}

Функции определяются следующим образом. g x {\displaystyle g_{x}}

g x ( m )   = d e f   m x mod ( 2 32 + 15 ) = i = 1 k m i x i mod ( 2 32 + 15 ) {\displaystyle {\begin{aligned}g_{x}(m)&\ {\overset {\underset {\mathrm {def} }{}}{=}}\ m\cdot x{\bmod {(}}2^{32}+15)\\&=\textstyle \sum _{i=1}^{k}m_{i}\cdot x_{i}{\bmod {(}}2^{32}+15)\end{aligned}}}

где

x = ( x 1 , , x k ) ,   m = ( m , , m k ) {\displaystyle x=(x_{1},\ldots ,x_{k}),\ m=(m,\ldots ,m_{k})}

По теореме 1 вероятность столкновения составляет около , а семейство можно определить как ϵ -почти ∆ Universal с . ϵ = 2 32 {\displaystyle \epsilon =2^{-32}} M M H 32 {\displaystyle \mathrm {MMH} _{32}^{*}} ϵ = 2 32 {\displaystyle \epsilon =2^{-32}}

Ценностьк

Значение k , описывающее длину сообщения и ключевых векторов, имеет несколько эффектов:

  • Поскольку дорогостоящее модульное сокращение по k представляет собой операции умножения и сложения, увеличение k должно приводить к снижению скорости.
  • Поскольку ключ x состоит из k 32-битных целых чисел, увеличение k приведет к получению более длинного ключа.
  • Вероятность взлома системы равна , поэтому увеличение k делает систему более трудной для взлома. 1 / p {\displaystyle 1/p} p 2 k {\displaystyle p\approx 2^{k}}

Производительность

Ниже приведены результаты расчета времени для различных реализаций MMH [4] в 1997 году, разработанных Халеви и Кравчиком.

150 МГц PowerPC 604Послание в памятьСообщение в кэше
64-битный390 Мбит/сек417 Мбит/сек
32-битный вывод597 Мбит/сек820 Мбит/сек
  • Машина Pentium-Pro 150 МГц под управлением Windows NT
150 МГц PowerPC 604Послание в памятьСообщение в кэше
64-битный296 Мбит/сек356 Мбит/сек
32-битный вывод556 Мбит/сек813 Мбит/сек
  • Машина Pentium-Pro 200 МГц под управлением Linux
150 МГц PowerPC 604Послание в памятьСообщение в кэше
64-битный380 Мбит/сек500 Мбит/сек
32-битный вывод645 Мбит/сек1080 Мбит/сек

Смотрите также

Ссылки

  1. ^ abcdef Боесгаард, Мартин; Скавениус, Ове; Педерсен, Томас; Кристенсен, Томас; Зеннер, Эрик (2005). «Badger — быстрый и доказуемо безопасный MAC» (PDF) .
  2. ^ Удачи, Стефан; Реймен, Винсент (2005). «Оценка Барсука» (PDF) .
  3. ^ ab "Код аутентификации сообщений Badger, спецификация алгоритма" (PDF) . 2005.
  4. ^ abc Halevi, Shai ; Krawczyk, Hugo (1997). "MMH: Программная аутентификация сообщений на скоростях Гбит/с". MMH: Программная аутентификация сообщений на скоростях Гбит/с . Lecture Notes in Computer Science. Vol. 1267. pp.  172– 189. doi :10.1007/BFb0052345. ISBN 978-3-540-63247-4.
Retrieved from "https://en.wikipedia.org/w/index.php?title=MMH-Badger_MAC&oldid=1251676783"