客户端服务器加密

Posted

技术标签:

【中文标题】客户端服务器加密【英文标题】:Client Server Encryption 【发布时间】:2021-11-17 14:01:24 【问题描述】:

我有 Xamarin 作为我的移动客户端,node.js 作为我的后端,MongoDB 作为数据库。我正在尝试加密用户的数据并将其保存在数据库中。如果我做服务器加密,黑客仍然可以在通过 API 传输时看到数据。我应该进行客户端加密,将数据传递给 API 并将其存储在数据库中,还是应该进行双层加密(即)从客户端加密用户数据,通过 API 传递,再次执行 server-side encryption 并将其存储在数据库中。基本上,我想知道在现实世界中是如何工作的。

担心的是用户的数据很敏感,即使数据库被黑客入侵也需要保护。

【问题讨论】:

评论不用于扩展讨论;这个对话是moved to chat。 【参考方案1】:

有几点我们可以应用加密,这有点令人困惑,但让我逐步向您解释。

数据库加密

即使服务器被黑客入侵,您对敏感数据安全的担忧也是有道理的。因此,无论您拥有什么敏感信息,都需要加密。但是,有几种方法可以实现加密。为避免过于复杂,我将讨论此级别的两种加密类型:

单向加密 双向加密

用户的密码是只有原始形式的用户才感兴趣的数据。因此,您可以应用单向加密,即给定用户的密码,您知道如何对其进行编码,因此您存储密码的加密版本,随后每当用户登录时,通过比较来验证他/她的密码加密他/她输入的任何内容与存储在数据库中的内容的结果。但是,您应该无法解密加密的密码,因为密码无论如何都需要一个方向,如下所示:

用户输入值 发送到服务器 接收它 并加密原始密码 然后将接收到的密码的加密版本与存储的加密密码进行比较

在此级别加密数据的另一种方法是双向加密,即您可以实际解密的加密方法。您需要对出于某种原因可能需要以原始形式呈现的任何数据使用这种方法,例如向用户展示。

服务器对发送给用户的数据进行加密

如果您的项目所有者担心您用户的设备/应用程序的安全性(例如浏览器使用不安全的扩展程序或用户使用浏览器访问陌生网站的漏洞),则可以对发送给用户的一些数据进行加密。除非您特别需要执行此类操作,否则请避免此操作。

客户端加密发送到服务器的数据

如果通信通道不安全,那么在将值发送到服务器之前,您可能需要在客户端应用一些加密。

好消息! HTTPS!

HTTP 代表超文本传输​​协议。它的 HTTPS 版本已经对消息进行了编码,它代表安全超文本传输​​协议。如果您已经使用 HTTPS 作为协议,那么您的客户端请求已经被加密,因此监听您发送的请求的第三方将在请求发送和响应接收事件中收到一些乱码数据。

总结

如果您没有被要求进一步加密,那么您应该在数据库上使用 HTTPS 和单向编码密码,因为这通常是现实世界的方法。如果您需要执行进一步的安全措施,或者因为您有更多敏感的用户信息或对项目的某些方面的真正担忧,或者只是一个需求,那么您可以使用您需要的任何其他方式扩展此方法。但是 HTTPS 和数据库级别的单向编码密码是绝对必须的。

【讨论】:

以上是关于客户端服务器加密的主要内容,如果未能解决你的问题,请参考以下文章

什么是SSL加密?

http加密原理

Java:加密的服务器/客户端双向通信?

在客户端-服务器环境中使用 AES 加密

https的加密机制,怎么加密

https之对称加密非对称加密