数据库的最佳+最强加密方法[关闭]
Posted
技术标签:
【中文标题】数据库的最佳+最强加密方法[关闭]【英文标题】:Best + Strongest method of encryption for databases [closed] 【发布时间】:2012-01-01 23:44:18 【问题描述】:我将密码和个人数据存储在数据库中。加密这些值以进行保护的最强方法是什么。
另外,在数据库中加密信用卡信息的最佳方法是什么?或者我应该使用其他东西来存储信用卡信息,而不是 mysql 数据库??
谢谢。
【问题讨论】:
从不存储信用卡信息。 @ShaktiSingh 那么亚马逊之类的公司如何存储它们? 阅读:***.com/questions/3002189/… 或***.com/questions/2240705/online-credit-card-storage。让第三方公司为您处理信用卡会好得多,因为您需要遵循 PCI DSS 标准。对于密码,最好进行单向哈希。对于个人数据,MySQL 内置了 AES,但如果您想要超过 128 位的密钥,您可能需要重新编译代码。 @HBellamy:在存储信用卡信息的同时,您必须处理很多很多事情,并且涉及到很大的风险。 【参考方案1】:我认为在 SQL 中存储任何内容都可以,只需先对其进行加密。如果您需要以某种方式识别数据(例如使用数据库条目的唯一密钥),请创建一个随机生成的字符串或安全哈希,并将其存储在您的加密数据旁边。
最好坚持使用经过尝试和测试的东西。因为它是一个数据库(大概是一个计费系统),所以快速检索会很好。因此,请远离非对称加密——只有在需要与他人共享对称密钥时才应使用非对称加密。
AES 的某些特定强度(例如 256 位)应该没问题。我很高兴知道我们以这种方式获得的我的个人详细信息。
在存储用户密码方面,通常的做法是生成一个盐(随机字符串),然后使用安全散列算法(RIPEMD、SHA1、MD5)对用户密码与此盐相结合进行散列。
这可以防止预先计算的字典破解程序恢复密码,因为它还需要处理所有随机盐。
不加密密码,只对它们进行哈希处理。无需能够以明文形式恢复密码,它只会使您的系统通过这一个主密钥容易受到攻击。不要使用用户可以选择的密钥对用户数据进行加密,一旦密钥丢失,将导致数据无法恢复。为用户提供在丢失密码时恢复对其帐户的访问权限的常用方法。
如果您真的需要隐藏用户名,也许您应该问问自己您正在使用的数据架构。一般来说,个人数据,尤其是计费数据不应存储在显而易见的地方,它应该只能由受信任的方访问。这些受信任方将需要查看用户名和信息的内容,因此可能不需要加密。
如果您在开放的互联网上传输用户信息,请对其进行加密。
如果您担心数据库服务器上用户信息的安全性,不妨考虑与可以为您的服务器提供一些额外物理安全性的云或数据托管提供商合作。
加密只是稳健安全策略的一部分。特别关注建立安全环境以开展业务的人为因素。在需要知道的基础上分发对敏感资源的访问。如果所有密钥丢失,请确保您安排备份或某种数据恢复方式。
【讨论】:
+1 很好的彻底回答 nope 的评论:“'所以远离非对称加密 - 如果你需要与某人共享对称密钥,你应该只使用它来加密它们。' - 这没有任何意义 - 为什么有人会加密除了 TLS 之外的密钥?当然,非对称加密有其(许多)用途 - 事实上,应该避免使用对称加密方法,因为如果传输流未加密,它们在设计上很容易受到攻击; 知道具有非对称加密的公钥并不授予解密能力。" @PeterO。它实际上是有道理的......缓慢的非对称公钥加密方法用于加密对称密钥的交换。快速的对称密钥加密又用于加密数据流。【参考方案2】:请注意,在存储信用卡数据时,您需要担心的不仅仅是加密。还有严格的审核要求和许多其他问题(如果您不熟悉,请参阅PCI website)。
虽然您可能设法获得 PCI 合规性,但如果您并不真正熟悉必要的安全措施,那么这样做可能会让您承担巨额责任。如果您的系统遭到破坏或被发现不合规,您将面临严重的罚款。
查看支付提供商(例如 Authorize.net)以获取替代解决方案。具体来说,他们的Customer Information Manager 产品值得研究,因为他们会在他们的服务器上为您存储安全数据,例如信用卡信息。
【讨论】:
以上是关于数据库的最佳+最强加密方法[关闭]的主要内容,如果未能解决你的问题,请参考以下文章