Как правильно сделать управление закрытым ключом

Кто-нибудь получил практический опыт или справочник по схеме, которая реализует схему управления ключами, которая будет соответствовать стандарту безопасности PCI DSS?

Очевидно, что существует довольно много реализаций, учитывая количество компаний, совместимых с PCI DSS, но пытаться найти подробности о них сложно. Когда дело доходит до хранения личных данных, обсуждение обычно останавливается на том, какой алгоритм шифрования использовать. После этого обычно делается заявление о надлежащем хранении закрытого ключа, но нет обсуждения практических способов сделать это или таких вещей, как периодическая смена ключа или предоставление ключа приложениям и т. Д.

В частности, меня интересуют требования, изложенные в разделах 3.5 и 3.6 стандарта PCI DSS.

3.5.2 Надежно хранить криптографические ключи в наименьшем количестве возможных мест и форм.

3.6.a Проверьте наличие процедур управления ключами для ключей, используемых для шифрования данных держателя карты. Примечание. Многочисленные отраслевые стандарты управления ключами доступны из различных источников, включая NIST, которые можно найти по адресу http://csrc.nist.gov/.

3.6.4 Убедитесь, что процедуры управления ключами реализованы так, что требуют периодических изменений ключа не реже одного раза в год.

Я ознакомился с публикациями по криптографии NIST, как предполагает документ с требованиями PCI DSS, но, кроме недавних заметок о семинаре по управлению криптографическими ключами, там не так уж много реальных реальных реализуемых схем или стандартов.

Что касается того, что я пытаюсь сделать, это не так:

  1. Храните пароли + соли как односторонние хеши для аутентификации,
  2. Выберите сильный симметричный алгоритм для шифрования данных,
  3. Избегайте необходимости хранить личные данные в первую очередь.
  4. Избегайте необходимости управления ключами с помощью других механизмов: физической безопасности, безопасности баз данных, драконов и волшебников и т. Д.

Все из которых являются действительными проблемами, но в этом случае не являются ответом. Суть моих требований в другом вопросе SO. Шаблон проектирования.Net для хранения и извлечения конфиденциальных данных пользователя, но все сводится к управлению ключами, поэтому этот более изысканный вопрос.

2 ответа

Решение

Я знаком с болью, через которую ты проходишь. Мы изо всех сил пытались обновить старую систему EFT до соответствия PCI. Управление ключами, безусловно, было (с моей точки зрения программного обеспечения) самой сложной частью.

Я думаю, что я также наткнулся на Рекомендации NIST по управлению ключами, которые опубликовал Мартин, и был невероятно расстроен отсутствием конкретных примеров.

ANSI X9.17 - Управление ключами финансового учреждения, вероятно, наиболее соответствует вашим потребностям с PCI-DSS. Удачи, читая это, хотя, документ - огромная коллекция TLA, которые я, конечно, изо всех сил пытался прочитать. (X9.17 обновляется ежегодно, и последняя версия теперь: NIST SP 800-57 Pt. 1 Rev. 4)

Когда разочарование перешло в отчаяние, я наткнулся на "Мельницу электронных денег", которая является вымышленной историей, с большим количеством соответствующих технических ссылок. Глава 17 обсуждает X9.17 и может помочь с пониманием.

Из всего этого справочного материала я разработал ключевую систему управления, которой наш аудитор был доволен. Проектные документы довольно объемны, но в целом идея заключается в том, что ваш ключ шифрования данных защищен ключом шифрования ключа, а ключ шифрования ключа хранится в физически отдельной коробке, которая сама защищена мастер-ключом.

Моя реализация заключалась в том, чтобы приложение Key Server работало в окне Windows. Для этого приложения требовалось ввести два отдельных "мастер-ключа сервера ключей", прежде чем его можно будет использовать. Эти ключи будут известны только администраторам сервера ключей. Эти ключи xor'd вместе, чтобы сгенерировать мастер-ключ, который хранится только в защищенной памяти во время работы приложения. Затем приложение может автоматически генерировать криптографически надежные ключи шифрования ключей, которые хранятся в зашифрованном виде с использованием мастер-ключа.

Приложения, которым требуется шифрование, будут запрашивать ключ шифрования ключа у сервера ключей. KEK используется приложением для шифрования / дешифрования ключа шифрования данных, который может надежно храниться вместе с данными приложения.

Удачи. Я надеюсь, вы тоже найдете это интересным испытанием!

Вы видели NIST SP 800-57, Рекомендация по управлению ключами?

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