2

我正在考虑使用公钥加密在两台计算机之间进行通信。

让我们假设在一台计算机上我生成了一个私钥和一个公钥。如果我将公钥发送到另一台计算机,它仍然可以被数据包嗅探器捕获并使用它来解密我的消息吗?如果是,可以做些什么来防止这种情况发生,那么公钥加密的用途是什么?

更新

SSL 是否等同于公钥加密?我应该改用它吗?

4

2 回答 2

4

不,公钥不是用来解密的,而是用来加密的。你用你的私钥解密。这样,只有可以解密消息。

但是,通常情况下,私钥-公钥加密太昂贵而无法用来加密数据。您将使用私有/公共加密方案来交换共享密钥(大随机数)来加密您的数据。

示例:Alice 创建一个私钥/公钥对,将公钥发送给 Bob。Bob 创建一个很大的随机数并用 Alice 的公钥对其进行加密。爱丽丝可以解密它并找到大的随机数。Alice 和 Bob 然后使用随机数来加密他们的数据流。

作为额外的安全措施,您可以定期更改密钥。

要更新您的 SSL 问题:它的工作原理与我上面描述的完全一样。另见http://en.wikipedia.org/wiki/Transport_Layer_Security

于 2013-04-13T07:33:31.100 回答
1

答案是肯定的,可以被嗅探器捕获。

为什么单独使用 RSA 不适合 Matt 的情况?

在马特的情况下,他希望确保两台计算机都是合法的。我的观点是RSA 只能确保其中 1 个是合法的,而不是两者都合法。

另一个重要的事情是破解者可以使用私钥加密和公钥解密。密钥可以让客户端知道它正在连接到“合法”服务器,但无法帮助服务器确保它是“合法”客户端,因为存储在客户端或从服务器发送的密钥可能会被泄露。更好的解决方案是实现自己的哈希算法以防止被黑客入侵。

这是一篇关于 RSA 私钥加密的文章:

http://www.codeproject.com/Articles/38739/RSA-Private-Key-Encryption

以银行网站为例,客户应该知道自己在合法网站上,但银行服务器不需要确保客户合法与否,手机认证等方法就可以解决问题。手机认证就像“散列法”,所以,散列法是必须的。仅靠 RSA 无法确保安全。

如果没有哈希方法,如果破解者将密钥存储或通过互联网传输,他可以轻松制作假客户端,没有任何困难。

那么,你的解决方案是什么?

由于我正在实施基于客户端-服务器的软件,因此我可以与您分享我的解决方案:

  1. 我将私钥保存到客户的源代码中。

  2. 当服务器发送一些响应或客户端发送一些请求时,对方使用私钥/公钥进行加密和解密。

  3. 您需要一些保护,例如代码混淆来保护存储在客户端中的密钥。

  4. 您需要设计一个哈希算法来确保客户端发送的数据是合法的。黑客最终可能会得到你的密钥,但很难知道你的算法是什么,所以它仍然足够安全。

  5. 哈希算法是指结合添加一些盐/SHA-1/UUID/timestamp...等的算法。我并不是说你应该发明一种新的加密算法。

例如,如果纯文本是I'm so awesome

该算法可以是:

结果 = SHA1(盐 + 纯文本 + 时间戳 + 你喜欢的任何东西)

如果发现您的算法泄露,只需更改一些关键值。

如果你的哈希算法泄露了怎么办?

请记住,没有不能被黑客入侵的算法。我们不需要建造一座不能被摧毁的城堡,我们只需要让敌人付出沉重的代价。

不过,如果出现任何问题,您还需要一个快速的“红色大按钮”。哈希算法可以很容易地扮演这个角色,一个小的修改可以让破解者花费大量的时间来破解它。这已经足够好了

更新:

SSL 是否等同于公钥加密?我应该改用它吗?

是的,但是您仍然必须将密钥存储在比通过网络发送更好的地方。HTTPS/TLS是另一个不错的选择。

于 2013-04-13T07:37:34.703 回答