CS通讯加密算法

    本文地址:http://tongxinmao.com/Article/Detail/id/63

    实现效果: 

    1、不是我的设备或客户端软件不能连到我的服务端

    2、我的设备或客户端软件不允许连接别人的服务器

    3、别人通过抓包方式伪造我的设备仍无法正常通信


    前提:

    加密算法只有你自己知道


    通讯加密算法:

    1、非法客户端检测
    通过客户端唯一标识符及随机串加密生成加密串进行登录,服务器解密后验证是否正确,如果不正确则表示是非法客户端,服务器立即断开连接。此时非法客户端仍可以监听网络数据包获得合法的加密串并伪造别人的身份进行登录。

    2、非法服务器

    服务器验证客户端合法登录后根据客户端ID及连接标识符生成密钥串,客户端收到此密钥后解密还原验证是否是合法的服务器。

    3、伪造客户端检测

    客户端将服务器发来的包含连接唯一标识符的密钥串再进行加密形成新的密钥串,此后所有通信过程都带上此串。伪造身份的客户端即使正常登录了,但由于每个连接标识符不一样,生成的二次加密串也不一样,服务器据此可以检测出伪造客户端。


    示例:

    客户端登录: 客户端ID_随机串_加密串

    服务器检测: 根据相同算法得到加密串,与客户端加密串不一样则为非法客户端。 回复:客户端ID_连接ID_新加密串

    客户端检测: 计算加密串如果与服务器回复的不一样则为非法服务端,断开。根据客户端ID与连接ID生成二次加密串用于后续通信

    服务器检测: 登录后的正常通信服务端每次计算二次加密串检测是否正确,这样伪造的客户端也被识别出。


    每次检测会加重CPU负载,可以在登录后双方进行一次及心跳包中周期检测,不正确回复就断开。





    APP调用服务器API安全设计


    1、登录(发送用户名密码/APPID SECRET 加密串)获取TOKEN,(TOKEN作用就是为了对应UID,是已登录过的标识,后续请求都要带上)
    2、发送其他请求时将参数按约定排序(加上TIMESTAMP(用来判断TOKEN是否超时) TOKEN参数),加上SECRET进行MD5加密SIGN签名,这样别人无法伪造修改URL


    和WEB登录系统的区别?
    WEB登录是SESSION机制,依赖客户端的COOKIE,APP中如果要用SESSION要自己维护COOKIE且关闭APP后COOKIE会被清空。
    用WEBVIEW(浏览器)请求的话每次都会带上COOKIE,效率低



    数据包被监听重放攻击?
    关于防止重放攻击,目前主流做法,要求通信双方必须事先协商一个初始序列号,并协商不易被破解的递增方法
    获取服务器保存一个上次访问时间,如果后来的访问比这个前就是非法


    用户密码脆弱MD5容易被破解?
    系统设置一个固定的盐值,该盐值最好足够复,拼接后再进行2次MD5


    对业务数据双方都用APPID SECRET进行对称加密更安全,如果使用HTTPS传输更难破解


    服务器对于超过一定次数错误请求的让TOKEN失效

    客户登录时服务器除了返回TOKEN,也可以返回附加的证书服务器合法性的字段


    tcm123@126.com  http://tongxinmao.com


    上一篇:PHP扩展开发
    下一篇:SBT硬件注意事项