内容图

一、为什么自助终端必须把"身份核验"搬到本地

在银行 ATM、政务一体机、税务自助终端、社保查询机这类场景里,终端往往布放在网点、社区、乡镇甚至移动指挥车上。它们有两个很现实的特征:第一,网络并不总是可靠,跨运营商、跨区域的专线随时可能抖动或中断;第二,它们直接面对最终用户和大额/敏感交易,身份一旦被冒用,后果远超普通办公电脑被登录。

传统做法是把身份校验完全交给后台:终端提交用户名口令,后台返回是否放行。这套流程在联网状态下没问题,但一旦断网,要么整个终端停摆(用户体验崩塌、业务无法办理),要么退化为"本地放行、事后补录"(安全边界直接被击穿)。更麻烦的是,监管侧(等保 2.0 第三级对身份鉴别、访问控制、安全审计的要求)要求"谁、在什么时候、用什么凭证、办了什么业务"必须可回溯、可举证,而不是一句"系统记录过"就能过关。

因此,自助终端的身份体系需要满足四个硬指标:

  • 断网可用:核验逻辑不依赖实时后台,网络中断时仍能完成强身份鉴别;
  • 设备绑定:操作员与具体终端一一对应,钥匙/指纹不能跨设备冒用;
  • 交易留痕:每一次认证、每一次敏感操作、每一笔交易都要落本地日志;
  • 审计举证:日志不可篡改、可导出、可对账,形成可提交监管的闭环。

下面从工程角度,把这些指标拆成可落地的技术模块。

二、操作系统登录第二因子的定位

在自助终端上,身份核验不是"应用层再弹一个登录框"那么简单。真正的强鉴别,应当嵌入到操作系统登录流程这一层,让没有通过第二因子的人连桌面/会话都进不去。

也就是说,第一因子是"你知道的"(口令、PIN),第二因子是"你持有的/你本身的"(USBKey、OTP、指纹、掌纹)。两者在操作系统登录阶段就被强制串联校验,应用系统无需各自再实现一遍鉴权,天然获得统一的安全基线。

2.1 四因子的技术形态

因子形态离线能力关键指标典型问题
国密 USBKey持有物 + PIN强(本地证书/密钥)支持 SM2/SM3/SM4易丢失、需插拔
OTP 动态口令时间/事件同步强(离线可算)30s/60s 滚动需时钟同步
指纹生物特征强(本地模板)识别率、误识率手指状态影响
掌纹/指静脉生物特征强(本地模板)戴手套可用采集器成本略高

这四类因子并非互斥,工程上常做组合:例如"USBKey + 指纹"双因子,或"口令 + OTP"应急。重点在于——所有因子在校验时都不要求实时联网,这是离线身份核验能够成立的前提。

2.2 为什么要强调"本地模板"

指纹和掌纹之所以能离线,是因为它采用"本地模板 + 本地匹配"的架构:

  1. 首次登记时,采集器提取生物特征的数学模板(不是原始图像),经加密后写入终端本地的安全存储区(可以是加密分区、可信执行环境或 USBKey 内部空间);
  2. 每次核验时,现场采集特征,与本地模板做 1:1 或 1:N 比对;
  3. 匹配结果直接驱动操作系统登录放行或拒绝。

整个过程不出终端,不访问后台特征库,既满足断网可用,也避免了生物特征在网络上传输带来的隐私合规风险。

三、离线指纹识别的工程细节

自助终端大量使用指纹,是因为它成本低、体验快。但要把指纹做得"可用且可信",有几个工程坑必须填。

3.1 特征模板的加密与隔离

原始指纹图像绝不能明文落盘。正确做法是:采集器端完成特征提取,只输出定长模板向量,再用设备唯一密钥加密存储。即便有人物理拆机拷走存储,拿到的也是密文模板,无法直接还原指纹,也无法移植到别的终端上使用(因为绑定了设备密钥)。

// 伪代码:指纹离线核验流程
func verifyOffline(captured, storedCipher, deviceKey):
    template = decrypt(storedCipher, deviceKey)   // 用设备密钥解密本地模板
    if template == null:
        return REJECT("模板不可用或被篡改")
    score = matcher.compare(captured.feature, template)
    if score >= THRESHOLD_ACCEPT and score <= THRESHOLD_REJECT:
        // 落在不确定区间,触发第二因子(如 PIN/USBKey)复核
        return STEP_UP_REQUIRED
    return ACCEPT if score > THRESHOLD_ACCEPT else REJECT

