Прежде всего, в AES-CMAC действительно есть только один ключ K - это единственный, который вы должны сгенерировать, чтобы ответить на ваш последний вопрос, и это явно указано в спецификации:
Алгоритм генерации подключа, 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 0111 (то есть нераспакованное сообщение M '' идентичны набранному сообщению M ').
M'' = 0101 0111
K1 = 0101
K1 = 0101
MAC = 0000 0010
Мы создали один и тот же MAC из двух разных сообщений! Использование второго ключа (который обладает некоторыми теоретико-числовыми свойствами, которые не позволяют ему быть проблемно «подобным» K1 ) предотвращает такую неоднозначность.