首页 › deep-tech › 密钥五层楼:手机认证体系图解

你的SIM卡里,住着一根永远不出门的钥匙

先讲一个酒店的故事。

你入住一家酒店,前台怎么确认“你是你”?最笨的办法是检查你的身份证——可身份证可能被伪造,复印件更可以随便传阅。聪明的酒店会用另一种思路:不看你出示什么,而是当面考你一道只有真正的持卡人才能答上的题。答对了,就是本人。

移动通信网络验证你的手机,用的正是这套路数,术语叫挑战—应答认证(Challenge-Response)。而支撑这套路数的,是一套层级分明的密钥体系——很多人第一次接触时觉得密钥名满天飞:K、Kasme、Kausf、Kamf、Kgnb……像绕口令。其实你只要把它想象成一栋五层的高楼:根钥匙锁在最底层,每往上一层就派生一把新钥匙,各管一层的门。本文就带你把这栋楼从地基爬到天台,看清4G怎么建楼、5G为什么要把楼加高两层、以及这套设计在现网排障时怎么用。

一、地基:一根永远不出卡的钥匙

整个移动通信安全的基石只有一句话:根密钥K同时存在两处——用户的SIM卡里,和运营商鉴权中心的数据库里——除此之外,全网络任何地方都不存在明文的K。

注意“全网络任何地方”这六个字。空口上没有,回传链路上没有,基站的内存里没有,甚至核心网的网元拿到的都只是K的派生物。K从出厂那一刻起,就只在这两个地方之间“心照不宣”——两边不知道对方是谁,但知道对方一定能做出和自己一样的运算结果。

为什么要把K锁得这么死?因为钥匙一旦出门,就不再是钥匙。2G时代早期有一种SIM卡认证算法(COMP128-1)存在弱点,攻击者通过精心构造的挑战让卡片吐出足够多的运算结果,反推出K,就能克隆出一张“影子卡”——这是移动通信史上著名的克隆卡事件。此后行业立下铁律:K物理封死在SIM卡的防篡改芯片里,卡片硬件设计保证“能算、不能读”。你把SIM卡拆下来接上读卡器,最多能读到国际用户识别码IMSI这类“账号”,但永远读不到那根“密码”K。

这张表概括了根密钥K的“户口”:

属性 说明
存放位置 仅两处:SIM卡安全芯片、运营商鉴权中心
是否出卡 永不。任何接口上都没有明文K
长度量级 128比特
使用方式 作为密钥派生函数的根输入,参与各类运算
更换频率 开卡时写入,终身不变;换卡等于换一把新钥匙

二、挑战—应答:隔空验明正身

K两边都有,但怎么用K证明“我就是持卡人”?直接把K发过去比对?那等于把密码在广播里喊出来。正确的做法是考题认证:

网络生成一个随机数RAND,作为“考题”发给手机;手机里的SIM卡用K对RAND做一组运算,把结果交回去;网络这边用K对同一个RAND做一模一样的运算,比对答案。中间网络上跑的只有随机数和运算结果,K从头到尾没有离开过任何一方的保险柜。窃听者拿到了RAND和应答值也没用——随机数是一次性的,下一轮认证换一个RAND,旧答案作废。

这组运算不是随便设计的,而是一族以AES为基础推导出来的函数集,行业里统称MILENAGE算法族,五兄弟各司其职:

$$\mathrm{MAC} = f_1(K,\ \mathrm{SQN} \oplus \mathrm{AK},\ \mathrm{RAND},\ \mathrm{AMF})$$

$$\mathrm{RES} = f_2(K,\ \mathrm{RAND}),\quad CK = f_3(K,\ \mathrm{RAND}),\quad IK = f_4(K,\ \mathrm{RAND})$$

读法:用K和随机数RAND,f₁算出消息认证码MAC(防伪造),f₂算出应答值RES(验明正身),f₃、f₄算出两把会话密钥CK和IK(认证成功后加密用的),f₅算出匿名密钥AK(专门用来遮蔽序列号)。

这里有三个新角色,逐个说清“为什么要有它”:

