Надежное шифрование данных кредитной карты - PullRequest
0 голосов
/ 29 мая 2019

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

Теперь я решил использовать шифрование с открытым ключом Curve25519 (с использованием libsodium), и закрытый ключ хранится в безопасном, автономном режиме. Давайте предположим, что я реализовал это правильно. Я полагал, что когда я зашифровываю только номер кредитной карты и дату истечения срока действия, это будет очень просто, так как известны первые 6 и последние 4 цифры номера карты, а также дата истечения срока действия, поскольку они уже являются обычным текстом в база данных где-то.

Допустим, я шифрую это

1234561111118762|10|21|VISA

Теперь единственным секретом в этой строке является 111111 (6 цифр). Это будет стоить кому-то 10 ^ 6 попыток выяснить это число.

Но что, если я шифрую вот так

1234561111118762|10|21|VISA|aVeryLongPsuedoRandomStringGeneratedUniquelyForEachEncryptedString

Не помешает ли это сценарию грубой силы 10 ^ 6? Или я что-то упустил?

1 Ответ

2 голосов
/ 29 мая 2019

Говоря только о шифровании ...

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

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

Полагаю, что libsodium решил эту проблему.

...