保护聊天应用程序

时间:2014-06-20 18:20:46

标签: c# cryptography network-security

我正在为Windows Phone 8制作一个安全的聊天应用程序。

我打算使用ASMX SOAP服务,我决定使用公钥加密技术来加密数据,但我对网络安全性一无所知。

我的方法是:

  1. 用户注册后,会立即在服务器上生成公钥/私钥对。
  2. 然后将公钥发送回手机应用客户端以及将要发送的所有数据 从客户端发送到服务器将由客户端上的公钥加密 并通过服务器上的私钥解密。
  3. 现在我想知道的是,对于服务器将发送给客户端的响应,如何加密和解密?

    如果服务器上的私钥用于加密响应,那么任何人都可以解密它,因为“公共”密钥是公开的。

    这意味着我必须生成两个公钥 - 私钥对,一代 在服务器上和客户端上的一代。

    一对将加密和解密发送到服务器的数据,而另一对(在客户端生成)将在服务器响应时发送数据时做同样的事情。

2 个答案:

答案 0 :(得分:0)

如果您担心“在飞行中*被截获的邮件”,我建议您将API放在HTTPS服务器上。这样一切都会被编码。

HTTPS会执行与您描述的内容非常相似的内容,除非它在幕后发生,您的应用程序不需要了解它。

  

安全超文本传输​​协议(HTTPS)是一种通过计算机网络进行安全通信的通信协议,在Internet上进行了特别广泛的部署。从技术上讲,它本身并不是一种协议;相反,它是在SSL / TLS协议之上简单地分层超文本传输​​协议(HTTP)的结果,从而将SSL / TLS的安全功能添加到标准HTTP通信。 HTTPS的主要动机是防止窃听和中间人攻击。

more info

答案 1 :(得分:0)

是的,您可以在客户端上生成密钥对,并将客户端的公钥发送到服务器。但是,如果使用公钥加密来加密消息,则(a)仅限于小消息 - 1024位RSA密钥加密少于128个字节,以及(b)将支付性能,因为公钥加密比对称密钥加密,例如AES加密。

既然您有办法从客户端向服务器秘密发送内容,通过使用服务器的公钥加密,您可以在客户端上生成随机对称密钥,并将其发送到服务器,偷偷。现在双方都有一个对称密钥,它可以加密更多,更大的消息,并且效率更高,特别是在手机上。

例如,查看AES和经过身份验证的加密模式,其中消息不仅是保密的,而且是防篡改的。

您遇到的问题是,一旦有人看到服务器公钥,就很容易冒充客户端,但这可能会导致您实施自己的加密。 :^)在大学项目之外,你被要求不使用SSL,你不应该实现自己的加密。