前言

到现在,我们手上拿到了TPK和TAK工作密钥,今天我们就要来讲讲如何对PIN的加密,以及MAC的运算。

工作密钥

以下是我取得今天的工作密钥,那么运用前一章的知识快速计算出TPK和TAK
(ps TMK为CA5D92598DCA48CE8A4C76361A9269E9)
TPK 9410D034436E8F1613703D5D1ABA25AD
TAK C1A4AE89BAEAB029

对PIN的加密

PinBlock的算法有:
1.ANSI9.8算法(常用默认算法) – 带主账号信息
+ 1.格式化主账号(格式化具体内容见后面算法例子)
+ 2.格式化PIN(格式化具体内容见后面算法例子)
+ 3.格式化后的主账号与格式化后的Pin按位异或
+ 4.用PinKey密钥明文对上述结果加密
+ 5.得到PinBlock

2.ANSI9.8 算法 (常用默认的算法) – 不带主账号信息
+1.格式化PIN(格式化具体内容见后面算法例子)
+2.用PinKey密钥明文对上述结果加密
+3.得到PinBlock

3.ASCII 格式(少用)
PIN不与主账号进行运算直接 ASCII 码加密

4.IBM3624 格式(少用)
PIN不与主账号进行运算直接 BCD 码加密。

此处就介绍以上两种常用算法ANSI X9.8 Format(不带主账号信息)和ANSI X9.8 Format(带主账号信息)

ANSI X9.8 Format(带主账号信息)

  • 1.主账号PAN取法(格式化主账号)
  • 2.PIN的取法(格式化PIN)
  • 3.将格式化后的主帐号和PIN进行按位异或
  • 4.用TPK密钥对异或结果 加密

1.主账号PAN取法(格式化主账号)
格式

位置 长度 说明
1 2BYTE %H0000
2 6BYTE 主帐号(12bit)
- step1 删除主账号最右的1位校验位,取最右边的12位623501  345220000006  9   --- 手输卡号(ps:刷卡方式  得到的二磁道就在'='分隔符左边第二位取,取12位)
- step2 转换16进制表示,每个数字占用4个bit,左侧补0,变成8个字节的数据

PAN 为 0x0000345220000006

2.PIN的取法(格式化PIN)
pos终端手动输入的PIN为 123456 6位

格式

位置 长度 说明
1 1BYTE PIN长度
2 7BYTE 4-12位PIN(每个字符占4个BIT,不足右补F)

PIN 为 0x06111111FFFFFFFF

3.将格式化后的主帐号和PIN进行按位异或

PIN  06111111FFFFFFFF
PAN 0000345220000006
---xor
06112543DFFFFFF9

4.用TPK密钥对异或结果 加密

TPK密钥 9410D034436E8F1613703D5D1ABA25AD
数据 06112543DFFFFFF9
---3DES双倍长密钥算法
PIN Block FF0C47F016D61C79

与报文PinData中一致

step3:

step4:

ANSI X9.8 Format(不带主账号信息)

  • 1.格式化PIN
  • 2.用PinKey密钥明文对上述结果加密
  • 3.得到PinBlock
    规则与ANSI X9.8 Format(带主账号信息)类似,不做讲解了

总结

按照步骤来,这些步骤都很简单,但是往往由于信息不全,很难走完每一步。
信息的不对称,在生活中很多方面。掌握信息要点也很重要。

附:

如何通过密码键盘来计算PinBlock

通过密码键盘来计算PinBlock,通常包含如下几个步骤(不同厂家的产品顺序会不同)

  • 1.要求用户输入Pin信息(通常是6位) — 启动Pin运算
  • 2.激活工作密钥(加密需要使用的密钥PinKey)
  • 3.设置主帐号信息
  • 4.设置Pin运算使用的算法
  • 5.读取Pinblock信息

整体过程类似,做个拓展

