在智能终端和嵌入式开发里,PSAM 是个高频出现的词。POS 机、ETC 车道、公交刷卡机、社保自助终端、加油站的油枪等,这些设备背后都藏着一张小小的卡片。它不面向用户、不参与业务逻辑,它只干一件事:替设备保管那些绝对不能被读出来的密钥。

一、先把名字读懂

PSAM 的规范中文名是销售点终端安全存取模块,英文全称 Purchase Secure Access Module。

在内部文档和转载文章里流传很广的错误写法:「Payment Secure Access Module」,这个并非人民银行规范用词。人民银行发布的 PSAM 卡规范中使用的是 Purchase,对应的是销售点终端这一典型场景。交通运输部《收费公路联网收费系统检测规范》的术语表里则把它写作 Payment Security Access Module,两种写法在行业文档中都出现过,但采购、申领与合规对标时,必须以人民银行规范中的 Purchase Secure Access Module 为准,混用会在设备型式检验和密钥体系对接时埋下隐患。

把三个词拆开,PSAM 的定位立刻就清楚了:

·Purchase(销售点):它出身金融 POS 领域,规范源头是人民银行发布的 PSAM 卡产品规范,最初服务于脱机消费交易认证。后来社保、交通、油站等行业沿用了这套机制。

·Secure(安全):它不是普通存储卡。卡内是安全芯片加 COS(卡操作系统),具备独立运算能力、应用隔离和访问控制。

·Access Module(存取模块):它对外提供的是受控访问能力,终端只能「请求运算结果」,取不到密钥本体。

所以最准确的一句话定义是:PSAM 是一张封装在标准卡体里的独立密码运算单元,它向宿主设备提供受控的密码服务,而不是密钥本身。

二、它长什么样

PSAM 在物理上就是一张标准的接触式 IC 卡,和银行卡、公交卡几乎一样大、一样有触点、一样遵循 ISO/IEC 7816。真正的差别在卡内。

维度普通存储卡CPU 卡(用户卡)PSAM
卡内构成逻辑电路 / EEPROM安全 CPU + COS安全 CPU + COS
密钥存放明文或简单口令保护安全区内,密钥不出卡安全区内,密钥不出卡
自主运算能力无有有
服务对象用户用户设备
典型角色门禁卡、会员卡银行卡、社保卡、公交卡POS、ETC、自助终端里的密码保险箱
典型算法无3DES、SM2、SM4 等3DES、SM1、SM2、SM4 等

它的技术底座主要由这几套规范撑起来:

·ISO/IEC 7816-1/2/3/4:智能卡物理特性、卡内文件结构、传输协议与 APDU 应用接口。国内对应国标为 GB/T 16649《识别卡 带触点的集成电路卡》。

·JR/T 0025《中国金融集成电路(IC)卡规范》:人民银行发布的 IC 卡系列规范,是 PSAM 型式检验的主要技术依据。该系列现行版本为 2018 版(JR/T 0025.1-2018 总则、JR/T 0025.7-2018 借记/贷记应用安全规范、JR/T 0025.8-2018 与应用无关的非接触式规范等)。

·GM/T 0107-2021《智能 IC 卡密钥管理系统基本技术要求》:密钥管理侧的要求,明确多级分散机制与三级证书体系。

·国密场景还需叠加 GB/T 39786(信息安全技术 信息系统密码应用基本要求)以及 SM1 / SM2 / SM3 / SM4 系列国家标准。

按接口能力,PSAM 分为普通 PSAM 与高速 PSAM;按容量,常见有 2K / 4K / 8K / 16K 等EEPROM 规格。高速 PSAM 在报文长度和传输速率上更强,但对读卡器和终端固件的要求也更高。

三、四大核心能力

1、密钥运算:加密、解密、MAC、数字签名

PSAM 内置密码算法引擎,可执行的运算包括:

对称加解密:金融场景常见 Single DES / Triple DES,国密场景为 SM1 / SM4。

·MAC 计算与校验:报文鉴别码,用于保障交易报文的完整性。

·杂凑运算:如 SM3。

