在金融领域以消息鉴别码(Message Authentication Code 简称 MAC)进行消息认证防篡改
基于对称算法(CMAC)的 鉴别算法计算时需要考虑以下几点(网络数据流都是高位)
- 当给定的消息后,需要对数据分块计算,如果数据不足以进行加密运算的最小块长度如何进行操作
- 正好足够,是否按照填充规则填充
- 需要填充,规则如何
ISO/IEC 9797-1 Padding 中常见的如下两种
-
按照 bit为单位来讲 不足的直接在后面按照bit 位 是 0 来算 也就是 所谓的 填充 0x00
-
按照 bit为单位来讲 不足的直接在后面先填充 一位 bit 1,不足继续填充 bit 0,也就是所谓的填充 0x80 然后填充 0x00
基于商算、国算的金融业务算法填充也就这两种。但基于数据加密的还有PKCS5Padding/PKCS7Padding 关于数据填充的更多规则/标准参见附录
当数据完成填充,可以划分为完整块后,我们还需要关心密钥如何使用
- 密钥如何使用
- 直接用于进行数据MAC 普通的MAC
- 密钥进行离散后进行数据MAC PBOC中离散密钥进行MAC
- 密钥进行离散后再次进行分散,然后进行MAC IC卡脚本MAC (EMV PBOC)
- 基于以上理论,可以根据采用密钥加密的方式,填充规则等归类
MAC实际的标准有很多,如下是常见标准中的摘录
The Financial Institution (Wholesale) Message Authentication Standard (ANSI X9.9-1986)
即CBC-MAC (ISO/IEC 9797-1 Algorithm 1) 但可以指 3DES-CBC-MAC
输入密钥:64bits(奇校验可选)
密钥算法:DES-CBC 密钥长度 64Bits,分组长度 64Bits, 初始化IV 全0
填充规则:不足时填充 bit 0
输出:8Byte 加密结果即为MAC
The Financial Institution (Retail) Message Authentication Standard, ANSI X9.19 Optional Procedure 1 (ISO/IEC 9797-1 Algorithm 3)
输入密钥:128bits(奇校验可选)
密钥算法:DES-CBC 密钥长度 64Bits,分组长度 64Bits, 初始化IV 全0
填充规则:不足时填充 bit 0
算法描述:先取 密钥左半部分 64bits,作为密钥进行DES-CBC MAC,取(结果,密钥右半部分 64bits)再次进行DES解密,取(结果,密钥前 64bits)最后进行DES加密,取结果
输出: 8Byte 加密结果即为 MAC
为保证数据的安全传输,网络中的报文采用了PIN加密和报文来源正确性鉴别(MAC)两种加密技术。
基于DES/3DES算法的PIN、MAC长度为8字节;
基于SM4算法的PIN为16字节,MAC长度为8字节。
【中国银联银行卡交换系统技术规范 第4部分 数据安全传输控制规范 Q/CUP 006.4-2016】
-
国际算法
同 X9.9 MAC 规则,但密钥长度支持 双倍、三倍长度
密钥输入:64Bits 、128Bits、192Bits (奇校验可选)
密钥算法: DESede-CBC 密钥长度 ,分组长度 64Bits, 初始化IV 全0,
填充规则: 不足时填充 bit 0
算法描述: 密钥及算法 DESede-CBC 进行计算 ,取最后一块结果
输出 8Byte MAC结果
-
国密 128Bits
同 X9.9 MAC 规则,但算法替换为SM4 块大小对应为16Byte
密钥输入: 128Bits
密钥算法: SM4-CBC 初始化IV 全0, 分组长度 128Bits,
填充规则:不足时填充 bit 0
算法描述:对数据进行SM4-CBC模式分组加密,取最后一块结果
输出: 16Byte MAC结果(实际)/ 左半部分8Byte MAC结果(规范)
算法说明参见【中国银联POS终端规范 Q/CUP 007-2006】
算法说明参见【中国银联银联卡受理终端应用规范 第一部分 POS终端规范 Q/CUP 009】
-
国际算法时
将数据分组异或后取最后一块,对最后一块进行 DESede加密
密钥输入:64Bits 、128Bits、192Bits (奇校验可选)
密钥算法:DESede-ECB, 分组长度 64Bits,
填充规则:不足时填充 bit 0
算法描述:对数据进行分组后进行异或计算,取(结果,密钥)进行DESede加密,取结果
输出:4Byte MAC结果 即 8Hex MAC结果
-
国密算法时
暂无,参见【中国银联联机报文MAC算法 Q/CUP 006】或【中国银联银行卡联网联合技术规范V2.1(金融IC卡国密算法升级)】
在PBOC1.0 电子钱包中使用离散子密钥进行MAC计算,PBOC3.0中已经移除了电子钱包
此类多为IC卡(智能卡),需要进行密钥离散,对于卡片/服务器 操作稍有不同
参见IC卡部分的IC卡脚本MAC