0

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

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

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

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

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

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

那会安全吗???

4

3 回答 3

2

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

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

于 2012-07-19T17:38:13.183 回答
1

要确定某事是否“安全”,您必须知道安全要求是什么。您的案例满足了一些可能的要求,但也有一些可能的要求不满足。例如:

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

所以总的来说,我不会认为这种设计是“安全的”。

于 2012-07-19T17:44:34.207 回答
0

它不会太安全,因为:

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