首页 › deep-tech › 密钥的家谱:一棵树管住整张网

密钥的家谱:一棵树管住整张网

一、从酒店房卡说起

住过酒店的人都知道这套流程:你入住时,前台不会把整栋楼的万能钥匙交给你,而是当场给你刷一张房卡。这张卡只能开你自己的房间,退房即失效;保洁员拿的是楼层卡,只能开她负责的那一层;真正能开所有门的母卡,锁在保险柜里,一辈子不出保险柜。

这套设计聪明在哪?丢了房卡,损失半径只有一间房。你不用换整栋楼的锁,前台重刷一张卡就完事。而且房卡本身永远不会“泄露”母卡——就算把房卡拆开研究一辈子,也推算不出母卡长什么样。

5G网络里的密钥体系,就是照着这个思路搭的:一棵树。树根是永不外传的长期秘密,树干和树枝是层层派生出来的子密钥,越往叶子走,钥匙越“具体”、越“廉价”、越“可丢弃”。叶子被偷了,烧掉这片叶子就行,树根毫发无伤。

今天这篇文章,我们就把这棵树从根到叶完整走一遍:它为什么长成这样、每一层钥匙住在哪里、派生是怎么算的、手机移动时这棵树怎么跟着“换枝”。

二、为什么要长成树:三个设计动机

先想一个反问题:为什么不干脆用一把大密钥,所有网元、所有信令、所有数据都用它加密?

答案藏在三个词里。

动机一:根密钥永不旅行。 用户的长期根密钥K,在整个生命周期里只存在于两个地方——手机里那张防篡改的USIM卡,和归属运营商网络里的认证凭据库(标准里叫ARPF的那个角色)。它从不通过任何接口传输。只要它不出门,再强的窃听者也只能拿到它的“影子”。但如果全网都直接用K加密,那K就必须出现在基站里、AMF里,等于天天把保险柜扛着满街跑。

动机二:限制爆炸半径。 网络里位置越低、数量越多的网元,物理暴露风险越大——一个装在电线杆上的小基站,被人拆走灌恶意软件的可能性,远大于核心网机房里的AMF。所以设计原则是:每个网元只拿到它干活所需的那把钥匙,多一把都不给。基站被攻陷,损失被锁死在空口那一层;核心网信令的钥匙,它连见都没见过。

动机三:单向阶梯。 树上每一把子密钥,都是从父密钥经过单向函数算出来的。单向意味着:拿到子钥,推不出父钥;拿到弟弟,推不出哥哥。这就是密码学里的“密钥分离”(key separation)——同一棵树上的钥匙互相隔离,一把泄露不会顺着树枝爬回去。

三个动机合起来,就是树的形态。这不是标准委员会的审美偏好,而是对“网络必然有薄弱环节”这个现实主义的工程回答:承认会丢钥匙,所以提前设计好丢了以后怎么办。

三、这棵树长什么样

先上全景图。从根到叶,每一级都标了这把钥匙“住”在哪:

flowchart TD
    K["根密钥K<br/>只住在USIM和归属网"] -->|卡内算出| CKIK["CK与IK<br/>鉴权中间产物"]
    CKIK -->|归属网内派生| KAUSF["Kausf<br/>留在归属网"]
    KAUSF -->|绑定服务网名字| KSEAF["Kseaf<br/>交给拜访网的锚钥"]
    KSEAF -->|派生并绑定AMF| KAMF["Kamf<br/>全树的分岔口"]
    KAMF -->|非接入层加密| KNASE["Knasenc"]
    KAMF -->|非接入层保真| KNASI["Knasint"]
    KAMF -->|只发子钥给基站| KGNB["Kgnb<br/>锚在基站"]
    KGNB -->|RRC信令完整性| KRRCI["Krrcint"]
    KGNB -->|RRC信令加密| KRRC["Krrcenc"]
    KGNB -->|用户面加密| KUPE["Kupenc"]
    KGNB -->|用户面完整性可选| KUPI["Kupint"]

把每位“家族成员”点名一遍:

密钥 诞生在哪 谁长期持有 保护什么
K 开卡时写入 USIM + 归属网凭据库 一切之根,永不上路
CK / IK 卡内鉴权时算出 卡内与归属网 用来推出上层锚钥
Kausf 归属网派生 归属网AUSF 锚钥的父本
Kseaf 归属网确认后交付 服务网SEAF 服务网侧的总闸
Kamf 由Kseaf派生 AMF(永不下发) 树的分岔口
Knasint / Knasenc AMF派生 AMF与手机 注册、寻呼响应等NAS信令
Kgnb AMF用NAS计数派生 gNB 整个空口分支的根
Krrcint / Krrcenc gNB派生 gNB与手机 RRC信令(完整性强制)
Kupenc / Kupint gNB派生 gNB与手机 用户面数据(完整性可选,5G新增)

