1

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

我计划使用 ASMX SOAP 服务,我决定使用公钥加密技术来加密数据,但我对网络安全非常陌生。

我的方法是:

  1. 一旦用户注册,服务器就会生成一个公钥/私钥对。
  2. 然后将公钥发送回手机应用程序客户端,所有从客户端发送到服务器的数据将由客户端上的公钥加密,并由服务器上的私钥解密。

现在我想知道的是,对于服务器将发送给客户端的响应,这些响应将如何加密和解密?

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

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

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

4

2 回答 2

0

如果您担心消息在“飞行中*”被截获,我建议您将 API 放在 HTTPS 服务器上。这样所有内容都被编码。

HTTPS 所做的事情与您所描述的非常相似,只是它发生在幕后,您的应用程序不需要知道任何关于它的信息。

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

更多信息

于 2014-06-20T18:26:28.697 回答
0

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

既然你有办法从客户端秘密地向服务器发送一些东西,通过使用服务器的公钥加密,你可以在客户端上生成一个随机对称密钥,然后将它秘密地发送到服务器。现在双方都有一个对称密钥,可以加密很多很多的消息,而且效率更高,尤其是在电话上。

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

您的问题是,一旦有人看到服务器公钥,他们就可以轻松冒充客户端,但这是实施您自己的加密的风险。:^) 在要求您不要使用 SSL 的大学项目之外,您不应该实现自己的加密。

于 2014-06-20T18:40:05.153 回答