news 2026/9/3 6:24:19

CBTC信号系统安全:一文讲透车载ATP认证与信号系统访问控制,收藏这篇就够了

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CBTC信号系统安全:一文讲透车载ATP认证与信号系统访问控制,收藏这篇就够了

地铁车辆段信号车间,凌晨两点的作业窗口。工班长把维护 UKey 插进 ATS 维护工作站,输入口令,屏幕弹出一个账号下拉框——这个账号是五家厂商驻场工程师共用的。旁边那台给车载 VOBC 灌升级包的电脑,U 盘拷进去直接刷,没人校验签名。信号是 SIL4 的安全系统,可管着它的人,认证还停在"共用口令 + 口口相传"。

这是不少线路信号机房的常态,直到密评专家把报告拍在桌上:设备和计算层面,身份鉴别不满足;应用和数据层面,软件完整性没有密码保护,限期六个月整改。

这次整改,答案通常落在一对组合上:安当 ASP 统一身份认证平台管"谁能进",KSP 密钥管理系统管"钥匙在哪"。后面所有章节,都是这对组合在信号系统里的具体展开。

这篇把"信号系统的身份认证与访问控制"讲透:从 CBTC 整体结构讲起,说到车载 ATP 为什么需要身份、轨旁怎么认证、密钥存在哪、升级包怎么签,最后给一套能直接对着验收的方法。

目录

  • 01 CBTC 这张图:五子系统、三张网、SIL4
  • 02 车载 ATP 的"身份"问题
  • 03 轨旁这扇门:维护网、ATS 工作站与运维认证
  • 04 密钥管住才叫真安全
  • 05 升级包签名与配置防篡改
  • 06 一个整改案例(已脱敏)
  • 07 三种认证方式怎么选
  • 08 验收清单:每条怎么证明做对了
  • 09 往后五年信号安全往哪走

01 CBTC 这张图:五子系统、三张网、SIL4

先把 CBTC 的整体结构画出来,后文所有问题都落在这张图上。

CBTC(Communication Based Train Control)由五大子系统构成:

  • ATS(列车自动监控):调度员的工作台,时刻表、进路、列车位置都汇到这里;
  • ATP(列车自动防护):安全核心,超速防护、追踪间隔、冒进防护,防护逻辑不落地就直接紧急制动;
  • ATO(列车自动运行):站间自动运行、停车对标;
  • CBI / ZC(计算机联锁 / 区域控制器):联锁进路安全,并给列车计算移动授权 MA;
  • DCS(数据通信系统):车地之间的无线通道。

按作用划分,信号系统内部通常分成三张网:承载安全控制的列车控制网、供运营调度的信息管理网、以及检修用的维护监测网。安全网和管理网、维护网之间靠安全网关隔开——这是第一个"边界"。设备内部,信号系统按 SIL4(安全完整性等级四级)设计,车载和轨旁设备双系冗余,单系故障不降级。

城市轨道交通信号系统通用技术条件(GB/T 12758-2023)、网络安全等级保护 2.0(GB/T 22239-2019)三级,以及密码应用基本要求(GB/T 39786-2021)里,针对信号系统的"认证与访问控制"大体落在四个层面:

层面对应场景
网络和通信车地无线通信、安全网与管理网互联、远程维护通道
设备和计算ATS 工作站、维护终端、车载调试口的身份鉴别
应用和数据升级包完整性、配置文件防篡改、操作日志防抵赖
密钥管理车载/轨旁密钥的生成、分发、存储、轮换

把密码组件放上去,整体拓扑是这样的:

轨旁

车载

SM4 会话加密
双向认证

工作密钥下发

车载 VOBC
ATP / ATO

车载安全芯片
存工作密钥

区域控制器 ZC

ATS 调度工作站

维护终端

ASP
统一身份认证

UKEY

KSP
密钥管理系统

HSM
信任根

KSP 内置 CA 组件
升级包签名

后面的章节就按这个坐标展开。

