银行卡密码键盘 SM4 ECB模式+ANSI X9.8 格式标准(带主账号信息)PIN 加解密示例

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


版权声明:本文为M_Kerry原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。