繁体   English   中英

公钥加密

[英]Public Key Encryption

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

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

更新

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

不可以。公共密钥不是用来解密,而是用来加密。 您使用私钥解密。 这样,只有才能解密邮件。

通常,私钥-公钥加密过于昂贵,无法用于加密数据。 您将使用私有/公共加密方案来交换共享密钥(较大的随机数)以用来加密数据。

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

为了提高安全性,您可以定期更改密钥。

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

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

为什么仅RSA不符合Matt的情况?

在Matt的情况下,他希望确保两台计算机都合法。 我的观点是, RSA只能确保其中之一合法,而不能同时确保两者合法。

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

这是有关RSA私钥加密的文章:

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

让我们考虑一下银行网站,客户应该知道他在合法网站上,但是银行服务器不需要确保客户合法或合法,因为手机身份验证和其他方法可以解决这个问题。 手机身份验证就像“哈希方法”一样,因此, 哈希方法是必须的 单靠RSA无法确保安全性。

如果没有哈希方法,那么如果破解者将密钥存储或通过Internet进行传输,他就可以轻松地伪造客户端,而不会遇到任何困难。

好吧,那您的解决方案是什么?

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

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

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

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

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

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

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

该算法可以是:

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

如果发现算法泄漏,只需更改一些键值即可。

如果您的哈希算法泄漏了怎么办?

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

尽管如此,如果出现任何问题,您还需要快速的“红色大按钮”。 哈希算法可以很容易地扮演这个角色,只需进行少量修改就可以使破解者花费大量时间来破解它。 那已经足够好了

更新:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM