Mobile 如何设计一个安全的&;服务器和移动应用程序之间的轻量级协议?
在设计服务器和iOS/Android客户端之间的通信协议时,我陷入了两难境地 我想制定协议:Mobile 如何设计一个安全的&;服务器和移动应用程序之间的轻量级协议?,mobile,ssl,encryption,https,protocols,Mobile,Ssl,Encryption,Https,Protocols,在设计服务器和iOS/Android客户端之间的通信协议时,我陷入了两难境地 我想制定协议: 安全:因为我们会发送重要信息 轻量级:让iOS/android客户端响应更好的用户体验 我甚至起草了一个解决方案,在HTTP REST接口上使用一些加密/编码/压缩算法。简言之,使用DH算法或RSA保护对称密钥的传输,以便稍后在会话中对消息进行加密。有点像iOS官方的例子 然而,当我在Stackoverflow中搜索类似的问题时,我发现几乎所有的建议都是“使用HTTPS”,而不是“自己重新发明轮子”
- 安全:因为我们会发送重要信息
- 轻量级:让iOS/android客户端响应更好的用户体验
轻量级:让iOS/android客户端响应更好的用户体验 痛点是钥匙交换,你可能无法避免 对于批量加密,也许您应该使用新的ChaCha/Poly1305密码套件,如
TLS\u ECDHE\u ECDSA\u与CHACHA20\u Poly1305
,TLS\u ECDHE\u RSA\u与CHACHA20\u Poly1305
,TLS\u DHE\u RSA\u与cha20\u Poly1305
。它们的速度是4倍左右。看
我甚至起草了一个解决方案,在HTTP REST接口上使用一些加密/编码/压缩算法 WebCrypto距离标准化还有几个月。之后,浏览器必须采用它。因此,您可能在几个月到几年内都不会有原语 对于自定义DH,您将缺少大整数。即使WebCrypto发布其第一个标准,也不会包含大整数。看见(顺便说一句,我有一个用于多因素身份验证的自定义DH方案。这也是我需要这些大整数的原因)
我甚至起草了一份包含一些加密/编码/压缩算法的解决方案 我希望您认识到压缩会在更高的层中泄漏信息。例如,参见Rizzo和Duong关于HTTP和SPDY协议的文章
然而,当我在Stackoverflow中搜索类似的问题时,我发现几乎所有的建议都是“使用HTTPS”,而不是“自己重新发明轮子” 您可能应该在Google Scholar上阅读关于mTCP和mUDP、移动VPN、移动TLS、无线TLS等的文章 加密不是你的问题。快速恢复将是你的问题
我同意重新发明轮子是不明智的,但我不确定HTTPS是否能在恶劣的网络条件下正常工作 好吧,就像乔恩·本特利博士说的:如果它不一定是正确的,我可以让它像你希望的那样快。您可能应该坚持使用SSL/TLS,在有缺陷的地方加强它,然后在密码套件中选择加快它的速度
如果HTTPS能够在恶劣的网络条件下正常工作,这通常是移动应用程序所面临的 手机在实践中并不是那么糟糕。对于断开连接,你无能为力。如果漫游时没有传输IP,您将无能为力。而且,对于设备的
ConnectionManager
,即使您知道自己没有覆盖范围,您也无法声称写入成功
你所能做的就是确保快速恢复
也许您应该研究UDP和DTL
[HTTPS]真的适合HTTP REST API吗?HTTP REST API速度快,有效负载小
见本特利的名言
不要使用那个该死的浏览器安全模型。这是一种诅咒。(当然,除非您的模型中可以接受Diginotar和Trustwave类故障)。我做了一个测试,以比较HTTP和HTTPS在“典型”网络条件下的性能:
- 将3G网络与android手机配合使用
- 在家测试,然后在办公室测试,包括步行、火车和公共汽车
- 在每一轮测试中,交替使用http和https获取700字节的json字符串
测试结果:
HTTP调用:2138次成功,13次失败,平均获取时间:492毫秒
HTTPS呼叫:成功1957次,失败5次,平均获取时间:778毫秒
测试结果显示,要获取较小的有效负载:
1.HTTPS和HTTP一样稳定
2.主要缺点是延迟,比HTTP慢58%
我认为这是可以接受的,所以我正在考虑转向HTTPS
毕竟,尽管发明一个轮子并不困难,但要发明一个足够好的轮子并不容易,正如@jww的评论
我将继续进行另一个测试,看看HTTPS在更大负载下的性能如何
谢谢大家。关于重新认证/密钥建立,是否存在特定问题?还是使用TCP?创建协议是一项艰巨的工作,我建议您在发明wheel之前尝试TLS。HTTPS(实际上是SSL)包含一种称为会话恢复的功能,它避免了对每个连接进行昂贵的公钥操作。他们已经优化了您担心的问题。正如owlstead所建议的,不要对性能进行假设,而是尝试一下,看看。@owlstead“重新发明轮子”并不像我想象的那么难