新哈飞

 找回密码
 立即注册
搜索
查看: 3837|回复: 3

[手机相关] 纯技术贴,sim卡加密应答原理 [转贴]

[复制链接]
发表于 2011-11-4 21:39:55 | 显示全部楼层 |阅读模式
无意中看见的,不知道有什么用,转过来保存一下
-----------------------------------------



  简单说说sim卡的加密认证破解[转贴]2009-01-05 10:26 睡醒等待饭好之余,决定写篇blog,关于sim卡的,技术普及型文章——虽然我不是研究这个的(以前搞数学,现在搞经济),但是我还是试着把这个说明白。
     sim卡是什么那?我们通常的感觉是,我们买了一个手机号,然后就有了一张sim卡,那么一个手机号对应唯一的sim卡吗? 实际上不是的,例如我们把卡注销了(比如丢失或者不可用)然后运营商会给我们一个新的sim卡,号码不变,所以一个号码是可能对应多个sim卡的,在进一步,实际上是sim卡里的数据。
     sim卡是Subscriber Identity Module地缩写,也可以叫做UIM卡(UserIdentity Module),大致就是身份识别的智能模块,既然是智能的,那么sim卡就类似一台微型电脑——有CPU(一般为8位bit的,有程序存储器(PROM,用来存储所需要的运行的程序,这一般由sim卡厂商在生产时候就灌入的,通常为高级商业机密,1K字节左右),有cpu运行程序所需要的RAM(2K字节左右),还有类似电脑系统的硬盘的长期数据存储装置E2rom 或者From(存储数据等),另外就是通信单元。
     sim卡中的数据为几部分,首先就是制作sim卡的时候就已经写到里面的程序,它们是机密,用来完成身份认证功能;其次就是网络运营商在分发手机号码的时候,向sim卡写入的身份识别数据以及网络参数等;另外还有通信过程中产生的临时数据以及用户存储的短信息、通话记录等。
     现代sim卡有友好的用户界面,称为stk卡(sim application tool kit),实际上是一种基于java语言的互动环境,所以手机装上之后有一个stk菜单,或者我们使用动感地带的时候,每次开机都跳出一个动感地带的菜单,就是这个。短信息,通信录以及通话记录的存储空间有32K还有64k等,这个在sim卡上有标注,但是注意,这个和前面那些加密认证等是没有关系的。
     SIM卡既然是身份识别卡,就必须采用认证技术,加密技术,广义上,它使用的是128Bit的DES加密。很明显,它的8位CPU就是完成此运算的,这也是他并不需要多高级的CPU的原因。我们对照sim卡的认证过程来说明它的各种关键算法。
     首先,每张sim卡生产出来都有一个唯一的全球标示码(例如手机的imei),这个码叫做IMSI;运营商有一个数据库,这个数据库存储了它所有拥有的sim卡的IMSI码。具体到,哪一个sim卡对应哪一个手机号码那?那么运营商其实就是在这个数据库中作了一个对应,某某号码对应某一个IMSI码,这样,拥有这个imsi码的sim卡就有了一个手机号码了。当我们保号换卡的时候(比如手机被盗),运营商其实只需要把新的sim卡的IMSI码对应到原来的手机号就可以了。
     为了认证和加密,当然必须有一个密码,就像为了识别张三是张三,我可能事先和张三约定一句唐诗,那么当我们遇到的时候,如果张三能回答这句唐诗,就说明他是张三了,这个就是认证的密钥。每个sim卡也有一个密钥,这个密钥当然要和imsi一一对应,否则张三和李四都能回答这句唐诗,我就不知道面前这个人到底是张三还是李四了。imsi可以用sim卡读卡器读出。这个密钥称为KI,破解sim卡实际上就是要破解对应的KI,Ki虽然存在sim卡中,但是通常不能直接读取。这个KI运营商也是存储在数据库中的。既然是128bit加密,所以Ki就是16个字节的数,或者是32个16进制的数。
     手机在登陆网络的时候,验证过程是这样的:运营商系统会随机产生一个16byte的数,称为rand,你在使用破解sim卡程序的时候看到这个标志,呵呵。然后手机接收到这个数,然后发给sim卡,sim卡的cpu用sim卡存储的imsi以及ki算出一个数,作为应答回应,类似我说的“唐诗”,这个一个4byte的数,SRES,然后通过手机发给移动网络,在运营商的验证系统中,也同时进行了相同的运算,如果两者相等,那就说明你就是这个手机号码,允许登陆(windows的登陆密码验证也是这样的)。这个算法叫做A3加密算法。
     根据这个算法,我们知道首先这个算法应该具有“不可逆性”也就是反过来不好算。因为,虽然我们KI不方便读取,但是rand以及SRES的数据都要通过手机传输,理论上是都可以截取的,如果逆向可以算的话,一下子就可以把Ki解出来了。什么运算不可逆哪,实际上有很多算法在实际中是几乎不可逆的(虽然理论上不能证明),最著名的就是公钥密码体制中的大整数分解。两个素数相乘得出一个数,这是单片机计算器都可以不费吹灰之力就可以算出来的,但是如果知道了相乘的结果来求两个数那?这就非常困难了。A3加密算法就要符合这样的性质。
     实际上A3加密算法本来是商业机密的,但是这个世界总有一些好事的人,比如一些计算机的教授等等,他们通过合作,把sim卡看作一个黑盒子,经过一些方法,把A3算法解密了,解密了A3算法,就意味着可以通过分析算法中的逻辑和漏洞来破解KI,sim卡的破解就是根据这个进行的。
     大家还知道,2G时代,号称通信是加密的,所以其实sim卡在回复SRES的时候,其实还算出来一个Kc,这个算法叫做A8。并且全世界的人都一样偷懒,因为A3,A8的输入相同,所以他们融合成了一个算法A3A8,你如果看到sim卡加密程序的C语言版本就知道,它其实是有两个输入和两个输出的。这个Kc就用来在通信时候对数据进行全程加密。
     用Kc进行全程数据加密,想想看,这个过程就复杂了,通信量如此之大,靠sim卡那个8位cpu是不行的,所以这个加密过程是由手机完成的,称为A5加密算法。
     简单的来说sim卡认证和加密就是这样,当然实际使用中,是要复杂一些的,专业的咱们就不说了:)。
     网上那些所谓的一卡多号,其实就是破解出卡的ki,然后把多张sim卡的imsi,ki等写到一个空白sim卡上来实现一卡多号。
发表于 2011-11-5 09:11:54 | 显示全部楼层
发表于 2011-11-5 14:42:15 | 显示全部楼层
      
发表于 2011-11-25 21:15:11 | 显示全部楼层
一卡多号是真的喽
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|哈飞车友会 ( 鲁ICP备15020090号-4 ) | 点击这里给我发消息 |

GMT+8, 2024-3-29 03:59 , Processed in 0.020176 second(s), 6 queries , MemCache On.

Powered by Discuz! X

© ys166.com

快速回复 返回顶部 返回列表