3. 3GPP安全体系:EPS-AKA认证协议、NAS安全、AS安全、密钥层次结构

各位好,我们接着聊NB-IoT的安全机制。这一章是3GPP安全体系的核心内容,说白了就是解决两个问题:你是谁?你们说话别人能不能偷听? EPS-AKA认证协议、NAS安全、AS安全,再加上密钥层次结构,这四个东西构成了整个LTE/NB-IoT的安全骨架。

我当年刚接触NB-IoT项目时,总觉得安全是运营商的事,跟终端关系不大。后来在一次实际对接中,因为密钥派生没搞对,设备死活注册不上网络,排查了整整两天。嗯,从那以后我再也不敢小看这套协议了。

3.1 EPS-AKA认证协议:你是谁?凭什么信你?

EPS-AKA,全称是Evolved Packet System - Authentication and Key Agreement。名字很长,但逻辑其实很清晰——网络要确认你的USIM卡是合法的,你也要确认网络不是伪基站

为什么会这样?因为NB-IoT终端很多部署在无人值守的场景,比如水表、烟感。如果被伪基站劫持了,数据被篡改,后果很严重。

EPS-AKA的流程大致分三步:

  1. 网络发起挑战:MME(移动管理实体)向终端发送一个随机数RAND和认证令牌AUTN。
  2. 终端验证网络:USIM卡用预置的密钥Ki,结合RAND计算出期望的AUTN。如果匹配,说明网络是真的。
  3. 终端回应挑战:终端计算RES(响应值)发回网络。网络比对RES和期望的XRES,一致则认证通过。

关键点:EPS-AKA是双向认证。不是只有网络查你,你也要查网络。我在项目中遇到过伪基站攻击的案例,就是因为终端没有严格验证AUTN,导致数据被中间人窃取。避坑指南:USIM卡侧的AUTN验证逻辑绝对不能跳过

认证通过后,网络和终端会协商出一个中间密钥KASME。这个密钥是后续所有安全机制的根,非常重要。

3.2 NAS安全:控制信令的保镖

NAS(Non-Access Stratum)层,说白了就是终端和MME之间的控制信令。比如附着请求、TAU更新、PDN连接建立等。这些信令如果被篡改,攻击者可以伪造位置更新,或者发起拒绝服务攻击。

NAS安全包含两个部分:

  • NAS加密:使用NAS加密密钥KNASenc,对NAS消息进行加密。防止信令内容被窃听。
  • NAS完整性保护:使用NAS完整性密钥KNASint,对NAS消息计算MAC(消息认证码)。防止信令被篡改。

我建议你在设计终端协议栈时,注意NAS安全上下文的生命周期。终端从空闲态切换到连接态时,NAS安全上下文可能已经过期了。我记得有一次测试,终端在深睡眠后唤醒,NAS安全上下文没及时更新,导致网络侧一直报MAC mismatch。折腾了半天才发现是上下文老化的问题。

个人经验:NAS安全上下文的更新时机,建议在每次TAU或Service Request时主动检查。不要依赖网络侧来触发,有些网络实现并不规范。

3.3 AS安全:用户数据的守护者

AS(Access Stratum)层,负责空口用户数据的加密和完整性保护。NB-IoT虽然数据量小,但安全性一点不能打折。

AS安全的核心是空口加密空口完整性保护

  • 空口加密:使用AS加密密钥KUPenc,对用户面数据(比如上报的水表读数)进行加密。算法通常是EEA0(不加密)、EEA1(SNOW 3G)、EEA2(AES)。
  • 空口完整性保护:使用AS完整性密钥KRRCint,对RRC信令进行完整性保护。算法是EIA1、EIA2。

你想想看,如果水表上报的读数被篡改,从100吨改成1吨,那水务公司就亏大了。所以AS安全不是可有可无的,是必须的。

注意:NB-IoT为了省电,有些场景下会使用EEA0(不加密)。但完整性保护不能省。我曾经在项目中看到有人为了省几个字节的传输开销,把完整性保护也关了,结果被安全审计直接打回。记住:完整性保护是底线,不能妥协

3.4 密钥层次结构:层层递进的信任链

3GPP的密钥体系是一个树形结构,从根密钥Ki开始,逐层派生。这样做的好处是:每一层密钥泄露,不会影响上一层

密钥层次大致如下:

层级 密钥名称 作用 存储位置
根密钥 Ki USIM卡和HSS共享的永久密钥 USIM卡、HSS
中间密钥 KASME EPS-AKA认证后派生,用于后续密钥生成 终端、MME
NAS密钥 KNASenc、KNASint NAS层加密和完整性保护 终端、MME
AS密钥 KUPenc、KRRCint 用户面加密和RRC完整性保护 终端、eNodeB

密钥派生的过程,简单说就是:Ki + 随机数 → KASME → KNASenc/KNASint → KUPenc/KRRCint。每一层都使用KDF(密钥派生函数)计算,算法是HMAC-SHA256。

我个人习惯在终端代码里把密钥派生函数单独封装成一个模块,方便测试和验证。因为密钥派生一旦出错,整个安全链路就断了。我曾经在调试时发现KASME和网络侧算出来的不一致,最后定位是KDF输入参数的排序问题——3GPP规范里对输入参数的顺序有严格要求,多一个字节少一个字节都不行。

避坑指南:密钥派生时,注意检查输入参数的字节序(Endianness)。3GPP规范里很多参数是大端序,但有些芯片平台默认是小端序。我曾经因为这个bug,浪费了整整一个下午。

3.5 小结

好了,这一章的内容就这些。总结一下:

  • EPS-AKA:双向认证,确保终端和网络都是合法的。
  • NAS安全:保护控制信令,加密+完整性保护。
  • AS安全:保护用户数据,加密+完整性保护。
  • 密钥层次结构:从Ki到KUPenc,层层派生,隔离风险。

下一章我们会聊NB-IoT特有的安全增强机制,比如SC-PTM安全、小数据传输安全等。到时候再细聊。

最后一句:安全设计不是堆砌功能,而是理解信任链。你只要把密钥层次和认证流程吃透了,NB-IoT安全这块基本就稳了。