在我们将数据写入数据库之前,我们决定(由于技术原因很长)对数据进行应用程序级加密。
工作正常,但在某些时候我们想要旋转加密密钥。这意味着在数据库中重写每条记录。如果您的数据库有500亿条记录怎么办?
我不知道任何数据库技术可以在合理的时间内重写500亿条记录而不会给数据库带来压力。也许一些分布式数据库可以,但如果你用更新来充斥它们,它们往往会遇到压缩问题。
那么人们通常如何在大型数据库上轮换密钥呢?他们扔了大量的硬件吗?或者他们只是等待几个月才能完成?他们从不旋转加密密钥吗?还是有其他一些更好的解决方案吗?
我没有命名我们的数据库品牌,因为我愿意使用任何品牌的数据库,可以在不到一周的时间内更新500亿条记录,而无需使用大量的硬件。构建比我们只需要处理重新加密流量高峰所需的1000倍的怪物数据库将是一种浪费。
谢谢!
答案 0 :(得分:2)
事实上,重新加密所有记录将是一个很大的障碍。 你可以从aws https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html
中获取灵感您可以创建2层加密 - 使用自己的随机密钥加密每条记录,并使用主密钥加密记录密钥。当旋转主密钥时,您需要仅重新加密可能要求的记录密钥,但如果必须这样做,则必须比重新加密所有数据更好。