Реализация алгоритма CMAC на Python не работает
Мне нужно реализовать алгоритм CMAC для моей диссертации, однако я получаю неправильный результат и просто не могу распознать ошибку.
Генерация подключей K1 и алгоритм шифрования AES, а также XOR и состав m_i верны, я дважды это проверил.
Кто-нибудь может мне помочь?
есть только один блок размером 128 бит (16 октетов), поэтому 'flag' истинен и 'n' = 1
Шаги, которые я пытаюсь воспроизвести:
+ +
+ Step 4. if flag is true +
+ then M_last := M_n XOR K1; +
+ else M_last := padding(M_n) XOR K2; +
+ Step 5. X := const_Zero; +
+ Step 6. for i := 1 to n-1 do +
+ begin +
+ Y := X XOR M_i; +
+ X := AES-128(K,Y); +
+ end +
+ Y := M_last XOR X; +
+ T := AES-128(K,Y); +
+ Step 7. return T; +
и моя реализация такова:
def generate_cmac(master_key, message_counter, meter_id, key1):
padding = [0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7]
m_i = AES_Decryption.hexadecimal_to_binary([0, 0])
m_i.extend(message_counter)
m_i.extend(meter_id)
m_i.extend(AES_Decryption.hexadecimal_to_binary(padding))
print(AES_Decryption.binary_to_hexadecimal(m_i))
m_last = AES_Decryption.xor(m_i, key1, 'bytewise')
init_vector = AES_Decryption.hexadecimal_to_binary(
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
variable_x = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
variable_y = AES_Decryption.xor(m_last, variable_x, 'bytewise')
k_enc = AES_Decryption.aes_encryption(variable_y, master_key, init_vector)
print(AES_Decryption.binary_to_hexadecimal(k_enc))