2010-08-17 4 views
3

http://en.wikipedia.org/wiki/CMACКЦР почему K1 и K2

http://www.rfc-archive.org/getrfc.php?rfc=4493

Есть два ключа K1 и K2. Существуют ли какие-либо другие причины, кроме того, что сообщения 1 отличаются от 10^127 (1 и 127 нулей)

Если сообщение несет длину (а длина также является сообщением CMAC-ed whit), есть ли недостатки в безопасности, использующие только одно случайное порожденный K?

ответ

2

Я не верю, что это связано с известными атаками с открытым текстом, и я не согласен с симметричными шифрами, они восприимчивы к ним. Одним из условий безопасного шифрования является то, что он защищен под KPA, CPA (атаки с использованием выбранного текста) и CCA (атаки с выбранным шифротекстом).

Если я не понимаю ваш вопрос, да, вам все равно нужны оба подраздела. K2 используется, когда блок не является полным блоком. . K1 и K2 не генерируются случайным образом, а являются производными от K. Есть ли причина, по которой вы не хотите генерировать эти подразделы?

Существует ряд недостатков в кодах аутентификации, основанных на режимах цепочки. CBC-MAC был явно защищен только для сообщений фиксированного размера. Безопасность полностью терпит неудачу для сообщений переменной длины, где последний блок дополняется.

Вы можете прочитать статью XCBC, чтобы увидеть, как атака работает:

«В качестве простого примера, обратите внимание, что с учетом CBC MAC из одного блока сообщений X, скажем T = CBCEK (X), противник немедленно знает MAC CBC для двухблочного сообщения X || (X^T) , так как это снова T. "

[1] http://www.cs.ucdavis.edu/~rogaway/papers/3k.pdf

+0

Хорошее наблюдение. Может ли добавление длины в конце потока предотвратить такую ​​атаку расширения? Знаете ли вы какие-либо другие общие атаки на CBC MAC? –

+0

Это хорошая статья об атаках и ограничениях безопасности цепочки аутентификации: http://www.cs.ucdavis.edu/research/tech-reports/1997/CSE-97-15.pdf Я бы не добавил длина. Я вижу пару возможных атак, но я должен был бы продумать их полностью. Это приведет к аннулированию всех доказательств безопасности и станет совершенно новой, непроверенной схемой. Я действительно не отклоняюсь от каких-либо стандартных примитивов. Режим двойного счетчика показал, насколько легко совершить ошибку. – mfanto

1

Я полагаю, что симметричные шифры восприимчивы к атакам с открытым текстом, по крайней мере, они были в прошлом. И поскольку вы выполняете часть открытого текста (шаблон заполнения), вы не хотите утечки информации о вашем ключе. Если вы можете извлечь некоторые биты ключа таким образом, вы можете атаковать с помощью brut-force последнего блока, но все остальные блоки остаются безопасными (по крайней мере, при этой атаке KP), поскольку они были зашифрованы через K1.

Чтобы преодолеть ту же проблему, блок-шифры обычно работают в различных режимах, см .: http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation. Не знаю, почему это очевидное решение не рассматривалось при разработке CMAC.

+1

Вы могли бы стать действительно известным, если применить практический выбранный открытым текстом атаки на AES. http://en.wikipedia.org/wiki/Chosen-plaintext_attack –

+1

@ralu: работа над ним, справа * сейчас *: P – hroptatyr

4

Прежде всего, есть на самом деле только один ключ K в AES-КЦР - это только один вы должны произвести, чтобы решить ваш последний вопрос, и это указано в явном виде в спецификации:

Алгоритм генерации subkey, Generate_Subkey(), берет секретный ключ, K, который является только ключом для AES-128.

Ваш другой вопрос - почему мы должны генерировать K1 и K2 от K - это немного сложнее ответить, но на самом деле очень простое объяснение: для устранения неоднозначности в аутентификация сообщений.

Чтобы проиллюстрировать, как предполагается взять двоичные ключи от вики-статьи: K1 = 0101 и K2 = 0111. Теперь давайте поиграем с сообщением M = 0101 011. Поскольку M не производится (три бита, а не четыре), мы должны заполнить его. Теперь у нас есть = 0101 0111.

Для генерации MAC для этого сообщения, мы просто должны XOR наши ключи:

M' = 0101 0111 
K1 = 0101 
K2 =  0111 
MAC = 0000 0000 

Если бы мы использовали K1 в обоих случаях, то мы имеем следующую процедуру:

M' = 0101 0111 
K1 = 0101 
K1 =  0101 
MAC = 0000 0010 

Это все хорошо и хорошо, но посмотрим, что происходит, когда мы пытаемся генерировать MAC для M «» = 0101 01 11 (то есть сообщение о недопустимости M '', идентичное заполненному сообщению M ').

M'' = 0101 0111 
K1 = 0101 
K1 =  0101 
MAC = 0000 0010 

Мы создали тот же MAC из двух разных сообщений!Использование второго ключа (который имеет некоторые теоретико-числовые свойства, которые мешают ему быть «похожими» на K1) предотвращает такую ​​неоднозначность.