零售交易流程相关知识(top-down拆解)
引入
关于POS机交易时的后台数据交互
模块之间数据交换,都可以能被窃取或篡改。由此引入加密、解密机制和签名、验签机制
经典的加密、解密机制:
对称加密:DES\ TDES\ AES\ RC4
非对称加密:RSA\ DSA\ ECC
经典的签名、验签机制:
MD5\ SHA1\ SH256\ RSA\ MAC(Message Authentication Code)
通常网站对注册密码只保存签名而不保存真实的密码,但MD5\ SHA1\ SH256对以字符串签名结果是确定的,所以黑客可能通过签名的结果猜出密码,所以产生了mac。MAC使用的签名方式不变,但是添加了key,则生成的签名就完全变了,那么要破解就必须先破解对应的可以,增加了破解难度。
总体加解密流程拆解
对称加密TDES\ AES, 具有运算速度快的特点,但因为对称怎存在破解的风险。需要保证加解密双方具有相同的key。
非对称加密RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
RSA具有运算速度慢,但破译风险很小的特点。加解密双方具有不相同的公钥和私钥。公钥是公开的,通常会发布到公共平台;而私钥是自己拥有,需要保密。
基于以上特点,设计通常用 非对称加密算法 传输对称加密的密钥,用 对称加密算法 对数据进行加密, 既保证了运算速度,有保证了保密性 ANS X9.24-2 Retail Financial Services Symmetric Key Management Part 2: Using Asymmetric Techniques for the Distribution of Symmetric Keys
RSA算法讲解:
公钥加密、私钥解密、私钥签名、公钥验签
如下图所示双向对称加密双方都是有三个密钥的,比如:
组织\密钥 | 支付宝公钥 | 支付宝私钥 | 商家公钥 | 商家私钥 |
支付宝平台 | 拥有 | 拥有 | 拥有(商家上传) | 没有 |
商家 | 拥有(支付宝平台下载) | 没有 | 拥有 | 拥有 |
为了让大家分清楚这四者的区别,我们用支付宝支付进行举例,但是一定要知道两个前提:
密钥是有两对,支付宝公钥和私钥,商家公钥和私钥
公钥双方都会有(包括对方的),私钥只有自己拥有自己的,不会支付宝有商家私钥或者商家有支付宝私钥
当商户向支付宝发送订单请求时:
商户是用支付宝的公钥进行数据加密,用商户的私钥进行签名。
支付宝接收数据后
支付宝可以用支付宝私钥进行数据的解密,用商户的公钥进行验签。
当支付宝异步通知商户支付结果时:
支付宝是用商户的公钥进行数据加密,用支付宝私钥进行签名。
商户接收数据后
商户就用商户的私钥进行解密,用支付宝公钥进行验签。
结合上面的图表,这样大家就应该理解了吧。实际支付宝支付都有SDK,不用你进行实质的加密加签,只要你不把密钥传错就行了,这里也是举这个例子让大家了解RSA这种加密机制的安全性。
上面对需要通过互联网情况会起到很好的保密性,当然有部分情况不需那么保密,比如工厂生成中POS机下载KEY,那么对key进行对称加密解密就行,只需遵守一定协议就行。那么美国国家标准 TR-31基于对称加密的key互操作 应运而生
asc x9 tr 31-2018 Interoperable Secure Key Exchange Key Block Specification
TR31 load key的Raw Data结构(header+DATA)
头部结构
B0144B1TX00N04000108000102080005KS18FFFF1100000000000000
数据部分TR-31图解说明
32字节的对KEY的加密值和8字节的数字指印
介绍:
B0144B1TX00N0400:写明了版本、长度、用途、加密方法等TR31密钥块分析 - 百度文库
01 08 0001 是 KeyName ,值为 0x01
02 08 0005 是 KeySlot = 0x00
KS18 FFFF1100000000000000 是 KSN值
DUKPT(Derived Unique Key Per Transaction)是被ANSI定义的一套密钥管理体系和算法,用于解决金融支付领域的信息安全传输中的密钥管理问题,应用于对称密钥加密MAC,PIN等数据安全方面。保证每一次交易流程使用唯一的密钥,采用一种不可逆的密钥转换算法,使得无法从当前交易数据信息破解上一次交易密钥。要求收单行与终端必须同步支持该项密钥管理技术。由交易发起端点(S-TRSM,如pos,ATM)与交易接收端点(R-TRSM,如收单行)两部分组成。
如此总的框架就形成了,基于上面的理论可以操作了,但是对称加密部分如TDES因为key没变化,生成的结果就不变,保密性就弱了点,那么需要更好的标准使其保密性更好。那么关于key的部分下面我们继续分解
ASN.1 TR31/TR34解析网址
KEY的保存与变更
先了解几个概念:
DUKPT是由基础密钥BDK和KSN组成,其中BDK是基础主密钥,它派生出加密安全模块的初始密钥。初始密钥和KSN一起装入加密模块,保证每个终端的主密钥都不重复。
BDK(Base Derived Key)是用于派生其他密钥的基础密钥。在金融行业和加密领域中,BDK通常是一个16字节(128位)的密钥,用于生成其他密钥,如PIN加密密钥、MAC密钥等。BDK的安全性对整个加密系统至关重要,因为它作为生成其他关键的基础。一般是一个双倍长或三倍长的T-DES密钥。
KSN(Key Serial Number)是由59bit设备标识IKSN(Initial Key Serial Number)和21bit交易次序EC(Encryption Counter)拼凑出的一种序列号。每次交易成功会加一,KSN通常与加密操作一起使用,特别是在金融交易领域,用于生成派生密钥和跟踪加密设备的使用情况。
IPEK(Initial Pin Encrypt Key)是金融领域中用于加密和解密用户个人身份号码(PIN)的密钥。IPEK通常是从BDK(Base Derivation Key)派生而来,通过一个特定的密钥派生函数生成。在金融交易中,IPEK用于保护用户的PIN,确保其传输和存储的安全性。PEK由PEK_IPEK、PEK_KSN生成
“FK” 通常指 “Future Key”。在密码学和安全领域中,“Future Key” 指代在将来某个时刻用于加密或其他安全目的的密钥。因为交易时使用的加密的KEY每次都要生成,为了减少交易的运算量,通常会预存储21个FK,交易后会更新使用过的KEY
“TK” 通常指 “Transaction Key”,在金融领域中,这是一个用于保护特定交易的密钥。与之前提到的 IPEK(Initial Pin Encrypt Key)和 BDK(Base Derivation Key)等密钥相似,TK 也可能是从 BDK 派生出来的,用于对交易数据进行加密和解密。
DEK 通常指 “Data Encryption Key”,是用于加密和解密数据的密钥。这个密钥在加密系统中用于对用户数据、文件、通信等进行加密,以确保数据的保密性。 DEK 是对称密钥,这意味着相同的密钥用于加密和解密过程。由DEK_IPEK、DEK_KSN构成,来生成加密用的DEY
HSM (Host Security Module) 用于向POS机下载PEK、DEK的设备(遵循TR31协议)
LCL-KEK (Key Encryption Key)用于下载KEY的时候,对PEK、DEK进行加密,由LCL_KEK_IPEK、LCL_KEK_KSN构成,来生成加密的KEY
所有的KSN每次交易后都会加一,用来保证每次生成的密钥不同
由以上介绍可以推理,在POS出厂前必须至少下载好LCL-KEK、 BDK、常用的CA证书(RSA使用),其他DEK、PEK、Salt、MAC等相关的key可以通过TR31或TR34交互下载,当然也可以直接下载。Salt、MAC为固定的KEY,LCL-KEK、BDK、DEK、PEK是由对应的key和ksn动态生成。
怎么验证下载的KEY为希望的KEY,也就是 KCV(Key Check Value),POS机对用KEY对一串0进行加密返回一个值,本地也做同样运算。如果结果相同则KEY正确,否则错误。KCV(Key Check Value)算法示例
POS和Acquirer Host的交易流程:交易流程很易懂的解释
初始化:Acquirer Host和POS交互相同的BDK,且POS中销毁BDK,仅保存由BDK分散出来的Initial PEK
发生交易时,POS的处理:再重复一遍,不就是上面的这些步骤么
1、 Current KSN = IKSN and EC++
2、Current PEK = PEK_Derive(Initial PEK, Current KSN) 生成密钥
3、Encrypted PIN = T-DES(Opr=Encrypt, Current PEK, Clear PIN) 加密
4、把Current KSN和Encrypted PIN放到交易报文里面,发送给Acquirer Host
收到交易时,Acquirer Host的处理:
1、 Initial PEK = PEK_Derive(BDK, KSN with EC=0)
2、Current PEK = PEK_Derive(Initial PEK, Current KSN)
3、Clear PIN = T-DES(Opr=Decrypt, Current PEK, Encrypted PIN)
4、后续交易处理
对于怎么派生新的密钥PEK_DERIVE的步骤如下图:
简要说明:
-
黄色底色的2个框框,是PEK_DERIVE的2个入参;绿色底色的框框,是PEK_DERIVE的结果
-
图中的“Set Bit”(右边KSN的黄色框框 下面的步骤),是一个很简单的步骤:
- 取KSN中最右边的21bit的EC(例如,01100000…1000,共21bit)
- 得到EC中最右侧的bit “1”(01100000…1 000)
- 将EC其余bit置为0,即获得Set Bit的结果(00000000…1 000)
https://codeload.github.com/chhil/TR31Keyblock/zip/refs/heads/main 这是java版本的,TR31Keyblock-main\src\main\java\org\keyblock\tr31\KeyHelper.java文件夹下存在类似的密钥生成代码
其他官方github上 C代码
GitHub - openemv/dukpt: ANSI X9.24 DUKPT libraries and tools
GitHub - openemv/tr31: Key block library and tools for ANSI X9.143, ASC X9 TR-31 and ISO 20038
1. ANS X9.24 Retail Financial Services Symmetric Key Management Part 1: Using Symmetric Techniques: 2004
2. ANS X9.24 Retail Financial Services Symmetric Key Management Part 2: Using Asymmetric Techniques for the Distribution of Symmetric Keys; (draft)
3. ANS X3.92 Data Encryption Algorithm (DEA)
4. ANS X9.52:1998 Triple Data Encryption Algorithm Modes of Operations
5. ISO 9797: 1999 Information technology -- Security techniques -- Message Authentication Codes (MACs) -- Part 1: Mechanisms using a block cipher
6. ISO 9797: 2011 Information technology -- Security techniques -- Message Authentication Codes (MACs) -- Part 1: Mechanisms using a block cipher
7. ANS X9 TR-39: TG 3 PIN Security Compliance Guideline
8. ANS X9 TG 7 Initial DEA Key Distribution for PIN Entry and Transaction Originating Devices Guideline
9. ISO 16609-2004, Banking – Requirements for message authentication using symmetric techniques
10. NIST SP 800-38B, Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication
11. NIST SP 800-108, Recommendation for Key Derivation Using Pseudorandom Functions.
12. FIPS 197 Advanced Encryption Standard (AES), November 26, 2001
13. FIPS 198-1 The Keyed-Hash Message Authentication Code (HMAC), July 2008
DUKPT、BDK和KSN:金融交易中的加密密钥体系详解-CSDN博客
DUKPT IPEK KSNPOS机的加密传输过程_ipek和bdk-CSDN博客
Java实现RSA工具类(加密、解密、签名、验签)_java rsa工具类-CSDN博客
DUKPT(derived unique key per Transaction)-CSDN博客
相关文章:
零售交易流程相关知识(top-down拆解)
引入 关于POS机交易时的后台数据交互 模块之间数据交换,都可以能被窃取或篡改。由此引入加密、解密机制和签名、验签机制 经典的加密、解密机制: 对称加密:DES\ TDES\ AES\ RC4 非对称加密:RSA\ DSA\ ECC 经典的签名、验签…...

