如果您在网络安全领域工作,或者与您组织的网络安全团队互动过,您可能听说过这个问题:“所有数据在传输过程中和存储时是否都已加密?” 传输加密在数据传输过程中保护数据,而存储加密则保护存储中的数据。
在高度监管的行业中,这是标准操作程序。在监管较少的行业中,在处理客户数据时,它仍然是一种谨慎的做法。
但还有一个很少有人谈论的加密领域,那就是 使用中的加密。 使用中的加密在数据在内存中处理时保护数据。 实际上,使用中的加密可以防止拥有服务器访问权限的人通过内存转储或内存取证访问数据,这些操作可以对服务器上运行的任何进程执行。(要真正了解使用中的加密的重要性,您应该以您的组织已经被入侵,并且安全是关于最大程度地减少潜在损害的思维方式来处理这个问题。)
如今,使用中的加密通常使用客户端加密来完成。但是,有一种新兴技术,称为安全飞地,它有望解决客户端加密的许多局限性。
客户端加密,或在将数据存储到数据库(如 Redis)之前在应用程序内加密数据的做法,是实现使用中加密最广泛采用的方法。
客户端加密还可以防止内部威胁。减少可以访问您数据的人数会改变您在进行业务运营时需要信任的人。使用客户端加密,您不再需要信任数据库操作系统上的管理员。类似地,客户端加密有助于从您需要信任的人或事物中移除第三方,这些人员或事物称为可信计算基。您不再需要信任云提供商不会滥用您的数据,因为它可以访问操作系统或虚拟机管理程序,您可以确保云提供商无法访问您的数据。
这些好处适用于客户端加密和使用安全飞地。
但是,客户端加密有两个主要局限性。首先,需要对数据进行操作的功能(例如简单的搜索功能、比较和增量操作)不适用于客户端加密。下面的命令行示例显示了对加密数字进行递增操作如何失败,因为数据在客户端加密后不再被识别
$ echo "33" >> secrets.txt
$ openssl aes-256-cbc -a -salt -in secrets.txt -out secrets.txt.enc
$ 输入 aes-256-cbc 加密密码:*****
$ 确认 - 输入 aes-256-cbc 加密密码:*****
$ cat secrets.txt.enc
U2FsdGVkX1+zYi/m14irl+JeZokh75XxRAG4HBA56bk=
$ redis-cli set mysecret U2FsdGVkX1+zYi/m14irl+JeZokh75XxRAG4HBA56bk=
OK
$ redis-cli incrby mysecret 1
(error) ERR 值不是整数或超出范围
此外,多个服务通常需要访问同一个数据库,这带来了在多个应用程序中管理加密密钥的复杂性和投资。这会增加部署客户端加密的管理开销。
安全飞地有望帮助降低使用中加密的障碍。安全飞地是受保护的私有内存分配,外部进程无法使用。现在正在形成一个由硬件供应商、云提供商和软件制造商组成的生态系统,使软件社区更容易使用安全飞地。截至 2020 年 4 月,一些内部部署硬件、一部分 Microsoft Azure 虚拟机以及阿里云和 IBM 云的专用硬件实例中都提供了对安全飞地的支持。
那么,安全飞地需要做些什么才能取得广泛的成功? 根据 创新扩散理论,许多新兴技术难以跨越吸引早期采用者和获得早期多数用户支持之间的鸿沟。 随着安全飞地技术的发展和新用户的加入,它正在接近这个鸿沟,这个鸿沟一直是许多有前途的技术的坟墓。 但是,鉴于该技术的势头和围绕它构建的生态系统,我们对安全飞地的前景感到非常兴奋。
为了使安全飞地成功跨越这个鸿沟,必须发生四件关键的事情
Redis 正在与社区中那些正在开发安全飞地生态系统的人合作。 我们正在努力将 Redis 和 Redis Enterprise 融入快速形成的安全飞地生态系统,方法是与 Anjuna合作,Anjuna 是一家供应商,可以将现有应用程序按原样迁移到飞地,无需重新编码。虽然我们仍处于创新的早期阶段,但我们的目标是鼓励更广泛的意识,帮助安全飞地跨越从早期采用到早期多数的鸿沟,并促进该技术的持续成功。
我们认为安全飞地对 Redis 社区有三大主要优势
为了全面保护您的内存数据,不仅仅是 Redis 中的数据需要加密。 针对 Redis 开发的应用程序服务也必须在安全飞地中开发。 如果您的应用程序不是使用这种技术开发的,您仍然会面临内存攻击。
这是一篇关于安全飞地优势的简化说明,专门为 Redis 社区设计。 像任何新兴技术一样,您应该了解安全飞地的局限性以及其功能。
如果您想在技术层面上了解更多关于安全飞地的信息,一篇名为 使用安全飞地改进云安全的论文,来自加州大学伯克利分校,是一个不错的起点。 您还可以通过访问 英特尔的软件保护扩展 (SGX) 网站了解更多信息。