Tuesday 12 June 2012

GSM Authentication

GSM authentication

在手机登录移动网络的时候,移动网络会产生一个16字节的随机数据(通常称为RAND)发给手机,手机将这个数据发给SIM卡,SIM卡用自己的密钥Ki和RAND做运算以后,生成一个4字节的应答(SRES)发回给手机,并转发给移动网络,与此同时,移动网络也进行了相同算法的运算,移动网络会比较一下这两个结果是否相同,相同就表明这个卡是我发出来的,允许其登录。这个验证算法在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算法,否则就没法漫游了,这时候运营商和设备商的懒惰又体现出来了,全世界目前只有一种通用的A5算法,没有其他的,这个算法就是和Kc 的8字节序列进行简单的循环XOR,再和报文序号做个减法。(通信过程中的加密由手机来做,不由SIM卡做)。

No comments:

Post a Comment