
简介一份详细解析全球移动通信系统A3、A5、A8算法的PDF文档面向移动通信专业学生、安全方向研究者及网络优化工程师系统梳理了三种算法的实现原理、执行位置与组合流程帮助读者快速理解GSM网络中的用户鉴权、数据加密与密钥生成机制。资源包为单个PDF文件大小约310KB内容结构清晰包含算法简介、安全机制分布、安全机制组成等章节并配有挑战响应流程说明完整呈现了A3与A8算法协同完成用户身份认证与会话密钥生成的过程以及A5/1、A5/2等加密版本的应用场景。文档还从GSM系统整体架构出发阐明安全机制在移动站、基站子系统与网络子系统中的分工并针对A5/1已被破解等安全缺陷指出后续向3G、4G更强加密技术演进的必要性。目前已有245人学习适合用于GSM安全原理的入门自学、课程配套教学与工程排错参考。 最近整理旧资料时又翻出这份《A3A5A8算法的详细过程.pdf》认真重读了一遍发现很多当时一带而过的细节现在看特别有意思。A3A5A8算法是GSM网络里一组负责鉴权和空口加密的算法集合A3负责把SIM卡的密钥Ki和网络下发的随机数RAND换算成鉴权响应SRESA8负责从同样的输入导出64位会话密钥KcA5则用Kc和帧号FN生成一串密钥流对语音和数据做流加密。很多做移动通信安全、密码学课程设计、伪基站检测或者单纯想理解老密码系统的朋友迟早要和这套东西打交道。这篇就把A3A5A8的算法分工、A5/1寄存器级的运行过程、A5/2和A5/3的差异以及后来的攻击思路一次性整理清楚。不管你是考前突击、做毕业设计还是想搞懂“为什么2G加密形同虚设”都可以把这篇当作一份带注释的导读。1. A3/A5/A8在GSM安全体系中的分工很多人第一次看GSM安全架构容易被A3、A5、A8这三个名字绕晕。其实它们的定位非常好理解A3和A8在鉴权中心AuC和SIM卡内部运行负责“身份确认”和“生成临时密钥”A5在手机基带和基站侧运行负责“通话内容加密”。搞清楚这个边界后面所有细节都不会乱。1.1 一次语音呼叫要经过哪些安全步骤一次正常的GSM呼叫安全流程大致是这样走的手机开机或者发起位置更新时网络侧下发一个128位随机数RAND。SIM卡用内部存储的密钥Ki和RAND一起跑A3算法得到32位SRES返回给网络。网络侧也用同样的Ki和RAND算SRES两边一致就说明这张卡确实是“本网用户”。与此同时SIM卡还会用Ki和RAND跑A8算法得到64位Kc。这个Kc会同步给基站和手机基带。通话建立后每个无线突发约4.615毫秒一帧里A5算法用Kc和当前帧号FN生成114位密钥流把语音数据按位异或后发出去。注意A3和A8的网络侧计算发生在AuC鉴权中心里手机侧计算发生在SIM卡里而A5发生在基带芯片和基站里。也就是说SIM卡只负责证明自己“知道Ki”真正的语音加密根本不经过SIM卡。1.2 A3、A5、A8之间是谁调用谁用一句话概括调用关系A3和A8共享同一组输入Ki与RANDA5完全不跟A3发生关系它只认A8输出的Kc。实战里A3和A8往往不是两个独立算法而是同一个COMP128函数的两段输出。COMP128把Ki和RAND一起喂进一组迭代运算前32位输出就是SRES中间取64位就是Kc。这个设计在当年很讨巧SIM卡里那颗8位单片机性能极弱能少跑一遍算法就少跑一遍。代价是A3和A8被绑死在同一个函数上COMP128一旦被攻破鉴权和会话密钥同时完蛋。1998年COMP128被破解后整个GSM的安全基石等于被人抽掉了一块事情就是这么严重。1.3 为什么现在还要回头研究这套老算法很多刚接触通信安全的人会问5G都来了学A3A5A8还有什么用我的看法有三点。第一2G网络至今没有完全退网大量物联网卡、乡村偏远基站、漫游回落场景还在跑GSM只要2G网还在这些算法的安全问题就会持续存在。第二A5/1是一个典型的LFSR流密码设计样本A5/2则是一个被不合理的控制逻辑搞砸的失败案例放在密码学教学里它们比很多教科书上的理想化例子都更有教育意义。第三后来的3G、4G、5G算法比如KASUMI、SNOW3G、ZUC本质上都是在吸收A5系列的教训之后设计出来的。不把A3A5A8吃透你就很难理解为什么现代移动通信算法要设计成现在这个样子。2. A5/1的详细工作过程三个移位寄存器加一个多数表决A5/1是GSM最初设计的强加密算法密钥64位面向欧洲和北美等地区使用。它是真正的流密码不直接加密数据而是生成一串伪随机密钥流再跟明文异或。A5/1的核心结构是三个线性反馈移位寄存器加上一个不规则时钟控制机制。下面拆开讲。2.1 三个移位寄存器的规格A5/1内部有三个LFSR命名一般叫X、Y、Z。三个寄存器的长度和反馈抽头如下表所示寄存器长度反馈多项式抽头位置时钟位X19位x^19 x^18 x^17 x^14 1第8位Y22位x^22 x^21 1第10位Z23位x^23 x^22 x^21 x^8 1第10位如果不太熟悉LFSR可以把它想象成一条“会自己算新位”的队列。每个时钟周期寄存器整体向右移一位最左边补进来的新位由反馈多项式挑出若干位置的位做异或得到。A5/1的匠心在于三个寄存器不是同步前进的而是由一个“少数服从多数”机制决定谁动、谁不动从而让输出序列看起来更不可预测。2.2 从Kc和帧号到114位密钥流的四步流程A5/1生成密钥流的完整过程可以分成四个阶段阶段一寄存器清零。把X、Y、Z三个寄存器全部置0。这是每次会话开始时都要做的初始化。阶段二混合密钥Kc和帧号FN。这一步共86个周期。前64个周期依次把64位会话密钥Kc的每一位送入三个寄存器后22个周期依次把帧号FN的每一位送入。所谓“送入”是在每个周期把所有寄存器统一步进一次同时把当前输入位和反馈输出异或后作为新的最低位参与移位。这样Kc和FN的信息就被“搅”进了整个寄存器的内部状态。阶段三空转100个周期。这一步不输入任何外部数据只让三个寄存器在多数表决控制下继续步进。目的很直接把Kc和FN的痕迹进一步打散避免早期输出和密钥、帧号之间存在可统计的关联。这属于设计者主动加的安全余量但后来被证明余量不够大。阶段四输出密钥流。空转结束后立刻开始输出。正常工作模式下先输出114位作为上行方向的密钥流之后手机和基站切换一下帧号或通信方向再触发一次重同步再输出114位作为下行方向密钥流。上下行各114位刚好对应GSM一个正常突发里两个57位数据块的加密需求。把阶段四放在整个变量初始化后面看就能理解A5/1的“重同步”本质真正参与加密的不是密钥本身而是“Kc 帧号FN”这一组输入在不同帧号下得到完全不同的密钥流。帧号每帧都不同所以同一段会话里每一帧的密钥流也都在变。基站和手机不需要交换任何额外密钥只要两边都知道当前帧号就能同步解出语音。2.3 多数表决机制到底在干什么多数表决是A5/1最容易被忽略、但其实是最关键的设计。每个周期开始时三个寄存器都向外输出一位作为候选密钥流位但到底哪个寄存器的输出算数则由时钟位决定。三个寄存器的时钟位分别是X8、Y10、Z10。系统比较这三个位取值为多数的那个值作为“众数”只有时钟位等于众数的寄存器才真正步进其他寄存器原地不动。举个例子如果当前X80、Y101、Z101那么多数是1只有Y和Z前进X停在原地。下一次如果三个位变成0、0、1多数是0则X和Y前进Z不动。这样的好处是每个寄存器平均有75%的概率被时钟但三者运动模式相互依赖攻击者很难直接猜测某个寄存器的状态。它的坏处也很明显这是一个相对简单的非线性控制规则给后来硬件攻击和相关性攻击留下了分析空间。这个过程用生活类比来解释就很简单三个人结伴走路每到一个路口至少两个人想走的方向才算数落单的那个人得留在原地等下一次投票。于是这三个人永远不会整齐划一地前进队形会越来越乱外部观察者想预测队形就特别难。2.4 密钥流如何加密语音A5/1输出的密钥流和语音数据的关系就是一个逐位异或。基站侧把密钥流和明文按位异或得到密文手机侧用同样的密钥流再异或一次密文就被还原成明文。正因为加密和解密用的是同一个操作A5/1才能做到对无线帧的低延迟处理。这里有个细节值得注意A5/1是流密码不做任何数据扩张或分组变换。也就是说语音帧是114位密钥流就是114位语音帧是456位密钥流就是对应的好几段。这种设计非常适合GSM那种时分多址结构每个用户分到固定的时隙每时隙只有一丁点数据要加解密流模式比分组模式更省时间。3. A5/2与A5/3一个被撕开的缺口一个过渡期的补丁如果你在资料里看到“GSM使用A5算法”这种笼统说法那就是把问题简化了。实际上GSM家族里至少存在A5/1、A5/2、A5/3、A5/4好几个版本。不同版本之间安全强度差异极大。3.1 A5/2为什么弱弱在哪个环节A5/2的寄存器结构跟A5/1很像但多了一个17位寄存器W用W来控制另外三个主寄存器的时钟。设计初衷是想通过更复杂的时钟控制让加密强度在A5/1基础上进一步提高。但结果恰恰相反A5/2的多余控制逻辑引入了严重的结构性弱点攻击者可以建立线性方程来描述内部状态。1999年Ian Goldberg、David Wagner等人发布了对A5/2的完整分析指出恢复会话密钥的复杂度大约只有2^16量级用当时已经很常见的FPGA硬件几分钟就能完成破解。2^16是什么概念6万多次穷举在现代计算机上几乎就是一个“瞬间”。后来研究进一步表明A5/2的密钥流输出和内部状态之间存在大量线性关系连论文标题都直接用“A Pedagogical Analysis of A5/2”——意思就是“拿A5/2当教材分析”。A5/2的存在本身就是GSM历史上的一段尴尬。当年受出口管制影响面向部分国际市场销售的GSM设备只能使用弱加密版本A5/2而不是A5/1。这也导致后来的实战攻击特别喜欢欺负A5/2只要让手机回落到A5/2模式破解成本立刻降好几个数量级。这段话的内情我不展开说但你只要记住结论在GSM整个加密体系里A5/2就是那个被故意留出来的后门级缺口。3.2 A5/3与KASUMI设计上的进步与后续问题A5/3的作用是取代A5/1和A5/2作为2G向3G过渡时的新加密方案。它的核心是一个名为KASUMI的分组密码算法密钥长度仍然是64位但通过分组密码的输出反馈模式OFB来产生密钥流。虽然从名字看A5/3和A5/1很像但它们的设计哲学已经不同A5/1是专门的流密码A5/3是把一个分组密码改成流密码来用。KASUMI基于MISTY结构包含了Feistel网络和一系列非线性查表整体设计比A5/1精致很多。2000年左右发布时密码学界对它的评价不错。但随着密码分析技术发展2010年Dunkelman、Keller和Shamir等人提出了针对KASUMI的相关密钥攻击把理论破解复杂度降到了约2^28次加密左右——这个数字虽然比A5/2的崩溃式破解强得多但对一个用于保护国家级移动通信网络的算法来说已经逼近“理论上可行”的边界。更麻烦的是后续又出现了针对3GPP UEA1具体实现的分析。这些攻击主要用于学术研究实际部署中尚未出现大规模利用但“KASUMI已经不再让人放心”在圈内基本成了共识。所以严格来说A5/3只是过渡期的补丁不是终极方案。4G、5G时代真正扛大梁的已经是SNOW3G、AES-CTR、ZUC这些算法了。3.3 三种A5算法关键参数对照把A5/1、A5/2、A5/3放在一起看差异更直观项目A5/1A5/2A5/3设计类型专用流密码LFSR专用流密码LFSR控制寄存器基于分组密码KASUMI的流密码密钥长度64位64位64位内部状态规模64位96位64位分组/128位中间态主要漏洞时间-存储-数据权衡攻击、已知明文攻击内部状态线性化复杂度约2^16相关密钥理论攻击实际安全性已被实际破解彻底失效理论告急实际仍有部署使用现状大量2G网络仍在用大部分场景禁用3G回落与部分2G场景这个表格也是我给学生的速查卡。A5/2靠增加寄存器规模反而变弱A5/3靠换用分组密码提升安全性一正一反两个例子正好说明流密码设计里“增加部件不一定增加安全”的道理。4. A3与A8的完整过程从Ki到SRES再到Kc相比A5的寄存器流水线A3和A8的过程更像一个黑盒函数。GSM规范并没有强制规定A3和A8的具体实现方式留给了运营商和SIM卡厂商自定义。因此不同国家的SIM卡上运行的A3/A8可能完全不同。最常见的默认实现是COMP128-1后来的安全版本是COMP128-2/3和基于AES的Milenage。4.1 A3鉴权响应的计算流程A3算法的输入是128位Ki和128位RAND输出是32位SRES。以COMP128为例计算过程大致是这样的将128位Ki和128位RAND拼接或分组混合形成初始状态。做若干轮压缩迭代每一轮把当前状态分成左右两半通过一个8进8出的S盒查表再经过异或、置换等操作把左右两半重新混合。迭代完成后把状态中对应SRES位置的输出截取32位作为鉴权响应返回。COMP128的设计有一个很讨巧的地方它整个算法只用了一个很小的S盒和几次查表运算量在8位单片机上也能扛住。代价是它的结构非常紧凑密码学余量几乎为0。1998年研究人员发现COMP128存在碰撞弱点选择特定的RAND会让不同Ki在压缩过程中产生相同的中间状态从而在约2^17次查询后恢复出完整Ki。2^17大约是15万次在今天看起来不算多在当年也足够让一张SIM卡在一次SIM卡读取器会话内被克隆。后来3GPP吸取教训推出了COMP128-2和COMP128-3对算法细节做了修改但具体规范没有再公开。从那之后再用“COMP128”这个统称指的就是新版算法或完整家族而不是单纯指那个已经被攻破的COMP128-1。4.2 A8导出Kc的过程与COMP128之痛A8算法的输入也是Ki和RAND输出是64位Kc。在COMP128实现里A3和A8共用一套迭代过程整个函数算完以后中间某个位置的64位被截出来作为Kc另外32位作为SRES。也就是说你没法把A3和A8分开跑它们是同一个算法的两个输出接口。这个设计带来的最大问题就是“牵一发动全身”COMP128-1被破解意味着攻击者一旦通过A3接口恢复Ki同时也就拿到了生成Kc的根密钥。后续所有A5加密都建立在这把Kc之上只要Ki泄露通话加密形同虚设。这让我想起现在很多系统把“身份认证”和“数据加密密钥派生”做成两个独立模块其实正是吸取了COMP128时代的教训——功能上可以共享但逻辑上最好分开并且分别做安全评估。4.3 Milenage后来的替代方案进入UMTS时代后3GPP推出了Milenage算法作为USIM上的标准鉴权与密钥派生方案。Milenage基于AES/Rijndael输入仍然是128位根密钥K和128位RAND但输出更加多元化包括RES、CK加密密钥、IK完整性密钥、AK匿名密钥等多个参数。相比COMP128的“要么攻破全部、要么一点拿不到”的极端局面Milenage把鉴权、加密、完整性保护、匿名化拆成了独立输出每种用途各拿各的密钥这让系统在面对单项攻击时要从容得多。对国内学生来说如果毕业设计涉及“SIM卡克隆”“USIM安全分析”一般不会直接去复现COMP128的完整S盒而是会基于公开代码库或者Python加密库做一个仿真环境把A3/A8/Milenage的输入输出关系跑通。我建议把重点放在“同一根密钥如何派生不同用途的会话密钥”这条主线上比单纯背诵算法细节更有价值。5. 安全评估视角A5算法是怎么被一步步攻破的既然聊A3A5A8就绕不开“这算法到底多容易破”的问题。这里说的不是要大家去实施攻击而是要从安全评估、漏洞分析的角度理解攻击思路。相信我你只有理解了攻击者的视角才能在检测伪基站、评估风险时知道该盯哪里。5.1 攻击A5/1的三条公开路径第一条路径是时间-存储-数据权衡攻击。A5/1的内部状态只有64位理论上穷举2^64个状态在任何时期都不现实。但攻击者可以预先计算大量“已知状态与输出片段”的对应关系存成一张大表再拿截获的密钥流片段去查表。Biryukov、Shamir和Wagner在2000年发表的结果显示用这种方法可以在约2^38次操作和几十GB存储量级下恢复出密钥。这组数字放到今天已经进入普通实验室可复现的范围。第二条路径是利用已知明文。GSM空口中某些信道有固定的协议结构和前导码攻击者不需要知道内容只要知道某一段密文对应的明文是什么就能通过异或得到密钥流。拿到足够多的已知明文密钥流片段后再结合LFSR的线性结构直接反推内部状态。第三条路径是快速相关攻击。这类攻击利用的是A5/1输出位和寄存器状态之间存在的微弱相关性用信道编码中常用的迭代译码方法来估计内部状态。2007年左右有一批论文把这类攻击的复杂度降到了分钟级别所需的密钥流片段也就几分钟通话的量级。这些攻击虽然对硬件和环境有要求但足以证明A5/1的“强壮”是相对2000年初的水平而言的。5.2 从攻击A5/2到攻击整个GSMA5/2的崩溃不只是它自己的问题更严重的是它还拖累了A5/1。实战攻击逻辑是这样的由于很多手机支持A5/2攻击者可以用一个模拟基站伪基站下发一个特殊指令要求手机使用A5/2加密。A5/2被破解后攻击者恢复出Kc再用这个Kc去初始化A5/1破解关键会话。这等于用一把弱锁打开了整个保险柜的后门。这就是为什么后来的安全评估特别强调“最弱算法决定整体安全”。你去检测一个2G网络是否合规不能只看它有没有启用A5/1或A5/3而是要强制关闭所有A5/2能力并且检查是否存在降级攻击路径。通信运营商在现网优化中也会主动把低于A5/1的加密选项关掉就是为了截断这条攻击链。5.3 这些教训在5G时代去哪了把A3A5A8的历史通盘看过之后再看5G安全设计思路会清晰很多。5G的标准加密算法已经全面升级为SNOW3G、AES-CTR和ZUC全部经过了公开的国际评审流程算法细节、测试向量、性能基准都是公开可查的。密钥长度从GSM时代的64位提升到128位并且引入了完整的根密钥隔离、前向安全、后向安全机制。更重要的一点是5G协议在设计上没有再犯“为了出口管制而刻意保留弱算法”这种低级错误也没有把同一套COMP128同时用于身份认证和密钥派生。正是A3A5A8这组老算法用几十年的实际教训逼着现代通信标准把每一条安全链路都拆开审查、独立设计。所以今天你要是跟别人讨论A3A5A8真正的价值不是怀旧而是通过它们理解为什么现在的系统设计得这么“麻烦”。最后再分享一点我自己的体会。翻完这份《A3A5A8算法的详细过程.pdf》我最受触动的一点不是A5/1寄存器怎么走、COMP128怎么破而是“算法安全性”这件事的脆弱性它取决于密钥长度、算法结构、实现方式、部署策略甚至取决于一张SIM卡当年要不要卖到某个市场。做安全评估时我最怕听到“反正别人也解不开”这种话。老算法的故事已经证明只要给攻击者足够的时间、数据和一点点降级空间任何看似秘密的安全方案都可能被撕开口子。如果你也在读这类资料建议不要只盯着流程记试着把每个设计选择背后的权衡想一遍——为什么用LFSR而不是AES为什么加空转周期为什么把A3和A8放在同一个函数里——把这些想明白你才真正吃透了这页PDF。本文还有配套的精品资源点击获取