SQN(序列号)——防重放。假如攻击者录下了上次认证时网络发的考题,过几天原样重发一遍呢?手机怎么知道这是新题还是旧题重播?靠SQN:网络每发一次考题,序列号加一;手机记着自己见过的最大序列号,收到“旧序列号”就直接判定为重放攻击,拒绝作答。

AK(匿名密钥)——给SQN打码。序列号本身会泄露信息(长期跟踪你的SQN变化规律可以关联你的身份),所以SQN从不裸奔上网,而是和AK做异或后再出门。

MAC(消息认证码)——防伪考题。攻击者能不能自己伪造一份“RAND+假MAC”冒充网络?不能。MAC是K参与算出来的,假考题算不出正确的MAC,手机一验便知。这一步同时完成了双向认证——不只网络验手机,手机也验网络,假基站发不出能通过验证的考题。

把整个流程画出来,这就是4G的附着认证(俗称EPS-AKA):

sequenceDiagram
    participant U as UE与USIM
    participant M as MME
    participant H as HSS鉴权中心
    U->>M: 附着请求
    M->>H: 索要认证向量
    H->>H: 生成RAND并算考卷
    H->>M: RAND、XRES、AUTN、Kasme
    M->>U: 认证请求 RAND加AUTN
    U->>U: USIM验MAC再查SQN
    U->>M: 认证响应RES
    M->>M: 比对RES与XRES
    Note over U,M: 双方各自持有Kasme开始加密

读这张图有个关键细节:HSS下发给MME的不是CK和IK,而是已经派生好的Kasme。为什么?对比3G就明白了——3G时代CK/IK会明文下发到无线网络控制器,散落在网络各处;4G把“派生”这一步收回到归属网络的鉴权中心完成,接入网拿到的只是派生物。派生一层,隔离一层——这个思想在5G被推向极致,下一节细讲。

AUTN这个“考卷封条”由三段拼接而成:

$$\mathrm{AUTN} = (\mathrm{SQN} \oplus \mathrm{AK})\ +\ \mathrm{AMF}\ +\ \mathrm{MAC}$$

注意这里的AMF是认证管理域(Authentication Management Field),一个认证标志位字段——它和5G核心网里那个管理移动性的AMF网元纯属撞名重号,看文档时千万别混。这是工程师的高频踩坑点,后面实战篇还会提到。

三、密钥楼:一次认证,处处派生

认证通过了,CK/IK/Kasme都到位了。问题来了:接下来终端要同时和核心网(信令)、基站(RRC信令)、基站(用户数据)三类对象加密通信,用同一把钥匙吗?

不行。同一把钥匙用得越广,泄露面就越大——基站被攻破,信令密钥跟着遭殃。正确的设计是盖楼:以Kasme为顶层,逐层派生出用途单一、互不相同的子密钥。4G的楼长这样:

flowchart TD
    K["根密钥K<br/>永不出SIM"] --> CKIK["过渡密钥CK与IK"]
    CKIK --> Kasme["顶层密钥Kasme<br/>锚在MME"]
    Kasme --> NAS["NAS信令密钥<br/>护核心网信令"]
    Kasme --> KeNB["接入层密钥KeNB<br/>锚在基站"]
    KeNB --> KRRC["RRC加密与完整性<br/>两把子钥匙"]
    KeNB --> KUP["用户面加密KUPenc"]

这栋楼的建造逻辑只有一条公理:密钥派生函数(KDF)是单向的——由父密钥和公开参数可以瞬间算出子密钥,但反过来从子密钥推不出父密钥,从子密钥也推不出兄弟密钥。KDF本质上是以父密钥为钥匙的哈希运算,单向性由哈希函数保证。

于是各层的隔离性就成立了:

为什么这样设计?一句话:认证很贵,派生很便宜。一次完整认证要跑到归属网络的鉴权中心、要动用SIM卡运算,耗时和信令开销都不小;而一次本地派生只是微秒级的一次哈希。把贵的一次性动作(认证)和廉价的高频动作(换基站、换算法、换场景)解耦,前者做一次,后者无限次派生——这是整栋密钥楼的经济学原理。

4G密钥楼一览:

