【问题标题】:Optimal datatype for storing encrypted field data存储加密字段数据的最佳数据类型
【发布时间】:2011-10-09 07:18:37
【问题描述】:

我有一个 sql 数据库,它需要存储一组必须快速查询的人口统计个人数据。

要求数据必须加密,因为它是个人信息,但也必须进行搜索以允许记录匹配。

我的问题是我应该将这些字段定义为哪些数据类型,如果它们是 varchar 或 varbinary,它们将存储加密数据?

我的想法是 varbinary 将减少代码中将加密数据转换为 base64 字符串的不必要开销,但是在 sql 中查询此数据会比查询 varchar 字段慢很多。我不确定 varbinary 字段对非聚集索引的表现如何?

[编辑] 我的问题实际上是针对查询性能的。比较字段是否相等时,存储 varbinary 数据会影响查询性能吗?

【问题讨论】:

  • 我明白了。这不是问题,因为只需要精确的比较。查询性能是我主要关心的问题。我需要能够尽快匹配这些字段上的记录。
  • 许多 RDBMS 允许由数据库对各个列进行加密 - 免去了您手动加密数据的麻烦。检查您的文档以查看您的系统是否支持此功能,以及如何查询存储此数据的数据。

标签: c# sql encryption query-optimization


【解决方案1】:

我过去所做的是计算加密数据的哈希值并将其存储在另一列中。哈希可以是您​​可以索引的 varchar 字段。总的来说,我认为与 varbinary 搜索相比,varchar 字段可以提供更好的查询性能。

【讨论】:

  • 我实际上也是在一组强制参数上这样做的,不幸的是我需要添加一些其他参数以进行进一步的可选过滤。
【解决方案2】:

您需要保护整个数据库,而不是单个字段。否则你将无法查询它们。

【讨论】:

  • 严格来说并非如此。可以对确切的字段比较进行查询,这正是我所需要的。保护整个数据库还有其他问题。我认为数据应该在传递到数据库之前进行加密。整个数据库加密实际上只有在以某种方式获得文件时才能保护它,但其他攻击将意味着数据被泄露
  • 但是,存在其他技术来保护网络上的数据,例如您所描述的,例如 HTTPS。
  • 无论通过什么方式获取SQL登录会发生什么?攻击者将拥有可用的纯文本记录。我同意你关于 HTTPS 的观点,但它是我担心的数据,通过网络传递它会得到处理。
  • 我明白你在说什么,但你需要在某处划清界限。如果您加密所有字段但攻击者随后获得密钥会发生什么 - 您是否加密了密钥?你所说的有很大的缺点,但是像密码这样的数据可以被散列(因为原始数据丢失了)。这不是你想要的。
猜你喜欢
  • 1970-01-01
  • 2010-10-08
  • 2010-09-18
  • 2017-10-28
  • 2014-09-12
  • 2012-01-09
  • 1970-01-01
  • 2017-10-26
  • 1970-01-01
相关资源
最近更新 更多