【问题标题】:How to encrypt columns in a database (i.e. email, f, m, l, etc.) and be able to easily change encryption key如何加密数据库中的列(即电子邮件、f、m、l 等)并能够轻松更改加密密钥
【发布时间】:2017-10-25 07:48:44
【问题描述】:

我想加密数据库表中的多个字段,但出于安全原因,我希望以一种允许我每 n 个月轻松更改加密密钥的方式进行加密。我最初的想法是将 IV 与行一起存储,以便我可以使用它来解密每个条目,其中加密的密钥将存储在其他地方,在代码或配置文件中。

当我需要更改密钥时,这似乎每隔 n 个月就会成为一场噩梦,因为我必须运行一些工作,需要更改每一行的 IV,并再次解密/加密所有新键的必要列。似乎这种方法在尝试再次解密和加密时也可能使系统陷入困境。我没有看到很多描述这个问题的实用方法的文章,只是提到应该定期更改密钥。

我是加密游戏的新手。我正在使用 AES-256 加密。

【问题讨论】:

    标签: c# sql-server encryption


    【解决方案1】:

    这取决于您要保护的数据的敏感性。如果数据对您的用例非常敏感,那么加密方法的复杂性将相应扩展。相反,您可以使用更简单的技术来保护“不太敏感”的数据。无论哪种方式,将 IV 存储在行中都不是最好的做法,因为如果您的事务容易受到 SQL 注入的攻击,您就有可能泄露整个数据。

    关于您的问题,如果您有高度敏感的数据,那么您可能需要使用 AES 256 等技术,这在密钥迁移和其他修改的情况下会很繁重。或者,您可以使用简单的方法,例如使用随机生成的密钥的一次性键盘,并将密钥存储在安全的密钥库中。您可以每 n 个月更换一次密钥,并且必须再次解密/加密。在这种情况下,您将拥有的唯一优势是 OTP 解密/加密是一种比 AES 解密/加密更轻松的过程。

    注意:可能有更优雅的方式来做到这一点。尝试在https://security.stackexchange.com/ 上发布您的问题

    【讨论】:

    • 谢谢。我将添加到安全部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2014-08-28
    • 2011-06-17
    • 2014-01-25
    • 2018-09-09
    相关资源
    最近更新 更多