安全加密信用卡数据
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 解决了这个问题。
我遇到了这样一种情况,我需要将信用卡持卡人数据存储在我的数据库中,我正在寻找最安全的处理方式。请注意,我完全了解 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 解决了这个问题。