Решение для хранения кредитных карт - PullRequest
4 голосов
/ 24 марта 2010

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

PAN = основной номер счета == длинный номер на кредитной карте

  • Сервер A является удаленным сервером. Он хранит все данные о членстве (имена, адреса и т. Д.) И предоставляет индивидуальные ключи A для каждой сохраненной PAN
  • Сервер B является локальным сервером и фактически содержит зашифрованные PAN, а также ключ B и выполняет расшифровку.

Чтобы получить PAN, клиент должен пройти аутентификацию на ОБА серверах, запросить у сервера A соответствующий ключ A, а затем передать ключ A серверу B, который вернет PAN клиенту (при условии, что аутентификация прошла успешно). Сервер A будет шифровать только ключ A с помощью открытого ключа сервера B, поскольку он будет иметь его заранее. Сервер B, вероятно, сначала должен будет отправить соль, однако я не думаю, что он должен быть зашифрован

Я пока не задумывался о каких-либо особенностях реализации (т. Е. Кодирования), касающихся вышеизложенного, однако в решении используется среда Java Cajo (оболочка для RMI), так что серверы будут взаимодействовать друг с другом (в настоящее время членство детали передаются таким образом).

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

Может кто-нибудь увидеть что-то не так с вышеуказанным дизайном? Неважно, если вышеперечисленное необходимо изменить.

Спасибо

jtnire

Ответы [ 3 ]

6 голосов
/ 24 марта 2010

В качестве предисловия у вас будет кошмарное время, когда вы разрабатываете это и будете соответствовать требованиям PCI. Определенно стоило бы рассмотреть альтернативы, такие как использование провайдера платежных услуг, который может хранить данные вашей карты для вас, и выполнять специальную авторизацию / расчет с использованием идентификаторов токенов (вместо того, чтобы вводить их через «кредитную карту», Вы описали)

Если вы решили проигнорировать этот совет и пойти по пути PCI, то, по крайней мере, убедитесь в том, чтобы как можно раньше подключить одобренного PCI квалифицированного оценщика безопасности (QSA), чтобы одобрить любые проекты, которые вы придумали. PCI - это не то, что вы должны «стараться соблюдать как можно больше», это, к сожалению, вещь «все или ничего»!

Тем не менее, один из способов решения этой проблемы состоит в том, чтобы приложение, работающее с ключами, работало на блоке A. Это приложение требует ввода двух ключей «администрирования ключей», которые при совместном использовании xor образуют мастер-ключ. Мастер-ключ хранится только в оперативной памяти, а не сохраняется на диске.

Приложение генерирует ключи шифрования ключей, которые хранятся в ячейке А, зашифрованные с помощью мастер-ключа. KEK генерируется автоматически (это не то, что пользователь вводит). KEK может быть сохранен на диске на коробке A, зашифрован Мастер-ключом.

Данные карты хранятся в ячейке B. В этом поле также хранится ключ шифрования данных, который используется для симметричного шифрования данных карты. DEK хранится в зашифрованном виде, зашифрованный с помощью ключа шифрования из поля A.

Приложение, которое выполняет шифрование / дешифрование, должно находиться в блоке B и аутентифицироваться в блоке A перед запросом KEK. KEK затем используется для расшифровки DEK, и тогда может иметь место шифрование / дешифрование.

1 голос
/ 24 марта 2010

Если сервер А взломан - это значит, что я все еще могу получить все кредитные карты в виде открытого текста, или? У меня есть доступ ко всем отдельным ключам информации, которая мне нужна для доступа к каждой кредитной карте.

0 голосов
/ 24 марта 2010

Возможно, вам будет интересно прочитать запись Bytemark Blog о том, как они хранят информацию о кредитной карте.

Суть в том, что сервер, содержащий информацию о карте, не будет разглашать числа; разрешенные операции: «Добавить новую карту», ​​«Обновить или удалить существующую карту» и «Зарядить карту» - сервер подключается к самому платежному процессору.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...