2012-07-19 115 views
0

通过java脚本算法在客户端创建公钥和私钥对,然后将公钥传输到服务器。如果公共密钥存储在服务器上怎么办?

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

当用户A将消息发送到用户B

服务器加密与用户B的公开密钥对消息。

用户B拿起消息并解密(用java脚本编写的算法)它与用户B的私有密钥私有并保存在一个Java脚本变量中。

用户B的私钥在任何时候都不会在网络上被披露。

这是安全吗?

+0

如果以下任何答案对您有用,请将其标记为已接受,以便人们不会再花时间处理此问题。 – techfoobar 2012-07-20 19:07:57

+0

在任何人都可以回答“这是安全的”问题之前,您需要解释您的威胁模型是什么。也就是说,谁是你的攻击者,他们的目标是什么,他们有什么资源? – 2012-07-23 05:08:02

回答

2

'public'和'private'只是给两个键的名字。没关系这两个键中的哪个是公开的,哪些是私有的,只要你永远不要混淆使用。一旦两个密钥同时对某个人可用,消息系统的安全性就会完全被破坏。

从技术上讲,既然你说的关键字存储在JavaScript变量,你暗示变量被发送到嵌入在某些基于浏览器的HTML/JavaScript的CLEAR中。这进一步意味着没有安全性 - 因为这两个密钥都暴露在网络中。

+0

回复:“既然你说的键存储在JavaScript变量,你暗示变量被发送到嵌入在一些基于浏览器的HTML/JavaScript中的CLEAR”:这是不正确的。 OP明确指出:“公钥和私钥对是通过Java脚本算法在客户端创建的,然后将公钥传输到服务器。” – ruakh 2012-07-19 17:39:26

+1

“'public'和'private'只是两个键的名字,两个键的哪一个是公共的,哪一个是私人的并不重要。” - 这是一个泛化,并不总是如此。一些PK算法以这种方式是对称的,但另一些则不是。 – 2012-07-23 05:07:12

0

它不会太安全,因为:

  • 任何用户(比如用户B)的私钥可以通过注入JS代码,或坏的浏览器插件向外泄露您的应用程序的
  • 一旦完成,任何人可以访问任何针对用户B的消息,将能够解密并理解它
  • 当然,如果您是唯一使用应用程序的用户,因为你可能有其他用户使用不同的浏览器设置/插件/浏览行为等,这是完全可能的
  • 当用户A试图发送一些东西给用户B时,你说服务器会使用用户B的公钥加密消息 - 现在,这个通过JS创建的请求可以由中间人解释。一旦完成,这个中间人可以通过操纵发件人,引用者等向任何用户发起任何请求。这可以导致冒充等等。
  • 你还提到,在生成之后,你打算将公钥发送给服务器。 JS的这个调用很容易被解释,这意味着公钥可能被泄露。
1

要确定某件事是否“安全”,您必须知道安全要求是什么。您的情况满足几个可能的要求,但有几个可能的要求,它确实而不是满足。例如:

  • 该消息的明文副本显然是通过网络从用户A传输到服务器,因此任何人都可以在该点上对其进行窃听。 (这可能是一个严重的问题。)
  • 你不解释如何将公钥传送给服务器。如果它不是以认证方式传输的,那么中间人可以生成他自己的公私密钥对,并将他的公钥发送给服务器。 (这可能是一个严重的问题。)
  • 用户B无法验证他收到的消息的真实性。该消息可能来自服务器(最终来自用户A),或者可能来自其他任何拥有公钥副本的人。 (这可能会或可能不会是一个严重的问题,这取决于应用程序。)

所以,总体来说,我会考虑这样的设计是“安全的”。