通联对接之密钥处理

今天主要记录下这两天对接的新通道,感觉这个通道的密钥处理很有意思,做了很多很没必要的操作。其实安全性跟提供机构密钥转加密相同。
参数

  • ip XX.XX.XX.XX port: XXXX
  • TPDU:6006030000
  • 商户号:XXXXXXXXXXXXXXX
  • 终端号:00000006
  • 联机初始密钥:11111111

通联密钥下载业务处理流程

  • 测试阶段提供商户号、终端号和初始密码
  • 通过提供的商户信息进行签到下载机构主密钥 域60.1取值0x54,获取ITMK,用于加密0x52响应中平台下发的TMK
  • 通过下载获得的机构主密钥签到下载终端主密钥 域60.1取值0x52签到-联机密钥更新,获取TMK
  • 签到认证并确认下载到的终端主密钥 域60.1取值0x53签到-联机通知密钥更新成功,终端更新TMK成功,通知平台更新
  • 通过下载的终端主密钥签到下载工作密钥 域60.1取值0x50开始正式签到,获取工作密钥等信息进行解密

获取ITMK

  • 先对初始密钥进行MD5加密
    md5pwd==md5PWD(11111111)==BD886460827015E5D605ED44252251
  • 对终端号进行前四后四字节反转
    TID_1==posNumPerver('00000006')==00060000
  • 对反转ASC终端号和固定密钥进行异或
    TID_2 ==xor('3030303630303030','CDA8C1AAD0C2D0CB') = FD98F19CE0F2E0FB
  • 对TID_2的每个字节除9磨9,每个字节都转为16进制,将除数和模数异或
    	for (int i = 0; i < TID.length(); i+=2) {
    		String strs = TID.substring(i,i+2);
    		int strs1 = StringTools.hexToDecimal(strs);
    		XTID +=StringTools.intToHex((strs1 / 9) ^ (strs1 % 9));
    	}
    	结果:XTID ==FD98F19CE0F2E0FB ==1D181D1210121013
    
  • 上一步的结果后追加固定密钥D6A7B8B6CEDED3C7后与md5PWD异或作为3DES/sm4的KEY
    TTEK==(xTID || D6 A7 B8 B6 CE DE D3 C7) xor md5pwd TTEK==06A59576709060063371BD5B8AFBF196
  • 用ttek对终端+pwd明文ASC进行加密上送
    最后TRD的密文被TTEK作为KEY对TRD的明文做3DES/sm4运算得到; PWD的密文被TTEK作为KEY对PWD的明文做3DES/sm4运算得到; 用TTEK作为KEY对TRD明文+PWD明文共16个字节做sm4运算得到16字节的密文; 06A59576709060063371BD5B8AFBF196 加密 30303036303030303131313131313131 得到上送62域的数据 628CB5FEA83F20DD620EB76335113473
  • 54签到上送成功,收到响应62域【628CB5FEA83F20DD620EB76335113473C25E07101340E938983708EE4F98BEFA7912C5F6EB9FEE5999837AD3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000】
    62域组成【TRD+PWD+PRD+TMK+TPK+TAK+TRK】
    TRD:628CB5FEA83F20DD 解密明文:3030303630303030 </br> PWD:620EB76335113473 解密明文:3131313131313131 </br> PRD:C25E07101340E938 解密明文:2A8FA791F4614F31 </br> TMK:983708EE4F98BEFA7912C5F6EB9FEE59 checkval:99837AD3 </br> TPK:0000000000000000000000000000000000000000 TAK:0000000000000000000000000000000000000000 TRK:0000000000000000000000000000000000000000
  • 获取LTEK的密钥对TMK解密对比校验值
    LTEK==ITEK= (ITEK_LEFT||ITEK_RIGHT) xor md5PWD
    1)ITEK_LEFT=xTID,即按11.5小节算法步骤12得到的xTID  
    2)ITEK_RIGHT为终端随机数的变种xTRD和后台POSP随机数的变种xPRD异或得到。POS解密POSP下发的PRD密文后,得到PRD明文
    3)应按照11.5小节步骤12,计算出随机数的变种xTRD和xPRD。
    	xTRD== 1D181D101012101D
    	xPRD== 051508131C0D0F0A 
    	ITEK_RIGHT= xTRD xor xPRD==0D15030C1F1F17
    4)用变种ITEK_LEFT+ITEK_RIGHT异或md5PWD得到 ITEK
    	ITEK= (ITEK_LEFT||ITEK_RIGHT) xor md5PWD
    	ITEK=1D181D1210121013180D15030C1F1F17xor1BBD886460827015E5D605ED44252251==06A5957670906006FDDB10EE483A3D46
    5)用解密出来的ITEK 解密54签到响应的TMK,得到ITMK
    	Itmk=	ITEK 解密 tmk
    	itmk== B6C8BA15DC6894C71C1570348319A175 对比校验值
    

终端主密钥

  • 0x52签到响应62域【0000000000000000000000000000000000000000000000004E0A30FA9FCA0A69C6C10B482D7ABC635A0DD8E964EA7FEFB50968C11E890B50E4B2D916B3543EA0342FD6354569DD480000000000000000E63F153CE6B54E795EA36A154871361EAFFD1E0388E95616】拆分同上
  • 对终端主密钥进行解密
    拿ITMK对此处的TMK进行解密,得到真正的TMK终端主密钥明文,然后对50签到响应的工作密钥转加密进行支付。所以终端主密钥明文为:62D3ABAE5B3BD302C8BC46C23EF2019E

主密钥确认

  • 0x53签到属于更新存储密钥.通知上游确认好密钥信息。所以成功响应就可

终端签到

  • 0x50签到,到这就为正常的终端签到,获取工作密钥,并用主密钥对工作密钥进行转加密的时候了。操作方式简单,直接组织签到报文上送,对响应62进行拆分。
  • 用0x52解密出的TMK解密tpk/tak/trk
    tpk==754A5B1F8592FD0E838C1616924CAB40 校验值:171C00BF63074DFC


主体签到和解密流程粗略描述完成。需要记住,所有操作,都需要比对校验值是否正确!!!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值