02 车载 ATP 的"身份"问题

车载 ATP 和轨旁 ZC 之间是一条实时闭环:列车把自己的位置、速度报告上去,ZC 算好移动授权 MA 发下来,一个周期 100~300ms,量大、实时、延敏感。

这条闭环上的"身份",至少出现在四处:

  1. 列车报自己身份——“我是 0305 车”,ZC 凭什么相信?这是设备身份,靠车地共享密钥;
  2. ZC 下发移动授权——列车凭什么相信这条 MA 是合法 ZC 算的,不是伪基站伪造的?这是车地双向认证的另一半,最容易漏;
  3. 软件写进 VOBC——升级包要写进车载控制器 BOOT 区,凭什么证明这是厂商签过字的版本?这是软件完整性;
  4. 人接 VOBC 调试口——维护人员拿笔记本接车载调试口,凭什么证明这人有权限?这是人的身份。

双向认证这块,不少线路第一轮密评就栽在这:只做了"车认地",没做"地认车",或者两边会话密钥各自为政、从不轮换。标准的做法是:列车与 ZC 各持工作密钥,同一条线路、同一设备的密钥从 KSP 按规范派生,车地通信加密用 SM4 会话密钥,带版本号、按周期更新,旧版本归档、新版本上线。根密钥躺在硬件密码机里,工作密钥下到车载安全芯片这一段由密钥管理系统统一走,中间不出现任何明文交换——密钥泄漏的时间窗被压到可控范围。

一套这么跑下来的会话密钥模型,可以对照 GB/T 39786-2021 的"网络和通信安全"层面逐条核,密评专家挑不出毛病。

03 轨旁这扇门:维护网、ATS 工作站与运维认证

轨旁的认证问题比车载更常见,也更难管,因为人多人杂:信号维护员、ATS 值守、厂商驻场、项目调试,高峰期一个维护网里同时挂着几十个人。

现场最典型的三类问题:

  • 共享账号:一个账号五个人用,离职了不销号;
  • 默认口令:厂商交付时留下的口令没改,设备手册网上能搜到;
  • U 盘拷升级包:维护网和互联网物理隔离,厂商工程师就靠 U 盘带软件,病毒和越权文件跟着一起进来。

密评的"设备和计算"层面,对管理终端和运维终端的要求很明确:身份鉴别要采用双因素,一个因素是口令,另一个必须是物理凭证。对信号维护这种场景,物理凭证基本就是 UKEY——国密 SM2/SM3/SM4 的智能密码钥匙,私钥固化在芯片里导不出来,人走钥走,即时吊销。

落地时的关键,是把"几把钥匙"变成"一套认证体系"。光发 UKey 不够,还要有个身份源把所有终端的登录统一管起来。安当 ASP 在这个位置干的活是:把 ATS 调度工作站、信号维护终端、车载调试口的登录全部收编,身份源对接 AD / 现有组织架构,人员离职、转岗、借调,账号跟着人事流程自动动,而不是靠人工删。

ATS 调度工作站走 OIDC 授权码流程,把登录交给 ASP:

# 1) 调度员浏览器跳转到 ASP 认证页 GET https://idp.local:8001/authorize ?response_type=code &client_id=ats-ws &redirect_uri=https://ats-ws.local/callback &state=nonce-20260831 # 2) 插 UKEY 双因素认证通过,ASP 回跳带着授权码 # callback?code=xxxx&state=nonce-20260831 # 3) 后端用授权码换 token POST https://idp.local:8001/token Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=xxxx &client_id=ats-ws&client_secret=******

维护终端这类老系统不好改的,用 RADIUS 对接或者表单代填。UKEY 那侧,签名挑战-应答是推荐方式:服务端下发随机数,钥匙用私钥签名,服务端用公钥验签。UKEY 的 RESTful 服务跑在终端本地 2300 端口,流程大致是这样(字段以接口文档 2.0.1 为准):

