安全加密信用卡数据

Securely encrypting credit card data

我遇到了这样一种情况,我需要将信用卡持卡人数据存储在我的数据库中,我正在寻找最安全的处理方式。请注意,我完全了解 PCI-DSS,所以我的问题纯粹是关于加密方面的。

现在我决定使用 Curve25519 public 密钥加密(使用 libsodium)并且私钥安全地离线存储。让我们假设我正确地实现了这一点。我认为当我只加密信用卡号和到期日时,这很容易被暴力破解,因为卡号的前 6 位和后 4 位数字以及到期日都是已知的,因为它们已经是纯文本某处的数据库。

假设我正在加密这个

1234561111118762|10|21|VISA

现在这个字符串中唯一的秘密是 111111(6 位数字)。要找出这个数字需要花费 10^6 次尝试。

但是如果我这样加密呢

1234561111118762|10|21|VISA|aVeryLongPsuedoRandomStringGeneratedUniquelyForEachEncryptedString

这会阻止暴力破解 10^6 的情况吗?还是我遗漏了什么?

关于加密...

我假设 "brute-force" 你的意思是获取 public 密钥,加密并与你存储的密文进行比较。如果这是你的意思,那么答案取决于实现。

您需要确定实施是否是确定性的 - 如果是,则可以 brute-force 并进行比较。如果不是(如您所料),那么这不是问题。

我希望 libsodium 解决了这个问题。