混合存储HDD+SSD机型磁盘阵列,配上SSD缓存功能,性能提升300%
企业日常运行各种文件无处不在,文档、报告、视频、应用数据......面对成千上万的文件,团队之间需要做到无障碍协作,员工能够即时快速访问、共享处理文件。随着业务增长,数字化办公不仅需要大容量,快速高效的文件访问越…...

将本地已有的项目上传至仓库
上传的仓库为Gitee 进入项目目录: 使用命令行工具进入你想要上传的项目的根目录。 初始化Git仓库: 如果项目目录尚未初始化为Git仓库,执行以下命令: git init 执行完成后,项目根目录下会自动生成一个隐藏的.git文件夹…...

中级网络工程师面试题参考示例(3)
一、企业园区网络 问题1:如何实现园区网络的自动化部署和管理?请结合实际场景说明技术选型。 答案要点: 技术选型: SDN(软件定义网络):通过控制器(如Cisco DNA Center)…...

祝福语【算法赛】
题目来源:第 27 场 蓝桥入门赛【算法题】 可以参考一下,本人也是比较菜 不喜勿喷,求求求 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String S sc.nextLi…...

前端 | CORS 跨域问题解决
问题:Access to fetch at http://localhost:3000/save from origin http://localhost:5174 has been blocked by CORS policy: Response to preflight request doesnt pass access control check: No Access-Control-Allow-Origin header is present on the request…...

