A3算法是用于对全球移动通讯系统(GSM)蜂窝通信进行加密的一种算法。实际上,A3算法和 A8算法通常被同时执行(也叫做 A3/A8算法)。一个 A3/A8 算法在用户识别SIM卡和在 GSM 网络认证中心中执行。它被用于鉴别用户和产生加密语音和数据通信的密钥。GSM中的A3和A8算法都是基於密钥的单向碰撞函数。它们通常合在一起,统称为COMP128。COMP128算法目前被用在鉴别过程中,存储在SIM卡和AuC中。3的输入是GSM网络发给移动电话的一个128比特的随机数呼叫和单个用户鉴别密钥(Ki),输出为一个32比特的标示响应。这个标示响应发回到网络,与网络自己生成的结果进行比较。如果二者相符,用户便得到了鉴别。A8的输入也是随机数和Ki,输出为一个64比特的加密密钥(Kc)。
A5算法被用于加密全球移动通信系统(GSM)蜂窝通信。一个 A5加密算法在电话听筒和基站之间搅乱用户语音和数据传输来提供私密。一个 A5算法被在电话听筒和基站子系统(BSS)两者中执行。GSM系统中的移动电话和基站之间的信令和数据通过加密算法A5使用从A8中得到的加密密钥(Kc)进行加密和解密。当前有三种A5算法在使用中。A5/1被认为是这三种中性能最好的加密算法,被应用在西方国家。A5/2比A5/1在性能上差很多,被用在由于出口限制而禁用A5/1的地区。A5/0虽然也是A5算法的一种,但实际并不对数据进行加密。
每张 SIM 卡里面一般都存着一个全球唯一的标志号,叫做 IMSI,这是用来唯一标识你 SIM 卡的,手机在开机时候会从卡里面读出这个号发给移动网络,移动那里有一个很大的数据库,描述了 IMSI 和手机号的对应关系,除了 IMSI ,还有 16 个字节的密钥数据,这个数据是无法通过 SIM 卡的接口读出的,通常称为 Ki, Ki 在移动网络那边也保存了一份。
在手机登录移动 网络的时候,移动网络会产生一个 16 字节的随机数据发给手机,手机将这个数据发给 SIM 卡, SIM 卡用自己的密钥 Ki 和 RAND 做运算以后,生成一个 4 字节的应答发回给手机,并转发给移动网络,与此同时,移动网络也进行了相同算法的运算,移动网络会比较一下这两个结果是否相同,相同就表明这 个卡是我发出来的,允许其登录。这个验证算法在 GSM 规范里面叫做 A3,m = 128 bit, k = 128 bit, c=32 bit,很显然,这个算法要求已知 m 和 k 可以很简单的算出 c ,但是已知 m 和 c 却很难算出 k 。A3 算法是做在 SIM 卡里面的,因此如果运营商想更换加密算法,他只要发行自己的 SIM 卡,让自己的基站和 SIM 卡都使用相同的算法就可以了,手机完全不用换。
在移动网络发送 RAND 过来的时候,手机还会让 SIM 卡对 RAND 和 Ki 计算出另一个密钥以供全程通信加密使用,这个密钥的长度是 64 bits, 通常叫做 Kc, 生成 Kc 的算法是 A8算法 ,因为 A3算法和 A8算法接受的输入完全相同,所以实现者偷了个懒,用一个算法同时生成 SRES 和 Kc 。
在通信过程中的加密就是用 Kc 了,这个算法叫做 A5算法,因为 A5 的加密量很巨大,而且 SIM 卡的速度很慢,因此所有通信过程中的加密都是在手机上面完成的,这样一来,除非天下所有 GSM 手机都至少支持一种相同的 A5算法,否则就没法漫游了。