<- 44 03
-> 93 20
<- 88 04 78 8C 78
-> 93 70 88 04 78 8C 78 BC E7
<- 24 D8 36
-> 95 20
<- DA 49 34 80 27
-> 95 70 DA 49 34 80 27 A4 E1
<- 20 FC 70
-> E0 40 3D B5
<- 06 75 77 81 02 80 02 F0
-> 02 5A 01 02 03 91 44
<- 02 00 10 2D
-> 03 AA 00 FF 18
<- 03 AF 9A CA 13 AD 7C 4F CF 43 4A 79 B3 BA 1D 2E 7A DE 08 40
-> 02 AF 0E 94 76 8E 77 97 7F 12 FC 50 3A 5F E5 BA CA 26 A2 D8 75 C4 09 B8 3A B8 63 1B E8 19 E2 8E 9A B1 E7 B6
<- 02 00 52 78 F8 D4 2A 6B 3D 44 60 BF 03 2C 15 7E DD A6 6D E4
SessionKey
<- 01 02 03 04 35 0E 59 FA 06 07 0A 0B E0 D5 1A 09
Key_0
<- 72 C6 4C 86 1B 27 43 47 CB 13 3F CF DD AC 62 69
Key_1
<- E5 8C 99 0C 36 4E 86 8F 96 26 7F 9F BB 58 C4 D2
Key_2
<- CB 19 32 18 6C 9D 0D 1F 2C 4C FF 3F 76 B1 89 23
Data + CRC32 + PADDING
<- 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 5E FB 61 CC 00 00 00 00 00 00 00 00 00 00 00 00
Encripted_data(Data + CRC32 + PADDING
<- 02 83 0E 44 89 EB A9 02 D7 6D 3F E0 DB 23 8E F3 84 74 53 DF 64 F0 D3 2D 5A 81 06 E5 6B F7 37 80
IV
<- 84 74 53 DF 64 F0 D3 2D 5A 81 06 E5 6B F7 37 80
Command + encrypted_data
<- 3D 01 00 00 00 10 00 00 02 83 0E 44 89 EB A9 02 D7 6D 3F E0 DB 23 8E F3 84 74 53 DF 64 F0 D3 2D 5A 81 06 E5 6B F7 37 80
Sending
-> 03 3D 01 00 00 00 10 00 00 02 83 0E 44 89 EB A9 02 D7 6D 3F E0 DB 23 8E F3 84 74 53 DF 64 F0 D3 2D 5A 81 06 E5 6B F7 37 80 EB B5
<- 03 00 39 9A 67 6E 0E 80 D8 09 64 54
CMAC
<- CB 99 32 18 6C 9D 0D 1F 2C 4C FF 3F 76 B1 89 23
IV
<- 39 9A 67 6E 0E 80 D8 09 91 2C 36 23 06 78 7C 97
Data = read 12 bytes
<- BD 01 00 00 00 0C 00 00 80 00 00 00 00 00 00 00
XOR Data with IV
<- 84 9B 67 6E 0E 8C D8 09 11 2C 36 23 06 78 7C 97
CMAC from data
<- 2A 91 20 1B 89 04 C4 14 FB 9B 0D 84 C9 09 D5 56
Send data
-> 02 BD 01 00 00 00 0C 00 00 B7 A3
<- 02 00 3D D2 F2 21 8F CA 3C 66 15 B7 D1 DA 67 2F 2D 0B 4D D3
Recived data = NEW IV
<- 3D D2 F2 21 8F CA 3C 66 15 B7 D1 DA 67 2F 2D 0B
Decrypted Answer
<- 01 02 03 04 05 06 07 08 09 10 11 12 4D 44 3A CC
IV
<- 3D D2 F2 21 8F CA 3C 66 15 B7 D1 DA 67 2F 2D 0B
Data = read 12 bytes
<- BD 01 00 00 00 0C 00 00 80 00 00 00 00 00 00 00
XOR Data with IV
<- 80 D3 F2 21 8F C6 3C 66 95 B7 D1 DA 67 2F 2D 0B
CMAC from data
<- 9D 21 EC 3F F9 7C 7B 4A 73 7C A3 A4 5D 67 9B 26
Send data
-> 03 BD 01 00 00 00 0C 00 00 4A EE
<- 03 00 B7 43 79 09 8D 77 A5 16 3B 18 BC 17 B0 73 47 3F BE 1A
Recived data = NEW IV
<- B7 43 79 09 8D 77 A5 16 3B 18 BC 17 B0 73 47 3F
Decrypted Answer
<- 01 02 03 04 05 06 07 08 09 10 11 12 4D 44 3A CC
Почему я выделил 84 74 53 DF 64 F0 D3 2D 5A 81 06 E5 6B F7 37 80.
Многие не знают как расчитать CMAC поверх криптографии, суть тут в том, что когда вы производите шифрование блока данных, то последний блок является IV. То-есть если бы данные были бы открытыми, и режим передачи был бы открыт, то вам пришлось бы производить калькуляцию CMAC поверх cmd+data+padding.
Вот пример калькуляции для открытых данных. В данном случае 64 байта.
Command + data
<- 3D 05 00 00 00 34 00 00 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 80 00 00 00
XOR with key_2
<- 3D 05 00 00 00 34 00 00 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 D6 00 3A 67 59 6F 6C C9 AE EC 7C 6C CF 63 25 A5
Encrypted
<- 4E 4E 80 8E 75 A9 14 3D 17 3B 77 69 00 A6 04 81 2F EB 31 13 73 FC 4B D2 6E 8D 7C 0F F6 D0 0C 0F 09 12 BF FE 46 C2 6A FE 37 FE 26 3D F9 11 42 DE 5F 7B CA 26 9F 97 49 5C 64 BC FB 3D B4 14 49 CA
CMAC
<- 5F 7B CA 26 9F 97 49 5C 64 BC FB 3D B4 14 49 CA
Однако в режиме криптозащиты, вы калькулируете поверх data+crc32+padding (00 00 00..) и последний блок является IV.
Затем вы продолжаете актуализировать CMAC поверх ответа 00
1 - answer = XOR(answer + 80 00 padding) @ key_2.
2 - XOR answer @ IV.
И теперь идет AES шифрование, что дает вам актуализированный CMAC.



