通过未加密的连接发送密码

时间:2015-01-16 16:45:55

标签: encryption passwords

我正在开发一个游戏启动器,它有一个C#前端和PHP后端进行身份验证,我需要通过未加密的连接将启动器的密码发送到后端。有没有办法安全地做到这一点? (密码是以$ 2y开头的数据库中的河豚哈希值存储...)

3 个答案:

答案 0 :(得分:4)

Establishing an SSL连接是传输密码等敏感信息的最常用方法之一。为此,至少您必须为您的服务器/后端提供密钥对(证书)。如果您的应用程序本身适用于它而不是浏览器,则不必由veriSign签名。

请注意:您真正关注的是机密性'。这意味着除了您和您​​的目标方之外,没有人可以阅读邮件内容。随之而来的是对加密机制的正确使用'在多数情况下。您还希望能够抵御诸如Man in the Middle Attack之类的攻击。

开发人员通常会编写一些有用的东西,然后考虑安全性;但是如果你能提前想到它,那就有一个无可置疑的好处。

编辑:如果您只需要安全地发送密码,那么@ rich.okelly的答案就是答案。由于您可以在应用程序上对服务器的可信公钥进行硬编码,并且只是由客户端加密该密码。但是,如果您希望为更多/所有会话建立安全连接,则可能需要考虑使用SSL解决方案。

答案 1 :(得分:2)

在所有情况下,您的要求是:

从一种不安全的,未加密的数据传输方式开始,我如何最终使用安全,加密的方式传输数据至少足以发送密码?

  • 互联网总是以不安全和未加密的方式开始!

有很多方法,rolling your own是最糟糕的。选项包括但不限于:

  • 使用像Bouncy Castle这样的C#库
    • 使用AEAD密码套件创建TLS 1.2会话
    • 使用非对称密码(如RSA,ECDSA或DSA(密钥> = 2048位)加密密码
  • 使用OpenVPN
  • 等VPN软件
  • 致电OpenSSL
    • 使用AEAD密码套件创建TLS 1.2会话
    • 使用非对称密码(如RSA,ECDSA或DSA(密钥> = 2048位)加密密码
  • 使用您的公钥调用GPG加密密码

在所有情况下,您都必须以某种方式直接更改后端和前端,或者在它们之间添加另一层(VPN)。

答案 2 :(得分:1)

正如我所看到的,最好的办法是(假设连接必须是不安全的),在发送密码之前加密密码并在后端解密 - 有效地滚动你自己的消息级加密。

您需要一种非对称加密机制才能实现这一点 - 公钥/私钥可能是最简单的方法。