Рейтинг:2

Проверка тега аутентификации AES GCM между двумя разными реализациями

флаг nl

Я немного запутался в том, как проверить тег аутентификации между двумя разными реализациями AES GCM.

Одна реализация (с моей стороны) на Java. Другой, я не знаю.

В моей реализации открытый текст шифруется с помощью сделатьфинал функция. Я добавляю вектор инициализации к результату.

Я так понимаю, что тег аутентификации добавляется в конец зашифрованного сообщения, и при его расшифровке Java проверяет его автоматически.

https://docs.oracle.com/javase/7/docs/api/javax/crypto/Cipher.html Если используется режим AEAD, такой как GCM/CCM, тег аутентификации прилагается в случае шифрования или проверяется в случае расшифровка.

Данные

IV: b943f312250e7fb1f29dea93
Зашифрованный текст (128-битный тег добавлен): 3745a778189b041b9c452359066a9a745715f214599d010790ee8866e531d5bfe6352e
Ключ: e08ef62a4908460742b4f80b14fb452d

Мой вопрос: Должны ли они иметь возможность проверить тег от другой стороны, независимо от используемой ими реализации/провайдера шифрования?

Спасибо

Рейтинг:2
флаг in

Да, тег аутентификации полностью указан в спецификациях GCM. Место его размещения в остальном не имеет значения — местоположение не влияет на значения битов тега аутентификации.

Если другой алгоритм выполнение разделяет обработку тегов аутентификации - как это, вероятно, и должно быть - тогда это следует учитывать при шифровании и дешифровании.

  • Чтобы соответствовать реализации Java, необходимо добавить тег к зашифрованному тексту после шифрования. Обычно можно разумно изменить размер буфера или использовать потоковую реализацию, чтобы копирование тега не требовалось.

  • Для проверки может потребоваться извлечь его из хвоста зашифрованного текста. Обычно можно просто указать это однако в буфере, содержащем зашифрованный текст; в этом случае не требуется копирование или изменение размера.


Требуется согласование параметров конфигурации GCM (тип и размер IV/одноразового номера, размер тега аутентификации). заранее обеими сторонами, либо указав их непосредственно в протоколе, либо выбрав предварительно определенный набор параметров конфигурации во время выполнения.

Это означает, что размер тега аутентификации должен быть известен заранее. Таким образом, должно быть возможно найти тег аутентификации после того, как размер зашифрованного текста был установлен. Конечно, ничто не мешает включить в протокол и размер зашифрованного текста; можно включить, скажем, 32-битный индикатор размера (обычно беззнаковое 32-битное значение с обратным порядком байтов) в заголовок вашего протокола. Таким образом, можно найти тег проверки подлинности, не имея всего зашифрованного/открытого текста в системной памяти, при условии, что реализация не требует от пользователя одновременного выполнения шифрования/дешифрования.

Очевидно, что обе стороны также должны использовать одни и те же дополнительные аутентифицированные данные (AAD) для проверки тега.


Обычно рекомендуется поддерживать максимальный размер тега аутентификации в 128 бит (размер блока алгоритма AES и размер поля Галуа GHASH). Реализация Oracle Java по умолчанию использует этот размер. Таким образом, в этом случае последние 16 байтов (расширенного) зашифрованного текста составляют тег аутентификации.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.