首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >公钥加密

公钥加密
EN

Stack Overflow用户
提问于 2013-04-13 07:29:24
回答 2查看 2.4K关注 0票数 2

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

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

更新

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-13 07:33:31

不是的。公钥不是用于解密,而是用于加密。你用私钥解密。这样,只有you才能解密消息。

然而,通常情况下,私钥加密对数据的加密成本太高.您可以使用私有/公开加密方案来交换共享密钥(大随机数)来对数据进行加密。

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

作为附加安全性,您可以定期更改密钥。

要更新您的SSL问题:它的工作原理与我前面描述的完全一样。另见Security

票数 4
EN

Stack Overflow用户

发布于 2013-04-13 07:37:34

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

为什么只有RSA不适合马特的情况?

在马特的情况下,他希望两台电脑都能合法运行。我的观点是,RSA只能确保其中一个合法,而不是两者都合法。 另一件重要的事情是,cracker 还使用私钥进行加密,使用公钥解密。密钥可以使客户端知道它正在连接到“合法”服务器,但无法帮助服务器确保它是“合法的”客户端,因为存储在客户端或从服务器发送的密钥可能被泄露。一个更好的解决方案是实现您自己的哈希算法,以防止被黑客攻击。 这里有一篇关于RSA私钥加密的文章: http://www.codeproject.com/Articles/38739/RSA-Private-Key-Encryption 让我们想想银行网站,客户应该知道他在合法网站,但银行服务器不需要确保客户是合法的或不合法,因为手机认证和其他方法可以做到这一点。移动电话身份验证类似于“哈希方法”,因此,哈希方法是必须的。单靠RSA并不能保证安全。 没有哈希方法,如果破解者获得密钥存储,或通过互联网传输,他可以很容易地制造一个假客户没有任何困难。

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

由于我正在实现一个基于客户端服务器的软件,所以我可以分享我的解决方案:

  1. 我把私钥保存到客户端的源代码中。
  2. 当服务器发送响应或客户端发送请求时,另一方使用私钥/公钥进行加密和解密。
  3. 您需要一些保护,比如代码混淆以保护存储在客户端中的密钥。
  4. 您需要设计一个哈希算法,以确保客户端发送的数据是合法的。黑客可能最终会得到你的密钥,但很难知道你的算法是什么,所以它仍然足够安全。
  5. Hash算法是一种结合salt/SHA-1/UUID/时间戳.等的算法。我不是说你应该发明一种新的加密算法。

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

算法可以是:

SHA1(salt +纯文本+时间戳+任何您喜欢的内容)

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

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

记住,没有算法是不能被黑的。我们不需要建造一座不能被摧毁的城堡,我们只需要让敌人付出艰苦的代价。 不过,如果出了什么问题,你也需要一个快速的“红色大按钮”。哈希算法可以很容易地发挥这一作用,一个小的修改可以使破解者花费大量的时间来破解它。这已经是足够好的了。

更新:

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15985401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档