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

移动安全规范 — 3 -个人密码(PIN)传输规范

熟悉PIN、PAN、PIN Block、Format标准就了解了PIN传输规范。

1. PIN、PAN、PIN Block

PIN(Personal identification Number):即个人密码。PIN规定为4~12位数字,越长越安全,但是从易用的角度考虑不应该超过6位,所以目前的银行卡密码都是6位。在计算机和网络系统中任何环节不允许PIN以明文的格式出现

PAN(Primary Account Number的缩写): 主账户号码 。ISO 9564中定义:发行者分配的号码,由发行者识别号码、个人账户标识和ISO/IEC 7812-1中规定的校验数字组成,用于识别发卡机构和持卡人。详见银行卡号的编码规则及校验。

PIN Block:填充后的PIN的分组数据块。对pin进行加密时,由于pin长度一般为6位,不符合加密算法的固定分组长度要求,所以需要对pin进行填充使之达到一个分组的长度,然后加密计算从而保证pin的机密性。PINBLOCK一般用于银行卡取款密码的加密传输处理过程中,遵循ANSI X.98规范,该规范被目前主流的卡组织所接受,包括中国银联。

2. PIN Block分类

PIN 格式块:ISO 9564标准中定义了5种格式,Format 0,Format 1, Format 2, Format 3,Format 4。

2.1 Format 0 PIN block

由PIN域 和 PAN域 异或 得到。

PIN域 共64bit,每4bit为1位十六进制数字,共16位十六进制数字。
第1位(1~4bit):固定值0x0(0000)
第2位(5~8bit):PIN长度,取值范围0x4(0100) ~ 0xC(1100)
第3~16位(9~64bit):PIN,不足14位右补0xF(1111),因为PIN最多12位,所以最后2位一定是0xFF(1111,1111)

PAN域 共64bit,每4bit为1位十六进制数字,共16位十六进制数字。
第1~4位(1~16bit):固定值0x0000(0000,0000,0000,0000)
第5~16位(17~64bit):PAN,去掉最右边1位校验数字后,从右边数12位,不足12位左补0x0(0000)

2.2 Format 1 PIN block

用于PAN不可获取的场景,由PIN域 拼接 交易域得到。

交易域:在每次PIN block时应当是唯一的,其来源于交易序列号、时间戳、随机数或其他相似情况,取值范围是0x0(0000) ~ 0xF(1111)。

PIN block上送时,交易域不必上送,因为PIN的长度已经知道了。

PIN block 共64bit,每4bit为1位十六进制数字,共16位十六进制数字。
第1位(1~4bit):固定值0x1(0001)
第2位(5~8bit):PIN长度,取值范围0x4(0100) ~ 0xC(1100)
第3~16位(9~64bit):PIN,不足14位右补交易域。

2.3 Format 2 PIN block

指定IC卡使用,只能用于离线环境,不能用于线上PIN验证。

PIN域 共64bit,每4bit为1位十六进制数字,共16位十六进制数字。
第1位(1~4bit):固定值0x2(0010)
第2位(5~8bit):PIN长度,取值范围0x4(0100) ~ 0xC(1100)
第3~16位(9~64bit):PIN,不足14位右补0xF(1111),因为PIN最多12位,所以最后2位一定是0xFF(1111,1111)

2.4 Format 3 PIN block

由PIN域 和 PAN域 异或 得到。

PIN域 共64bit,每4bit为1位十六进制数字,共16位十六进制数字。
第1位(1~4bit):固定值0x3(0011)
第2位(5~8bit):PIN长度,取值范围0x4(0100) ~ 0xC(1100)
第3~16位(9~64bit):PIN,不足14位右补0xA(1010) ~ 0xF(1111)中随机的或顺序的数字

PAN域 共64bit,每4bit为1位十六进制数字,共16位十六进制数字。
第1~4位(1~16bit):固定值0x0000(0000,0000,0000,0000)
第5~16位(17~64bit):PAN,去掉最右边1位校验数字后,从右边数12位,不足12位左补0x0(0000)

2.5 Format 4 PIN block

PIN域 共128bit,每4bit为1位十六进制数字,共32位十六进制数字。
第1位(1~4bit):固定值0x4(0100)
第2位(5~8bit):PIN长度,取值范围0x4(0100) ~ 0xC(1100)
第3~16位(9~64bit):PIN,不足14位右补0xA(1010)
第17~32位(65~128bit):随机数字,取值范围0x0(0000) ~ 0xF(1111)

PAN域 共128bit,每4bit为1位十六进制数字,共32位十六进制数字。
第1位(1~4bit):PAN长度减12,因为PAN最大19位,所以取值范围0x0(0000) ~ 0x7(0111);PAN长度小于12时,取值0x0(0000)
第2~32位(5~128bit):PAN,不足12位左补0x0(0000),超过12位不足20位右补0x0(0000)

