客户端防重放设计
2016-02-23 11:23
399 查看
需求概述
客户端信道早在1.1版本中便实现了服务器防重放攻击功能,但始终没有实现客户端防重放攻击。这样会使得客户端存在被重放攻击的危险,如用户在转账时被重放了转账失败页面,导致用户重复转账。 为此,我们需要在客户端信道中实现客户端防重放功能。功能需求
我们需要实现以下需求:在服务器响应中增加序列号,实现客户端防重放功能
兼容之前版本的信道通信,以便在升级服务器后,可以兼容旧客户端。
设计
为兼容旧版本信道协议,我们需要新增1.5版本协议来实现客户端防重放功能。1.5信道协议在1.4协议基础上进行升级。防重放逻辑
在服务器响应报文的前面增加组别和防重放序列号。格式与请求序列号格式相同,即组别(1位byte) + 序列号(8位byte) + 响应内容。
由于从1.4版本后摘要值添加在响应内容前,因此1.5版本需要将摘要值添加在序列号之前,即摘要 + 组别 + 序列号 + 响应内容。
客户端收到响应后先解析组别和序列号,并与本地同组别的请求序列号进行比较,验证序列号合法性。如果请求序列号与响应序列号相同则视为合法,合法再处理校验摘要值及响应内容,如果非法则提示网络错误。其中网络错误提示信息可配置。
会话超时时,服务器统一返回20位byte(全是0)数据,不分国密非国密。
序列号生成逻辑
响应序列号生成的规则为:与本次客户端请求序列号相同。由于服务器本地可以获取到当前请求对应的请求序列号,因此响应序列号只需使用该值即可。
响应hamc校验摘要值计算
由于序列号作为响应内容的一部分,因此摘要需要以加入序列号之后的响应内容来计算。即摘要值 = 对(组别 + 序列号 + 响应内容)做hamc加密。国密加密模式下摘要值为32位byte,非国密模式下摘要值为20位byte。
HTTP防重放逻辑
修改接口ewp_ssl:ssl_sign/2处理逻辑:修改摘要值的计算方法
响应报文修改为:摘要 + 组别 + 序列号 + 响应内容
TCP防重放逻辑
修改接口ewp_ssl:ssl_sign/2处理逻辑:修改摘要值的计算方法
响应报文修改为:{tcp, 摘要, 组别 + 序列号, 响应内容}
根据TCP设计文档 4.1.2 TCP接口,服务器响应格式的ResponseMessages,追加Type类型3,表示 组别(1位byte) + 序列号(8位byte),格式为:Type(1 byte) + Length(4 bytes) + Content(Length bytes)。如:<
相关文章推荐
- 一步一步跟我学易语言之第二个易程序菜单设计
- 基于逻辑运算的简单权限系统(原理,设计,实现) VBS 版
- C#中设计、使用Fluent API
- 基于逻辑运算的简单权限系统(原理,设计,实现) VBS 版
- JavaScript设计模式初探
- JavaScript 组件之旅(一)分析和设计
- C# 事件的设计与使用深入理解
- 大型网站设计注意事项大全
- Android中的脑残设计总结
- 常用的Javascript设计模式小结
- 用户权限管理设计[图文说明]
- PHP常用设计模式之委托设计模式
- HBase RowKey设计的那些事
- HTML&CSS构建网站链接
- iOS 应用2.0版怎么做(转)
- 报表开发小技巧:报表的设计与配色技巧
- 也谈淘点点60s短信订单的架构设计
- 关于游戏服务器中缓存的设计方案的讨论
- 面试:(设计,架构)
- 所有的bug都是来自于最初设计的失败