2016-03-14 2 views
0

Для поиска/индексирования существует ли простой/чистый способ частичного шифрования поля с помощью MySQL?Шифрование частичного поля MySQL

Например, используя встроенные функции, такие как AES_ENCRYPT() или любой другой эквивалент?

Примеры:

  1. Я хочу, чтобы зашифровать все последнее поле имени, за исключением первых 3-х символов.
  2. Я хочу зашифровать все поле номера кредитной карты, исключая последние 4 цифры.

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

Мои googles не окупились. Кто-нибудь знает способ сделать это чисто?

+0

Нет - не чисто. Шифрование только «части» значения означает, что значение не является атомарным, и поэтому ваша база данных не нормируется. Это можно сделать, создав представление, включающее функции, а затем отключив прямой доступ SELECT к таблице. – symcbean

ответ

4

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

Дублирование данных минимальное.

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

Код подтверждения карты (трех- или четырехзначный код, обычно показанный на оборотной стороне карты) должен быть никогда, ни при каких обстоятельствах не должен храниться в какой-либо форме после подтверждения карты.

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

Если вы собираете или храните номера платежной карты (номера кредитных карт), ваша компания становится объектом требований к безопасности данных в платежных картах (PCI). В частности, вам, в конце концов, придется заполнить анкету для самооценки https://www.pcisecuritystandards.org/documents/SAQ_A-EP_v3-1.pdf. Это в первый год будет стоить около 50 000 долларов США, а в каждом последующем году - примерно половину этой суммы.

С другой стороны, работа через платежный процессор, такой как stripe.com или Paypal, использует свои требования PCI Data Security и снижает вашу подверженность.

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

Если вы должны хранить информацию о платежной карте, вы можете использовать асимметричный (общедоступный/закрытый) механизм шифрования. Чтобы сделать это безопасно, настройте выделенный компьютер и создайте пару ключей (возможно, RSA) на этом компьютере. Экспортируйте открытый ключ в свое веб-приложение и не копируйте закрытый ключ. Затем отключает выделенную машину и ее диски, а отключает ее от сети. (Откройте его и извлеките карты адаптера Wi-Fi и Bluetooth, а затем отсоедините кабель Ethernet.)

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

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

+0

Браво, Олли. Я задаю этот вопрос только для вашего ответа. –

+0

@ Олли Джонс, я люблю ответ. У меня есть забота о том, что вы заявили, хотя ... Вы упомянули о государственном/частном механизме. Разве этот асимметричный подход не будет иметь тот же риск, что и симметричный? Например. Если в качестве хакера я использую открытый ключ для шифрования каждой перестановки возможных значений кредитной карты, то сравнивайте эти значения с тем, что хранится в db, тогда я могу найти совпадение в базе данных и вывести простой текст. Легит озабоченность? Если да, то как мы справляемся с этим? –

+0

@OllieJones, я разместил свой комментарий выше в своем собственном вопросе, поскольку он кажется вне его рамки: http://stackoverflow.com/questions/36015610/does-asymmetric-encryption-require-salting-for-small -данные –

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