Обеспечивает ли код аутентификации сообщения (MAC) подлинность используемого ключа?

Я должен защищать конфиденциальность, целостность и подлинность файла записей с паролем. Число записей может быть больше 32^2, и к каждой записи можно получить доступ независимо.

Один из способов реализовать это

  1. Создайте 256-битную случайную соль и сохраните ее в заголовке файла.
  2. Сгенерируйте производный ключ из пароля и соли, используя PBKDF2 с HMAC-SHA256 из PKCS #5.
  3. Для каждой записи генерируют 96-битный случайный вектор инициализации.
  4. Зашифруйте содержимое каждой записи, используя AES-256 в режиме GCM, используя производный ключ, вектор инициализации и (в качестве дополнительных аутентифицированных данных) положение записи в файле.
  5. В результате каждая запись будет хранить вектор инициализации, зашифрованный контент и MAC.

Но в специальной публикации NIST SP800-38D, определяющей GCM и GMAC, требуется, чтобы число записей было менее 32^2, чтобы векторы инициализации были уникальными.

Поэтому я разработал другое решение: создайте ключ для каждой записи с помощью HMAC-SHA256, используя производный ключ в качестве ключа и положение записи в файле в качестве сообщения для аутентификации (соль).

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

Кроме того, нужно ли вообще использовать векторы инициализации, поскольку все записи будут зашифрованы и аутентифицированы с использованием предположительно различных ключей, сгенерированных HMAC-SHA256(PBKDF2(HMAC-SHA256, пароль, соль, iterationCount, 256), blockAddress)?

Я не знаю, какой будет размер файла, поэтому я предполагаю, что он может быть очень большим.

1 ответ

Решение

Если я вас правильно понял (немного отговорки, извините), то все будет в порядке, не добавляя позицию в записи в файле.

Нет, вам не нужен случайный IV, если вы используете (сеансовый) ключ только один раз. Было бы достаточно использовать IV, состоящий из нулей (детерминированная конструкция, использующая одно устройство и счетчик, установленный в ноль, если мы будем придерживаться номенклатуры NIST).

Другие вопросы по тегам