我遇到了一种情况,我需要将信用卡持有人的数据存储在数据库中,而我正在寻找最安全的方式来处理此问题。请注意,我完全了解PCI-DSS,所以我的问题纯粹是关于加密方面。
现在,我决定使用Curve25519公共密钥加密(使用libsodium),并且私有密钥可以安全地脱机存储。假设我正确实现了这一点。我发现,当我仅加密信用卡号和有效期时,由于卡号的前6位和后4位以及有效期是已知的,因此这很容易被暴力破解,因为它们已经是纯文本格式了。数据库在某处。
假设我正在对此进行加密
1234561111118762|10|21|VISA
现在,该字符串中唯一的秘密是111111
(6位数字)。尝试找出这个数字的人将花费10 ^ 6。
但是,如果我这样加密
1234561111118762|10|21|VISA|aVeryLongPsuedoRandomStringGeneratedUniquelyForEachEncryptedString
这是否可以防止暴力破解10 ^ 6情况?还是我错过了什么?
答案 0 :(得分:2)
说只是关于加密...
我假设“蛮力”是指拿公共密钥,加密并与您存储的密文进行比较。如果这是您的意思,那么答案取决于实现。
您需要确定实现是否具有确定性-如果是,那么可以,可以蛮力进行比较。如果不是(您希望的那样),那么这将不是问题。
我希望libsodium可以解决这个问题。