SQL Server列级encryption – 旋转键

我们正在考虑对敏感数据使用SQL Server列(单元)级别encryption。 我们最初encryption列时应该没有问题,但是我们有要求每年都要encryption密钥。 看来这个要求可能是问题。

假设:包含敏感数据列的表格将有5亿条logging。

以下是我们考虑实施的步骤。 在encryption/解密过程中,数据是在线的,这个过程需要多长时间?

  • 最初encryption列
  • 新年
  • 解密列
  • 用新密钥encryption列。

问题:当列正在被解密/encryption时,是在线数据(可以查询)? SQL Server提供的function允许在数据联机时进行密钥更改吗?

BarDev

重新encryption静态数据将是令人望而却步的。 500Mlogging更新会产生巨大的日志,大量的数据IO,如果不是数天将持续数小时,总体将会相当具有破坏性。 更不用说操作错误可能会使整个数据库完全encryption(即没有解密它的密钥)。

我会推荐的是旋转键层次更高的键:

  • 使用对称密钥来encryption数据。
  • 定期更改对称密钥,例如。 每周一次生成一个新数据,用新数据encryption新数据,但不更改旧数据
  • 用证书encryption对称密钥
  • 使用DECRYPTBYKEYAUTOCERT来解密数据,这将自动处理正确的对称密钥
  • 在需要时,旋转encryption对称密钥的证书。 对称密钥支持多种证书encryption,所以添加一个新的证书是完全可行的,通过新的证书encryption到所有的对称密钥,然后丢弃旧的证书

大公司经常采用类似的scheme。 重新encryption所有的数据很less做,因为是如此的禁止。 使用多个对称密钥并每隔一段时间生成一个新对称密钥将会减less可能的隐私损失,如果对称密钥受到威胁。 旋转用于解密对称密钥的证书可以减less证书泄露,因为即使数据仍然使用相同的旧对称密钥encryption,受感染证书也不能访问数据。

诚然,我可以设想一个攻击,如果我有权访问证书,我可以提取所有对称密钥材料,那么当证书旋转时,理论上我可以使用保存的密钥材料来解密数据(使用其他方法比SQL Server)。 但是,这种说法并没有什么不同,因为“如果我在旋转之前访问了一个受损的证书,我可以解密所有的数据并保存解密的数据”,这使得攻击变得新鲜了,因为在事实上,密钥轮换将恢复已经丢失给攻击者的数据。

您当然可以编写一个应用程序来执行解密/encryption( SELECT数据,解密,用新密钥重新encryption,然后将其UPDATE回来 – 敏感数据永远不会以未encryption方式存储),但是您正在为年度关键轮换创造大量的开销,随着您的数据库增长,这只会变得更大。 还有一个问题,就是需要重新encryption才能保持两个密钥(也许现在是一个小时,明年可能是几天,这取决于你的增长速度和encryption的复杂程度)

您可能需要评估年度变更要求背后的业务/安全逻辑,并通过实施对解密密钥的合理控制以及“在出现妥协或怀疑折衷的情况下”更改密钥的要求,来查看是否可以获得同等的安全性。 ..