尽管使用了 TLS/SSL,我们仍然需要在应用层中加密/解密数据吗?

信息安全 tls 验证 密码学
2021-09-07 07:52:29

实际上,我从我的前同事那里得到了一些项目。这些是基于 App-Server TCP 套接字的应用程序。我注意到一些身份验证/登录交互正在使用 RSA/AES 加密/解密

据我所知,如果我们在传输层采用 TLS 套接字,我们之间的数据就会被加密。

所以..如果我们使用 TLS,我们还需要在应用层代码中加密/解密数据吗?或者这只是多余的努力。

3个回答

是和否。

加密不是“拥有它”或“没有它”之类的命题。加密的概念只有在上下文中才有意义。

作为一个应该更清楚地证明失败的示例:假设您有一个需要保持安全的文档。您将其上传到您的 Dropbox 帐户。现在,它是加密的吗?

的,它在传输过程中被加密。Dropbox 使用 HTTPS,因此在上传(和任何下载)期间使用 TLS 加密。然后在传输后在另一侧对其进行解密。

的,它在存储中是加密的(据我们所知)。Dropbox 表示,他们使用特定于您帐户的密钥对服务器上的所有数据进行加密。然后根据需要为您透明地解密。

但是不,文档没有以对来说很重要的方式加密Dropbox 将文件同步到您的所有计算机,并将纯文本副本存储在您的计算机上。因此,如果有人查看您的计算机,他们可以阅读文档而无需绕过任何加密。

加密数据时,您必须弄清楚您要保护的内容以及要保护对象。您需要了解您试图通过加密来防止什么。一旦您了解了您要完成的工作,您所拥有的加密是否对您有任何好处都应该立即显而易见。

从深度防御的角度来看,实施应用层加密可能很有用,具体取决于数据的分类。

想象以下示例:您是一家银行,您使用 REST API 来检索特定银行账户的余额信息。API URL 是:

https://www.bank.com/api/balance/12345678

此示例中的银行帐号为 12345678。尽管您的通信渠道已加密,但该银行帐号仍可以在本地缓存并显示在 Web 服务器日志文件中。

这可能是进行应用层加密以避免记录敏感信息的一个很好的理由。

首先,SSL 既不是网络层协议,也不是应用层协议。它是“位于”两层之间的一层。

其次,由于其地位,SSL 使客户端机器能够有选择地对单个应用程序应用安全保护,而不是对整个应用程序组进行加密。

该过程可以在不涉及网络层的情况下完成。由于这些原因,当 SSL 用于加密网络流量时,实际上只有应用层数据被加密。

因此,您所需要的只是带有客户端身份验证的 HTTPS/SSL。添加第二层加密实际上并没有增加任何安全性。