1.软加解密示例
————————————————————————————————————————————------
已知数据:
银行测试主密钥TMK: 1234567890ABCDEFABCDEF0987654321
通过签到接口得到:
工作密钥密文KeyValue :3D66234C49E4296FF9C78D8BACBD6A76
工作密钥校验值CheckValue : 861E83E31FAEBF10
——————————————————————————————————————————————
1.计算PIN_BLOCK,方法为ANSI X9.8 格式标准(带主账号信息)
银行卡密码明文 PIN 123654
账号:6230606601007726888
主账号和PIN 按位异或(32位)
pin: 06123654FFFFFFFFFFFFFFFFFFFFFFFF
PAN: 00000000000000000000660100772688
XOR: 06123654FFFFFFFFFFFF99FEFF88D977
即 PIN_BLOCK 为 06123654FFFFFFFFFFFF99FEFF88D977
跟银行确认好,PIN_BLOCK 是 16位还是32位的。

2.把签到接口的返回值 KeyValue(工作密钥密文)由密文解密为明文,
方法为SM4 ecb模式
解密数据 3D66234C49E4296FF9C78D8BACBD6A76 (工作密钥密文)
解密密钥 1234567890ABCDEFABCDEF0987654321 (测试主密钥)
结果: F351D490994603795C6EBEE8FAEBB481
即 工作密钥明文为 F351D490994603795C6EBEE8FAEBB481

验证 解密是否正确
工作密钥明文: F351D490994603795C6EBEE8FAEBB481
数据:0000000000000000
进行 SM4 ECB 模式加密,所得值的前8个字节若与 checkvalue相同,则 解密正确。
结果:861E83E31FAEBF10 ,与签到接口返回的checkvalue 相同,得 解密正确。
3.用工作密钥明文 对 PIN_BLOCK 进行 SM4 ECB算法加密
加密密钥 :F351D490994603795C6EBEE8FAEBB481 (工作密钥明文)
加密数据:06125055FF88D977 (PIN_BLOCK)
结果:E639B7346D93D4ECE1E991CDCC84936E
即用户密码密文为 E639B7346D93D4ECE1E991CDCC84936E
2.知识点
①ANSI X9.8 格式标准
1. 不带主账号信息
a. 概念:对PIN (个人识别码 Personal Identity Number),以第一byte 记录
pin的长度,剩余7byte 为用户密码pin,不足8位右补F ,然后转换为BCD码
b. BCD码:用4位二进制数来表示1位十进制数中的0~9这10个数码;
十六进制转二进制: 把十六进制的每一位转化为4位二进制位
BCD码:把十进制的每一位转化为4位二进制位。
示例:二进制 0101 0101
十六进制为 0x55 (这是十六进制的55 )
BCD码: 55 (这里的55是十进制的55)
c. 示例:明文PIN 123456
d. Pin block 为 0x06 0x12 0x34 0x56 0xFF 0xFF 0xFF 0xFF
2. 带主账号信息
a. 概念:PIN BLOCK 为 PIN 按位 异或 主账号
i. PIN: 共8byte; Byte 1 为 PIN 长度;Byte2-Byte8 为PIN明文(每个字符占4个bit,不足8位右补F)
ii. 主账号取法:取主账号的右12位(不包括最右边的校验位),不足左补0x00;
iii. 异或:xor, 相同为0,不同为1;也成为 半加运算(不带进制的加法运算) 0⊕0=0,1⊕0=1,1⊕1=0
b. 示例:
1) Pin 123456 -> pin 0x06 0x12 0x34 0x56 0xFF 0xFF 0xFF 0xFF
2) 主账号 123456789012345678 -> 678901234567
3) Pin block:
pin:0x06 0x12 0x34 0x56 0xFF 0xFF 0xFF 0xFF
异或:0x00 0x00 0x67 0x89 0x01 0x23 0x45 0x67
结果:0x06 0x12 0x53 0xDF 0xFE 0xDC 0xBA 0x98
手动计算示例:
0x34 -> 0011 0100
0x67 -> 0110 0111
Xor 0101 0011 =0x53
②主密钥,工作密钥加解密
基本概念:
一.主密钥(TMK):由银行科技人员提供,可以采用手工输入(在安全环境下)或密钥母POS注入密码键盘,密码键盘将主密钥写入密钥保护芯片,此芯片具有开机程序自毁功能,能很好的保护银行主密钥的安全性,生产中应保持密码键盘主密钥与银行后台主密钥的一致性。
二.工作密钥(TPK):工作密钥为POS机向银行签到时从银行后台获取,由于签到交易需要通讯,所以需要对工作密钥进行加密传输(签到时银行返回POS的工作密钥是密文),POS终端收到银行返回的报文后,对工作密钥用主密钥进行解密,然后将工作密钥存储在专用的密钥保护芯片里,此过程用密码键盘的专用芯片进行处理,此密钥同样具有开机自毁功能。此密钥专用于计算PIN_BLOCK(对磁卡人输入的密码进行加密)。
三.MAC密钥(TAK):同工作密钥的处理方式一样,POS机向银行签到时从银行后台获取,由于签到交易需要通讯,所以需要对MAC密钥进行加密传输(签到时银行返回POS的MAC密钥是密文),POS终端收到银行返回的报文后,对MAC密钥用主密钥进行解密,然后将MAC密钥存储在专用的密钥保护芯片里,此过程用密码键盘的专用芯片进行处理,此密钥同样具有开机自毁功能。此密钥专用于计算MAC(对数据包生成校验数据)。
四.持卡人密码:用来确定持卡人的身份与信用卡相符,通常是6位数字(明文)。密码应该只有持卡人自己知道。密码要送到银行主机内核对,也就是说在密码的传送过程中不能被其他人获得密码明文,就算是银行人员也不能知道。因此在密码明文输入后就必须一直以密文的形式存在,就算是银行核对密码也应该核对密码密文。
加密种类:
加密种类分为 对称性加密和非对称性加密
对称性加密中又包含分组加密和序列解密,以分组加密为例,又分ECB和CBC 模式
所谓ECB模式,即为ECB(Electronic Code Book) 电码本模式
原理:略
3.密码键盘操作
待更新。
4.工具
附上本文所用智能卡算法工具。
链接:https://pan.baidu.com/s/1brrVVoXgDsiB6fm2s3mDAg
提取码:dvqb