这张表里有几个值得停下来看的细节:

第一,Kamf是全树的分岔口,但它永远不离开AMF。 它分出两支完全独立的分支:一支是NAS分支(手机到核心网的控制信令),留在AMF里;另一支是Kgnb,AMF用“上行NAS计数”当作新鲜度材料,从Kamf里榨出这一把,只把Kgnb发给基站。于是一个关键性质成立了:基站被黑,攻击者拿到的是Kgnb和它下面的叶子,而NAS信令的钥匙它根本没见过——核心网侧的信令对被攻陷的基站是保密的。这就是“密钥分离”最直观的价值:NAS钥匙进不了无线网,空口钥匙进不了核心网。

第二,越靠叶子,钥匙越“一次性”。 根密钥K可能伴随一张卡十年;而叶子层的空口密钥,每次切换小区都会换。高频更换降低了单把钥匙暴露的时间窗口,也让“用了很久的老密钥”这种密码学大忌无从谈起。

第三,Kupint是5G才有的新成员。 4G的用户面数据只有加密、没有完整性保护——攻击者篡改数据包你发现不了。5G给用户面也配了完整性钥匙,虽然是可选功能,但树的位置已经留好了。

四、派生的手艺:一台榨汁机,一种配方

树上每一条箭头,都是同一次函数调用。这个函数叫密钥派生函数(KDF),核心就是HMAC-SHA256——一把以“父密钥”为钥匙、以“配方单”为输入的单向哈希:

$$K_{child} = \text{HMAC-SHA256}\big(K_{parent},\ S\big)$$

配方单S的结构很讲究:

$$S = FC \,|\, P_0 \,|\, L_0 \,|\, P_1 \,|\, L_1 \,|\, \cdots$$

FC是一个字节的“用途编号”,标明这次派生是哪一种(派锚钥、派AMF钥、派基站钥,各有一个专属编号);后面跟着若干参数块,每个参数都自带长度标签。整个设计有两个巧思:

巧思一:用途隔离。 哪怕两把父钥相同、参数凑巧一样,只要FC不同,产出的子钥就毫无关系。同一个父钥派出来的“NAS加密钥”和“RRC加密钥”在数学上是两串毫不相干的比特——一种算法被攻破,不会殃及另一种用途。

巧思二:上下文绑定。 派生时掺进去的不只是父钥,还有各种“场合信息”:服务网络的名称、用户永久标识、NAS计数、算法编号、目标小区的物理标识和频点……掺了上下文,钥匙就和“场合”焊死了。比如锚钥绑定了服务网名字,在某张拜访网里拿到的锚钥,拿到另一张网里去用,鉴权直接对不上号——防盗刷。

整个派生过程可以画成一台榨汁机:

flowchart TD
    P["父密钥<br/>充当HMAC的钥匙"] --> F["KDF单向榨汁机<br/>HMAC-SHA256"]
    FC["用途编号<br/>标明是哪一种派生"] --> F
    CTX["新鲜度与绑定材料<br/>计数 小区标识 算法编号"] --> F
    F --> OUT["子密钥<br/>推不出父钥和兄弟钥"]

还有两个容易被忽略的精妙细节。其一,算法编号本身是派生输入:手机和基站协商换一个加密算法,叶子钥匙就重新派生一遍——同一把Kgnb配上不同的完整性算法,得到的Krrcint是两把完全不同的钥匙。其二,5G在派生Kamf时掺入了一个叫ABBA的参数,作用是防降级:把“双方实际支持的安全特性集合”焊进钥匙里,中间人想诱骗双方退回更弱的特性组合,派生结果就对不上,攻击当场穿帮。

五、密钥的诞生时刻

这棵树是什么时候“发芽”的?在开机注册的鉴权环节。值得强调的是:空口上传输的从来不是任何密钥,而是随机数、挑战值和应答值——真正的密钥是手机和网络两边各自独立计算出来的,算出来的结果必然一致,因为它们共享同一个根和同一张配方。

sequenceDiagram
    participant U as 手机与USIM
    participant A as 服务网AMF
    participant H as 归属网认证中心
    H->>A: 鉴权向量与预期应答
    A->>U: 发起鉴权挑战
    U->>A: 卡内算出的应答
    A->>H: 比对通过
    H->>A: 交付锚钥Kseaf
    A->>A: 逐级派生Kamf与全树
    U->>U: 沿同一路径推出同一套
    Note over A,H: 锚钥只交给验过答案的服务网

