【问题标题】:Securing A Chat Application保护聊天应用程序
【发布时间】:2014-06-20 18:20:46
【问题描述】:

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

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

我的做法是:

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

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

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

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

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

【问题讨论】:

  • 考虑使用 TLS,它会为您完成所有这些复杂的事情。
  • 因为这是一个大学项目,我被要求自己实现安全而不使用 SSL !!
  • 然后看看现有的协议,比如 TLS、OTR、CurveCP 或 Noise。
  • 请务必编辑您的问题,以明确您因作业而受到人为限制。
  • 是的,当然!我会记住这一点..

标签: c# cryptography network-security


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的指导,我还想知道,假设我自己实现了完整的 sncryption 系统,但是这个完整的请求可以被嗅探器复制,从而导致重复消息。我应该怎么做才能删除它?
  • 这是个好问题。例如,看看 TLS 如何防止重放攻击。参照。 security.stackexchange.com/questions/20105/…
【解决方案2】:

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

HTTPS 的作用与您所描述的非常相似,只是它发生在幕后,您的应用程序不需要了解它的任何信息。

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

more info

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 2011-05-04
    • 2017-09-30
    • 2017-04-11
    相关资源
    最近更新 更多