密钥 锚定位置 保护对象 何时更换
K SIM卡与鉴权中心 一切的源头 永不更换
CK / IK 归属网络内部 派生Kasme的原料 每次完整认证
Kasme MME NAS信令 + KeNB的母本 每次认证
KeNB 基站 全部空口通信 每次切换重派生
KRRCenc / KRRCint 基站与终端 RRC信令的加密与完整性 随KeNB更新
KUPenc 基站与终端 用户面业务数据 随KeNB更新

四、5G把楼加高了:锚点逐级下沉

5G面对一个新问题:网络架构从“铁板一块”走向切片化和开放化——服务网络(你漫游时拜访的运营商)、归属网络(你的签约运营商)、各种功能网元之间边界更多了,每一层的“持钥人”都应该被明确点名。

于是5G的楼从四层加到了六层,而且每一层都有明确的“锚”:

flowchart TD
    K["根密钥K<br/>永不出SIM"] --> Kausf["Kausf<br/>锚在归属网络"]
    Kausf --> Kseaf["Kseaf<br/>锚在安全锚点"]
    Kseaf --> Kamf["Kamf<br/>锚在AMF"]
    Kamf --> KNAS["NAS信令密钥"]
    Kamf --> Kgnb["Kgnb<br/>锚在基站"]
    Kgnb --> KRRC["RRC加密与完整性"]
    Kgnb --> KUP["用户面加密"]

逐层看这栋楼的设计意图:

Kausf——锚在归属网络。它由归属网络的鉴权链条(签约数据库+鉴权服务器)从认证结果中派生,代表“归属网络对这次认证背书”。归属网络之外,任何网元都拿不到它。

Kseaf——锚在服务网络。你漫游到了拜访运营商的网络,拜访网需要一个“接入凭证”证明“这个人通过了归属网络的认证”。这个凭证就是Kseaf:由Kausf派生、交付给服务网络的安全锚点。拜访网络拿到的是派生物,不是根——它无法伪造归属的信任。

Kamf——锚在AMF。密钥落到具体管理你的那个核心网控制点上,从此派生NAS信令密钥和基站的Kgnb。

一层一层看下来,你会发现5G密钥楼的本质是一场“信任的逐级接力”:归属网络给服务网络签发一张“可传递的信任支票”(Kseaf),服务网络再给具体网元签发更小的支票(Kamf、Kgnb),每转一手,权限就收窄一圈。任何单一环节失守,损失都被锁死在那 一层——这就是安全体系里经典的“最小权限原则”在密钥体系上的投影。

对比4G,5G还有一处容易被忽略的强化:锚点选择本身成为可协商的安全属性(下一节的两种AKA之争),而4G只有一条路。

五、5G的两道新锁:藏身份、防降级

密钥楼之外,5G还给整个体系加了两道锁,解决的都是4G时代的真实痛点。

第一道锁:开机身份不再裸奔。

4G手机在陌生网络开机附着时,会发出明文的IMSI——你的全球唯一身份号。这给了一种叫“IMSI捕手”(假基站设备)的攻击方式留下活口:架一个信号强的假基站,广播“欢迎接入”,路过手机老老实实把IMSI递上去,攻击者就能批量采集路人身份、定位特定目标。这是安全研究界公开讨论多年的问题。

5G的解法是把身份加密后再出门:真实身份SUPI经归属运营商的公钥加密成SUCI才上网。加密用的是ECIES方案(椭圆曲线集成加密)——手机临时生成一对椭圆曲线密钥,和归属网络的公钥做密钥协商出加密密钥,把SUPI整个封进保险箱,连临时公钥一起打包发出。全网只有归属运营商的私钥能开箱,连你当前注册的服务网络在认证之前都看不到你的真实身份。

为什么只有归属网络能解?因为公私钥对的“公钥”在开卡时就预置进了你的SIM卡——这又回到了本文的地基:SIM卡是信任的起点,不仅是密钥K的保险柜,还是归属网络公钥的携带者。

第二道锁:把安全能力焊进密钥。

一个阴险的攻击思路是降级攻击:不打硬仗,而是骗——攻击者插手手机和网络的“能力协商”环节,把本该用5G强加密的连接“协商”成2G/3G时代的弱加密甚至不加密,再对弱连接下手。

