Я должен защищать конфиденциальность, целостность и подлинность файла записей с паролем.Число записей может потенциально превышать 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)?
Я не знаю, какой будет размер файла, поэтому я предполагаю, чтоможет быть очень большим.