您的位置:首页 > 其它

客户端防重放设计

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)。如:<
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计