银行卡密码的加密、MAC计算

简介

       在银行、银联、第三方支付等金融系统中,对银行卡密码等信息的加解密,对交易数据的加解密无处不在,在商场刷卡消费的POS机,在ATM机器取款等都需要对数据加密以保护数据安全,不被窃取。


本文主要对POS机的安全处理和对银行卡的密码加解密的梳理,由于传统POS是存在时间最长,接受最广的一种非现金支付方式,它的安全方案被后来的各种新型支付方式借鉴,比如支付宝和微信的扫码支付。所以,只要理解了POS的安全原理,再理解其它新型支付的安全几乎没有难处。


POS机的安全加密各密钥关系:




存储加密密钥 Storing encryption key ;SEK

SEK,通过SEK生成N个终端主密钥(TMK),也就是说TMKSEK加密保护。



终端主密钥terminal master key;TMK


TMK加密工作密钥PINkeyMACkey,这样工作密钥从银行后台传输到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




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PAT甲级 - 1028】List Sorting (25分)(模拟,排序)

题干: Excel can sort records according to any column. Now you are supposed to imitate this function. Input Specification: Each input file contains one test case. For each case, the first line contains two integers N (≤10​5​​) and C, where…

传统POS/终端/银联POS简介

point of sale; POS能够接受银行卡信息,具有通讯功能,并接受柜员的指令而完成金融交易信息和有关信息交换的设备。 找政策

【Python学习】 - - 链表推导式[ 2*x for x in X ]、匿名函数、并行迭代

列表推导式[x for x in range(n)] 问题:请计算出1~9间的整数的平方 常规方法 for i in range(1,10):print(i*i) 链表推导式: print([x*x for x in range(1,10)]) 匿名函数方法: 匿名函数语法形式: lambda [arg1, arg2, arg3,…

C#多线程和线程池

.Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程。这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则…

国家密码算法SM4(国密算法)介绍

国密是国家密码局认定的国产密码算法。而与之对应的,现在被广泛使用des、3des等算法是国外人发明,我们称为国际算法。 加密算法采用国家密码算法SM4,密钥长度为16字节,加密算法详见附录A。 主要有SM1,SM2&#xff0…

【最小费用可行流模板】

可能再也用不到了吧,今天整理电脑文件看到的,作为图论选手,留个纪念, //原图: 对于pi,拆点xi,yi s->S,[m,m],0 S->xi,[0,inf],0 yi->t,[0,inf],0 xi->yi,[vi,vi],0 对于有航线的pi和pj&#x…

ANSI X9.9 MAC算法介绍

1)该算法只使用单倍长密钥,也就是8字节密钥; 2)MAC数据按8字节分组,尾部以字节00补齐; 3)用MAC密钥加密第一个8字节分组,加密结果与第二个8字节分组异或,然后再用MAC密…

C#.Net使用线程池(ThreadPool)与专用线程(Thread)

线程池(ThreadPool)使用起来很简单,但它有一些限制: 1. 线程池中所有线程都是后台线程,如果进程的所有前台线程都结束了,所有的后台线程就会停止。不能把入池的线程改为前台线 程。 2. 不能给入池的线程设置优先级或名称。 3. 对于…

【Python学习】 - sklearn学习 - 评估指标precision_score的参数说明

函数声明: precision_score(y_true, y_pred, labelsNone, pos_label1, averagebinary, sample_weightNone) 其中较为常用的参数解释如下: y_true:真实标签 y_pred:预测标签 average:评价值的平均值的计算方式。可…

ANSI X9.19 MAC算法介绍

(1) ANSI X9.19MAC算法只使用双倍长密钥,也就是16字节密钥; (2) MAC数据按8字节分组,表示为D0~Dn,如果Dn不足8字节时,尾部以字节00补齐; (3) 用MA…

GitHub.com上的那些东西你都知道什么意思吗?

GitHub初学入门者的图谱,介绍Github网站每个功能的意思 一、键盘快捷键 在GitHub中,很多页面都可以使用键盘快捷键。在各个页面按下“shift /”都可以打开键盘快捷键一览表,如下图: 快捷键 二、工具栏 工具栏 LOGO 点击GitHub…

【Python学习】 - sklearn学习 - 数据集分割方法 - 随机划分与K折交叉划分与StratifiedKFold与StratifiedShuffleSplit

一、随机划分 import numpy as np from sklearn import datasetsiris datasets.load_iris() X iris.data y iris.target# 1)归一化前,将原始数据分割 from sklearn.model_selection import train_test_split X_train,X_test,y_train,y_test train_t…

CURLE_WRITE_ERROR

size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp) { return 0; //return size * nmemb; } curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); res curl_easy_perform(curl); 如果应…

Azure 应用服务、虚拟机、Service Fabric 和云服务的比较

Azure 提供了几种托管网站的方式:Azure 应用服务、虚拟机、Service Fabric 和云服务。 本文可帮助你了解这几种方式,并针对 Web 应用程序做出正确的选择。 Azure 应用服务是大多数 Web 应用的最佳选择。 部署和管理都已集成到平台,站点可以快…

【Python学习】 - sklearn - PCA降维相关

1、PCA算法介绍 主成分分析(Principal Components Analysis),简称PCA,是一种数据降维技术,用于数据预处理。一般我们获取的原始数据维度都很高,比如1000个特征,在这1000个特征中可能包含了很多…

【Python学习】 - sklearn - 用于生成数据的make_blobs模块

函数原型: sklearn.datasets.make_blobs(n_samples100, n_features2, centers3, cluster_std1.0, center_box(-10.0, 10.0), shuffleTrue, random_stateNone) 参数含义: n_samples: int, optional (default100) The total number of points equally di…

微服务架构及幂等性

微服务架构 微服务架构是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。 和 微服务 相对应的,这…

【Python学习】 - Matplotlib二维绘图 - plt.matshow()和plt.imshow()区别对比

给定一个8*8的数据,用两种方式分别进行输出。 xx np.zeros((8,8),dtype np.uint8) xx[0,0] 13im Image.fromarray(xx) plt.imshow(im)plt.matshow(xx) plt.show() 输出: 得出结论: 首先我不知道为啥两个窗口是不一样大的。 其次发现图…

表达式主体定义

原文地址https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/statements-expressions-operators/expression-bodied-members 通过表达式主体定义,可采用非常简洁的可读形式提供成员的实现。 只要任何支持的成员(如方法或属性&#xff0…

【机器学习】 - 数据预处理之数据归一化(标准化)与实战分析,正则化

一、为什么要进行数据归一化 定义:把所有数据的特征都归到 [0,1] 之间 或 均值0方差1 的过程。原则:样本的所有特征,在特征空间中,对样本的距离产生的影响是同级的;问题:特征数字化后,由于取值…