MySQL知识点(第一部分)
MySQL 基础: 1、SQL语句的分类: DDL:用于控制数据库的操作DML:用于控制表结构的字段,增、删、修DQL:用于查询语句DCL:用于管理数据库,用户,数据库的访问 权限。 2、M…...

ChatGPT使用经验分享
ChatGPT 3.5模型 与 4模型的区别 ChatGPT 3.5 示例 问:树上有9只鸟,打死了一只还剩几只? 答:如果打死了一只鸟,那么树上还剩下8只鸟。 ChatGPT 4 示例 问:树上有9只鸟,打死了一只还剩几只&…...

Webshell原理与利用
本文内容仅用于技术研究、网络安全防御及合法授权的渗透测试,严禁用于任何非法入侵、破坏或未经授权的网络活动。 1. WebShell的定义与原理 定义:WebShell是一种基于Web脚本语言(如PHP、ASP、JSP)编写的恶意后门程序,…...

Java直通车系列15【Spring MVC】(ModelAndView 使用)
目录 1. ModelAndView 概述 2. ModelAndView 的主要属性和方法 主要属性 主要方法 3. 场景示例 示例 1:简单的 ModelAndView 使用 示例 2:使用 ModelAndView 处理列表数据 示例 3:使用 ModelAndView 处理异常情况 1. ModelAndView 概…...

