security - 如何保障小数据的数据安全?

标签 security encryption aes salt pci-compliance

我的问题:

确保小数据数据安全的最佳方法是什么?下面我提出了一个关于对称和非对称加密的问题。我很好奇是否有一种方法可以对小数据进行非对称加密,相当于某种“加盐”以真正确保其安全?如果是这样,您如何选择“盐”并正确实现? 或者有更好的方法来处理这个问题吗?

我的担忧的解释:

在加密具有“批量”的内容时,在我看来,非对称加密方法非常安全。我担心的是我是否有一小部分数据,比如数据库中的信用卡号、密码或社会保险号。然后被加密的数据是固定长度和表示的。也就是说,黑客可以尝试使用公钥加密每个可能的社会安全号码(10^9 排列)并将其与存储在数据库中的值进行比较。一旦找到匹配项,他们就会知道真实数字。可以对其他数据类型进行类似的攻击。因此,我决定避免对称方法,例如 mysql 的 AES_ENCRYPT() 内置函数,但现在我也在质疑非对称方法。

我们如何正确保护小数据?

加盐通常用于哈希算法,但我需要能够在之后取回数据。我考虑过可能有一些“基本批量文本”,然后将敏感数据附加到末尾。对该连接进行加密。解密将通过解密然后剥离“基本批量文本”来逆转该过程。如果黑客能够找出基本的批量文本,那么我看不出这将如何增加任何额外的安全性。

选择其他数据作为加密的一部分,以帮助充当从数据库中其他字段派生的盐值(或这些字段的哈希值,或产生相同问题的组合)似乎也很容易受到攻击.由于黑客可以通过类似于上述攻击的组合来尝试执行更智能的“蛮力”形式。话虽如此,我不确定如何正确保护小数据,我的谷歌也没有帮助我。

确保小数据的数据安全的最佳方法是什么?

最佳答案

如果您使用 RSA 公钥加密,则无需对小数据进行加盐。使用 OAEP 填充。填充引入了等效的随机盐。尝试一下:使用相同的 RSA 公钥加密信用卡号两次,使用 OAEP 填充,然后查看结果。您将看到两个不同的值,与随机数据无法区分。

如果您使用 AES 对称 key 进行加密,那么您可以为每个数据使用一个随机 IV,并将 IV 明文存储在密文旁边。尝试使用 AES CBC 模式对信用号进行两次加密,例如,每次使用唯一的 16 字节(加密强度高)IV。你会看到两个不同的密文。现在,假设一个 16 字节的 AES key ,尝试暴力破解这两个输出,而不使用任何 key 知识。仅使用密文和 16 字节 IV,并尝试发现信用卡号。

编辑:这超出了问题的范围,但由于我在评论中提到它,如果客户端可以向您发送任意密文来解密(“解密此信用卡信息”),您不能让客户端看到任何解密时的填充错误与解密时的任何其他错误之间的区别。查找“填充 oracle”。

关于security - 如何保障小数据的数据安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36015610/

相关文章:

jquery - HTML/Jquery/Javascript 身份验证和授权模式 (ASP.NET)

ios - 加密视频文件IOS

postgresql - 加密 PostgreSQL 数据库并从 Web 应用程序用户处获取 key

java - 在 Java 中解密 C# AES 加密文本

javascript - 在网站中安全嵌入代码

java - 在客户端服务器模型之间使用公钥和私钥加密是否明智?

java - 解密电子邮件中附加的 GPG 文件

c# - AES256 解密损坏第一个字节

java - 将 .Net 解密转换为 Java

java - Play Framework 安全模块