实际上,您在问题中暗示了三个问题。
- 标题谈论的是静态数据。
- 在问题中,您也谈到了访问控制。
- 此外,您还会遇到传输中的数据问题。
如果您已经在使用数据库系统并在现有系统中引入加密,那么这个问题可能会有不同的答案。许多数据库系统现在支持这样的安全特性(见下文)。
访问控制和传输中的数据
大多数数据库系统从第一天起就支持访问控制(这几乎是最低要求)。但是,当您说某某系统需要能够读取它时,这实际上是一个访问控制问题。
同样,传输中的数据也是所使用协议的问题,其中许多由现有的数据库系统支持。例如,SQL Server支持 SSL进行连接,MySQL也是如此。(搜索其他人,他们可能也会支持。)
静态加密
第三个是静态加密,它解决了如果未经授权的人或系统要获取实际的数据库文件,他们会看到什么的问题。它还涉及密钥管理的相关问题,即为什么获得您的数据库文件的人不能获得密钥?
在设最终转移到AES)。即使它不能是 0 成本,也必须有一条路径,尤其是。如果您的数据库将成为分布式数据库,请更改算法或密钥。
许多数据库现在确实提供静态加密以及一些密钥管理解决方案。例如 SQL Server自 2008 年以来就支持加密。此外,SQL Server 也发布了一个密钥生命周期管理故事,显然支持对称和非对称密钥(通过证书)。我相信 SQL 还支持完整的数据库加密与通过查询选择的字段(例如您的 SSN 情况)。
同样,MySQL 也支持通过查询函数进行加密,您可以将其用于您的 SSN 场景。您也可以使用其他可能已经支持加密的数据库系统并使用它们。
如果您使用支持内置加密的系统,您可能会避免许多与自己操作相关的陷阱,并获得受支持的系统。
研究数据库
CryptDB是麻省理工学院开发的数据库系统,它对静态数据进行加密,还支持对加密数据运行查询。如果您查看该系统的页面,它会列出实际使用它的组织。
编写自己的加密逻辑
这可能更耗时且更具挑战性,但根据您的问题,您似乎正在考虑这是一个问题。如果我处于类似情况,我肯定会避免使用现有的数据库系统之一。
有很多问题。例如,当您加密数据时,输出有些随机化,因此使用相同密钥加密相同数据通常不会产生相同的密文。这可能有点挑战性,您可能必须降低熵(例如,通过使用相同的 IV 或盐),这可能会影响系统的安全性。通过存储哈希(甚至是使用单个密钥的 HMAC)之类的简单操作,如果有人获得了数据库文件,他们可以在数周甚至数天内使用蛮力恢复数据。对于 SSN 之类的字段尤其如此,除非您要花时间并且总是需要多个字段进行查询(例如 SSN 和 DOB 以及姓氏的前三个字母,或此类组合),并且仅将这些字段存储为散列但两者都不是这些分开。
除此之外,还必须弄清楚关键的生命周期管理问题。
编辑:这实际上是一个常见问题,我曾经评估过加密数据,当我写最初的回复时,我没有在这里包括。此后,我更新了我的回复以包括这一点,并阐明了访问控制、安全连接和静态数据问题。