加密密钥:KEK,terminal keys encrypting key;
KEK密钥的用途:KEK实际上是一个密钥,用于加解密主密钥。导进去的主密钥是经过KEK加密后的密文,厂商在SDK再用kek解密主密钥密文。
KEK用3DES算法加密主密钥
KEK, 主密钥,工作密钥
一般做法是,商家提供主密钥密文及KEK给厂商,我们终端出厂烧好;商家在终端绑定时,下工作密钥。
所以密钥机制要规划好,看这个KEK和主密钥,是不是出厂机器就烧好
601601308800001=ED6A7FE6BF5C7569ED1D9D8C89398D85+B4FA01CE
601601308800002=C64DB3FFA392153D1460D3DE2B8A2D7B+89B7BD3F
601601308800003=ED6A7FE6BF5C7569ED1D9D8C89398D85+B4FA01CE
601601308800004=C64DB3FFA392153D1460D3DE2B8A2D7B+89B7BD3F
如:一般大多数APK端,是提供这种主密钥文件给厂商,一个SN号对应一个主密钥,出厂对应烧好
主密钥:用于解密签到获取的工作密钥密文。
工作密钥:包括PinKey(用于密码加密)和MacKey(用于报文加密)
签到:获取pinkey、mackey、批次号
签退:先批结算,然后签退,否则批次号不会更新。
批结算:上送本地pos终端交易流水给服务端,若通过校验则可以进行签退,否则需要批上送交易明细
批上送:批结算校验失败,上送本地交易明细到服务端进行比对。
密码加密原理:使用终端主密钥解密签到得到的pinKey,得到pinKey密码明文,然后用密码明文参与PIN Block加密
计算MAC报文也同理
PIN:个人标识码,Personal Identification Number, 也就是密码。
PAN:个人主账号
PIN BLOCK 格式等于 PIN 按位异或PAN:
18位银行卡号密码加密示例
例如: 明文PIN为: 123456,
假设: 磁卡上的PAN:1234 5678 9012 3456 78
截取下的PAN:6789 0123 4567
用于PIN加密的PAN为:0x00 0x00 0x67 0x89 0x01 0x23 0x45 0x67
PIN BLOCK为: 0x06 0x12 0x34 0x56 0xFF 0xFF 0xFF 0xFF
异或: 0x00 0x00 0x67 0x89 0x01 0x23 0x45 0x67
结果为: 0x06 0x12 0x53 0xDF 0xFE 0xDC 0xBA 0x98
16位银行卡号密码加密示例
假设: 磁卡上PAN:1234 5678 9012 3456
截取下的PAN:45678901 2345
则用于PIN加密的主账号为: 0x00 0x00 0x45 0x67 0x89 0x01 0x23 0x45
PIN BLOCK为: 0x06 0x12 0x34 0x56 0xFF 0xFF 0xFF 0xFF
异或: 0x00 0x00 0x45 0x67 0x89 0x01 0x23 0x45
结果为:0x06 0x12 0x71 0x31 0x76 0xFE 0xDC 0xBA
银联报文中,除了各个域外,还有以下组成部分:
TPDU + 报文头 + 应用数据 + 位图
TPDU:Transport Protocol Data Unit,传输协议数据单元。是POS报文的一个特定域,由三项共五个字节(10位)的信息组成。用于终端与系统之间的网络协议,用于终端与系统之间的网络协议,用法见下面示例
报文头:6个字节(12位),用法见下面示例
应用数据:2个字节(4位)
位图:bitmap,1域内容,标记哪些域存在(1),哪些域不存在(0),8个字节(16位),这里推荐一个快速计算位图工具:8583 bitmap viewer
如组包代码示例:tradeData.setPkgHeader("6005050000603100311001");
TPDU: 60 05 05 00 00 //磁条卡金融支付类应用为:60
报文头: 60 31 00 31 10 01 // 磁条卡金融支付类应用为:60 软件版本号31:2010年银联POS规范版本(本规范) 最后的00一个代表正常交易状态,一个代表处理要求,