我的问题:
确保小数据数据安全的最佳方法是什么?下面我提出一个关于对称和非对称加密的问题。我很好奇是否有办法对小数据进行非对称加密,并且相当于某种类型的" salting"实际上让它安全吗?如果是这样,你怎么选择"盐"并正确实施? 或者有更好的方法来解决这个问题吗?
我的关注解释:
加密具有" bulk"在我看来,非对称加密方法非常安全。如果我在数据库中有一小部分数据,比如信用卡号,密码或社会保险号,我就会担心。然后,加密的数据具有固定长度和呈现。话虽这么说,黑客可能会尝试使用公钥加密每个可能的社会安全号码(10 ^ 9排列),并将其与存储在数据库中的值进行比较。一旦找到匹配,他们就会知道实际数字。可以对其他数据类型进行类似的攻击。因此,我决定避免像函数中内置的mysql&{39} AES_ENCRYPT()
这样的对称方法,但是现在我也在质疑不对称。
我们如何正确保护小数据?
Salting通常用于哈希算法,但我需要能够在之后恢复数据。我想可能有一些"基本批量文本",然后将敏感数据附加到最后。对该连接进行加密。解密会通过解密然后剥离"基本批量文本来扭转这一过程。如果黑客可以找出基本批量文本,那么我就不知道这将如何增加额外的安全性。
选择其他数据作为加密的一部分,以帮助像从数据库中的其他字段派生的盐值(或那些字段的哈希值,或者那些产生相同问题的组合)一样,似乎也很脆弱。由于黑客可以通过类似于上述攻击的组合来尝试执行更强大的“蛮力”形式。话虽这么说,我不确定如何正确保护小数据,我的谷歌对我没有帮助。
确保小数据数据安全的最佳方法是什么?
答案 0 :(得分:3)
如果使用RSA公钥进行加密,则无需对小数据进行加密。使用OAEP填充。填充引入相当于随机盐。试一试:使用相同的RSA公钥加密信用卡号,使用OAEP填充,然后查看结果。您将看到两个不同的值,与随机数据无法区分。
如果使用AES对称密钥进行加密,则可以对每个数据使用随机IV,并将明文公开地存储在密文旁边。尝试使用AES CBC模式两次加密信用卡号,例如,每次使用唯一的16字节(加密强)IV。您将看到两种不同的密文。现在,假设一个16字节的AES密钥,尝试强制这两个输出,而不使用任何密钥知识。仅使用密文和16字节IV,并尝试发现信用卡号。
编辑:它超出了问题的范围,但是自从我在评论中提到它,如果客户端可以向您发送任意密文进行解密("解密此信用卡信息") ,您不能让客户端看到解密时的填充错误与解密时的任何其他错误之间的任何差异。查找"填充oracle"。答案 1 :(得分:2)
如果您需要使用对称密钥算法加密数据,AES是一个不错的选择。使用诸如CBC和随机IV之类的模式,这将确保加密相同的数据将产生不同的输出。
添加PKCS#7néePKCS#5进行填充。
如果数据中有实际价值,请聘请加密领域专家来帮助设计并稍后进行验证。
答案 2 :(得分:1)
非对称加密对于在双方之间传递加密数据最有用。例如,您有一个接受信用卡号的移动应用程序,需要将它们传输到服务器进行处理。您希望公共应用程序(本质上不安全)能够加密数据,只有您应该能够在安全的环境中解密它。
存储是完全不同的事情。你没有与不安全的一方进行任何通信,你是唯一一个处理数据的人。你不想让每个人都有办法解密,如果他们破坏你的存储,你想让事情变得困难。使用对称算法进行存储,并包含一个唯一的初始化向量,如果存储受到危害,每个加密值都是解密的障碍。
PCI-DSS要求您使用Strong Cryptography,它们定义如下。
在发布时,最低加密强度的行业测试和认可标准和算法的示例包括AES(128位和更高),TDES(最小三倍长度密钥),RSA(2048位和更高),ECC( 160位和更高)和ElGamal(2048位和更高)。有关加密密钥强度和算法的更多指导,请参阅NIST特刊800-57第1部分(http://csrc.nist.gov/publications/)。
除此之外,他们主要关注密钥管理,并且有充分的理由。泄露存储无助于实际拥有解密数据的方法,因此请确保正确地管理对称密钥并符合其要求。
答案 3 :(得分:0)
还有一个名为Format-preserving encryption的研究领域,旨在帮助遗留系统维持列宽和数据类型(即使经过加密等,社会安全号码也是9位数字),同时允许值进行安全加密。这样,可以在传统系统的较低级别上创建加密,而不会破坏依赖特定数据格式的加密系统上的所有层。
有时称为“小空间加密”,并且在论文How to Encipher Messages on a Small Domain Deterministic Encryption and the Thorp Shuffle中也对此思想进行了说明,该论文对该主题进行了介绍,并提出了由作者设计的特定算法。维基百科文章提到了许多其他具有类似目的的算法。
如果您希望通过视频对该主题进行讲解,请参阅The Mix-and-Cut Shuffle: Small Domain Encryption Secure Against N Queries来自Crypto 2013的演讲。其中包括详细描述几种算法如何工作的图形以及对这种设计的安全性的一些早期研究。
答案 4 :(得分:-1)
当我加密短信时,我会在加密之前为它们添加一个相对较长的随机盐。 编辑其他人建议将盐预先添加到有效负载中。
因此,例如,如果我加密假信用卡号4242 4242 4242 4242
。我实际加密的是
tOH_AN2oi4MkLC3lmxxRWaNqh6--m42424242424242424
第一次,
iQe5xOZPIMjVWfrDDip244ZGhCy2U142424242424242424
第二次,等等。
这种随机腌制显着阻碍了您描述的查找表方法。许多操作系统提供高质量随机数的来源,如* nix /dev/rand
和Windows' RNGCryptoServiceProvider
模块。
如果没有纵深防御和PCI数据安全认证,以这种方式保存支付卡数据仍然不行。
编辑:某些加密方案会将此salting作为其正常运行的一部分来处理。