·非对称运算:SM2 签名与验签,部分 PSAM 型号支持。

·随机数生成:挑战值与会话密钥的来源。

关键在于:以上运算全部在卡内安全芯片中完成。主机负责发指令、收结果,不参与中间过程。

2、密钥管理:存储、分散、更新

PSAM 内部的密钥文件受「卡片主控密钥」保护。密钥的装载、分散、更新、销毁都有严格的安全报文认证流程,卡片内还支持多级密钥分散机制生成 MAC1、校验 MAC2 等临时密钥。这项能力的价值,在第五节「多级分散」里会完整展开。

3、身份确认:验证这张卡是不是本机构发的

PSAM 承担的是「合法卡在合法机上使用」的校验能力。通过挑战—应答机制,双方各自用共享密钥对同一个随机数做运算,只有密钥正确的一方才能算出正确应答。

这里有个容易搞反的重点:重点不是「卡验证机」,而是「机验证卡」。PSAM 让终端具备了鉴别用户卡真伪的能力,当一张伪造的卡插进设备时,因为没有正确的共享密钥,挑战—应答必然失败。

4、 行为保护:扣款动作是被授权的,金额是没被篡改的

这是前三项能力最终服务于的目标。交易金额、卡内余额、卡号等关键数据经过加密与 MAC 处理后送出。攻击者即使完全控制终端,能拿到的也只是一堆密文和 MAC 值;任何对交易数据的细微篡改,都会导致校验失败、交易被拒绝。

四、密钥永远不出 PSAM

机具送进去的是「待运算的数据」,拿回来的是「运算结果」,中间过程无从窥探。这是 PSAM 区别于软件加密库的根本点。

设想一个反面做法:在终端程序里调用软件库做 SM4 加密,密钥必须以明文形式出现在终端内存里。攻击者拿到终端的 root shell、dump 一下内存、或者直接读你的配置文件,密钥就出来了——而终端恰恰是整条链路上最容易被物理接触、最容易被打补丁、也最难做完整防护的一环。

PSAM 把这件事彻底反了过来:密钥只存在于一个不可被读取的安全区,终端只能通过 APDU 指令「引用」它。这带来三个具体收益:

·密钥泄漏面收敛到一张卡。攻破终端只能拿到密文和 MAC,取不到密钥本体。

·一卡一密,一卡失效不影响全局。不同卡片的密钥派生因子不同,攻击面被天然隔离。

·密钥生命周期可被监管与审计。PSAM 卡必须由指定机构统一申领、发放、分销、回收,全流程有明确的管理规范,符合密钥全生命周期管理要求。

同时要说清楚一个常见误区:PSAM 不是「更快的加密库」。它的核心价值是安全边界的物理隔离,而不是性能。事实上在批量运算场景下,走 APDU 通信反而比直接调软件库慢。它的取舍很明确——用一点吞吐量,换取密钥不可导出。

五、从根密钥到卡片密钥:多级分散机制

PSAM 里的密钥不是凭空冒出来的,它来自一条多级分散链路。GM/T 0107-2021 对这套机制有明确描述:

工程含义有三个:

·密钥分散:不同卡片派生出的密钥各不相同,即使算法、密钥长度完全一致。

·一卡一密:某张卡的密钥在理论上被破解(现实中极难做到),其他卡不受影响,因为派生因子不同。

·主控与维护分离:主控密钥用于日常业务密钥的生成与更新,维护密钥用于更敏感的操作,形成职责分离与最小权限。

这也解释了为什么 PSAM 卡不能像普通配件那样随手采购、插上就用。它必须由指定机构统一申领发放,密钥体系与发行流程本身就是安全的一部分。

六、在国密体系中的位置

在国密系统里,PSAM 的角色是终端侧国密运算的执行者。

国密 CPU 卡内部使用 SM1 / SM2 / SM3 / SM4,终端要跟它完成认证和交易,就必须能执行对应的国密运算。PSAM 恰好持有与 CPU 卡共享的密钥,按国密算法协议完成双向认证、数据加密和 MAC 计算,终端在整个过程中不暴露密钥,只获得运算结果。

