【问题标题】:Secure Web Chat in C# ASP.NET Core 2C# ASP.NET Core 2 中的安全网络聊天
【发布时间】:2018-12-19 14:27:48
【问题描述】:

首先,我正在做一个硕士生的项目,该项目是一个网上银行系统,并在这个系统上应用加密算法。

第一个算法是请求我帮助的学生设计的一种新的加密算法,是对数据库中的敏感数据(信用卡信息)进行加密。

第二种算法(修改后的 AES 算法)是使用网络聊天室对银行客户和银行系统管理员之间的消息进行加密。

当然,第一个算法没有问题,因为我可以应用它来加密用户提交的信用卡信息并保存在数据库中。

但是,问题在于,监督这个学生项目的教授坚持要保护管理员和客户通过网络发送的消息,即他们正在使用网络聊天室,并且必须使用第二种算法来保护这些消息( AES)。

众所周知,如果我只是在 Javascript 中编写第二个算法来加密浏览器客户端计算机上的消息,然后将这些加密消息发送到服务器,这意味着任何打开此网页的人都可以使用此算法,因为我们都知道Javascript是开源的客户端源码。

所以,不多说了,我只想问:

如何通过使用网络应用程序(例如网络聊天应用程序)应用任何加密算法来保护客户端机器和服务器机器之间的数据传输,而不是将该算法开源给任何客户端机器?

【问题讨论】:

  • 使用 HTTPS 保护浏览器和服务器之间的整个连接。就像世界上所有其他安全网站一样。正如您所说的那样,尝试加密单个数据项或在 JavaScript 中编写任何类型的加密代码是没有意义的。
  • 我同意 ADyson 的观点,但教授坚持使用该算法来保护连接,并对该算法保密。
  • 我怀疑它是为了覆盖浏览器和服务器之间的连接。当然,除非你的教授不懂网络技术。或许你应该向他们澄清这一点。
  • 我向他说明了整个情况,但他坚持要找到解决办法。我告诉他我们是否会为此设计一个 Windows 窗体应用程序,但他拒绝了。他仍然坚持给他带来一个解决方案,以我们自己的方式在网络聊天技术中加密消息
  • 我完全同意你的观点,相信我,我已经知道了这一切。问这个问题的唯一方法就是确保我的想法是正确的。我将向我的教授解释整个讨论,并尽我所能澄清这几乎是不可能实现的。谢谢大家

标签: asp.net algorithm encryption web chat


【解决方案1】:

ADyson 的评论包含实际解决此问题的最佳解决方案,但听起来教授添加了限制,阻止您采用实际解决方案。

不可能在客户端机器上执行加密算法,同时对运行算法的人和机器保密。他们可以随时检查代码。

【讨论】:

  • 我有一个想法,我想听听你的建议。如果我用 Java 编写算法并将这个聊天室作为一个 Java 小程序应用程序供浏览器使用,这可能是解决方案吗?
  • 如果我理解正确,那么 Java 应用程序将在用户的浏览器中运行。不,与在浏览器中运行 javascript 相比,此解决方案没有安全优势。
【解决方案2】:

据我所知,这是不可能的,因为客户端必须能够加密和解密消息;从逻辑上讲,它要求客户端了解加密算法。

加密机制的强度来自于在没有密钥的情况下将加密消息反转为明文的难度,即使人们知道算法。

如果知道加密算法允许某人在没有密钥的情况下解密消息,那么该算法很弱。

【讨论】:

  • 使用的算法是 AES,但它已被修改为更强大。问题是该算法使用对称密钥,加密中使用的密钥也用于解密。有希望吗?
  • 密钥应该在每个会话中生成,甚至可能在每个会话中生成多次。将采用其他形式的加密来加密新密钥的初始传输。如果制作生产系统,HTTPS 将是可行的方法 - 但您实际上需要两种形式的加密才能自己完成。
  • 我有一个想法,我想听听你的建议。如果我用 Java 编写算法并将这个聊天室作为一个 Java 小程序应用程序供浏览器使用,这可能是解决方案吗?
  • 不幸的是,这会留下同样的问题 - 您必须使用 HTTPS 或其他方式加密连接才能传输 Java 小程序。如果中间监听的人可以截获包含密钥的小程序,那么他们可以使用该密钥来解密未来的连接。我们将其称为混淆;它可能有点棘手,但您只需隐藏它,而不是加密它。诀窍是利用非对称加密握手来建立加密隧道,该隧道将暂时用于传输修改后的 AES 算法将使用的密钥。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
相关资源
最近更新 更多