前言

POS刷卡交易属于传统的支付领域。在移动支付微信/支付宝的冲击下,刷卡支付的市场份额在逐渐萎缩,毕竟手机扫一扫比拿个银行卡刷卡输密方便多了。虽然移动支付大行其道,但是刷卡支付仍然有其存在的必要性,至少在大额支付领域仍然需要依赖刷卡支付。在使用磁条卡或者芯片卡进行刷卡交易时,必然涉及到敏感信息的传输,必然涉及到加密,而加密必然涉及到秘钥。如何管理秘钥的使用范围以及保障秘钥的传输安全,是加密过程中的重中之重。

本文来源于我的博客网站http://51think.net

一、关注点

我们可以把支付流程分成两三个部分,如下图,POS设备进行刷卡,将刷卡信息上送给支付平台,支付平台再将交易信息上送给银行。

两个信息上送阶段均涉及到信息的加密传输,加密的原理是一致的,加密中所使用的秘钥结构需要符合银联的安全规范要求。本文以刷卡信息上送到支付平台为例,介绍多层秘钥体系的应用。 先了解几个名词术语:
1、加密机

 加密机是一个硬件设备,具备加密、加密、秘钥管理等功能,它将加解密的操作全部封装在硬件里,具备很强的抗攻击能力。  

2、PIN信息

  持卡人的个人标识码,即银行卡密码。PIN信息在整个支付链路中都是以密文的方式存在,在POS设备中,PIN信息手动输入后直接到硬件层进行加密,黑客无法劫持。  

3、LMK/ZMK/TMK

 LMK是加密机最顶层秘钥,保密级别最高,称之为本地主密钥。LMK一般是由不同的人保管着不同的秘钥分量,然后不同的保管员在加密机分别输入自己保管的那一部分并合成一个LMK,没有人能够知道LMK的全部信息。ZMK(Zone Master Key)可以理解为区域主密钥,TMK(Terminal Master Key)可以理解为终端收单主密钥。LMK/ZMK/TMK均属于保护秘钥,保护秘钥是用来加密保护工作秘钥的,分层管理,不涉及到加密报文。   

4、收单主密钥

  收单主密钥在本例中称之为TMK,用来加密保护工作秘钥,签到时由服务器端ZMK加密产生。

5、工作密钥(workKey)

  工作秘密是真正用来加密敏感信息的秘钥,包含pin秘钥、mac秘钥以及data秘钥。比如pin秘钥用来加密银行卡密码信息,mac秘钥用来保障报文的完整性,data秘钥用来加密银行卡里的磁道信息。  

6、设备主秘钥(devKey)

   设备主秘钥是集成在POS硬件设备里的,作用和加密机的LMK类似。POS设备在出厂之前,需要从支付机构获取到设备主秘钥明文灌装到设备里。如果受到暴力攻击,设备主秘钥可以自动销毁。

二、多层秘钥体系

之所以称之为多层秘钥体系,是因为在这种模式下,可以根据安全复杂度要求,设置多层嵌套,层层保护,可以是三层,也可以是四层。下图体现的是一套四层的秘钥体系,加密机可以使用LMK加密产生ZMK,使用ZMK加密产生TMK,使用TMK可以加密产生pinKey、dataKey、macKey 。

由此可以看出,LMK需要绝对安全,否则所有的秘钥将会泄密。可否简化成三层?我们尝试把ZMK这一层删除:

由LMK直接加密产生收单主密钥TMK,只要LMK绝对安全,这样分层也是可以的。但是这种情况下,收单秘钥过于依赖LMK,不方便大规模的秘钥管理。如果加入了ZMK这一层,我们可以在逻辑层面上,将每个POS厂商分配一个ZMK,即使某个厂商的ZMK被泄露了,其他厂商也不会受到影响。如下图:

三、秘钥传输过程

从上文得知,TMK作为收单主密钥是用来加密保护工作秘钥的。那我们如何将TMK安全的送达到POS终端?这里必然涉及到网络传输,而网络传输必然会面临着报文被劫持的风险,所以TMK一定是密文的形式返回给POS终端。由此得知,我们需要一个新的秘钥用来加密TMK且这个新的秘钥也存在于POS终端,这个新的秘钥我们称之为设备秘钥。在POS设备出厂前,POS厂商使用API接口的方式从支付平台得到设备秘钥,然后灌装到设备硬件里。有了设备秘钥,后面的签到流程就可以解密相关秘钥了。如下图:

在POS设备中,维护这如下的秘钥关系:

何为签到?签到是银联的POS交易规范流程中的术语,在本例中,我们使用签到流程从支付平台获取收单主密钥和工作秘钥。支付平台控制这两个秘钥的生命周期,如果过期,则会产生新的收单主密钥和工作秘钥返回给POS终端。原则上工作秘钥的过期时间为一天,即使有黑客花费高昂代价解密了工作秘钥,第二天秘钥就会作废。


思想者
40 声望2 粉丝

默默承受着这个年纪不该有的成熟和睿智