Увы, у меня нет профильного математического образования (я вообще гуманитарий), потому любой стандарт по криптографии для меня ничто иное, как поросячья латынь. А после детального изучения приходит горькое осознание, что это я лезу в калачный ряд со свиным рылом... И вот прилетела задача, решить которую промптом не получится (я пробовал, честно), а потому надо лезть в калачный ряд ISO9797-1 и смотреть, что там такое делается. Результаты изучения решил расписать здесь, т.к. может кому-то будет полезно, а может кто-то из crypto-лордов укажет на недочеты/ошибки.
Я вечно плутаю между методами выравнивания входных данных - все эти padding'и-шмадинги с их 0x00 и 0x80. Какой из них просто нули, а какой предваряется 0x80? А надо ли вставлять этот 0x80 если данные выровнены? Почему байтов 24, а в блоке L указано 0xC0? Но этого мало: к этой сумятице добавляются методы генерации MAC которых целых пять штук и могут работать со всеми вариантами дополнения. В этой статье постараемся разобраться с:
- общей архитектурой алгоритмов выработки MAC;
- методами выравнивания;