importrequests UK="http://127.0.0.1:2300/api/"defcall(interface,params=None):r=requests.post(UK,json={"interface":interface,"params":paramsor{}},timeout=5)returnr.json()# 1. 列出本机钥匙 -> 2. 校验 PIN -> 3. 对挑战随机数签名dev=call("GetDeviceList")["data"][0]call("VerifyUserPIN",{"pin":"******","key_id":dev["key_id"]})challenge="5f6a3c81..."# 服务端下发的随机数sig=call("GetECCSignData",{"key_id":dev["key_id"],"data":challenge,})["data"]# 服务端拿到公钥做 SM2 验签,通过才允许登录 ATS 工作站

核心一点:私钥永远不离开钥匙本身,PIN 只负责"钥匙是本人在用"。几把钥匙、几十把钥匙的时候看不出差别,一条线路全线几百把钥匙,全靠身份源台账撑着。

04 密钥管住才叫真安全

认证解决"谁在操作",密钥解决"数据怎么保护"。信号系统里的密钥比想象中多:车地通信的会话密钥、车载/轨旁设备的工作密钥、升级包签名的签名密钥、证书体系的 CA 密钥。散在厂商手里各自保管,是最常见也最要命的问题——你问三家中标厂商密钥在哪、多久轮换、谁有导出权限,能收到三份互相打架的回答。

集中管理按三级密钥体系来拆,安当 KSP 就是这么组织的:

  • 根密钥 KEK:只存在安当 HSM 硬件密码机里,永不明文导出,是整条信任链的根;
  • 工作密钥 DEK:被 KEK 加密保护,按设备、按线路派生,一钥一用;
  • 会话密钥:车地通信每次会话协商,用完即销毁。

车载和轨旁的工作密钥分开派生,同一条线的不同列车也用不同密钥,任何一把钥泄漏,炸开的范围可控,不会一路通到整条线的密钥体系。

密钥轮换要能落地而不是写在制度里:到期自动轮换、版本递增、旧版归档、轮换记录可审计。KSP 的 RESTful 接口响应在百毫秒级,对信号控制网是透明的——它管密钥,不碰 100ms 的实时控制回路。密钥操作日志逐条带数字签名防篡改,使用者、管理员、审计员三权分立,谁也别想偷偷导出一把钥。

铁路的 CTC(调度集中系统)在电务端遇到的是同一件事:CTC 中心机房的密码资源、电务检修终端、调度员工作站,密钥同样要集中管,别以为换了个系统就能绕开这一套。

05 升级包签名与配置防篡改

这是"应用和数据"层面的重灾区,也是整改里最好量化的部分。

车载 VOBC 和轨旁 ZC 的软件升级包,过去靠人工核对版本号、看 U 盘里的文件名。改名伪造的成本几乎为零。正确的做法是:厂商在 CI 流水线里用签名密钥对升级包做 SM2 签名,现场写入前验签,验签失败直接拒绝写入。证书与签名密钥由安当 KSP 内置的 CA 组件签发和托管,签名私钥存在 HSM 里,厂商自己的 CI 拿不到明文私钥,只能通过签名服务接口调用——"签名的资格"也被收编进密码体系了。

Go 实现直接用 tjfoc/gmsm 的包级接口,它按 GB/T 32918 自动把用户标识 ZA 拼进摘要,不用自己处理:

packagemainimport("encoding/hex""fmt""github.com/tjfoc/gmsm/sm2")// 厂商 CI 侧:对升级包做 SM2 签名(内部按 GB/T 32918 计算 ZA‖M 摘要)funcsignPackage(priv*sm2.PrivateKey,pkg[]byte)string{sig,err:=sm2.Sign(priv,pkg,[]byte("1234567812345678"))iferr!=nil{panic(err)}returnhex.EncodeToString(sig)}// 现场:验签,篡改一个字节即失败funcverifyUpdate(pub*sm2.PublicKey,pkg[]byte,sigHexstring)error{sig,err:=hex.DecodeString(sigHex)iferr!=nil{returnerr}if!sm2.Verify(pub,pkg,[]byte("1234567812345678"),sig){returnfmt.Errorf("upgrade package signature invalid")}returnnil}

