【问题标题】:Is Extra Encryption Necessary when Using HTTPS?使用 HTTPS 时是否需要额外加密?
【发布时间】:2018-11-21 00:11:41
【问题描述】:
我和我的朋友正在创建一个使用 node.js 后端的 iPhone 应用程序。我们一直在争论是否应该使用一些加密库来加密我们发送到 node.js 服务器的全部或部分后有效负载。 (我们打算使用某个版本的 RNCryptor 或类似的东西。)我的问题是,如果我们已经在使用 HTTPS,我们真的需要这种额外的加密级别吗?
我了解在服务器本身上加密数据的好处。但是我们是否需要对传输中的数据进行这种额外的加密?
对不起,如果这个问题太宽泛了......
【问题讨论】:
-
这取决于您的威胁模型和风险状况。你没有提供任何一个的细节。网络安全模型有足够的漏洞让卡车通过。我要说的一件事是,在 Web 安全模型中,拦截是一个有效的用例。所以你应该准备好有人可以读取公司的所有流量。许多组织不允许其大部分数据使用它,包括美国金融、美国联邦和美国国防部。他们设置安全控制来关闭漏洞。您可能还想查看 NSA 的 Rule of Two。
标签:
node.js
security
encryption
web
https
【解决方案1】:
不,您最好确保您的 TLS 配置是安全的。在这种情况下,强烈建议使用带有 ECDHE、AES 或 Chacha20 / Poly1305 和其他现代原语的 TLS 1.2(也为您准备 TLS 1.3)。
当然,您可以为静态数据添加安全性,但这可能不是您的主要目标。是的,如果您确实想这样做,那么您不妨使用完善的容器格式,在这种情况下,您肯定会比RNCryptor 做得更糟,即使它还没有标准化。当然,您仍然需要以一种有意义的方式将其集成到您的安全协议中。
对于这些类型的系统,为您的系统创建一个威胁模型非常重要。如果您的线程模型需要它(例如,在 Terry 给出的示例中,有公司使用中间人攻击),那么您应该开始寻找。
在这种情况下,您还应该决定在客户端(只有客户端可以解密)或服务器端进行加密。
从安全角度来看,较早的可能是首选,但您必须以某种方式存储客户端私钥,而这通常无法安全地做到。在这种情况下,数据当然也会对服务器隐藏(但由于您控制应用程序,客户端仍然不能完全安全地防止将明文泄露给您或控制服务器的人)。
【解决方案2】:
这实际上取决于您要保护您的数据免受什么影响。
HTTPS 对于大多数用途来说足够安全,但是如果在浏览器中安装了不受信任(或意外/不需要的)根证书,并且您位于攻击者控制流量的网络上,则它是完全不安全的。
一些公司安装了自己的根证书,因此他们可以 MITM 包括 HTTPS 在内的所有浏览器流量。
此外,还有实际的 CA 颁发的证书允许攻击者伪装成几乎任何人。如果价格合适,任何人都可以[在此处插入您的银行]。
如果您尝试防范本地 ISP,您可能没问题。如果您使用的是公司发行的计算机或浏览器,或者有理由认为您的证书存储可能已被篡改,则您需要额外的加密来保护您的数据的私密性。