工程上最容易踩的一个坑,是混淆「金融体系」和「国密体系」:

维度金融 PSAM国密 PSAM
主要算法Single DES / Triple DES、RSASM1 / SM2 / SM3 / SM4
主要规范JR/T 0025 系列、PBOC 相关应用规范GM/T 0107、GB/T 32905、GB/T 32907、GB/T 32918、GB/T 39786
典型落地银行卡 POS、圈存ETC、社保卡、交通一卡通、油站
合规要求人民银行体系密码法、商用密码产品认证

用错体系会直接导致认证失败。很多被归类为「协议不兼容」或「设备有问题」的现象,根子在于终端下发的是国密 APDU 指令序列,卡里装载的却是 3DES 密钥——指令能收,运算结果永远对不上。

七、开发者接入清单:APDU 交互模型与常见故障定位

1、APDU:终端与卡片之间唯一的通道

终端和 PSAM 之间只有一种交互方式——APDU(应用协议数据单元)。它的基本结构是:

字段含义典型取值
CLA类别字节00
INS指令码84 取随机数、82 外部认证等(加密/MAC 运算多为行业或厂商自定义指令,如 80 FA,以具体 COS 指令集为准)
P1 / P2参数P2 常用于指定密钥标识符
Lc数据域长度08
Data数据域随机数、密文、待计算 MAC 的报文
SW1 / SW2状态字90 00 表示成功

一个典型的挑战—应答交互长这样:

终端 → CPU 卡 : 00 84 00 00 08          取随机数
CPU 卡 → 终端 : 〔8 字节随机数〕 90 00
终端 → PSAM   : 00 D6 00 〔密钥ID〕 08 〔8 字节随机数〕
PSAM  → 终端 : 〔8 字节密文〕 90 00
终端 → CPU 卡 : 00 82 00 00 08 〔8 字节密文〕
CPU 卡 → 终端 : 90 00                  认证通过

2、三个必须记住的工程约定

·密钥用 ID 引用,绝不用值传递。P2 字段传的是密钥标识符——外部认证密钥、MAC 密钥、加密密钥各有独立 ID,卡内据此选择对应密钥执行运算。终端永远拿不到密钥值。

·状态字必须逐次检查。90 00 是成功;6A 88 常见于密钥不存在;63 CX 多与验证尝试次数相关。忽略 SW1SW2 是线上问题定位的头号来源。

·传输协议要对齐。T=0(字符传送)与 T=1(块传送)的报文边界不同,PC/SC 层的 APDU 组包方式也不同;普通 PSAM 与高速 PSAM 在报文能力上也有差别。

3、常见故障定位清单

现象优先排查方向
认证一直失败密钥 ID 传错;PSAM 未正确上电复位;卡内密钥与 CPU 卡侧不一致
返回 6A 88指定的密钥标识符在卡内根本不存在
返回 6D 00 / 6E 006D 00:INS 不被支持;6E 00:CLA 不被支持——多半是算法体系不匹配(3DES 卡跑 SM1 指令)
读卡器能读卡但发指令超时T=0 / T=1 配置不匹配;卡座接触不良;高速 PSAM 与旧读卡器不兼容
切换多应用后密钥混乱未按应用或目录切换上下文就发指令
偶发成功、偶发失败终端未做掉电复位,卡内会话状态残留

八、一句话总结

PSAM 是一张面向设备、而不是面向用户的安全卡。它把密钥锁在卡内的安全区里,只对外提供「受控运算」这一种能力。

回到开头那句话——密钥永远不出 PSAM,机具送进去的是待运算的数据,拿回来的是运算结果,中间过程无从窥探——这就是它全部的技术价值和工程意义。

理解了这句话,也就理解了为什么金融、社保、交通这些强合规场景宁可多插一张卡、多付一套密钥管理流程的代价,也不愿意把密钥放在终端的软件里。因为前者把风险控制在一张可以被物理管控、可以被审计追溯、可以被单独吊销的介质上,而后者把风险摊在了一堆可能被随意 root、可能被 dump、可能连着 WiFi 的普通终端里。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