3.2 戴手套与干湿手指的鲁棒性

政务/工业场景里,操作员常戴手套或手指干裂。普通光学指纹在这种情况识别率会骤降。工程上有两条路:一是换用电容/超声采集器提升对表皮状态的容忍度;二是引入掌纹或指静脉作为互补因子。在供应链审核类现场,戴手套仍可识别的方案能把通过率做到 99.7% 以上,单次匹配耗时控制在 0.3 秒以内,用户几乎无感。

3.3 因子编排的下沉式设计

以安当SLA为例,它的因子编排不是在应用层写死,而是在登录凭据提供器(Credential Provider / PAM 模块)层面声明策略。系统管理员可以配置"USBKey 必须 + 指纹可选 + OTP 应急",终端按策略在本地执行组合校验,策略本身可由平台在联网时统一下发,断网时则沿用上一次缓存的本地策略。这种"策略下沉到终端、校验发生在本地"的设计,是把四因子真正用出离线价值的关键。这里需要强调,这种下沉式编排并非某个产品的独有卖点,而是任何要在自助终端落地的双因子方案都必须解决的基础架构问题。

四、设备绑定:让"钥匙"和"人"都钉死在终端上

断网可用解决了"能不能验",设备绑定解决的是"该不该由这台设备、这个人来验"。

4.1 一人一钥、一机一绑

  • 人员绑定:每个操作员拥有唯一标识(USBKey 序列号 / 指纹模板 ID / 工号),只能在被授权绑定的终端上通过校验;
  • 设备绑定:终端硬件指纹(主板序列号、TPM/安全芯片标识)与授权人员列表绑定,未授权人员即便持有合法 USBKey,换一台未绑定的机器也会被拒绝;
  • 绑定关系本地化:绑定表缓存在终端本地加密区,断网时照样生效。

这套机制在军用指挥车、轨交外场等"设备随人走、网络随环境断"的场景里尤其重要:一台车、一把钥匙、一个操作员,三者不对应就拒绝启动任何业务会话。

4.2 拔 Key 自动锁屏

对于持有 USBKey 的场景,物理拔出即视为"操作员离开"。系统应在凭据提供器层监听设备拔除事件,触发立即锁屏(或结束会话):

# 伪命令:监听 USBKey 拔除并锁屏
On-Device-Remove:
    if session.active and factor == USBKey:
        lock-screen --force
        audit.log(event="key_removed", user=current, time=now, result="locked")

这既防止了操作员离开后被他人顶替操作,也满足等保里"空闲退出"的控制项。

五、断网降级:从在线策略到本地策略

很多人误以为"离线"就是简单地把后台校验砍掉。实际上,健壮的离线身份体系是"在线为主、离线托底"的双模:

阶段联网时断网时
策略来源平台统一下发本地缓存策略
因子校验本地执行 + 平台复核本地执行
日志处理实时上送 + 本地留存本地留存,恢复后补传
应急手段OTP/后台解绑离线应急 OTP / 本地管理员密钥
举证依据平台日志 + 终端日志终端本地日志(哈希链)

关键点有两个:

  1. 策略有版本、可降级。平台下发的策略带版本号,终端持久化到本地。断网后哪怕平台策略已更新,终端仍按最近一次已知策略运行,保证业务不中断;网络恢复后再做差异同步。
  2. 应急通道必须离线可用。例如离线应急 OTP:管理员在平台生成一批一次性口令(或基于预共享种子的时间因子),终端本地校验,即便认证服务器完全不可达也能放行授权人员。

以安当SLA为例,单机部署模式下策略与日志完全在终端闭环,联网/SaaS 模式则在此基础上叠加平台集中管控,三种部署(单机 / 联网 / 平台)共享同一套登录凭据提供器,终端侧代码无需改写——这正是"单机起步、平滑扩展到平台"的工程价值,而不是靠后期打补丁拼出来的能力。

六、交易留痕与审计举证闭环

身份核验只是第一道门,真正让监管放心的,是每一次操作都"说得清"。

6.1 全链路审计的事件模型

终端应记录三类事件,且全部打上不可抵赖的标识:

