如果公钥存储在服务器上怎么办?

时间:2012-07-19 17:33:08

标签: algorithm private public public-key-encryption

公钥和私钥对在客户端通过java脚本算法创建,然后公钥传输到服务器。

人员私钥的副本以java脚本变量的形式存储在用户计算机上。

当用户A向用户B发送消息时

服务器使用用户B的公钥加密消息。

用户B获取消息并使用用户B的私钥解密(用java脚本编写的算法),私钥是私有的并保存在java脚本变量中。

在任何时候,用户B的私钥都不会通过网络公开。

这会安全吗???

3 个答案:

答案 0 :(得分:2)

'public'和'private'只是两个键的名称。两个密钥的 WHICH 是公共的并且是私有的并不重要,只要你永远不会混淆使用。一旦两个密钥同时可供某人使用,邮件系统的安全性就会完全被破坏。

从技术上讲,既然你说密钥存储在javascript变量中,那么你暗示变量是在一些基于浏览器的html / javascript中嵌入的IN THE CLEAR中发送的。这进一步意味着没有安全性 - 因为两个密钥都暴露在网络中。

答案 1 :(得分:1)

要确定某些内容是否安全",您必须知道安全要求是什么。您的案例满足了一些可能的要求,但有几个可能的要求满足。例如:

  • 邮件的明文副本显然是通过网络从用户A传输到服务器的,所以任何人都可以在那时窃听它。 (这可能是一个严重的问题。)
  • 您无法解释如何将公钥传输到服务器。如果它没有以经过验证的方式传输,那么中间人可以生成他自己的公钥 - 私钥对,并将他的公钥提供给服务器。 (这可能是一个严重的问题。)
  • 用户B无法验证他收到的邮件的真实性。该消息可能来自服务器(最终来自用户A),或者可能来自其他任何人,并带有公钥副本。 (这可能是也可能不是严重问题,具体取决于申请。)

总的来说,我会认为这个设计是"安全"。

答案 2 :(得分:0)

因为:

,这不会太安全
  • 任何用户的私钥(比如用户B)都可以通过注入的JS代码或糟糕的浏览器插件从您的应用中泄露出来
  • 一旦完成,任何能够访问任何针对用户B的消息的人都能够解密它并理解它
  • 当然,如果您是唯一一个使用该应用程序的用户,上述情况就不会发生 - 因为您可能会有其他用户使用不同的浏览器设置/插件/浏览行为等,这是完全可能的
  • 当用户A尝试向用户B发送内容时,您说服务器将使用用户B的公钥加密消息 - 现在,通过JS发出的请求可以由中间人解释。一旦完成,这个中间人可以通过操纵发件人,推荐人等向任何用户发起任何请求。这可能导致冒充等等。
  • 您还提到在生成后,您打算将公钥发送到服务器。可以很容易地解释从JS进行的调用,这意味着可以泄露公钥。