POS终端“密事”之PIN加解密相关推荐

  1. POS终端“密事”之签到

    POS终端"密事"之签到 前言 名词解释 PIN 个人识别码(Personal Identify Number) TMK 终端主密钥 (Terminal Master Key) 数 ...

  2. xor java_java基于密匙的xor加解密

    package iminto.util.common; import java.io.IOException; import java.security.NoSuchAlgorithmExceptio ...

  3. 银行卡密码键盘 SM4 ECB模式+ANSI X9.8 格式标准(带主账号信息)PIN 加解密示例

    文章目录 1.软加解密示例 2.知识点 ①ANSI X9.8 格式标准 ②主密钥,工作密钥加解密 基本概念: 加密种类: 3.密码键盘操作 4.工具 1.软加解密示例 ---------------- ...

  4. 使用 Python 脚本执行国密 sm2 加解密

    一.场景 工作中的一个场景:Go 需要对信息加解密,但是研究了 GmSSL Go API 文档之后,发现是依赖于 CGO 的,同事配了半天环境没配成功.于是换了一个方法,选择 Go 调 Python ...

  5. IPSEC协议及当中IKE协商加解密原理

    散列函数:也叫Hash函数,主要是为保证数据完整性,主流算法有MD5.SHA-1. 散列值:通过散列函数计算得到的结果 对称密钥算法:使用相同的密钥与算法对数据进行加解密 运算 - 优点:速度快.安全 ...

  6. 使用openssl的EVP接口使用sm2算法加解密等操作

    OpenSSL 1.1.1版本提供了对国密SM2算法的支持.但是不知为什么这么设计,将sm2.h sm3.h sm4.h这些头文件放在源码的cryto/include/internall目录下,这样导 ...

  7. openssl sm2 加解密

    1.SM2算法 openssl 1.1.1以后版本提供了对国密SM2算法的支持.源码的cryto/include/internall目录下有sm2,sm3,sm4的设计实现,但是无法直接调用,因此通过 ...

  8. 移动支付之Pos终端主密钥、工作密钥、pin密钥、mac密钥

    下面介绍一下加密机中最主要的几种密钥: 1.加密机主密钥(MK) 加密机主密钥(Master Key - MK)是存入在HSM机内的由三个成分合成的一对最上层密钥.在HSM机器以外的地方不会以明文形式 ...

  9. Pos终端中的主密钥、工作密钥、pin密钥、mac密钥

    下面介绍一下加密机中最主要的几种密钥: 1.加密机主密钥(MK) 加密机主密钥(Master Key - MK)是存入在HSM机内的由三个成分合成的一对最上层密钥.在HSM机器以外的地方不会以明文形式 ...

最新文章

  1. sybase 数据库恢复
  2. 组成新数python_大数相加 简单实现 Python 版本
  3. 元组字典集合内置方法与拷贝
  4. 【心情】今天买了ZÈRTZ!
  5. 前端学习(1338):mongoDB删除文档
  6. 深度学习之RetinaNet
  7. 基础知识(十四)服务器搭建
  8. 8.5 传输介质和网络应用
  9. 一招搞定让标签title属性值换行
  10. linux和windows时间同步问题(UTClocaltime)
  11. Html5下载功能实现
  12. 怎么做好客户关系管理培训PPT课件?
  13. win10下网易云网络异常问题解决办法
  14. Elasticsearch7.5配置IK中文分词器+拼音分词
  15. 名词用作动词举例_名词活用作动词
  16. ieltsListen was compiled with optimization - stepping may behave oddly; variables may not be availab
  17. “Project1.exe”(Win32): 已加载“C:\Windows\syswow64\ntdll.dll”。无法查找或打开 PDB 文件。 “Project1.exe”(Win32): 已加载
  18. android图片裁剪xof,HttpServletResponse response相关头信息,内容信息设置
  19. 骗你不是人 硬盘传输速度提升4倍的方法
  20. 图解时间自适应卷积----Time-aware Large Kernel Convolutions

热门文章

  1. 攻防演练-某地级市HW攻防测试演练红队渗透测试总结
  2. SCAU华南农业大学-数电实验-模4的可逆计数器-实验报告
  3. 逻辑运算符 、逻辑中断
  4. 达人评测i5 1340p和i5 12500h差距 酷睿i51340p和i5 12500h选哪个
  5. 几种能量及能量平衡方程
  6. 自己安装黑苹果的心酸路程。
  7. 我的RUST学习—— 【第十章 10-2】trait:定义共享行为
  8. Spring源码分析(1) —— 从Xml的加载到解析
  9. 苹果系统安装mysql找不到bin_Mac 安装MySQL数据库,系统提示mysql: command not found怎么办...
  10. 万能RabbitTemplate使用模板