我正在考虑使用公钥加密在两台计算机之间进行通信。
让我们假设在一台计算机上我生成了一个私钥和一个公钥。如果我将公钥发送到另一台计算机,它仍然可以被数据包嗅探器捕获并使用它来解密我的消息吗?如果是,可以做些什么来防止这种情况发生,那么公钥加密的用途是什么?
更新
SSL 是否等同于公钥加密?我应该改用它吗?
我正在考虑使用公钥加密在两台计算机之间进行通信。
让我们假设在一台计算机上我生成了一个私钥和一个公钥。如果我将公钥发送到另一台计算机,它仍然可以被数据包嗅探器捕获并使用它来解密我的消息吗?如果是,可以做些什么来防止这种情况发生,那么公钥加密的用途是什么?
更新
SSL 是否等同于公钥加密?我应该改用它吗?
不,公钥不是用来解密的,而是用来加密的。你用你的私钥解密。这样,只有您可以解密消息。
但是,通常情况下,私钥-公钥加密太昂贵而无法用来加密数据。您将使用私有/公共加密方案来交换共享密钥(大随机数)来加密您的数据。
示例:Alice 创建一个私钥/公钥对,将公钥发送给 Bob。Bob 创建一个很大的随机数并用 Alice 的公钥对其进行加密。爱丽丝可以解密它并找到大的随机数。Alice 和 Bob 然后使用随机数来加密他们的数据流。
作为额外的安全措施,您可以定期更改密钥。
要更新您的 SSL 问题:它的工作原理与我上面描述的完全一样。另见http://en.wikipedia.org/wiki/Transport_Layer_Security
答案是肯定的,可以被嗅探器捕获。
为什么单独使用 RSA 不适合 Matt 的情况?
在马特的情况下,他希望确保两台计算机都是合法的。我的观点是RSA 只能确保其中 1 个是合法的,而不是两者都合法。
另一个重要的事情是破解者也可以使用私钥加密和公钥解密。密钥可以让客户端知道它正在连接到“合法”服务器,但无法帮助服务器确保它是“合法”客户端,因为存储在客户端或从服务器发送的密钥可能会被泄露。更好的解决方案是实现自己的哈希算法以防止被黑客入侵。
这是一篇关于 RSA 私钥加密的文章:
http://www.codeproject.com/Articles/38739/RSA-Private-Key-Encryption
以银行网站为例,客户应该知道自己在合法网站上,但银行服务器不需要确保客户合法与否,手机认证等方法就可以解决问题。手机认证就像“散列法”,所以,散列法是必须的。仅靠 RSA 无法确保安全。
如果没有哈希方法,如果破解者将密钥存储或通过互联网传输,他可以轻松制作假客户端,没有任何困难。
那么,你的解决方案是什么?
由于我正在实施基于客户端-服务器的软件,因此我可以与您分享我的解决方案:
我将私钥保存到客户的源代码中。
当服务器发送一些响应或客户端发送一些请求时,对方使用私钥/公钥进行加密和解密。
您需要一些保护,例如代码混淆来保护存储在客户端中的密钥。
您需要设计一个哈希算法来确保客户端发送的数据是合法的。黑客最终可能会得到你的密钥,但很难知道你的算法是什么,所以它仍然足够安全。
哈希算法是指结合添加一些盐/SHA-1/UUID/timestamp...等的算法。我并不是说你应该发明一种新的加密算法。
例如,如果纯文本是
I'm so awesome
该算法可以是:
结果 = SHA1(盐 + 纯文本 + 时间戳 + 你喜欢的任何东西)
如果发现您的算法泄露,只需更改一些关键值。
如果你的哈希算法泄露了怎么办?
请记住,没有不能被黑客入侵的算法。我们不需要建造一座不能被摧毁的城堡,我们只需要让敌人付出沉重的代价。
不过,如果出现任何问题,您还需要一个快速的“红色大按钮”。哈希算法可以很容易地扮演这个角色,一个小的修改可以让破解者花费大量的时间来破解它。这已经足够好了。
更新:
SSL 是否等同于公钥加密?我应该改用它吗?
是的,但是您仍然必须将密钥存储在比通过网络发送更好的地方。HTTPS/TLS
是另一个不错的选择。