关于SIM卡-GSM加密算法

tulensa 2010-07-23

GSM 的加密系统里面大致涉及三种算法,A3,A5,A8,这些并不特定指代什么算法,只是给出算法的输入和输出规范,以及对算法的要求,GSM 对于每种算法各有一个范例实现,理论上并没有限制大家使用哪种算法。但是世界上的设备商和运营商都是很懒得沟通的,看到既然有了范例实现,就都拿来用了,于是全世界的 SIM 卡被XX了都一样拷法。

说到这里就不能不简单介绍一下SIM卡,SIM卡是一种智能卡片,里面有个非常简单的CPU和一点NVRAM,可以存储和读出数据,还可以进行一些运算。卡里面有很多内容,不过我只介绍和加密相关的。每张SIM卡里面一般都存着一个全球唯一的标志号,叫做IMSI,这个是用来唯一标识你SIM卡的,手机在开机时候会从卡里面读出这个号发给移动网络,移动那里有一个很大的数据库,描述了IMSI和手机号的对应关系,于是网络就知道你的手机号是多少了(如果你手机卡[/B]丢了去补,新补来的卡IMSI和原有的不同,而移动数据库那里将你原来的手机号指向新的IMSI,旧的卡就再也不能用了)除了IMSI,还有16个字节的密钥数据,这个数据是无法通过SIM卡的接口读出的,通常称为Ki,Ki在移动网络那边也保存了一份。

在手机登录移动网络的时候,移动网络会产生一个16字节的随机数据(通常称为RAND)发给手机,手机将这个数据发给SIM卡,SIM卡用自己的密钥Ki和RAND做运算以后,生成一个4字节的应答(SRES)发回给手机,并转发给移动网络,与此同时,移动网络也进行了相同算法的运算,移动网络会比较一下这两个结果是否相同,相同就表明这个卡是我发出来的,允许其登录。这个验证算法在GSM规范里面叫做A3,m=128bit,k=128bit,c=32bit,很显然,这个算法要求已知m和k可以很简单的算出c,但是已知m和c却很难算出k。A3算法是做在SIM卡里面的,因此如果运营商想更换加密算法,他只要发行自己的SIM卡,让自己的基站和SIM卡都使用相同的算法就可以了,手机完全不用换。

在移动网络发送RAND过来的时候,手机还会让SIM卡对RAND和Ki计算出另一个密钥以供全程通信加密使用,这个密钥的长度是64bits,通常叫做Kc,生成Kc的算法是A8,因为A3和A8接受的输入完全相同,所以实现者偷了个懒,用一个算法同时生成SRES和Kc。

在通信过程中的加密就是用Kc了,这个算法叫做A5,因为A5的加密量很巨大,而且SIM卡的速度很慢,因此所有通信过程中的加密都是在手机上面完成的,这样一来,除非天下所有GSM手机都至少支持一种相同的A5算法,否则就没法漫游了,这时候运营商和设备商的懒惰又体现出来了,全世界目前只有一种通用的A5算法,没有其他的,这个算法就是和Kc的8字节序列进行简单的循环XOR,再和报文序号做个减法。

上面只是简单的介绍GSM的加密通信过程,实际上GSM的操作比这个还要复杂一些,比如除了第一次登录时候用真正的IMSI,之后都是用商定的临时标识TMSI,不过这个不是今天讨论的重点。

下面就来说说为啥手机卡[/B]可以被复制。

从前面的介绍里面我们知道,要完成一次登录过程,IMSI和Ki是必不可少的,A3算法也需要知道,这其中,IMSI是直接可读的,但是A3算法和存在你的卡里面的数据,都是不知道的,手机只是简单的把RAND给SIM卡,SIM卡把算好的数据返回。实际设备中使用的A3算法被作为高级商业机密保护起来。但是世界上没有不透风的墙,在1998还是1999年的时候,有人从哪里偷到了几页纸的相关文档,然后把这文档输入了电脑。后来这个文档落到了加州伯克力几个教授手里面。这个文档里面缺少一些东西,而且还有写错的地方,这几个牛教授们拿一个SIM卡比对了一阵子,把缺的补上了,错的也给修正了,于是这个算法就成为了世人皆知的秘密。这个算法又被叫做Comp128,他同时生成SRES和Kc,代码在这个文件里面。

http://kangkang.org/wordpress/wp-content/uploads/2006/06/a3a8.txt

光有了算法还是不能够得到在SIM卡里面保存的Ki,理论上面是可以把SIM卡拆了,然后把芯片接到特殊设备上面来读出Ki,但是这个听起来就像用小刀在硬盘上面刻操作系统一样不靠谱。于是很多有志之士就开始了对Comp128算法的攻击,在一开始大家想到的肯定是穷举,不过这个GSM的设计者也想到了,SIM卡里面有个逻辑是一共只能查询2^16次左右,之后卡会自杀,让XX者啥都得不到。因此研究者们试图在可以接受的次数之内通过构造特定明文和分析输出秘文来分析出Ki的值,结果还真被大家发现出来了一些。在下面这个pdf里面有一些相关的内容介绍,IBM的一个小组甚至用6次查询就可以彻底解出Ki,当然现在外面卖的那种拷卡器肯定没有这么牛,但是看表现似乎都可以在几分钟之内XX。

http://kangkang.org/wordpress/wp...Brumley-comp128.pdf

随着时间的推移,针对Comp128的XX算法越来越成熟,商用的卡复制设备也越来越多,运营商们终于坐不住了。很多运营商都开始发行Comp128v2加密算法的卡了。这其中就包括中国移动,我看了一下论坛上面的帖子,大部分都是在反映05年的新卡基本都没法用simscan之类软件读出Ki。Comp128v2算法是GSM协会在v1被攻破以后,迅速在v1上面修改得来的结果,据说比较好的解决了v1算法中的弱点,当然,这个算法像v1一样,还是不公布于众。。而且到现在也没有人公布出来。这样一来,基本就没法解了。现在网上面很多拷卡设备厂商说的正在研发v2解码,我觉得基本是扯淡,这个既要有足够内线,能从设备商那里盗。窃到v2的算法库或者从其他位置盗。窃到文档,还要有足够数学实力,能够找出算法漏洞。就凭这些作坊企业那还差得远点。

相关推荐