如有转载,请注明出处:
谢谢!
说明:
由于工作中用到EAP-SIM,在看rfc4186的过程中,把点滴记录下来(长时间看协议,容易困)。
虽然本文章是根据rfc4186而来,但不会完全翻译。如有需要,还是需要参考rfc4186
开始。。。
RFC4186是在EAP框架基础上,使用SIM进行认证和会话密钥分发。
GSM认证使用挑战/响应机制。运行在SIM之上的A3/A8算法可以接受一个128bit的随机数(RAND),这作为一个挑战。SIM卡使用运营商提供的算法,以RAND和存储在SIM之上的Ki作为输入,计算出32bit长的相应(SRES)和64bit长密钥Kc作为输出。Kc用于产生密钥,对这个协议的安全性来说至关重要。
EAP-SIM的安全特征在11节说明,强烈建议各位看一下第11节,是否满足自己的安全要求
总体介绍
下图说明了EAP-SIM的认证过程,后台的AAA server在这里没有绘制。
下面具体说明一下1. Authenticator发起EAP-Request/Identity认证请求
2. 终端的响应应包含IMSI或者临时ID。响应为EAP_Response/Idntity报文
3. Authenticator发送类型为SIM(18)的报文,这个报文包含一个子类型10(Start)。这个报文同时会包含一个属性AT_VERSION_LIST,标明支持的版本。(这是为了以后升级的方便)
4. 终端响应报文EAP-Request/SIM/Start。报文包含两个属性,AT_NONCE_MT包含一个随机数MONCE_MT。AT_SELECTED_VERSION包含一个终端选择的版本。
5. 服务器端可以根据GSM三元组产生密钥等。发送的报文包含一个属性AT_RAND,是上面的随机数,一个属性AT_MAC,是计算出来的认证码
6. 终端同样计算认证码,然后比较两个认证码是否相同。发送报文包含属性AT_MAC,包行终端的SRES响应
7. 服务器端比较MAC后,发送EAP-Success