Я попал в ситуацию, когда мне необходимо хранить данные держателя кредитной карты в моей базе данных, и я ищу наиболее безопасный способ решения этой проблемы. Обратите внимание, что я полностью осведомлен о PCI-DSS, поэтому мой вопрос касается исключительно аспекта шифрования.
Теперь я решил использовать шифрование с открытым ключом Curve25519 (с использованием libsodium), и закрытый ключ хранится в безопасном, автономном режиме. Давайте предположим, что я реализовал это правильно. Я полагал, что когда я зашифровываю только номер кредитной карты и дату истечения срока действия, это будет очень просто, так как известны первые 6 и последние 4 цифры номера карты, а также дата истечения срока действия, поскольку они уже являются обычным текстом в база данных где-то.
Допустим, я шифрую это
1234561111118762|10|21|VISA
Теперь единственным секретом в этой строке является 111111
(6 цифр). Это будет стоить кому-то 10 ^ 6 попыток выяснить это число.
Но что, если я шифрую вот так
1234561111118762|10|21|VISA|aVeryLongPsuedoRandomStringGeneratedUniquelyForEachEncryptedString
Не помешает ли это сценарию грубой силы 10 ^ 6? Или я что-то упустил?