Итак, как и в любом другом достаточно грамотном магазине веб-разработок, мы надеваем хлопковые перчатки, когда прикасаемся к кредитным картам, и используем Braintree SecureVault для их хранения, чтобы избежать проблем с соответствием PCI.
Однако теперь мы хотимпредложить бесплатную пробную версию для нашего сервиса, которая в значительной степени зависит от возможности гарантировать, что данная кредитная карта будет использоваться только один раз для бесплатной пробной версии.В идеале мы могли бы хэшировать номер кредитной карты, чтобы гарантировать уникальность.Проблема в том, что набор действительных номеров кредитных карт невелик, поэтому будет легко перебрать номера кредитных карт.Насколько я вижу, тактика засолки бесполезна, потому что, если у кого-то есть доступ к базе данных хэшей, у него, скорее всего, будет и код, и, следовательно, алгоритм посола.
Две лучшие идеи на данный моментявляются:
A) Хранение хэшей изолированно в наборе, безотносительно к их платежной информации.Поэтому, если хэши взломаны, все, что у них есть, это список номеров кредитных карт, которые использовались в определенный момент времени, без какой-либо личной информации или сведений о том, является ли он еще действительным.Основным недостатком здесь является то, что у нас есть запись последних 4, которые потенциально могут быть использованы для их сопоставления до некоторой степени.
B) Хеш без полного числа и работа с ложными положительными и отрицательными сторонами.Хеширование на name, last-4 и expiration должно быть довольно уникальным.Ложный позитив - это как выигрыш в лотерею, мы можем справиться с ним в службе поддержки.Ложное отрицание может быть вызвано изменением имени, нам не ясно, какие у нас есть гарантии относительно точности сопоставления имен (на мой взгляд, это может повлиять как на шлюз, так и на торговый счет), поэтому это может открыть лазейку.
Мысли?Предложения?Испытанная в бою мудрость?