签名方和验签方必须用同一个用户标识,生产环境统一约定为 GB/T 32918 默认的1234567812345678。这段代码可以拿任意升级包本地跑一遍:哪怕只改一个字节,SM2 验签必然失败——这就是"可当场证明"的整改成果。

配置文件同理:线路电子地图、ATP 参数、ATS 时刻表,这类文件的完整性也要求密码保护。防篡改可以靠签名,也可以靠关键日志的数字签名:操作日志、密钥操作日志逐条签名,事后想抹掉一条记录改不出来,直接回应密评对"日志防抵赖、防篡改"的要求。

06 一个整改案例(已脱敏)

下面这条是近两年多条线路密评整改实践的整合,已做脱敏处理,别对号入座——但每个问题,你大概率在某条线路上见过。

背景:某已运营多年的地铁线路,2025 年密码应用安全性评估(密评)没有通过。问题高度集中在设备和计算、应用和数据两个层面:ATS 维护工作站与信号车间终端全部使用共享口令,无第二因素;车载 VOBC 与轨旁 ZC 的软件升级包上线不校验签名,靠人工核对;车载和轨旁密钥由各厂商分散保管,无集中管理台账,轮换靠口头约定。密评结论是多个"不符合",限期六个月整改。

实施分三步走:

  • 终端认证:部署安当 ASP + 安当 UKEY,信号维护人员和厂商驻场工程师一人一证一钥,强制双因素登录 ATS 工作站与维护终端;身份源对接人事组织架构,离职、转岗即时销户,共享账号全部拆除;
  • 密钥集中:KSP 对接 HSM 建立三级密钥体系,根密钥硬件化;车载与轨旁工作密钥按线路、按设备派生,一钥一用,到期自动轮换,密钥操作全量审计;
  • 软件签名:车载 VOBC 软件与轨旁 ZC 配置包纳入 CA 签名,升级前 SM2 验签,验签失败拒绝写入;操作日志逐条签名防篡改。

结果:整改项全部闭环,密评复测通过。共享账号清零,身份台账和真实人员一一对应;一次厂商越权版本下发在测试环节被验签逻辑直接拦下,没有进到正线设备;密钥操作审计从"查无记录"变成"逐条可回溯"。

信号系统再特殊,把密评"不符合"项逐个改成"符合",走的就是这一套。数据口径来自整改汇报,最终验收以密评机构出具的报告为准。

07 三种认证方式怎么选

轨旁终端的认证方式,现场主要就三种,配上选择逻辑:

认证方式安全性成本落地难度适用场景
静态口令最低不再建议,仅作应急兜底
动态口令 OTP外部厂商临时接入、低频操作
UKEY 双因素中高信号维护、ATS 调度核心终端
UKEY + CA 证书最高较高车载/轨旁关键操作、远程维护通道

一句话选型:核心终端上双因素,重要操作加证书,临时接入给动态口令,静态口令从制度上清掉。别在"认证强度"和"操作效率"之间反复纠结——维护窗口就几分钟,一把 UKey 插入、输 PIN、完事,多花的时间按秒计,换回来的是账号可审计。

08 验收清单:每条怎么证明做对了

信号系统密评整改到底做没做对,不用听谁讲,照着这几条当场验:

  • 终端认证:抽查任意 10 台 ATS 工作站与维护终端,确认无共享账号、无默认口令,双因素强制生效;身份台账与在岗人员一一对应,离职账号已注销。
  • 密钥管理:确认根密钥在 HSM 内、导出权限为 0;KSP 密钥操作日志逐条带数字签名,轮换记录可查时间、操作人、版本号。
  • 升级包签名:拿任意升级包跑一遍 SM2 验签;手动改一个字节,验签必须失败——这一步 5 分钟就能演示。
  • 车地通信:抓包确认会话密钥加密生效、密钥按周期更新,并确认加解密没有拖累列车控制周期。
  • 审计与防抵赖:操作日志无法被修改或删除(签名防篡改),关键操作可追溯到人、钥匙、时间、终端四元组。

