简介
在银行、银联、第三方支付等金融系统中,对银行卡密码等信息的加解密,对交易数据的加解密无处不在,在商场刷卡消费的POS机,在ATM机器取款等都需要对数据加密以保护数据安全,不被窃取。
本文主要对POS机的安全处理和对银行卡的密码加解密的梳理,由于传统POS是存在时间最长,接受最广的一种非现金支付方式,它的安全方案被后来的各种新型支付方式借鉴,比如支付宝和微信的扫码支付。所以,只要理解了POS的安全原理,再理解其它新型支付的安全几乎没有难处。
POS机的安全加密各密钥关系:
存储加密密钥 Storing encryption key ;SEK
SEK,通过SEK生成N个终端主密钥(TMK),也就是说TMK被SEK加密保护。
终端主密钥terminal master key;TMK
TMK加密工作密钥PINkey和MACkey,这样工作密钥从银行后台传输到POS的路途,即使被截取,也是密文,不会出现密钥泄漏的风险。
主密钥,两边相同的值,一般是16字节,32个字符,如:1a3ff4….
通过主密钥可以生成终端主密钥(TMK),其实使用的是加密算法,使用主密钥解密可以得到明文。
由于密钥的明文没有人完全知道,仅仅知道一部分,或者一个分量。那么,两个系统之间,或者设备和系统之间怎么MAC一直过不去,双方需要核对主密钥知否一致,因为密钥不一致肯定过不去。数据一致,算法一致,密钥一致,结果一定一致。
终端主密钥:存入密码键盘内。
工作密钥 working key; WK
工作密钥主要分PIN key、MAC key,PIN key加密银行卡密码,保护密码不泄漏;MAC key加密交易数据,保证交易数据在传输中不被篡改。
工作密钥由银行后台生成,POS可通过签到经常更新。后台将工作密钥使用TMK加密后形成密文,再传输给POS。
- 工作密钥:PINKey
持卡人在设备上输入的密码被PINKEYj加密,加密后的密文被送到中心系统,中心系统使用相同的PINKEY对密文解密。
PINKEY由中心系统生成,通过签到的方式下发到设备中。
PINKEY的长度一般为32个字符,如:1fadfasdfasdfsadfasfdasdf
- 工作密钥MacKey
银联对名词有专门的解释,参见 银行卡联网联合规范或中国银联POS终端规范:
发卡银行是指你手里的银行卡在哪家银行办理,该银行就是这张卡的发卡银行。发卡银行指总行。比如:xxx支行,xxx银行。
持卡人,持卡人不一定是银行卡户名对应的人,在消费场景中,使用银行卡来刷卡支付商品或服务费用的人为持卡人。例如:你接受推拿服务,应该支付服务费用。
密钥校验值 check value
这就需要使用校验值,双方的校验值一致时,说明密钥的明文一致,因为校验值的算法是固定的,使用密钥明文加密8字节0得到。
金融系统中银行卡密码的加密
在交易发起方,对银行卡密码加密,加密后传输到下一个节点,下一个节点可能是银联,也可能是某第三方支付公司,也可能是银行,需要看具体的业务模式。
一般我们在酒店、商场刷卡消费时,终端(POS)对持卡人输入的密码加密,然后传到后台,后台对密码做转加密后,送到银行,银行确认密码正确性,决定是否打印刷卡小票。
- 终端(POS)对密码的加密
终端的密码输入键盘是一个经过银联认证的特殊设备,可能保证输入的密码不会被窃取,当用户输入密码按确认后,键盘会使用内部的密钥(PINKEY)对密码做加密处理,加密后的密文同其他金融数据一起,上送到后台,等待后台的交易反馈。
- 后台对密码的转加密
先说说为什么要转加密,终端与后台之间,这一段线路有双方约定的安全密钥,而后台到银行这段线路也约定有安全密钥,也就是说,在一个常见的金融交换系统中,一般有三个节点(终端、后台、银行),如下图:
后台对终端上送的密码解密,再使用于银行之间的密钥加密,这个过程一般在加密机内部完成,也就是说我们看不到解密后的密码。当然,如果后台没有使用加密机,而使用解密程序,那么密码一定可以看见。
- 银行对密码的验证
银行对密码的验证很好理解,发卡银行对密码验证,这个没有什么难以理解,银行存储了每一张银行卡的密码(一般以密文的形成存储);
银行对密码解密后,在使用特定的算法加密,加密的结果与存书的密码比较,如果密文一致,说明密码正确。
金融系统中卡片磁道信息的加密与解密
待补充。
金融系统中交易报文的MAC计算方法
待补充。
金融系统中的安全比较复杂,尤其是MAC计算,可能花一周时间都调不通;
如果需要,可以联系我,我在北京,如果着急可现场去帮支持 158/110-59821
ISO8583组包拆包代码、3DES加解密相关源代码出售,整个交易平台出售。
提供金融支付相关的技术服务,如:快速与银行、第三方支付平台对接,联调,加解密,MAC计算,银行卡密码加解密等。
如需要,可以联系我,北京 158/110-59821