Прежде всего, есть на самом деле только один ключ K в AES-КЦР - это только один вы должны произвести, чтобы решить ваш последний вопрос, и это указано в явном виде в спецификации:
Алгоритм генерации subkey, Generate_Subkey(), берет секретный ключ, K, который является только ключом для AES-128.
Ваш другой вопрос - почему мы должны генерировать K1 и K2 от K - это немного сложнее ответить, но на самом деле очень простое объяснение: для устранения неоднозначности в аутентификация сообщений.
Чтобы проиллюстрировать, как предполагается взять двоичные ключи от вики-статьи: K1 = 0101 и K2 = 0111. Теперь давайте поиграем с сообщением M = 0101 011. Поскольку M не производится (три бита, а не четыре), мы должны заполнить его. Теперь у нас есть 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) предотвращает такую неоднозначность.
Хорошее наблюдение. Может ли добавление длины в конце потока предотвратить такую атаку расширения? Знаете ли вы какие-либо другие общие атаки на CBC MAC? –
Это хорошая статья об атаках и ограничениях безопасности цепочки аутентификации: http://www.cs.ucdavis.edu/research/tech-reports/1997/CSE-97-15.pdf Я бы не добавил длина. Я вижу пару возможных атак, но я должен был бы продумать их полностью. Это приведет к аннулированию всех доказательств безопасности и станет совершенно новой, непроверенной схемой. Я действительно не отклоняюсь от каких-либо стандартных примитивов. Режим двойного счетчика показал, насколько легко совершить ошибку. – mfanto