5G的对策简单粗暴而有效:把本次会话选定的安全能力(含算法选择)作为Kamf派生的输入参数之一,这个参数叫ABBA。这样一来,任何人在协商环节动手脚,派生出的密钥就对不上号,通信立刻失败——攻击者无法在不被察觉的情况下把你“劝”到弱安全模式。密钥派生的单向性在这里变成了“协商完整性校验器”:想篡改能力?先得有能力改密钥。

六、两种AKA:钥匙放前台,还是随身带

5G的认证方法给了两种选择:5G-AKA和EAP-AKA'。它们用的考题、算法、SIM卡完全一样——差别只有一个,却很本质:Kausf这把锚点钥匙,最终由谁掌管。

flowchart TD
    subgraph M5["5G-AKA:钥匙放前台"]
        UE1["终端"] -->|应答结果| AN1["归属鉴权链"]
        AN1 -->|派生后逐级下发| AM1["服务网络<br/>拿到派生物"]
    end
    subgraph ME["EAP-AKA:钥匙随身带"]
        UE2["终端"] <-->|端到端挑战应答| AE2["归属鉴权链"]
        UE2 -->|本地派生| AK2["锚点密钥不出终端"]
    end

5G-AKA:钥匙放前台。认证的算术全部在归属网络侧完成,归属网络算出Kausf后自己保管,再派生出Kseaf逐级下发。终端侧只负责“答题”,答完题终端手里并没有锚点密钥——就像酒店让你把贵重物品寄存在前台,前台替你保管。实现简单、消息轮次少、终端负担轻,但前提是你信任“前台”(归属网络的鉴权服务器)。

EAP-AKA':钥匙随身带。认证过程改用经典的EAP可扩展认证框架跑一遍挑战应答,最终产生的端到端会话密钥,由终端和归属鉴权链在两端各自独立派生出Kausf——中间的服务网络全程只见密文挑战应答,拿不到锚点。就像你自带保险箱:即使酒店前台被人撬了,你的东西还在你身上。安全性更强——服务网络被攻破也攻不破锚点——代价是信令交互轮次更多、终端SIM卡运算参与更深。

标准把选择权交给了网络和终端的能力协商,具体运营商用哪种,以各运营商的现网配置为准。理解了“锚点在哪”这个唯一差别,两种方法的所有行为差异都能顺势推出来——这正是原理的价值:记住原理,忘掉结论,结论可以随时现场推导。

七、现网实战:排障手册三页

原理讲完,说说这套知识在现网工作里在哪里用到。

第一页:附着失败,先看认证失败的三张脸。抓信令看到认证失败,第一步是分清失败原因码,三种典型对应三种病根:

第二页:认证成功之后才轮到密钥的坑。认证通过但随后RRC重配失败、切换后掉话,有一类根因是密钥更替没跟上——切换时新基站的Kgnb派生依赖源侧的参数接力,接力参数错乱会导致基站的完整性保护和终端对不上号,表现为空口信令完整性校验失败、连接被互删。看到“integrity check failure”类日志,往密钥更替链路上想。

第三页:破除两个常见误解。

误解一:“SIM卡能被复制,我的话能被窃听。”现代SIM的K受芯片物理保护,2G时代COMP128-1克隆卡的历史不会在今天的4G/5G重演——空口从4G起就是默认强加密,假基站在5G下连明文拉身份都做不到(SUCI),退化为只能骚扰不能窃听的拒绝服务工具。

误解二:“5G加密了,我上网就匿名了。”SUCI藏住的是身份标识,但元数据——你在什么时间、出现在哪个小区、流量多大——网络侧天然可见,运营商按规范就得记录。加密保护的是内容,不是“你在线”这个事实本身。

还有一个纯文档陷阱再强调一遍:认证字段里的AMF(认证管理域)和5G网元AMF(接入与移动性管理功能)是两个完全无关的东西,读抓包和规范文档时先确认语境,别把字段当网元、把网元当字段。

八、4G与5G安全体系对比总表

