Мысли о модели безопасности для хранения данных кредитной карты - PullRequest
3 голосов
/ 16 марта 2010

Вот модель, которую мы используем для хранения сведений о CC, насколько она защищена?

Вся наша информация зашифрована с использованием шифрования с открытым ключом, и пара ключей зависит от пользователя (она генерируется на сервере, а закрытый ключ симметрично шифруется с использованием пароля пользователя, который также хэшируется в базе данных), поэтому в основном при первом запуске пользователя отправляет свой пароль через соединение SSL, и пароль используется с добавлением соли для генерации хеша MD5, также пароль используется для шифрования закрытого ключа, а закрытый ключ хранится на сервере. Когда пользователь хочет сделать платеж, он отправляет свой пароль. Пароль дешифрует закрытый ключ, а закрытый ключ расшифровывает данные CC, и данные CC взимаются.

Ответы [ 5 ]

4 голосов
/ 16 марта 2010

Если пароль пользователя достаточно безопасен для защиты закрытого ключа, почему бы не пропустить закрытый ключ и использовать пароль (через подходящий алгоритм получения ключа ) для шифрования номера кредитной карты?Ненужные сложности определенно не улучшают безопасность.

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

3 голосов
/ 16 марта 2010

Это связывает безопасность кредитной карты с надежностью пароля пользователя, которая варьируется от пользователя к пользователю и, как правило, слабая. Лучше создать свой собственный симметричный ключ шифрования, сохранить его в безопасности, а затем делать кучу сложных вещей, изобретенных экспертами, включая инициализаторы, такие как CBC, CTR и IV .

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

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

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

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

Если вам просто нужны определенные пользователем ключи (и вы должны каждый раз использовать разные IV), тогда вы можете идти по маршруту openssl EVP_BytesToKey и каждый раз передавать разные соли с главным секретным ключом, из которого будет получен ключ шифрования и iv. производные (и они будут разными для каждого пользователя).

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

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

Возможно, вам захочется взглянуть на индустрию платежных карт «Платежное приложение DSS» »https://www.pcisecuritystandards.org/security_standards/pa_dss.shtml

Это может помочь принять некоторые решения за вас.

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

Я согласен с Эриксоном, что, если открытый ключ не используется, нет смысла делать асимметричное шифрование.

Как всегда, проблема здесь - это проблема управления ключами. Отсутствие безопасности возникает из-за незнания, как безопасно скрыть ключ, который расшифровывает данные.

Я не уверен, возможно ли это, но если вы можете себе это позволить, купите аппаратный модуль безопасности и разрешите HSM управлять ключами или зашифровать все клиентские (личные) ключи с помощью главного ключа HSM.

Если вы не можете, вы должны найти подходящее место для хранения вашего «главного» ключа, возможный пример - хранилище Windows (если это возможно). Тем не менее, я признаю, что на самом деле не знаю, насколько безопасен Windows Store.

...