Рейтинг:0

Управление мастер-ключами, используемыми в PBKDF2 и HMAC (сохранение, ротация)

флаг in

Мой вариант использования:

У меня есть несколько мастер-ключей, каждый из которых я использую для определенной операции (например, один для шифрования данных пользователя, а другой для создания подписей JWT и т. д.).

Я использую эти мастер-ключи в двух конкретных случаях:

  1. в PBKDF2 в качестве входных данных + соль для получения симметричных ключей и одноразовых номеров (iv), а затем сохранить соль только с зашифрованным текстом в базе данных
  2. в HMAC как секретный ключ (перец)

Мне нужно менять эти мастер-ключи, когда они устареют.

Вопросы для уточнения того, что мне нужно знать:

  1. Когда эти отмычки устаревают или их нужно менять?
  2. Как повернуть эти ключи, а также вернуть старые ключи из новых ключей, чтобы расшифровать зашифрованные данные или проверить хэши, которые были сделаны этими старыми ключами? Я думаю, что я должен сделать бит-XOR на старом ключе с соответствующим новым ключом
  3. В настоящее время у меня нет возможности использовать HSM (аппаратные модули безопасности) или безопасные анклавы. Достаточно ли безопасно хранить эти главные ключи в файлах рядом с API приложения? Какие вещи я должен иметь в виду?
  4. Я в порядке с PBKDF2 или мне лучше использовать HKDF? Если да, какие еще рекомендации я должен сделать при использовании HKDF?
  5. Какова рекомендуемая длина главного ключа в таком случае использования?
  6. Есть ли какие-то потоки, проблемы или улучшения во всем этом?
Swashbuckler avatar
флаг mc
От чего именно вы пытаетесь защититься, когда вам нужно повернуть ключ таким образом? Как правило, ротация ключей включает в себя использование обновленных ключей для новых данных, но не пытается повторно защитить существующие данные? Кажется, вы хотите обновить существующую защиту, но без повторного шифрования. В зависимости от того, от чего вы пытаетесь защититься, это может быть невозможно (по крайней мере, насколько мне известно).
Mohamed Waleed avatar
флаг in
@Swashbuckler, разве не рекомендуется регулярно менять ключи? также я знаю, что эти ключи имеют ограниченный жизненный цикл. Тип шифрования, который я делаю, - это шифрование данных частных пользователей в обычном сервисе, а тип хеширования - это создание подписей для токенов для пользователей и хеширование их паролей и любых других данных, которые должны быть конфиденциальными, и я не должен знать
Mohamed Waleed avatar
флаг in
@Swashbuckler Я знаю, что жизненный цикл ключа в целом связан с его использованием. У меня есть ключи, которые используются только для шифрования некоторых данных в базе данных, когда мне их менять? когда происходит утечка данных? У меня также есть некоторые ключи, которые очень часто используются при хешировании и создании подписей для токенов. Когда мне их тоже менять?
Mohamed Waleed avatar
флаг in
@Swashbuckler, я думаю о ротации ключей, так как я думаю, что это полезно, чтобы злоумышленнику было труднее получить любую информацию, а также я буду размещать такое приложение на vps.
Mohamed Waleed avatar
флаг in
@Swashbuckler Я в порядке с данными, зашифрованными старыми ключами, я спрашиваю о том, как повернуть ключи, чтобы обновить новые данные с помощью нового ключа, а также иметь возможность расшифровать старые данные без сохранения полного старого ключа, выполнив что-то вроде XOR например
SAI Peregrinus avatar
флаг si
Ключи шифрования ДОЛЖНЫ быть высокоэнтропийными (почти 1 бит энтропии на бит данных). Это означает, что они не могут быть сжаты, поэтому вы ДОЛЖНЫ хранить весь ключ для расшифровки старых данных, если вы не выполняете повторное шифрование с использованием нового ключа. Это [теорема исходного кодирования Шеннона] (https://en.wikipedia.org/wiki/Shannon's_source_coding_theorem).

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

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