维度 4G 5G
开机身份 明文IMSI 加密的SUCI,仅归属网可解
认证方法 EPS-AKA,唯一 5G-AKA与EAP-AKA'两种
密钥锚点 Kasme单点挂在MME Kausf→Kseaf→Kamf逐级下沉
身份公钥 无此概念 归属网公钥预置在SIM卡
防降级攻击 机制薄弱 ABBA把安全能力焊进密钥
密钥更换粒度 换基站换KeNB 换锚点即换一层,隔离更细
假基站拉身份 有效 基本失效

回望全文,整个移动通信安全体系其实只 builds 在三条公理上:根密钥不出卡、挑战应答代替出示凭证、一次认证换无限次廉价派生。三句话记住它,剩下的Kasme、Kausf、Kamf不过是这三条公理在不同架构上的展开。下次抓包看到满屏的认证信令,你看到的不再是密钥名的迷宫,而是一栋结构清晰的大楼——地基是SIM卡里那根永不现身的钥匙,楼层是一次次单向派生,而每换一层门锁,都是为了上一层的失守不连坐下一层。

常见问题

Q: Kasme和Kamf是什么关系? A: 同一思想的两代实现,都是“认证后挂在核心网控制点的顶层会话密钥”。Kasme是4G的版本,直接以CK/IK为母本派生、锚定在MME;Kamf是5G的版本,但母本不是CK/IK而是Kseaf——5G在它之上多了Kausf、Kseaf两层锚点,Kamf排在楼里的第三层。功能上两者都负责派生NAS信令密钥和基站的接入层密钥。

Q: SIM卡里的K到底能不能被读出来? A: 正常途径不能。K写在卡的安全芯片里,卡片只对外提供运算接口(你给RAND,它还你结果),不提供读K的指令。历史上的例外是2G早期COMP128-1算法的弱点让攻击者通过大量“问答”间接反推出K,此后算法更换、芯片加固,这条路已封死。特殊机构级攻击(芯片逆向、侧信道分析)理论上存在,但成本远超普通场景的价值。

Q: 5G-AKA和EAP-AKA'哪个更安全?运营商用哪个? A: 安全性上EAP-AKA'的锚点密钥不出终端,对“服务网络被攻破”这类威胁的抵抗力更强;5G-AKA消息轮次少、终端简单。两者认证强度本身同级,差别只在锚点位置。各运营商的选择属于现网配置,以具体网络的实际部署为准,从公开资料看两种在商用网络中都有采用。

Q: SQN同步失败是什么?手机怎么“修”它? A: SQN是网络侧维护的单调递增计数器,手机侧也记着一个自己见过的最大值并设有接受窗口。当收到的SQN超出窗口(比如鉴权中心数据回滚、换卡流程不当),手机不直接拒绝,而是回复一个带同步指示的失败——附上自己侧的SQN信息,让鉴权中心据此重新对齐计数器后再发起一轮认证。所以SQN失步通常能自愈,反复失步则说明卡和鉴权中心的计数器状态有结构性错位。

Q: 为什么每次切换基站都要重新派生密钥,不能一直用同一把吗? A: 因为基站的持有者变了。同一把KeNB用到底,意味着任何一台你曾接入过的基站(包括它内存里的密钥)永远能解开你未来的空口数据。每次切换用新基站的身份参数重新派生,旧基站持有的密钥对新链路无效——攻击者即使攻破你十分钟前路过的那台基站,也拿你现在的通信没办法。这就是“前向隔离”,是密钥楼存在的核心理由之一。

参考来源

  1. 5G security - Wikipedia — 5G安全架构、认证方法与密钥体系的权威综述词条
  2. Authentication and Key Agreement - Wikipedia — AKA挑战应答机制与认证向量结构的通用说明
  3. International mobile subscriber identity - Wikipedia — IMSI/SUCI等用户标识体系的背景知识
  4. 3GPP官方网站 — 移动通信安全机制的标准化组织官网,可检索安全架构相关报告与规格目录
  5. 樊昌信《通信原理》—— 挑战应答、消息认证码与密钥派生函数的通信原理基础,国内通信专业经典教材

本文由「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学通信知识星球海报-扫码加入