Обеспечивает ли код аутентификации сообщения (MAC) подлинность используемого ключа?
Я должен защищать конфиденциальность, целостность и подлинность файла записей с паролем. Число записей может быть больше 32^2, и к каждой записи можно получить доступ независимо.
Один из способов реализовать это
- Создайте 256-битную случайную соль и сохраните ее в заголовке файла.
- Сгенерируйте производный ключ из пароля и соли, используя PBKDF2 с HMAC-SHA256 из PKCS #5.
- Для каждой записи генерируют 96-битный случайный вектор инициализации.
- Зашифруйте содержимое каждой записи, используя AES-256 в режиме GCM, используя производный ключ, вектор инициализации и (в качестве дополнительных аутентифицированных данных) положение записи в файле.
- В результате каждая запись будет хранить вектор инициализации, зашифрованный контент и MAC.
Но в специальной публикации NIST SP800-38D, определяющей GCM и GMAC, требуется, чтобы число записей было менее 32^2, чтобы векторы инициализации были уникальными.
Поэтому я разработал другое решение: создайте ключ для каждой записи с помощью HMAC-SHA256, используя производный ключ в качестве ключа и положение записи в файле в качестве сообщения для аутентификации (соль).
Таким образом, вопрос заключается в том, нужно ли мне указывать позицию записи в файле для алгоритма аутентифицированного шифрования в качестве дополнительных аутентифицированных данных, поскольку я уже позаботился об этом при генерации ключа?
Кроме того, нужно ли вообще использовать векторы инициализации, поскольку все записи будут зашифрованы и аутентифицированы с использованием предположительно различных ключей, сгенерированных HMAC-SHA256(PBKDF2(HMAC-SHA256, пароль, соль, iterationCount, 256), blockAddress)?
Я не знаю, какой будет размер файла, поэтому я предполагаю, что он может быть очень большим.
1 ответ
Если я вас правильно понял (немного отговорки, извините), то все будет в порядке, не добавляя позицию в записи в файле.
Нет, вам не нужен случайный IV, если вы используете (сеансовый) ключ только один раз. Было бы достаточно использовать IV, состоящий из нулей (детерминированная конструкция, использующая одно устройство и счетчик, установленный в ноль, если мы будем придерживаться номенклатуры NIST).