09 往后五年信号安全往哪走

几个趋势值得提前布局:

  • 车地通信从 WLAN 向 LTE-M 演进,铁路侧则走向 5G-R,加密能力要从专用通道往标准化方向走,低时延和高安全要同时给;
  • 一证一钥全面替代共享账号,零信任的思路会进到信号系统,"人-钥匙-终端-操作"全链路可审计成为标配;
  • 密码服务集约化,多线路、多车站的密钥管理收敛到市级统一密码服务平台,复用 KSP/HSM 资源,降低每线建设成本;
  • 后量子密码(PQC)预研,信号设备生命周期长(动辄十几年),现在上线的密码体系要留好算法迁移的口子;
  • 密评常态化,密码应用从"补课整改"变成系统设计的内生约束,而不是验收前的最后一课。

铁路 CTC 前面已经提过,是同一套东西——调度员工作站认证、CTC 中心机房密码资源、电务检修终端管理,只是把 ATS 换成 CTC,把地铁场景换成铁路场景。轨交和铁路的信号安全,边界不同,底下的密码逻辑是通的。


这篇是「轨道交通信号安全」系列第一篇。下一篇《地铁 AFC 票卡密钥管理:从票卡密钥注入到清分系统数据安全全链路》会讲透票卡这条线——同样是密钥,票卡和信号是两种完全不同的玩法。

信号系统整改的清单就这几张表,收藏下来对表用。系列持续更新,关注不迷路。

文章作者:安当加密-焱垚

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 6:23:34

C++逆向工程:深入解析条件判断的底层实现与实战修改

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 6:22:07

2026年电赛预测:AIoT、RISC-V与嵌入式系统设计备赛指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 6:19:08

C++大型项目工程精讲:CMake完整实战、静态库动态库、模块化拆分、单元测试、gdb调试、性能工具、工程踩坑全解

前言 前面我们完成了高并发 WebServer 网络项目,代码全部堆在少量头文件与源文件中。 真实企业 C 后端项目不会把全部代码写在少数几个文件,需要:模块化拆分、库封装、构建管理、单元测试、调试定位 bug、性能分析。 聚焦C 工程化能力&…

作者头像 李华
网站建设 2026/9/3 6:16:42

STM32 SPI+DMA高效驱动WS2812B LED灯带:原理、代码与避坑指南

简介:本资源是面向STM32F103C8T6初学者与嵌入式进阶开发者的WS2812B灯带高效驱动方案,聚焦解决传统GPIO模拟时序响应慢、CPU占用高、易受中断干扰等痛点。采用SPIDMA硬件协同方式精准复现WS2812B单线归零码时序,显著提升刷新率与稳定性&#…

作者头像 李华
网站建设 2026/9/3 6:16:28

慢SQL自动发现与闭环处理

文章目录每日一句正能量1. 背景与问题2. 环境与数据3. 复现过程4. 方案实施执行计划对比5. 结果对比6. 风险与复盘7. 常见问题与排查问题一:索引未生效问题二:采集遗漏问题三:工单误报每日一句正能量 每一次微小的前进,都在加固你…

作者头像 李华
网站建设 2026/9/3 6:16:27

STM32F103C8T6驱动WS2812B:SPI+DMA硬件时序方案详解

简介:本资源是面向STM32F103C8T6初学者与嵌入式进阶开发者的WS2812B灯带高效驱动方案,聚焦解决传统GPIO模拟时序精度低、CPU占用高、易受中断干扰等痛点。采用SPIDMA硬件协同方式精准复现WS2812B单线归零码时序,显著提升刷新率与稳定性&#…

作者头像 李华