知识背景
业务客户端跟后端服务的协议为自定义的二进制协议,其中协议头中有一个2子节的字段,表示该请求包对应的功能(如0x825是调度功能的请求包),也称为命令字。
TLV是一种常用的用于通信的结构体格式。T表示tag(类型),L表示length(value的字节长度),V表示value。
Kerberos鉴权体系,基于票据的鉴权服务,避免密码相关数据直接过多地暴露在网络上。
使用标准的密码学算法,切勿自研加解密算法,算法是透明的,**才是保密的。
对称加密:加密和解密时使用的是同一个**。
非对称加密:需要两个**来进行加密和解密:公开**(public key,简称公钥)和私有**(private key,简称私钥) ,公钥加密的信息只有私钥才能解开,私钥加密的信息只有公钥才能解开。
以下所有包的加密解密均为对称加密。
ECDH
ECDH基于ECC的DH(Diffie-Hellman)**交换协议,可以使通信双方在不安全信道协商一个共享**(A=aP,其中P是一个很大的素数。公钥A、私钥a),但是不防中间人攻击。
总架构图
登录流程加解密方式
一、0x825调度
获取一台conn服务器ip,并开启后序的登录流程。相同的加解密方式命令字如二维码登录0x817、0x818,验证码0xba
上行包格式
K1 + 密文请求
密文请使用K1解密,不安全。里面带上了客户端的公钥A(A=aP),其中A、a是客户端随机生成的非对称**,每次登录不一样。
下行包格式
正常下行包使用K1 加密
错误提示语回包使用ECDH加密
因提示语涉及高敏感和安全风险,固采用ECDH协商秘钥加解密。ECDH服务器用b跟A作运算得到bA(baP)作为**加密0x825错误回包给客户端。其中B、b(B=bP)是根据客户端版本hardcode的一对非对称**(防中间人),每个版本不一样。当然服务器会保存相应版本及对应的B、b。客户端收到回包后拿hardcode在客户端的B跟a运算得到的**Ba(bPa)解服务器的回包。
二、0x836验密
验证密码(大大票)。
上行包格式
A + 包体(bA加密,含A1)
如果0x836上行使用ECDH加密,则需ECDH服务器算出**bA(baP)解密包体。同时ECDH服务器定时生成一对公私钥Cc(前向安全),返回C和ShareKey2(cA)给conn。
- TAG_ID_TGTGT_SIG:大大票,由密码组装的包含自身信息的票据A1,客户端生成
- S2 = md5(md5(pwd)+uin)
- A1= TEA(S2, uin + time + md5(pwd) + randkey[16] + …) //用**S2和加密算法TEA加密内容。其中randkey也叫TGTGT_KEY。
下行包格式
conn生成的随机**1 + TLV(0x109,SessionSig用vaskey加密,里含有conn生成的随机**1)+ TLV(0x107,含TGT、ST,由DB加密生成的且包含随机**GTK_TGT )+ 其他
bA加密(C + ShareKey2加密(TGTGT_KEY加密(内容)))
客户端用Ba解包后得到C,然后用Ca解密,最后用TGTGT_KEY解密。TGTGT_KEY也叫randkey其实是客户端生成的随机**放在了A1中,由DB解密后返回给conn的。
- TGTGT_KEY:客户端生成的随机Key,由DB解密后获取返回给conn的。
- TGT:通过TGTGT登录后,由DB派发的高权限登录凭证。DB加密生成的TGT中包含随机**GTK_TGT
- GTK_TGT:由DB生成的随机**
- ST:业务小票,是通过TGT换取的一种业务票据,用于访问业务鉴权,权限较低
三、0x828登录
登录、分配和初始化用户信息。其中到DB校验大票成功后,会进入分配和初始化onlinelocal信息。设置状态值shStatus为5,conn会丢弃状态已为5的0x828请求,可防重放攻击。conn生成随机**2,拉取好友表等逻辑。
上行包格式
TLV(0x30,含SessionSig) + 随机**1(TLV,含大票TGT)
TLV使用vaskey解密后获取里面的conn生成的随机**1解密其余包体。
下行包格式
TLV(0x10c,含有conn随机**2) + TLV(0x14,心跳间隔60s,可配置)
GTK_TGT加密(0x828回包)。
往后所有的包的加解密均使用conn随机**2也叫sessionkey,该**存储在conn的onlinelocal里面,每个uin,每次登录均不一样。
四、0xec上线
上线,将用户的状态从5改为10上线并向同步系统同步状态。对于状态不为5,conn会丢包处理,可防重放。
使用随机秘钥2加解密
# 参考资料
http://blog.****.net/b2222505/article/details/72872202