亚马逊AWS官方博客

Amazon Payment Cryptography 助力构建云上 SoftPOS 技术方案

什么是 SoftPOS

SoftPOS 是指通过安装具有安全控制的移动应用程序,将标准的现成设备(如智能手机)转为支付受理设备的一项技术方案。SoftPOS 通常会利用智能手机上的 NFC 技术,使非接触式支付卡或数字钱包可以通过“轻触”智能手机进行付款。

SoftPOS 一般是指基于 NFC 的移动端设备(通常为安卓设备)安全支付方案,获全球主流卡组织认可。通过 NFC 智能安卓、鸿蒙设备安装软件应用即可支持 Visa、万事达、银联、JCB 境外银行卡收款,实现 EMV 安全等级的卡受理。

对于 iOS 设备,支付服务提供商(Payment Service Providers)可通过 iOS 系统内置功能 Tap to Pay 实现类似的移动端支付方案。但该功能目前仅在美国、台湾、澳大利亚、英国、荷兰、巴西、乌克兰和法国可用。

SoftPOS 的兴起

非接触式支付的简易操作和支付速度深受消费者喜爱,这也是为什么非接触式支付可以成为全球大多数国家消费者的首选支付方式。由于消费者需求增加,以及人们随身携带的现金更少,越来越多的商户现在认为有必要接受电子支付。SoftPOS 引起更多关注的另一个原因是 Visa 和 Mastercard 等卡组织正在积极推广 SoftPOS 技术,因为他们将视之为增加电子交易受理点,从而扩大他们覆盖的整体市场规模。

在非接触限额相当于 100 英镑或以上的国家,包括美国、加拿大、日本、澳洲、新加坡、新西兰、阿拉伯联合酋长国、巴林和英国,SoftPOS 的普及率会更高。此外,在 POS 设备方面终端覆盖率较低的国家可能会被吸引。

值得注意的是,在移动支付发达的中国,SoftPOS 仍有其市场需求。随着海外游客访华人数的逐年上升,SotfPOS 因其更契合海外支付习惯(信用卡消费)和天然支持国际支付卡的特性而区别于一般扫码支付场景。

SoftPOS 的合规认证标准

SoftPOS 应用程序供应商必须满足信用卡组织的合规认证标准,SotPOS 应用程序才会被授权以接受处理信用卡支付。MPoC(Mobile Payment on COTS)是 PCI 安全标准委员会(PCI SSC)发布的一项新标准。MPoC 是基于之前的 SPoC(软件 PIN 输入)和 CPoC(硬件加密 PIN 输入)标准,以及网络支付试验的经验而制定的。MPoC 的构建旨在将”技术”或”开发”方面与”运营”方面分离。

MPOC 的主要内容包括:

  1. 为商用移动设备(如智能手机、平板电脑等)上的支付应用程序设定安全要求。
  2. 规定移动支付应用如何安全地获取、处理和保护支付卡数据。
  3. 提出对移动设备操作系统、硬件和软件的一系列技术控制要求。
  4. 制定移动支付应用的评估和测试程序,确保其符合 PCI 安全标准。

MPOC 的出台是为了应对移动支付快速发展的趋势,在传统 PCI DSS 标准的基础上,针对性地加强了移动支付环境的数据安全保护能力。

目前已有 SoftPOS 方案供应商通过亚马逊云科技服务构建符合 MpoC 认证的 SoftPOS 方案。

通过亚马逊云科技构建 SoftPOS 方案参考架构

借助亚马逊云科技安全且符合 PCI 规范的基础设施,SoftPOS 供应商能更方便地满足一系列如 PCI DSS 4,PCI MpoC 的支付行业标准。同时,利用像 API Gateway,Elastic Kubernetes Services(EKS), Cloud HSM 等托管服务;SoftPOS 供应商能快速地构建起安全合规且随着交易量自动扩缩容的现代化 SoftPOS 方案。

架构说明:

  1. 通过专线与支付机构后台数据中心进行互联
  2. 利用 VPC 等云上网络服务,构建满足 PCI 要求的网络环境并对不同的环境进行隔离(过检环境,生产环境,测试环境等)
  3. 采用三层架构搭建了 SoftPOS 系统,通过 auto scaling 等方式支持系统弹性扩展
  4. 使用 RDS,Elasticache for redis,Amazon MQ,EKS 等托管服务支持应用的数据库和中间件,利用托管服务本身的高可用和扩展性来降低运维复杂度
  5. 使用 KMS,CloudHSM,Payment Cryptography 等云上加密服务,支持 SoftPOS 整体业务流程中需要对 PIN 相关信息的处理

Payment Cryptography 实现 SoftPOS 端到端加密方案(P2PE)

PAN(Primary Account Number)与 PIN(Personal Identification Number)是卡交易过程中的关键持卡人数据。通常情况下,PAN & PIN 通过 DUKPT(Derived Unique Key Per Transaction), 即每笔交易派生唯一密钥的方式实现端到端加密。

下面将会通过命令行工具(CLI)模拟 Payment Cryptography 在 SoftPOS 方案中的使用场景。

1. 基本派生密钥 BDK(Base Derivation Key)的生成

BDK 为 DUKPT 中的根密钥,只有收单机构与支付处理机拥有。APC 支持 BDK 的生成。

aws payment-cryptography create-key --exportable \
--key-attributes KeyAlgorithm=TDES_2KEY,KeyUsage=TR31_B0_BASE_DERIVATION_KEY,\
KeyClass=SYMMETRIC_KEY,KeyModesOfUse='{DeriveKey=true}'

