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

Я должен защищать конфиденциальность, целостность и подлинность файла записей с паролем.Число записей может потенциально превышать 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 Ответ

0 голосов
/ 17 декабря 2011

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

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

...