国密模块 
名词解释
国密
国密即国家密码局认定的国产密码算法,即商用密码。商用密码,是指能够实现商用密码算法的加密、解密和认证等功能的技术。(包括密码算法编程技术和密码算法芯片、加密卡等的实现技术)。商用密码技术是商用密码的核心,国家将商用密码技术列入国家秘密,任何单位和个人都有责任和义务保护商用密码技术的秘密。
国家密码管理局
国家密码管理局:国家密码管理局是中央国家机关,下属的研究所、密码分析测评中心和专用芯片实验室系国家全额拨款事业单位
国密算法
商用密码,常见算法SM1、SM2、SM3、SM4、SM7、SM9、祖冲之ZUC、算法;
参考文献
<<中国银联银行卡联网联合技术规范V2.1>>
<<国密SM算法试点技术指引>>
<<销售点(POS)终端支持国产密码算法试点应用技术指南>>
算法介绍:
SM1 SM2 SM3 SM4
PBOC3.0 + SM算法应用
算法互换原则
SM2 -> RSA (通常用于公钥下载、签名、脱机数据认证等)
SM3 -> SHA-1 (通常用于公钥下载、签名、脱机数据认证等)
SM4 -> 3DES (通常用于PIN/MAC,与主机数据交互等)
Verfione SM Support
| SM | Vx680 | C680 | Vx675 | C520H | Vx520 |
|---|---|---|---|---|---|
| SM2(软加密) | Y | Y | Y | Y | Y |
| SM2(硬加密) | Y | Y | Y | Y | Y |
| SM3(软加密) | Y | Y | Y | Y | Y |
| SM3(硬加密) | Y | Y | Y | Y | Y |
| SM4(软加密) | Y | Y | Y | Y | Y |
| SM4(硬加密) | Y | Y | Y | Y | Y |
注1:Verifone已经获取国密证书
注2:SM加密模块=北京华虹SJK1440智能IC (硬加密)
基本用法
终端/主机报文域
相关内容:报文域、算法标识、PIN加密数据、MAC加密数据
Tag
- DF69:SM算法支持器,1byte
- 9F10:发卡行数据中可以获取国密SM算法标识,1byte
52域

- 相关函数:Pinpad_SM4_GetPin() 、 Pinpad_SM4_GetSupportFlag()
- 注意数据域52、62处理;
- 注意:各收单行针对国密SM加密的PIN Data处理不同;主机处理也可能不同;
53域

- 相关交易:签到、消费等53域;
- 相关函数:Pinpad_SM4_Crypto()
- 相关代码:
tmp[0] = 0x20; //不带主账号信息为1,带主账号信息2 if(SM4Flag ==1) tmp[0] |= 0x03; //SM4 else { if (fixPrm->PPDesType == PP222_3DES_MODE) tmp[0] |= 0x06; //单倍长为0,双倍长为6 } - 注意:算法标识取值以收单机构为主;
60域

- 相关代码:
- 相关函数:
- 注:处理境外交易、DCC交易需要考虑一下;以收单机构为主
62域(终端-参考)

- Tag00
63域(主机-参考)

- 相关函数
- 相关代码
- 注意:收单行不同,做法不同;
64/128域
- Bit64/128 数据长度不变、MAC加密算法根据上送的53、60.3.3等算法标识域进行标识;
- 相关函数:Pinpad_SM4_GetMAC()
- 注意:
SM公钥下载
- 以收单机构为准,通常在62域增加SM公钥下载机制

PIN加密算法
- 双倍长3DES或SM4算法加密
- 相关函数:Pinpad_SM4_GetPin()
MAC加密算法


- 相关函数:Pinpad_SM4_GetMAC()
- 以收单机构为准;
安全信息加密
- 磁道信息加密、PAN加密等;
- 相关函数:Pinpad_SM4_Crypto()
PVN算法
CVN算法
注意:
- Verifone使用vfiCAPublicKey数据结构用来保存RSA公钥和国密SM密钥,应用需要注意其算法标识和内容的处理;
相关配套OS/Pinpad Lib
- (Vx680 OS WT00029N及以上) 支持内置SM4算法.
- (PP1000SEC 3IN1 Pinpad +FW1.5.1 +Pinpad V04.00.00) 支持SM4算法
- 相关Pinpad函数
#define ECB_MAC_BASE_SM4 (1)
#define CBC_MAC_BASE_SM4 (2)
#define SM4_ENCRYPT_MODE (1)
#define SM4_DECRYPT_MODE (2)
int Pinpad_SM4_GetSupportFlag(int* flag);
int Pinpad_SM4_LoadMKey(unsigned short index, unsigned char *MKey);
int Pinpad_SM4_GetPin(unsigned char *PIN, char *am, unsigned char *PAN, unsigned char *wkey,
unsigned char MinPINLen, unsigned char MaxPINLen, unsigned short timeout, unsigned short mkey_idx);
int Pinpad_SM4_GetMAC(unsigned char *MAC, unsigned char *Data, unsigned short DataLen,
unsigned short mkey_idx, unsigned char *MacKey,unsigned char mode);
int Pinpad_SM4_Crypto(unsigned short* outlen,unsigned char *outdata, unsigned short inlen,
unsigned char *indata,unsigned char *wkey,unsigned short mkey_index,unsigned char mode);
相关配套工具
- 终端模拟工具
延伸阅读
- SM算法性能指标

- SM算法性能指标

- SM2算法椭圆曲线参数标识
- 清算文件:关于国密算法的支持;
- 密码学:
- 对称算法(DES/3DES/ECB/CBC/):基于分组密码、流密码的应用算法;
- 非对称算法(RSA/DSA):基于大素数分解的算法;
- 杂凑算法(Hash): 固定长度输出的安全算法;
- 商用密码SM1、SM2、SM3、SM4、SM7、SM9、祖冲之ZUC、算法
- 密钥体系