对于迁移场景,APC 支持通过 TR-34,RSA Unwarp 和 TR-31 方式导入 BDK;
下面例子将通过脚本将 BDK 导入至 Payment Cryptography,后续例子将基于该 BDK 进行。该例子涉及明文 Key,仅作此次展示使用,不建议生成环境直接使用。

python3 -m pip install psec
python3 -m pip install boto3
python3 -m pip install pycryptodome 
curl -O https://raw.githubusercontent.com/aws-samples/samples-for-payment-cryptography-service/main/key-import-export/tr34/import_app/import_tr34_raw_key_to_apc.py
curl -O https://raw.githubusercontent.com/aws-samples/samples-for-payment-cryptography-service/main/key-import-export/tr34/import_app/import_tr31_raw_key_to_apc.py
cat << EOF > apc_keysetup.py 
"""
This script is intended to import/generate all the keys needed for the AWS Payment Cryptography demo
"""
import import_tr34_raw_key_to_apc as tr34
import import_tr31_raw_key_to_apc as tr31
import boto3

""" Key encryption key which will be used to import subsequent keys """
KEK = '79ADAEF3212AADCE312ACE422ACCFEFB'
""" KEK = '8A8349794C9EE9A4C2927098F249FED6' """

""" Base Derivation Key which will be used to generate DUKPT """
BDK = '8A8349794C9EE9A4C2927098F249FED6'
bdkAlias = 'alias/MerchantTerminal_BDK_workshop_test'

apc_client = boto3.client('payment-cryptography')

if __name__ == "__main__":

    print("")
    print("*********Importing a KEK for importing subsequent key import*********")
    print("")

    tr34_response = tr34.importTr34("ONLINE",KEK,"E","K0","B","","")
    print("KEK/KPBK/ZMK ARN:",tr34_response[0])

    print("")
    print("*********Importing a BDK for DUKPT*********")
    print("")
    response = tr31.importTR31(KEK,BDK,"E","B0","X","T","ONLINE",tr34_response[0],None,bdkAlias)
    print("BDK ARN:",response[0])
    print("Alias",response[1])

    print("")
    print("*********Done*********")
    print("")
EOF

执行脚本导入 BDK:

python3 apc_keysetup.py

2. 生成收单机构工作密钥 AWK(Acquirer Working Key)

收单机构工作密钥(AWK)是一种加密密钥,用于在借记卡/PIN 交易期间在收单机构(如商户银行)和支付网络之间安全传输加密的 PIN 数据。

aws payment-cryptography create-key --exportable \
--key-attributes KeyAlgorithm=TDES_3KEY,\
KeyUsage=TR31_P0_PIN_ENCRYPTION_KEY,\
KeyClass=SYMMETRIC_KEY,\
KeyModesOfUse='{Encrypt = true, Decrypt = true, Wrap = true, Unwrap = true}'

3. 初始 PIN 加密密钥 IPEK(Initial PIN Encryption Key)的生成

APC 基于之前生成/导入的 BDK,叠加 POS 终端的密钥序号 KSN(Key Serial Number)生成初始 PIN 加密密钥(IPEK)。注意需把命令行中 BDK 以及 KEK ARN 进行替换。

IPEK 导出后通过 TR-31/TR-34 等协议注入 POS 终端。

// 基于BDK 生成 IPEK
aws payment-cryptography export-key \
--key-material='{"Tr31KeyBlock": {"WrappingKeyIdentifier": <KEK ARN>}}' \
--export-key-identifier <BDK ARN> \
--export-attributes 'ExportDukptInitialKey={KeySerialNumber=FFFF9876543210E00001}'

IPEK 密钥不会被保存在 Payment Crytography 内,因此也不能用于其他操作。

4. POS 终端基于 IPEK 以及密钥派生函数 KDF(Key derivation function)生成每笔交易的衍生密钥

5. 来自 POS 终端的 PIN 数据进行转加密

通过 APC 将来自 POS 终端由 DUKPT 加密的 PIN 数据转为 AWK 加密,以传输至后续卡组织。下面例子已经提供 KSN 和加密过的 PIN Block。

aws payment-cryptography-data translate-pin-data \
--incoming-key-identifier "<BDK ARN>" \
--outgoing-key-identifier "<AWK ARN>" \
--incoming-translation-attributes IsoFormat0='{PrimaryAccountNumber= 55164222217375116}' \
--outgoing-translation-attributes IsoFormat0='{PrimaryAccountNumber= 55164222217375116}' \
--encrypted-pin-block "2E387154891FB437"  \
--incoming-dukpt-attributes KeySerialNumber="FFFF9876543210E00001" \
--outgoing-dukpt-attributes KeySerialNumber="FFFF9876543210E00001" 

成功地把经过 DUKPT 加密的 PIN 码转换为通过 AWK 加密。

结语

亚马逊云科技遍布全球的基础设施能够帮助支付企业方便地在全球各地进行展业。基于责任共担模型,亚马逊云科技负责运行、管理和控制从主机操作系统和虚拟层到服务运营所在设施的物理安全性的组件;与此同时,借助如 Payment Cryptography,Audit Manager 等服务,支付企业能以较低的成本构建安全合规且具有弹性的云原生 SoftPOS 技术方案。

本篇作者

黄皓源

亚马逊云科技解决方案架构师,曾服务于头部外资金融机构云平台团队,在金融机构上云领域有丰富的项目经验,对支付机构使用云服务有较为深入的探索和实践。

郑明明

亚马逊云科技解决方案架构师,服务于国内及全球多家头部金融机构,在 IT 与云计算领域有丰富的项目经验,对量化金融机构使用云计算有较为深入的探索和实践。