Да, тег аутентификации полностью указан в спецификациях GCM. Место его размещения в остальном не имеет значения — местоположение не влияет на значения битов тега аутентификации.
Если другой алгоритм выполнение разделяет обработку тегов аутентификации - как это, вероятно, и должно быть - тогда это следует учитывать при шифровании и дешифровании.
Чтобы соответствовать реализации Java, необходимо добавить тег к зашифрованному тексту после шифрования. Обычно можно разумно изменить размер буфера или использовать потоковую реализацию, чтобы копирование тега не требовалось.
Для проверки может потребоваться извлечь его из хвоста зашифрованного текста. Обычно можно просто указать это однако в буфере, содержащем зашифрованный текст; в этом случае не требуется копирование или изменение размера.
Требуется согласование параметров конфигурации GCM (тип и размер IV/одноразового номера, размер тега аутентификации). заранее обеими сторонами, либо указав их непосредственно в протоколе, либо выбрав предварительно определенный набор параметров конфигурации во время выполнения.
Это означает, что размер тега аутентификации должен быть известен заранее. Таким образом, должно быть возможно найти тег аутентификации после того, как размер зашифрованного текста был установлен. Конечно, ничто не мешает включить в протокол и размер зашифрованного текста; можно включить, скажем, 32-битный индикатор размера (обычно беззнаковое 32-битное значение с обратным порядком байтов) в заголовок вашего протокола. Таким образом, можно найти тег проверки подлинности, не имея всего зашифрованного/открытого текста в системной памяти, при условии, что реализация не требует от пользователя одновременного выполнения шифрования/дешифрования.
Очевидно, что обе стороны также должны использовать одни и те же дополнительные аутентифицированные данные (AAD) для проверки тега.
Обычно рекомендуется поддерживать максимальный размер тега аутентификации в 128 бит (размер блока алгоритма AES и размер поля Галуа GHASH). Реализация Oracle Java по умолчанию использует этот размер. Таким образом, в этом случае последние 16 байтов (расширенного) зашифрованного текста составляют тег аутентификации.