当前位置: 首页 > news >正文

零售交易流程相关知识(top-down拆解)

引入 

关于POS机交易时的后台数据交互

DUKPT应用场景举例

模块之间数据交换,都可以能被窃取或篡改。由此引入加密、解密机制和签名、验签机制

经典的加密、解密机制:

对称加密: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的步骤如下图:
这里写图片描述
简要说明:

  1. 黄色底色的2个框框,是PEK_DERIVE的2个入参;绿色底色的框框,是PEK_DERIVE的结果

  2. 图中的“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.创建环境文件 当我们把项目拿到手,只需要创建三个环境文件&#xff1a…...

高并发下订单库存防止超卖策略

文章目录 什么是超卖问题?推荐策略: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 才完工。 中途去集训了,没时间来补漏洞。 单调队列 单调队列是一种非常实用的数据结构,可以用于查询一个定长区间在以一定速度向后滑…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...