В качестве предисловия у вас будет кошмарное время, когда вы разрабатываете это и будете соответствовать требованиям PCI. Определенно стоило бы рассмотреть альтернативы, такие как использование провайдера платежных услуг, который может хранить данные вашей карты для вас, и выполнять специальную авторизацию / расчет с использованием идентификаторов токенов (вместо того, чтобы вводить их через «кредитную карту», Вы описали)
Если вы решили проигнорировать этот совет и пойти по пути PCI, то, по крайней мере, убедитесь в том, чтобы как можно раньше подключить одобренного PCI квалифицированного оценщика безопасности (QSA), чтобы одобрить любые проекты, которые вы придумали. PCI - это не то, что вы должны «стараться соблюдать как можно больше», это, к сожалению, вещь «все или ничего»!
Тем не менее, один из способов решения этой проблемы состоит в том, чтобы приложение, работающее с ключами, работало на блоке A. Это приложение требует ввода двух ключей «администрирования ключей», которые при совместном использовании xor образуют мастер-ключ. Мастер-ключ хранится только в оперативной памяти, а не сохраняется на диске.
Приложение генерирует ключи шифрования ключей, которые хранятся в ячейке А, зашифрованные с помощью мастер-ключа. KEK генерируется автоматически (это не то, что пользователь вводит). KEK может быть сохранен на диске на коробке A, зашифрован Мастер-ключом.
Данные карты хранятся в ячейке B. В этом поле также хранится ключ шифрования данных, который используется для симметричного шифрования данных карты. DEK хранится в зашифрованном виде, зашифрованный с помощью ключа шифрования из поля A.
Приложение, которое выполняет шифрование / дешифрование, должно находиться в блоке B и аутентифицироваться в блоке A перед запросом KEK. KEK затем используется для расшифровки DEK, и тогда может иметь место шифрование / дешифрование.