共计 1781 个字符,预计需要花费 5 分钟才能阅读完成。
前言
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 终端。原则上工作秘钥的过期时间为一天,即使有黑客花费高昂代价解密了工作秘钥,第二天秘钥就会作废。