金融POS设备中涉及的一些标准

本文将我所知的在金融POS上涉及到的标准罗列出来,方便查询,也方便新入门者参考。

水平有限,如有错漏,望海涵,并请不吝赐教!

 

金融POS涉及的技术标准

标准文档简单说明

ISO7810

ISO7811

ISO7812

ISO7813

磁条卡相关国际标准
ISO7816IC卡相关国际标准
ISO14443非接触卡(金融NFC卡)国际标准
ANSI X9.24

定义了密钥管理方法,包括如Fixed Key, Master-Session Key, DUKPT等定义

对应的国际标准为ISO11568

ANSI X9 TR-31定义了如何将对称密钥进行封装的对称密钥交换标准,这是PCI认可的对称密钥交换方式。
ANSI X9 TR-34定义了如何基于非对称加密技术的安全的密钥交换,这是PCI任何的密钥交换方式。
ISO9797-1信息校验码(MAC)算法的国际标准,里面定义了若干种MAC算法,金融POS使用了其中一两种。
ISO9564PINBLOCK格式标准,及PINBLOCK加密方法的国际标准,里面定义了Format0-4共5种PINBLOCK格式。金融POS一般使用其中的一种或数种。
ISO10116定义了对称密码算法的几种计算模式,如ECB/CBC/CFB/OFB/CTR

NIST SP800-22

定义了随机数的统计学测试标准,依据这个标准有一个测试工具STS,使用STS可以测试出数据的随机性
NIST SP800-38BMAC算法标准,与ISO9797-1等效
NIST SP800-90A定义了几种随机数算法,如:HASH-DRBG/CTR-DRBG/HMAC-DRBG,PCI委员会要求金融POS需要使用符合这个标准的随机数算法
NIST SP800-175B规定了联邦政府密码学实现指导,规定了密码学设备应该使用的算法标准,比如:哪些算法不应被使用,RSA算法应该使用多少位以上的位数等。

ITU-T X.509

定义了公钥证书的格式和内容标准,几乎所有数字证书都遵循此标准

 

金融POS关注的几类数据

  • PAN - 用户的主账户,即:银行卡号,这个数据在交易流程中会被用到。
  • PIN - 用户的银行卡密码,即:银行卡取款密码,在交易流程中会被用到。
  • 密钥 - 用来对PAN或PIN等数据进行加密或计算MAC等的对称密钥

这几类数据都需要进行严格的保护,但保护方式各有差异。

 

金融POS涉及常见算法

  • MAC算法 - 用来确保数据从一端到另一端的完整性与合法性,比如交易数据中的帐号、金额等不能被篡改,就需要MAC。
  • PINBLOCK算法 - 用来将PIN密码按规定的格式进行编码,这样银行后端能使用统一的格式来解密出PIN。
  • PINBLOCK加密算法 - 用来对PINBLOCK进行加密的算法,这样在公开网络上传输的是经过加密后的PIN。
  • 随机数算法 - 很多算法中都会用到随机数,甚至密钥的产生通常也是用随机数的,随机数必须具备不可预测的特点。

 

金融POS中常见的加密算法

  • DES/TDES算法 - 2019年(PCI-V5)之前的所有POS都支持DES/TDES算法
  • AES算法 - 2019年(PCI-V5)之后的所有POS都支持AES算法,NIST、PCI等多个组织都已经将DES密码视为安全性较弱
  • SHA256 - 金融POS通常用它来进行数字签名/验签等,SHA1及MD5在被王小云公布破解方法后宣告不安全。
  • RSA2048 - 金融POS要求使用更高的RSA长度,通常大家使用RSA2048。以前使用RSA1024,但已经被宣告太弱。
  • EC算法 - 椭圆曲线算法,比RSA更加优秀的非对称加密算法,今年使用频率有所上升。256bit长度的EC算法密钥强度已经远远高于RSA2048.
  • SM2 - 中国国产密码算法家族中的一种非对称加密算法,是EC算法的一个实例,长度为256bit。
  • SM3 - 中国国产密码算法家族中的一种HASH(也叫杂凑)算法,强度相当于SHA256
  • SM4 - 中国国产密码算法家族中的一种对称加密算法,块长度为128bit,强度相当于AES-128.

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要从Septentrio设备获取位置信息,你需要使用Septentrio提供的开发工具包(例如Polaris或PolNino)来与设备进行通信和数据解析。以下是一个使用Septentrio开发工具包获取位置信息的示例代码: ```cpp #include <iostream> #include <string> #include <septentrio/communication_library.h> int main() { std::string deviceIp = "192.168.1.1"; // 设备的IP地址 int devicePort = 1234; // 设备的端口号 // 创建通信库实例 CommunicationLibrary commLib; // 连接到设备 if (!commLib.Connect(deviceIp, devicePort)) { std::cerr << "无法连接到Septentrio设备" << std::endl; return -1; } // 设置需要获取的数据类型 commLib.SetDataType(DataType::POS); // 获取位置信息 // 开始接收数据 if (!commLib.StartReceiving()) { std::cerr << "无法开始接收数据" << std::endl; commLib.Disconnect(); return -1; } // 读取位置信息 while (true) { if (commLib.WaitForData()) { DataType dataType = commLib.GetDataType(); if (dataType == DataType::POS) { PositionData posData = commLib.GetPositionData(); // 在这里处理位置信息 std::cout << "位置信息:" << posData.latitude << ", " << posData.longitude << std::endl; } } } // 停止接收数据并断开连接 commLib.StopReceiving(); commLib.Disconnect(); return 0; } ``` 在上述示例,我们使用了Septentrio提供的通信库,并创建了一个CommunicationLibrary对象实例。然后,我们使用Connect函数连接到Septentrio设备,指定设备的IP地址和端口号。 接下来,我们使用SetDataType函数设置需要获取的数据类型为POS(位置信息)。然后,使用StartReceiving函数开始接收数据。 在一个循环,我们使用WaitForData函数等待数据的到达。一旦有数据到达,我们使用GetDataType函数获取数据类型,如果是POS类型,则使用GetPositionData函数获取位置信息,并在此处进行处理。 最后,使用StopReceiving函数停止接收数据,并使用Disconnect函数断开与设备的连接。 请注意,以上示例仅演示了如何使用Septentrio开发工具包来获取位置信息。实际上,你需要根据Septentrio设备和开发工具包的要求进行配置和调整代码。确保你已经正确安装了所需的开发工具包,并按照其文档提供的接口进行操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值