我们正在考虑对敏感数据使用SQL Server列(单元)级别encryption。 我们最初encryption列时应该没有问题,但是我们有要求每年都要encryption密钥。 看来这个要求可能是问题。
假设:包含敏感数据列的表格将有5亿条logging。
以下是我们考虑实施的步骤。 在encryption/解密过程中,数据是在线的,这个过程需要多长时间?
问题:当列正在被解密/encryption时,是在线数据(可以查询)? SQL Server提供的function允许在数据联机时进行密钥更改吗?
BarDev
重新encryption静态数据将是令人望而却步的。 500Mlogging更新会产生巨大的日志,大量的数据IO,如果不是数天将持续数小时,总体将会相当具有破坏性。 更不用说操作错误可能会使整个数据库完全encryption(即没有解密它的密钥)。
我会推荐的是旋转键层次更高的键:
大公司经常采用类似的scheme。 重新encryption所有的数据很less做,因为是如此的禁止。 使用多个对称密钥并每隔一段时间生成一个新对称密钥将会减less可能的隐私损失,如果对称密钥受到威胁。 旋转用于解密对称密钥的证书可以减less证书泄露,因为即使数据仍然使用相同的旧对称密钥encryption,受感染证书也不能访问数据。
诚然,我可以设想一个攻击,如果我有权访问证书,我可以提取所有对称密钥材料,那么当证书旋转时,理论上我可以使用保存的密钥材料来解密数据(使用其他方法比SQL Server)。 但是,这种说法并没有什么不同,因为“如果我在旋转之前访问了一个受损的证书,我可以解密所有的数据并保存解密的数据”,这使得攻击变得新鲜了,因为在事实上,密钥轮换将恢复已经丢失给攻击者的数据。
您当然可以编写一个应用程序来执行解密/encryption( SELECT
数据,解密,用新密钥重新encryption,然后将其UPDATE
回来 – 敏感数据永远不会以未encryption方式存储),但是您正在为年度关键轮换创造大量的开销,随着您的数据库增长,这只会变得更大。 还有一个问题,就是需要重新encryption才能保持两个密钥(也许现在是一个小时,明年可能是几天,这取决于你的增长速度和encryption的复杂程度)
您可能需要评估年度变更要求背后的业务/安全逻辑,并通过实施对解密密钥的合理控制以及“在出现妥协或怀疑折衷的情况下”更改密钥的要求,来查看是否可以获得同等的安全性。 ..