2008-09-12 7 views
10

База данных, в которой хранится информация о кредитной карте, является неотъемлемой частью системы, которую мы только что завершили. Тем не менее, я хочу, чтобы обеспечить максимальную безопасность номеров карт, посредством которых мы настраиваем механизм шифрования и дешифрования, но сами не можем расшифровать любое заданное число.Шифрование данных

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

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


Ну, база данных ORACLE, поэтому у меня есть PL/SQL и Java для игры.

+0

Какая СУБД вы используете? SQL Server? MySQL? Другие? – Brannon 2008-09-12 16:08:24

ответ

0

Было бы полезно знать серверы БД и языки/типы платформ, чтобы мы могли получить более конкретную информацию, но я бы посмотрел на SHA.

4

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

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

Однако любой, кто имеет доступ к вашей базе данных и исходному коду (т. Е. Вы и ваша команда), найдет тривиальным расшифровать эти данные (т. Е. Изменить код в реальном времени, чтобы он отправил электронные письма по любым ключам дешифрования, введенным в одноразовую учетную запись Hotmail , и т.д).

1

Если вы используете Oracle, вас может заинтересовать Transparent Data Encryption. Тем не менее, доступно только с лицензией Enterprise.

У Oracle также есть утилиты для шифрования - дешифрования, например DBMS_OBFUSCATION_TOOLKIT.

Что касается стандартов, соответствующий стандарт, который вы интересуете, это стандарт PCI DSS, который описывает, какие меры необходимо принять для защиты конфиденциальной информации о кредитной карте.

0

Я бы симметрично шифровал (AES) безопасный соленый хеш (соль SHA-256 +). Соленого хеша было бы достаточно с большой солью, но шифрование добавляет немного лишнего, если база данных, а не код, протекает, и к тому времени или какие-то другие средства есть радужные таблицы для соленых хэшей. Храните ключ в коде, а не в базе данных, конечно.

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

3

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

Когда вам нужно действовать по номеру кредитной карты?

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

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

5

Если вы не являетесь платежным процессором, вам не нужно хранить какую-либо информацию CC.

обзор ваших требований, то на самом деле не так много случаев, когда вам необходимо хранить информацию CC

+0

Это неверно. Мы используем процессор платежей и из-за того, как они работают (отделенные системы аутентификации и авторизации), мы должны временно сохранить номер CC, поскольку мы должны отправить его в систему авторизации, как только мы получим добро из системы аутентификации. Система аутентификации отображает информацию пользователю, когда она передает управление нам, мы начинаем работу в системе авторизации. Поэтому мы должны хранить информацию, пока не получим контроль. Это орехи! – 2009-07-16 12:25:58

+0

как насчет энергозависимой памяти, такой как сеанс? Не лучшее решение, бог знает, что там много ошибок захвата сессии.Но до тех пор, пока вы только сохраняете это до тех пор, пока вам это нужно, и удаляйте его потом, это лучше, чем сохранить его в БД. Думаю, – paan 2009-08-24 13:01:10

8

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

Большинство компаний ссылаются на это как-то вроде «Управление профилями клиентов» и на самом деле довольно разумны в отношении сборов.

Несколько провайдеров я знаю (в произвольном порядке):

1

Для электронной коммерции использовать тип случая (думаю, Amazon 1 -Щелкните), вы можете зашифровать CC (или ключ) с помощью надежного пароля пользователя. Предполагая, что вы храните только хэш пароля, только пользователь (или стол радуги - но его нужно будет запускать на каждый пользователь и не будет работать, если он не придумал тот же пароль - не только 1, что хэширует то же самое) может расшифровать его.

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

Смежные вопросы