最近群里聊天提及到了NAS消息加密的问题,这里根据经验简单的聊聊,不甚详尽,大家可以参考3GPP 33.401对NAS Security进行更详细的了解。
其实本文更想介绍一款NAS解密软件——虽然年代比较久远,2012年的了——以帮助拿到加密流程包却束手无策的同僚。
1NAS加密算法
加密是要双方协商才能完成的,所以UE在发送第一条Request消息的时候永远不会加密,但是此时UE会将自己所有支持的加密和完整性算法告知核心网,如图:
从图中可以看到三种加密算法被手机支持,分别是EEA0、EEA1、EEA2,网络侧一般在这三种算法的基础上支持EEA3,算法描述如下:
2NAS加密的秘钥
加密这件事不是一蹴而就就可以完成的,现在已经有了加密算法,那么还要有一把钥匙——秘钥,秘钥就是通过只保存在运营商的HSS和用户手中的Sim内的CK/IK推演生成的KASME。HSS通过AIA(Authentication Information Answer)将KASME作为鉴权五元组中的一员下发给MME,如图所示:
3NAS何时开始加密
以下图附着消息来说:
从UE发送第一条Request消息开始,到第5步双向鉴权结束,核心网和终端互相认证了合法性,那么从此刻开始,核心网MME根据自己配置的加密算法并匹配终端算法选择最优加密算法,并使用AIA消息中KASME作为秘钥,发送开始加密的指示Ciphered Options Request给UE,从而开启NAS消息加密,如下,MME发送Security mode command消息给UE开启NAS加密:
从此条消息开始,UE和MME之间所有的NAS消息都被笼罩了一层神秘的色彩——Ciphered Message总是可见。
4NAS解密
消息加密就有解密,既然我们知道了NAS加密的算法和秘钥来源,那么针对一个完整的信令流程比如附着消息或者TAU消息,其中加密消息的解密问题就轻而易举了,当然是对于更加深入研究并具有编程思想的同僚,而我等就只能坐享其成了(☺)。
LTE Security是Fabricio Ferraz开发的一款解密工具,从工具来看不仅可以解密NAS,也可以解密RRC消息(木有尝试过)。
以NAS解密为例简单介绍一下如何使用:
其中: “EPS encryption algorithm”选择 “NAS-enc-alg”。 Algorithm identity填写算法:如果是EEA1填写01,如果是EEA2算法填写02,所使用的算法由MME决定并在Ciphered Options Request既Security mode command消息中告知UE,如图:
填充数据到Annex B中的128-Bit ciphering algorithm对话框,如下:
其中KEY值就是我们第2步得到的Key; COUNT即为Sequence Number;
DIRECTION选择是上行(uplink),还是下行数据(downlink);
BEARER-ID是到目前也木有明白的一个参数——总之填0;
点击UNCIPHER按钮之后解密数据存入PLAINTEXT BLOCK对话框。
到此NAS解密完成。
关于此APP的Blog链接如下,然而长城长给挡在了墙外墙:
http://fabricioapps.blogspot.in/2012/05/lte-security.html
不过大家可以通过原文链接查询详细的内容并得到APP安装包。