大模型系列课程学习-基于Vllm/Ollama/Ktransformers完成Deepseek推理服务部署
1.机器配置及实验说明 基于前期搭建的双卡机器装机教程,配置如下: 硬件名称参数备注CPUE5-2680V42 *2(线程28个)无GPU2080TI-22G 双卡魔改卡系统WSL Unbuntu 22.04.5 LTS虚拟机 本轮实验目的:基于VLLM/Ollama/ktran…...

基于深度文档理解的开源 RAG 引擎RAGFlow的介绍和安装
目录 前言1. RAGFlow 简介1.1 什么是 RAGFlow?1.2 RAGFlow 的核心特点 2. RAGFlow 的安装与配置2.1 硬件与软件要求2.2 下载 RAGFlow 源码2.3 源码编译 Docker 镜像2.4 设置完整版(包含 embedding 模型)2.5 运行 RAGFlow 3. RAGFlow 的应用场…...

DNS Beaconing
“DNS Beaconing” 是一种隐蔽的网络通信技术,通常与恶意软件(如木马、僵尸网络)相关。攻击者通过定期发送 DNS请求 到受控的域名服务器(C&C服务器),实现与恶意软件的隐蔽通信、数据传输或指令下发。由…...

【论文阅读】多模态——LSeg
文献基本信息 标题:Language-Driven Semantic Segmentation作者:Boyi Li、Kilian Q. Weinberger、Serge Belongie、Vladlen Koltun、Ren Ranftl单位:Cornell University、University of Copenhagen、Apple、Intel Labs会议/期刊:…...

vue3如何配置环境和打包
很多新手友友们或刚从vue2切换到vue3的同学,对vue3不同环境配置和打包有很多困惑的地方,Jenna这就把vue3打包配置流程详细的写下来,你们只需要copy就好啦 1.创建环境文件 当我们把项目拿到手,只需要创建三个环境文件:…...

高并发下订单库存防止超卖策略
文章目录 什么是超卖问题?推荐策略:Redis原子操作(Redis incr)乐观锁lua脚本利用Redis increment 的原子操作,保证库存数安全update使用乐观锁LUA脚本保持库存原子性 什么是超卖问题? 在并发的场景下,比如商城售卖商品…...

vue安装stylelint
执行 npm install -D stylelint postcss-html stylelint-config-recommended-vue stylelint-config-standard stylelint-order stylelint-prettier postcss-less stylelint-config-property-sort-order-smacss 安装依赖,这里是less,sass换成postcss-scss…...

用Deepseek写一个 HTML 和 JavaScript 实现一个简单的飞机游戏
大家好!今天我将分享如何使用 HTML 和 JavaScript 编写一个简单的飞机游戏。这个游戏的核心功能包括:控制飞机移动、发射子弹、敌机生成、碰撞检测和得分统计。代码简洁易懂,适合初学者学习和实践。 游戏功能概述 玩家控制:使用键…...