Format 4 与0/1/2/3不同,不是先得到PIN block再加密,而是将 PIN域和PAN域放到加密过程中,最终得到加密的PIN block。加密过程:

  1. 使用密钥K对PIN域加密,得到结果A;
  2. 结果A与PAN域做异或,得到结果B;
  3. 使用密钥K对结果B加密,得到加密的PIN block。
  4. 解密过程(加密过程的逆过程)
  5. 使用密钥K对加密的PIN block解密,得到结果B;
  6. 结果B与PAN域做异或,得到结果A;
  7. 使用密钥K对结果A解密,得到PIN域。
  8. 因Format 4 PIN block涉及密钥加解密过程,此处不提供代码示例,PIN域、PAN域、异或,可参照其他格式PIN block代码示例

3. Format标准

3.1 ANSI X9.8 Format

ANSI - American National Standards Institute,美国国家标准学会

ANS - American National Standards,美国国家标准

ANS X9.8是在ISO 9564-1标准的基础上增加几处笔记形成的,内容可以认为是一致的。指出PIN block只有Format 0和3建议在此标准下使用,Format 3应当在多次PIN加密都使用相同的PIN加密密钥时使用。

ANSI X9.8 个人密码加密标准。

ANSI X3.92 数据加密标准 (DES) 。

ANSI X9.9 金融机构信息验证标准。

3.2 Q/CUP 006.4

中国银联股份有限公司企业标准,Q表示企业,CUP表示中国银联(China UnionPay)。

银联标准定义的ANSI X9.8 Format(不带主账号信息)就是ANSI X9.8 Format(带主账号信息)的简化。

银联标准也定义了互联网支付密码的PIN block计算方式。 1. 互联网支付密码的长度必须在6到20个字符以内; 2. 互联网支付密码均为ASCII码字符,既可以为字符,也可以为数字,或其他符号; 3. PIN block 共24个字节,每个字节使用2位十六进制数字表示,共48位十六进制数字; 前2个字节,互联网支付密码的长度; 剩余22个字节,PIN,6~20位字符,每个字符占1个字节,不足右补0xFF。

4. PIN安全设计建议

1. 给密码加盐后再进行哈希。

2. PIN输错和穷举次数限制。

3. 异地登陆需要校检。

4. 不设置生日、连续数字、重要日期等简单密码。

相关文章:

  • Spring之AOP思想
  • TypeScript 小结
  • Netty(10)协议设计与解析(IdleStateHandler:空闲检测器、心跳)
  • PostgreSQL数据库统计信息——analyze大致流程
  • C开发环境与基础
  • Android系统_MSM8953_android10_adb连接adbd加入密码检测
  • 23设计模式之 --------- 什么是设计模式?
  • 在以「基础设施」为定位的发展阶段里,产业变成了一个可以有诸多创新的存在
  • Vue相关面试题(1)
  • 基于SpringBoot的网上购物商场管理系统
  • Python——time模块
  • 【深度学习】卷积神经网络的架构参考 以MNIST数据集为例(未调节架构)测试集正确率: 98.66%
  • C++ 哈希桶模拟实现(补充)
  • Rethinking the Inception Architecture for Computer Vision--Christian Szegedy
  • 安卓毕业设计成品基于Uniapp+SSM实现的智能课堂管理APP在线学习网
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 30天自制操作系统-2
  • Android单元测试 - 几个重要问题
  • exif信息对照
  • Java多态
  • Js基础知识(四) - js运行原理与机制
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • orm2 中文文档 3.1 模型属性
  • React16时代,该用什么姿势写 React ?
  • SwizzleMethod 黑魔法
  • text-decoration与color属性
  • windows下使用nginx调试简介
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 从0实现一个tiny react(三)生命周期
  • 翻译:Hystrix - How To Use
  • 判断客户端类型,Android,iOS,PC
  • 前端学习笔记之观察者模式
  •  一套莫尔斯电报听写、翻译系统
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • puppet连载22:define用法
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (二)springcloud实战之config配置中心
  • (篇九)MySQL常用内置函数
  • (一)插入排序
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .NET CLR Hosting 简介
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • @Repository 注解
  • @selector(..)警告提示
  • []T 还是 []*T, 这是一个问题
  • []常用AT命令解释()
  • [<MySQL优化总结>]
  • [CQOI 2010]扑克牌
  • [CSS] - 修正IE6不支持position:fixed的bug
  • [E单调栈] lc2487. 从链表中移除节点(单调栈+递归+反转链表+多思路)