公钥加密

时间:2013-04-13 07:29:24

标签: c# encryption public-key-encryption

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

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

更新

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

2 个答案:

答案 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无法确保安全。

     

如果没有哈希方法,如果一个黑客获取密钥存储或通过互联网传输,他可以轻松地制造一个虚假的客户端,没有任何困难。

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

  

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

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

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

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

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

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

  10.         

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

         

    算法可以是:

         

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

         

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

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

  

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

     

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

更新:

  

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

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