【问题标题】:Encryption of database data数据库数据加密
【发布时间】:2017-06-27 07:32:47
【问题描述】:

现在我知道这个问题已经被问过很多次了,关于在哪里进行加密、加密什么以及使用什么加密。

无论如何,当涉及到数据库中的数据加密时,我知道我可以将AES_ENCRYPT() 与字段名和给定密钥一起使用,另外我可以合并日期和时间之类的内容,甚至可以合并存储在单独表中的密钥.

我和其他人可能面临的问题是,似乎有一百万种不同的方法可以做到这一点,每个人都有自己的看法。

在安全方面,我知道最好不要尝试创建自己的安全措施。

所以,我的问题是:遵循什么好的标准做法?

我对使用 AES 没有意见,但有行业标准吗?

【问题讨论】:

  • 让我们看看我是否理解。问题的前半部分(包括代码)与它无关。您想在 MySQL 中加密数据,但不确定是否使用 AES_ENCRYPT(),因为您已经阅读了太多意见,所以您决定要更多?我建议您编辑问题,删除所有对单向哈希的引用(因为您需要双向加密)并将其放在可以使其回答的特定术语中。您对 AES 的具体担忧是什么?
  • 好吧,这很公平。
  • 如果您有充分的理由加密数据库中的数据,并且希望 MySQL 自动为您处理,那么使用 AES_ENCRYPT 就可以了,因为它将处理初始化向量等背后的复杂细节。但是,如果您没有有充分的理由在数据库级别加密数据(因为在处理加密字段时您丢失了 SQL 附带的所有好处),那么就不要这样做它并加密您的应用程序和 MySQL 之间的流量(也可以由 MySQL 自动处理)。
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Information Security Stack ExchangeDatabase Administrators Stack Exchange 会是一个更好的提问地点。

标签: mysql database security encryption


【解决方案1】:

我已经做了一些,因此可以描述一个权衡。有一些特定于实现的问题,例如是否有措施使短值加密安全(我不知道在 MySQL 上的答案——我知道在 PostgreSQL 上处理的问题具有显着的性能成本) .

假设在数据库中实现了安全加密(这里的性能与安全性实际上是另一个重大权衡),您在数据库中会遇到一些基本问题。

  1. 一旦您将密文存储在数据库中,您就放弃了使用索引通过该信息进行搜索的能力。

  2. 使用 aes_encrypt,您可以在查询字符串中传递您的密钥。这意味着如果查询被记录,则密钥被记录到。当出现问题时,确保不会发生这种情况会使故障排除变得有点困难。

  3. 另一方面,您可以使用适当的子查询构建更高级的密钥管理系统,这样您就可以优雅地处理密钥轮换。

使用应用程序级加密处理密钥轮换比在数据库中更难。但是日志中的关键披露是一个需要仔细考虑的实际问题。如果我可以提供建议,那就是先关注那个问题,然后再解决你更倾向于解决的问题。

【讨论】:

  • 如果密码是确定性的(即始终加密为相同的密文),则在列中存储密文不会放弃按索引搜索的能力。您可以加密所需的搜索值,并搜索加密值的索引。
  • 在这种情况下,如果加密是可逆的(我们在这里讨论的是 AES),那么它就容易受到攻击。
  • 好吧,所有加密都是可逆的。我认为您的意思是,如果模式是可识别的,那么它确实比随机加密更容易受到攻击。但是,重点。
  • 可逆加密是指 AES 之类的东西,而不是单向散列算法。
  • 但即使使用单向哈希,这也是我们使用盐的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
  • 2012-03-19
相关资源
最近更新 更多