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