Algorithm 如果服务器上存储了公钥呢?

Algorithm 如果服务器上存储了公钥呢?,algorithm,private,public,public-key-encryption,Algorithm,Private,Public,Public Key Encryption,通过java脚本算法在客户端创建公钥和私钥对,然后将公钥传输到服务器 persons私钥的副本以java脚本变量的形式存储在用户计算机上 当用户A向用户B发送消息时 服务器使用用户B的公钥对消息进行加密 用户B拾取消息并使用用户B的私钥解密(用java脚本编写的算法),该私钥是私有的,保存在java脚本变量中 在任何时候,用户B的私钥都不会通过网络被公开 这是否安全?“public”和“private”只是这两个密钥的名称。这两个键中的哪个是公共的,哪个是私有的并不重要,只要你永远不要混淆用法。

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

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

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

服务器使用用户B的公钥对消息进行加密

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

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


这是否安全?

“public”和“private”只是这两个密钥的名称。这两个键中的哪个是公共的,哪个是私有的并不重要,只要你永远不要混淆用法。一旦有人同时拥有这两个密钥,消息传递系统的安全性就会被彻底破坏


从技术上讲,因为您说键存储在javascript变量中,所以您是在暗示这些变量是以明文形式发送的,并嵌入到一些基于浏览器的html/javascript中。这进一步意味着没有安全性,因为这两个密钥都向网络公开。

'public'和'private'只是这两个密钥的名称。这两个键中的哪个是公共的,哪个是私有的并不重要,只要你永远不要混淆用法。一旦有人同时拥有这两个密钥,消息传递系统的安全性就会被彻底破坏


从技术上讲,因为您说键存储在javascript变量中,所以您是在暗示这些变量是以明文形式发送的,并嵌入到一些基于浏览器的html/javascript中。这进一步意味着没有安全性-因为两个密钥都暴露在网络中。

这不会太安全,因为:

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

    • 它不会太安全,因为:

      • 任何用户(比如用户B)的私钥都可能通过注入的JS代码或糟糕的浏览器插件从应用程序中泄漏出来
      • 一旦这样做了,任何一个能够访问指向用户B的任何消息的人都将能够解密它并理解它
      • 当然,如果你是唯一一个使用该应用程序的人,上述情况就不会发生——因为你可能会有其他用户使用不同的浏览器设置/插件/浏览行为等,这是完全可能的
      • 当用户A尝试向用户B发送消息时,您说过服务器将使用用户B的公钥加密消息-现在,通过JS发出的请求可以由中间人解释。一旦完成,这个中间人可以通过操纵发送者、推荐者等向任何用户发起任何请求。这可能会导致模仿等
      • 您还提到,生成后,您打算将公钥发送到服务器。这个来自JS的调用很容易被解释,这意味着公钥可能会被泄露
      要确定某个东西是否“安全”,您必须知道安全要求是什么。您的案例满足一些可能的需求,但有几个可能的需求它不满足。例如:

      • 消息的纯文本副本显然是通过网络从用户A传输到服务器的,因此任何人都可以在那个时候窃听它。(这可能是一个严重的问题。)
      • 您没有解释如何将公钥传输到服务器。如果不是以经过身份验证的方式传输,那么中间的人可以生成自己的公私密钥对,并将其公钥提供给服务器。(这可能是一个严重的问题。)
      • 用户B无法验证其收到的消息的真实性。消息可能来自服务器(最终来自用户A),也可能来自其他任何具有公钥副本的人。(这可能是严重问题,也可能不是严重问题,具体取决于应用程序。)
      总的来说,我不认为这个设计是“安全的”。

      < P>来判断某个东西是否“安全”,你必须知道安全要求是什么。您的案例满足一些可能的需求,但有几个可能的需求它不满足。例如:

      • 消息的纯文本副本显然是通过网络从用户A传输到服务器的,因此任何人都可以在那个时候窃听它。(这可能是一个严重的问题。)
      • 您没有解释如何将公钥传输到服务器。如果不是以经过身份验证的方式传输,那么中间的人可以生成自己的公私密钥对,并将其公钥提供给服务器。(这可能是一个严重的问题。)
      • 用户B无法验证其收到的消息的真实性。该消息可能来自服务器(最终来自用户A),也可能来自任何其他拥有该消息副本的人