移动客户端与服务器端安全通信方案

尼再采 发布于 2013/04/26 09:18
阅读 3K+
收藏 5

    最近项目中需要解决移动客户端与服务器安全通信的问题,但是不想用第三方安全证书,因为感觉太麻烦,而且需要交钱,而传统的加密又太弱了,所以研究了一下,得出了一个自己的方案,不知道怎么样?OSChina牛人太多,小弟初入此行,不知深浅,希望能跟懂行的人多多交流,帮忙斧正一下,小弟不胜感激。如有不妥尽管批评,就事论事追求真理,只是不要牵涉人身攻击就好了,感情亲疏也不要影响对事物的认知。小弟在此先谢过了。以下是作者的思考:

    CSC客户端,S服务器端

    在客户端软件发布前,客户端保存一个公钥,服务器保存一个私钥

    C1:客户端随机生成一个对称密钥K,使用公钥加密内容(K+账户+密码)。发送给服务器

    S2:服务器收到后使用私钥解密,并验证用户和密码是否正确,正确的话保存此K在用户的信息中(如果原先已经有了K就替换掉旧的),返回数据:包括客户端登录成功的信息,返回一个Token(令牌,以后见牌如见人)和一个uid(用户的id)。

    C3:使用本地保存的K解密得到Token和自己的uid

    安全传输准备工作做完了。

    C4:每次传输数据对于加密的内容一律使用K进行加密,并附以明文参数uid,然后把此内容发送给服务器。

    S5:根据uid找到保存的K,然后进行解密(K仅仅用来解密,对于解密的内容无法验证),查看Token是否匹配,如果匹配的话那么此次请求就是有效的,否则无效。


补充:

网络上的东西总是真真假假无法确定,但是因为客户端软件安装的时候公钥就已经在里面了,因此这个公钥信息是真的,这个规则怎样开始也是确定下来的;

因为公钥私钥是安全的,所以传输的K是安全的,所以使用K对称加密的内容也是安全的,即使黑客破解了少数几个K,对其他的K还是没有影响,而且K具有随机性和时效性,用户注销了或者太久没登录了这个K就会自动失效。


优点:

安全性,除非入侵服务器拿到私钥,或者破解久经考验的非对称加解密算法,没有其他办法大规模攻破,相比其他单纯使用对称加密和非对称加密方法效果都要好。


缺点:

用户第一次握手验证时使用非对称加密的内容,服务器非对称解密消耗资源比较多,如果攻击者发送大量此类信息,容易导致服务器DDoS攻击。个人觉得暂时无法从根本上避免这个问题的发生,只能够加上一些措施增加其难度,从而过滤掉一部分攻击者,具体措施有很多种,比如自己软件写个加密算法,服务器会根据解密算法进行计算从而验证是否有效,再比如android的话把这些算法写在jni层,增加反编译破解的难度,还有其他方法欢迎补充。


性能消耗:

除了第一次登录的时候非对称解密稍微慢一些,其他应该影响不大(尚未做实机测试效果,请勿轻信)

    欢迎批评斧正!

参考信息:

http://segmentfault.com/q/1010000000156701

http://baike.baidu.com/view/356572.htm

http://baike.baidu.com/view/1982056.htm#2

http://www.dewen.org/q/2005

加载中
0
尼再采
为啥没人回答呢?哪里写的出问题了吗?
0
易水西风
易水西风
想法挺好啊,不过传输大量数据的时候响应时间会受影响吧
尼再采
回复 @易水西风 : 是的,一下子做好是不现实的。其实我是怕如果项目后期发展前景好的话,对安全要求提高了,这时再改动方案会比较麻烦,我觉得安全的东西最好要融入架构,起码有个安全的框架也好。视频很受益,很多好东西,非常感谢。
易水西风
易水西风
回复 @尼再采 : 我也只是看过相关的一些文章,并没有实际做过这方面的东西,你可以看一下infoq的这篇文章,这个小伙子讲得挺好,其实好的架构都是需求驱动不断进化的。一下子完全做好不现实的。 http://www.infoq.com/cn/presentations/public-comment-mobile-application-architecture-evolution
尼再采
回复 @易水西风 : 谢谢,说的很好,您应该做过这方面的项目吧。不过像我们项目刚开始做,很多东西不完善,有些功能做不了这么强大。
易水西风
易水西风
@尼再采 如果确实要求很高的安全性,又想优化性能,可以用一些监控手段分析性能瓶颈在哪里,如果是在网络传输方面的瓶颈,可以考虑对传输的数据进行压缩什么的,具体优化要看具体是什么瓶颈了
易水西风
易水西风
@尼再采 汗,我不是专家啊,简单谈一下自已的看法吧,可以分情况啊,我觉得可以把API分两类,一种是需要加密的,另一种是不需要加密的。
下一页
返回顶部
顶部