事件类型必记字段说明
认证事件用户ID、因子类型、设备ID、时间、结果谁、用什么凭证、过没过
操作事件用户ID、功能模块、动作、时间、结果进了哪个菜单、点了什么
交易事件用户ID、业务单号、金额/敏感项、时间、签名办了什么业务、留痕可举证
// 审计记录结构示例
audit_record {
    seq_no:       递增序号
    ts:           可信时间戳(本地时钟 + 平台授时校准)
    device_id:    终端硬件指纹
    user_id:      操作员标识
    event_type:   AUTH | OPERATE | TRADE
    payload:      业务相关字段(脱敏)
    prev_hash:    上一条记录哈希
    signature:    本记录哈希 + 设备密钥签名
}

6.2 防篡改:哈希链 + 签名

单条日志容易被改,所以终端日志应按时间顺序串成哈希链:每条记录包含前一条记录的哈希值,自身再被设备私钥签名。任何对历史记录的增删改都会破坏链条一致性,取证时一验便知。配合国密 SM3 摘要与 SM2 签名,可满足等保 2.0 对"审计记录完整性保护"的条款。

6.3 举证闭环:从本地到可提交

真正的举证闭环要能回答监管的几个问题:

  • 可导出:断网期间产生的日志,在恢复连接后能否原样导出、补传、对账?
  • 可核验:导出的日志是否带签名、能否独立验证未被篡改?
  • 可追溯:每笔交易能否对应到具体的操作员、终端、时间点、凭证类型?

实现上,终端在本地维护哈希链日志,联网后由平台拉取或通过可信介质(加密 U 盘)导出。平台侧用设备公钥验证签名链,确认日志自生成起未被改动,再与业务系统的交易记录做交叉核对。这样一来,"断网办的业务的日志"与"联网后补传的日志"是同一份、未被重写过的,举证才站得住脚。

七、自助终端的适配要点

把上述能力落到 ATM、政务一体机上,还要处理几类终端特有的问题。

7.1 操作系统与国密支持

自助终端底层 OS 繁杂:Windows 7–11 与 Server 系列仍占存量,CentOS/Ubuntu 在新型一体机增多,麒麟 V10、统信 UOS 等国产系统在政务场景成为硬要求。第二因子方案必须能在这些系统上以统一方式嵌入登录流程:

  • Windows:凭据提供器(Credential Provider)注入;
  • Linux:PAM 模块 + 登录管理器集成;
  • 国产 OS:适配其安全模块接口与国密栈。

国密支持不是可选项。等保 2.0 与密评要求重要信息系统使用合规密码算法,USBKey 内的密钥运算、日志签名、模板加密都应走 SM2/SM3/SM4,而不是沿用国际算法。

7.2 外设与登录流程的衔接

指纹采集器、掌纹仪、USBKey 读卡器要通过标准驱动或 SDK 接入凭据提供器。难点在于"登录前"阶段外设尚未进入用户会话,因此驱动与匹配逻辑必须运行在系统级服务里,而非某个用户态应用。这也是为什么必须把因子校验放在操作系统登录层,而不是应用层弹窗——后者根本拿不到登录前的系统上下文。

7.3 单机到平台的扩展路径

很多政务项目从一两台试点终端起步,不可能一开始上全套平台。合理的演进路径是:

  1. 单机模式:策略本地配置,日志本地留存,满足基本离线核验与留痕;
  2. 联网模式:加入平台,策略统一下发、日志集中归集;
  3. 平台模式:多网点、多终端统一身份治理、集中审计、跨域举证。

终端侧逻辑保持一致,区别只在"策略从哪来、日志往哪去",避免重复开发。

八、运维与应急的实战经验

再好的设计,也要经得起现场运维的折腾。几条来自真实部署的经验:

  • 时钟校准:哈希链与时间戳依赖可靠时钟。终端应定期从平台或可信时间源授时,断网久时会漂移,需在恢复后做时间一致性校验,避免日志时间错乱影响举证。
  • 应急 OTP 的生命周期:离线应急口令要有有效期和单次性,平台侧记录已用口令,防止口令被截获后反复使用。
  • 密钥轮换:USBKey 与终端签名密钥应支持定期轮换,丢失设备的密钥能及时吊销,且不破坏历史日志的验签(历史记录用当时有效密钥签名,平台保留对应公钥版本)。
  • 日志容量:自助终端常 7×24 运行,日志需滚动归档与压缩,关键哈希链头要持久保存,避免覆盖导致举证断链。

8.1 认证失败率与防暴力破解

离线核验的另一面是被攻击者在本地面对面尝试。USBKey 有 PIN 重试次数锁定,指纹有错误接受率上限,但 OTP 和口令在本地若不做限流,可能被穷举。终端应在凭据提供器层实现失败计数与渐进延迟:连续 N 次失败后锁定该因子的本地校验一段时间,或要求上升为双因子组合。锁定状态同样写入审计日志,便于事后判断是否有针对性的破解企图。注意,锁定策略必须本地生效,不能依赖后台实时判定,否则断网时这道防线就消失了。