这里有个容易误解的地方:鉴权协议(5G-AKA或EAP-AKA')本身经常被当成“密钥体系”来讲,但它其实只是这棵树的助产师——鉴权证明了“手机和归属网共享同一个根K”,鉴权一旦通过,剩下的活全由KDF这台榨汁机完成。手机侧派生密钥的具体时机也有讲究:要等鉴权结果确认、NAS安全模式命令激活之后,整套安全上下文才算正式上岗。工程上抓信令时会看到“鉴权成功”和“安全激活”是两个步骤,就是这个原因。

六、密钥跟着人走:切换就是换枝

树长好了不是终点。手机是要移动的,而移动性对密钥体系提出的考题很刁钻:新基站必须拿到新鲜的钥匙,而且这钥匙不能是旧基站能推算出来的。否则一个被攻陷的源基站,只要守住旧钥匙,就能继续解密用户在新小区的流量——安全防线等于白设。

5G的解法是把基站钥匙的更新做成两条路:

flowchart TD
    HO["切换判决<br/>要挪窝了"] --> Q{"目标基站怎么够到"}
    Q -->|同AMF辖区直接走Xn| HR["横向派生<br/>旧站钥匙推出新站钥匙"]
    Q -->|跨AMF经核心网走N2| VE["垂直派生<br/>取用AMF预存的全新NH"]
    HR --> BX["掺入目标小区标识与频点"]
    VE --> BX
    BX --> NCC["NCC计数随切换令牌下发<br/>手机照方抓药推出同款"]

横向派生:源基站用自己手里的Kgnb直接推出目标站的钥匙。快,但源基站自己知道推法——这一跳谈不上前向安全。适合邻居站之间毫秒级的快速切换。

垂直派生:AMF事先从Kamf往下铺好一条NH链——一串首尾相接的全新密钥材料,每一环都由上一环单向推出,源基站手里没有这条链。切换时从链上取一个没用过的环,掺入目标小区的物理标识和频点,算出目标站的新钥匙。源基站就算被黑透了,也反推不出这条链上的任何一环。前向安全由这一步保证。

区分两条路的机关是随切换信令下发的NCC计数器:手机收到切换命令时看一眼NCC——和本地存的一样,说明走的是横向;比本地的大,说明走了垂直,手机就把NH链往前推几格,推出同样的钥匙。双方无需传任何密钥,一个计数器就完成了“我们对答案”的暗语。

还有一个漂亮的推论:NH链每切一次站往前走一格,所以一个被攻陷的基站,最多两跳之后就彻底出局——它手里的材料再也够不着链条上更远的环。这就是标准用NCC和NH搭出来的“两跳前向安全”承诺。

顺手补充实战里会撞见的一个点:密钥派生输入里掺了PDCP计数,而计数是会绕回的。连接态下如果计数即将用尽,网络不需要真切换,就地做一次“小区内切换”,重派一把Kgnb,计数从新钥匙重新起步。你在现网日志里看到“同站切换”却不带任何移动原因,多半就是这出戏。

七、从4G到5G:这棵树修剪了什么

维度 4G的树 5G的树
层级深度 锚钥Kasme直接落在MME,两级就到基站 Kausf、Kseaf、Kamf多级锚定,逐级绑定
锚钥绑定对象 绑具体MME 绑服务网名字,跨AMF可携
用户面完整性 没有 可选开启Kupint
身份保护 IMSI可能明文上空口 永久标识加密成SUCI再出门
密钥长度 128位 128位在用,层级预留256位空间
归属网参与度 鉴权后基本退场 锚钥始终握在归属网手里

逐条翻译成“为什么”:4G锚钥绑死MME,意味着换MME常常要重新鉴权,漫游场景下拜访网拿到的材料也偏“重”;5G把锚点拆成多级、锚钥绑服务网名字,既让锚钥可以在同一服务网内的AMF之间平滑搬迁,又让拜访网永远只拿到“这个网、这次会话”专用的材料。用户面完整性是4G缺失的一环,5G补上了。密钥长度方面,树干已经按256位在盖,算法可以以后换代,树不用重种。

八、现网里你会在哪撞见这棵树

调试场景一:注册被拒,鉴权反复失败。 实验室用测试卡时,如果USIM里预置的根密钥与核心网侧配置不一致(K或算子密钥对不上),鉴权应答永远算不对,计数器失步还要走重同步流程,失败次数一超限就上永久拒绝名单。记住排查次序:先核对卡密钥配置,再看鉴权向量的序号同步,最后才怀疑算法。

调试场景二:NAS安全模式命令发出后石沉大海。 NAS安全激活是整套上下文的“开闸”动作,手机校验完整性失败会直接不响应。常见原因是算法协商清单与卡的能力不匹配,或者互操作场景中映射上下文的标识(ngKSI)没对齐——这个小小的密钥集标识就是双方指认“我们共用的那套上下文”的暗语,暗语对不上,手机只好重新鉴权。

调试场景三:切换之后上行突然失步。 切换后密钥必然换新,若目标站的安全上下文没就位、NCC没对上,手机和基站就会各算各的钥匙,完整性校验全挂。抓信令看切换命令里携带的NCC值与两侧派生路径,是定位这类问题的标准动作。

调试心态一:抓包“看不到内容”是正常的。 安全激活之后,NAS和RRC消息的净荷都是密文,抓包工具只能看到消息类型和长度。很多人第一反应是“我抓包姿势不对”——不,那恰恰说明安全在工作。你想看明文,得靠设备侧的解密接口或测试工具在密钥落地处还原。

调试心态二:别把“5G更安全”理解成“5G全程加密”。 用户面加密算法可协商,低速率物联网场景甚至可能配到空算法;用户面完整性更是可选项。信令的完整性才是铁律——正常业务里RRC和NAS绝不允许空完整性,真在日志里看到空完整性的信令承载,那是安全故障,不是合法配置。

最常见的误解:以为基站里存着“用户的密钥”。 实际上基站从AMF拿到的只是Kgnb这把“分店钥匙”,用户的根、锚钥、NAS钥匙它一概不知。这也是为什么标准敢把基站大规模地撒到灯杆和楼顶上——密钥的层级结构,就是信任的层级结构。

常见问题

Q: 这棵密钥树和手机APP里的HTTPS加密是什么关系?谁保护谁? A: 两层互不替代。密钥树保护的是“管道”:手机到核心网之间的空口与信令,由运营商部署,任何APP的流量都受益。HTTPS保护的是“端到端”:你的数据从APP服务器到手机全程加密,运营商自己也看不到明文。管道加密防的是链路窃听与信令伪造,端到端加密连运营商一起防。你刷HTTPS网页时,数据其实穿了三层甲:外层空口加密、内层TLS、应用层自有加密。

Q: 用户面加密是可选的,那我不就一直裸奔? A: 不必焦虑。可协商不等于默认关闭——主流网络对手机宽带业务普遍开启空口加密。真正要想清楚的是场景:海量物联网小包设备可能为了省电选弱配置,这类设备本就该按“链路不可信”来设计应用层安全。原则是:空口加密是运营商给的底线防护,关键数据的应用层加密永远自己带。

Q: 运营商能拿到我的根密钥吗?能解密我的一切吗? A: 根密钥写卡时固化在USIM里,网络侧只有凭据库里对应的副本,且只用于卡内鉴权计算,从不在接口上传输。运营商能推进管道、能按流程派生会话密钥,因此在技术上具备解密空口流量的能力——这正是TLS这类端到端加密存在的意义。但“有能力”和“随便用”之间隔着法律与审计,多数国家的运营商无权随意解密用户内容。

Q: 切换换钥匙,视频通话会不会卡一下? A: 不会。横向派生就是源基站的一次本地计算,垂直派生也只是多取一个预置的链环,整个换钥过程与切换信令同步完成,毫秒级、无感。密钥刷新和数据转发的路径接力是并行的两套机制,互不拖累。

Q: 量子计算机来了,这棵树会倒吗? A: 短期不会。树的全套派生都建立在HMAC-SHA256和对称算法上,256位对称密钥对量子攻击的抵抗力远好于公钥体系(量子加速对对称密钥大致是对折,256位折半仍有128位强度)。真正先受冲击的是SUCI身份加密用的椭圆曲线部分,这也是标准化组织已在推进抗量子算法迁移的原因——树的结构不用动,换几片叶子而已。

参考来源

  1. 5G Security Key Hierarchy in 5G NR · 5G NR Notes — 从根密钥K到空口叶子钥匙的完整派生树详解,含NH/NCC切换换钥机制
  2. 5G Authentication and Key Management · Techplayon — 5G-AKA鉴权流程与锚钥逐级交付的步骤拆解
  3. 5G key hierarchy: K → CK/IK → KAUSF → KAMF → KgNB · 5G/6G Academy — 密钥层级课程:父钥加服务网名等输入派生子钥的机制
  4. 5G-AKA, NAS Security, Key Hierarchy and SUCI Concealment · CafeTele — 鉴权、NAS安全激活与上下文标识的工程视角解读
  5. 5G NR Key Derivation Procedure · 3GLTEInfo — 密钥派生流程与信令承载的入门级图解
  6. Introduction to 5G AKA · free5GC — 从开源核心网实现角度拆解5G-AKA协议

本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入