POS刷卡交易属于传统的支付领域。在移动支付微信/支付宝的冲击下,刷卡支付的市场份额在逐渐萎缩,毕竟手机扫一扫比拿个银行卡刷卡输密方便多了。虽然移动支付大行其道,可是刷卡支付仍然有其存在的必要性,至少在大额支付领域仍然须要依赖刷卡支付。在使用磁条卡或者芯片卡进行刷卡交易时,必然涉及到敏感信息的传输,必然涉及到加密,而加密必然涉及到秘钥。如何管理秘钥的使用范围以及保障秘钥的传输安全,是加密过程当中的重中之重。 安全
本文来源于个人博客网站http://51think.net服务器
咱们能够把支付流程分红两三个部分,以下图,POS设备进行刷卡,将刷卡信息上送给支付平台,支付平台再将交易信息上送给银行。 微信
两个信息上送阶段均涉及到信息的加密传输,加密的原理是一致的,加密中所使用的秘钥结构须要符合银联的安全规范要求。本文以刷卡信息上送到支付平台为例,介绍多层秘钥体系的应用。 先了解几个名词术语:
一、加密机网络
加密机是一个硬件设备,具有加密、加密、秘钥管理等功能,它将加解密的操做所有封装在硬件里,具有很强的抗攻击能力。
二、PIN信息网站
持卡人的我的标识码,即银行卡密码。PIN信息在整个支付链路中都是以密文的方式存在,在POS设备中,PIN信息手动输入后直接到硬件层进行加密,黑客没法劫持。
三、LMK/ZMK/TMK加密
LMK是加密机最顶层秘钥,保密级别最高,称之为本地主密钥。LMK通常是由不一样的人保管着不一样的秘钥份量,而后不一样的保管员在加密机分别输入本身保管的那一部分并合成一个LMK,没有人可以知道LMK的所有信息。ZMK(Zone Master Key)能够理解为区域主密钥,TMK(Terminal Master Key)能够理解为终端收单主密钥。LMK/ZMK/TMK均属于保护秘钥,保护秘钥是用来加密保护工做秘钥的,分层管理,不涉及到加密报文。
四、收单主密钥spa
收单主密钥在本例中称之为TMK,用来加密保护工做秘钥,签到时由服务器端ZMK加密产生。
五、工做密钥(workKey).net
工做秘密是真正用来加密敏感信息的秘钥,包含pin秘钥、mac秘钥以及data秘钥。好比pin秘钥用来加密银行卡密码信息,mac秘钥用来保障报文的完整性,data秘钥用来加密银行卡里的磁道信息。
六、设备主秘钥(devKey)code
设备主秘钥是集成在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终端。原则上工做秘钥的过时时间为一天,即便有黑客花费高昂代价解密了工做秘钥,次日秘钥就会做废。