8.2 功耗与外设唤醒

政务一体机多为插电设备,功耗压力小;但移动指挥车、便携式自助终端靠车载或蓄电池供电,指纹采集器、掌纹仪的常亮会显著拉高功耗。工程上应让外设在无操作一段时间后进入低功耗待机,唤醒时由登录事件触发,而非持续轮询。同时要验证从待机唤醒到完成一次指纹核验的端到端耗时,避免"省了电却卡了体验"。这条看似边缘,却常常决定现场人员是否愿意真正使用强身份核验,而不是绕过去。

8.3 多操作员轮班的会话隔离

一个网点的一台终端,往往由多名操作员分班次使用。每次交接必须强制重新认证,不能沿用上一个会话。正确做法是操作员交班时主动锁屏或注销,下一班次插入自己的 USBKey / 指纹重新通过第二因子才建立新会话;系统记录"会话 A 结束、会话 B 开始"及各自的操作员标识,使后续的交易事件能准确归属到当班人。轮班不清、会话混用,是审计归属出错的高发区,必须在终端策略层面强制而非靠制度提醒。

九、常见误区辨析

  • 误区一:离线=不安全。恰恰相反,离线核验把敏感生物特征留在终端内,反而减少了网络传输面。安全边界从"后台一道门"变成了"终端本地强鉴别 + 后台复核"的双重结构。
  • 误区二:生物识别=万无一失。指纹有误识率、有被复制风险。正确做法是生物因子搭配持有因子(USBKey)做组合校验,并对不确定区间触发第二因子复核。
  • 误区三:审计=存日志。存了不等于能举证。日志必须防篡改、可签名、可独立验证、可交叉核对,否则在争议发生时毫无说服力。
  • 误区四:先业务后安全。把身份核验放在应用层补丁式实现,后期要为每个业务系统单独改造。从操作系统登录层统一收口,才是低成本、高一致性的正解。

方案参考

针对金融与政务自助终端的离线身份核验与交易留痕,给出一套通用落地建议,供选型与实施参考:

选型要点

  1. 因子组合看场景:高频操作选指纹/掌纹提效率;高敏感操作加 USBKey 双因子;断网应急必配离线 OTP。不要让单一因子承担全部风险。
  2. 必须本地化校验:核验逻辑与特征模板要在终端本地完成,不依赖实时后台,这是断网可用的前提。
  3. 国密合规优先:密码算法、密钥存储、日志签名全程走合规算法,满足等保与密评。
  4. OS 覆盖要全:确认方案能覆盖你实际在用的 Windows、主流 Linux 发行版与国产操作系统,避免试点一套、推广另一套。
  5. 审计要可举证:日志必须是哈希链 + 签名结构,能独立验证、能导出对账,而不只是"系统里有记录"。

实施步骤

  1. 资产与合规梳理:列出终端型号、操作系统版本、网络拓扑、等保级别,明确哪些业务属于高敏感交易。
  2. 因子策略设计:按业务风险分级,定义每类终端的因子组合与不确定区间的复核规则。
  3. 试点单机部署:先在少数终端做单机模式,验证指纹离线识别率、设备绑定、拔 Key 锁屏、本地日志哈希链。
  4. 断网演练:主动切断网络,验证核验照常、应急 OTP 可用、日志本地留存且不断链。
  5. 平台接入:试点稳定后接入集中管控,统一下发策略、归集日志、做交叉核对与举证演练。
  6. 运维手册与应急流程:编写时钟校准、密钥轮换、口令生命周期、日志归档的标准作业,纳入日常巡检。

风险与对策

  • 网络恢复后的日志一致性:采用哈希链 + 平台验签,恢复后补传并校验,杜绝重复或篡改。
  • 设备丢失:支持密钥远程吊销与本地管理员密钥应急解绑,历史日志仍可由平台公钥验证。
  • 算法升级:保留多版本公钥,旧日志用旧密钥验签,新记录用新密钥,平滑过渡。

离线身份核验与审计举证,本质是把"信任"从网络搬回到终端与凭证本身。只要坚持本地校验、设备人员绑定、哈希链留痕、断网托底这四件事,自助终端即便长期脱离后台,也能做到身份可信、操作可溯、举证可立。

Logo

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

更多推荐