three.js 在 webGL 添加纹理
在我们生成了3D设计之后,我们可以添加纹理使其更加吸引人。在 webGL 和 p5.js中,可以使用 gl.texImage2D() 和 texture() API来为形状应用纹理。 使用 webGL 在 webGL 中,gl.texImage2D() 函数用于从图像文件生成2D纹理。该函数接受许多参…...

【5】单调队列学习笔记
前言 鸽了很久, 2023 / 1 / 5 2023/1/5 2023/1/5 开始, 2023 / 1 / 21 2023/1/21 2023/1/21 才完工。 中途去集训了,没时间来补漏洞。 单调队列 单调队列是一种非常实用的数据结构,可以用于查询一个定长区间在以一定速度向后滑…...

deepseek为什么要开源
一、生态位的抢占与锁定:以 JDK 版本为例 在软件开发的世界里,生态位的抢占和先入为主的效应十分显著。就拿 Java 开发中的 JDK 版本来说,目前大多数开发者仍在广泛使用 JDK8。尽管 JDK17 和 JDK21 已经推出,且具备更多先进特性…...

MySQL基本建表操作
目录 1,创建数据库db_ck 1.1创建表 1.2 查看创建好的表 2,创建表t_hero 2.1 先进入数据库Db_Ck 2.1.1 这里可以看是否进入数据库: 2.2 创建表t_Hero 2.2.1 我们可以先在文本文档里面写好然后粘贴进去,因为直接写的话,错了要重新开始 …...

防火墙旁挂组网双机热备负载均衡
一,二层交换网络: 使用MSTPVRRP组网形式 VLAN 2--->SW3为主,SW4 作为备份 VLAN 3--->SW4为主,SW3 作为备份 MSTP 设计 --->SW3 、 4 、 5 运行 实例 1 : VLAN 2 实例 2 : VLAN 3 SW3 是实例 1 的主根,实…...

大白话react第十八章React 与 WebGL 项目的高级拓展与优化
大白话react第十八章React 与 WebGL 项目的高级拓展与优化 1. 实现 3D 模型的导入与动画 在之前的基础上,我们可以导入更复杂的 3D 模型,并且让这些模型动起来,就像在游戏里看到的角色和场景一样。这里我们使用 GLTF 格式的模型,…...

JavaScript系列06-深入理解 JavaScript 事件系统:从原生事件到 React 合成事件
JavaScript 事件系统是构建交互式 Web 应用的核心。本文从原生 DOM 事件到 React 的合成事件,内容涵盖: JavaScript 事件基础:事件类型、事件注册、事件对象事件传播机制:捕获、目标和冒泡阶段高级事件技术:事件委托、…...

C++:string容器(下篇)
1.string浅拷贝的问题 // 为了和标准库区分,此处使用String class String { public :/*String():_str(new char[1]){*_str \0;}*///String(const char* str "\0") // 错误示范//String(const char* str nullptr) // 错误示范String(const char* str …...

2.数据结构-栈和队列
数据结构-栈和队列 2.1栈2.1.1栈的表示和实现2.1.2栈的应用举例数制转换括号匹配检验迷宫给求解表达式求值 2.1.3链栈的表示和实现2.1.4栈与递归的实现遍历输出链表中各个结点的递归算法*Hanoi塔问题的递归算法 2.2队列2.2.1循环队列——队列的顺序表示和实现2.2.2链队——队列…...

aws(学习笔记第三十一课) aws cdk深入学习(batch-arm64-instance-type)
aws(学习笔记第三十一课) aws cdk深入学习 学习内容: 深入练习aws cdk下部署batch-arm64-instance-type 1. 深入练习aws cdk下部署batch-arm64-instance-type 代码链接 代码链接 代码链接 -> batch-arm64-instance-type之前代码学习 之前学习代码链接 -> aw…...

MySQL 中,SELECT ... FOR UPDATE
在 MySQL 中,SELECT ... FOR UPDATE 语句会对查询结果集中的行加排他锁(X 锁)。关于其他事务是否能读取当前行,以下是详细说明: 1. 排他锁(X 锁)的特性 排他锁是一种独占锁,加锁后&…...

云服务运维智能时代:阿里云操作系统控制台
阿里云操作系统控制台 引言需求介绍操作系统使用实例获得的帮助与提升建议 引言 阿里云操作系统控制台是一款创新型云服务器运维工具,专为简化用户的运维工作而设计。它采用智能化和可视化的方式,让运维变得更加高效、直观。借助AI技术,控制…...