客户端加密库

问题描述 投票:1回答:2

我正在写一个通讯网站应用程序。为了安全起见,应用程序在将信息存储在数据库中之前对密码和消息进行加密。在当前状态下,消息和密码从客户端(React)发送到服务器(Node.js),在那里它们由bcrypt(服务器端)加密。当服务器从数据库读取存储的消息并将其发送到客户端时,它们由服务器预传输解密。

所以,我有几个问题。

  1. 服务器 - 客户端通信的风险因素是什么,它们之间的信息交换永远不会被加密。
  2. 我应该打扰加密信息吗?
  3. 如果我要在传输之前加密客户端上的信息,那么最好的客户端加密库是什么(在React上下文中,如果这有所不同)。
  4. 另外,我如何将加密的服务器信息发送到客户端,客户端使用与bcrypt不同的技术对其进行解密;或者,我应该使用完全客户端加密,而服务器只是读取和写入加密信息而不知道其内容。

任何帮助,将不胜感激!先感谢您。

node.js reactjs encryption server bcrypt
2个回答
2
投票

通信时,应始终使用安全的通信方法。例如,HTTPS。在处理套接字时,您可以使用Web套接字安全(WSS),其中连接通过TLS / SSL加密。

如果您使用HTTPS和WSS,您的通信已使用SSL加密,因此您不应该在客户端加密数据,除非绝对必要。

bcrypt是由Niels Provos和DavidMazières设计的密码散列函数,基于Blowfish密码。哈希不可逆转。一旦创建了哈希,就无法对其进行解密。如果您需要解密,可以使用AES256。有关AES的更多信息,您可以从WIKIPEDIA开始

bcrypt是一种算法,可以用任何语言实现,而且bcrypt(npm包)是算法的一种实现。


2
投票

塔尔哈已经回答了你的问题,但我会提供一些细节

服务器 - 客户端通信的风险因素是什么,它们之间的信息交换永远不会被加密。

理论上,网络上数据通过的每台计算机都可以读取数据。现实情况更糟 - 目前实施的WPA2安全wifi传输可能被窃听。

我应该打扰加密信息吗?

让我们重新提一下你的问题:我应该传输加密的信息吗?是的,没有理由不这样做(除非你懒得学习如何去做)。使用HTTPS将确保机密性和完整性(没有人会对您的数据感到困惑,并且您说的是正确的服务器)。 HTTPS今天上市。甚至还有免费的证书颁发机构服务(例如letsencrypt.org)。

存储密码时,最好的选择是使用慢速加密哈希(是的,bcrypt会完成这项工作)。散列通常发生在服务器端。

我应该加密客户端的信息吗?大多数情况下,这不是最好的主意。问题是 - 你能合理地管理加密密钥吗?确保数据完整性?确保服务器的身份?限制旁道攻击的选项? TLS为您完成所有工作。你将重新发明一个石轮,而已经有很好的充气橡胶轮胎。

如果我要在传输之前加密客户端上的信息,那么最好的客户端加密库是什么(在React上下文中,如果这有所不同)。

我使用CryptoJS库进行JS加密(我在服务器端使用它,但我认为没关系)。

另外,我如何将加密的服务器信息发送到客户端,客户端使用与bcrypt不同的技术对其进行解密;或者,我应该使用完全客户端加密,而服务器只是读取和写入加密信息而不知道其内容。

只是 - 使用TLS(HTTPS)。在某些时候,您需要信任您的服务器。实际上你仍然应该保护你的数据(比如拥有密码)

你可以建立你自己的加密通信协议(没有人可以阻止你),但它会花费你很多时间,它的安全性仍然是非常值得怀疑的(礼貌地说)。

© www.soinside.com 2019 - 2024. All rights reserved.