USIM 卡鉴权信息序列号 SQN 的存储: SQN=SEQ+IND(序列号+索引)
USIM 保留上次鉴权成功后最大的 SEQ 值作为 SEQ (终端)
USIM 对 网络 进行认证的机制如下
SEQ(网络) - SEQ(终端) < 2^28 SEQ(终端) - SEQ(网络) < L SEQ(网络) > SEQk
一般情况下,条件 1 和条件 3 比较容易满足,主要问题集中在第 2 个验证条件。
对于 CSFB语音方案, 存在 CS/PS 交替鉴权。
如果一个域使用了之前 MSC/SGSN/MME 预取的鉴权向量,
并且在上次预取后,在另一个域 生成鉴权向量并鉴权, 就会发生 USIM 侧存储的 SEQ 值大于第一个域鉴权时使用的 SEQ 值,
即 SEQ (终端) >SEQ (网络);
如果这个差值过大,达到了 SEQ (终端) -SEQ (网络) > L, 就会发生鉴权失败发起重同步。
目前, USIM 中 L 值普遍设为 32。
某些的厂家鉴权中心(AuC)是基于时间机制产生 SEQ。
若 USIM 中的 L 值取为 32,即二进制100000, 后 4 位 0000 为时钟的 0.1 s, 前 2 位 10 为时钟的 s, 10 也就是 2s。
因此,只要使用的鉴权向量是在另一个域鉴权 2 s 之前生成的,就会发生鉴权失败。
鉴权重同步:
当发生鉴权失败时, USIM 将当前的 SEQ (终端)上报给网络,并携带该值到 AuC 重新获取鉴权。
AuC 返回大于此值的 SEQ 作为 SEQ (网络)。
某些厂家在鉴权重同步时, AuC 并不重新基于时间生成 SEQ (其他场景 AuC 均基于绝对时间生成新的SEQ),
而是在 USIM 上报的 SEQ 基础上增加一个较小值Δ, 作为重新下发鉴权向量中的 SEQ (网络),
导致若在进行 CS 域鉴权重同步过程中,插入 PS 域鉴权过程,CS 域二次鉴权也会失败,呼叫失败
针对 USIM 新卡,建议取消 L 值。考虑到 L 值的判断条件在国际规范为可选项,是否采用取决运营商安全策略,从目前及将来网络看,对安全不会产生影响,可采取取消 USIM 中 L 值判断的解决方案。
USIM卡的EF_SQN
ADF/6F1D 也就是 7FF0/6F1D (每家卡商实现得不一样, 金普斯是这个地址,华虹是FF06)
当完成一次成功的鉴权后, 当次计算出的SQN 必须存储到卡的 EF_SQN文件中, 共有32条记录
SQN有SEQ和IND两部分组成: SQN = SEQ || IND
其中SEQ长43bits, IND长度为5bits, 共48bits, 6个字节
其中SEQ_MS(i)表示 USIM中保存的SEQ数组中的第i个值。USIM在做SQN验证时,应该以IND作为索引,比较收到的SQN的SEQ和对应IND的SEQ_MS(IND)
有些USIM卡中,有33条记录,用来保存 SEQ和IND
其中 #2到#33 保存IND 0~31的SEQ
当IND_net = 00 且鉴权成功后, USIM卡将把本次的SEQ_net保存在
#2记录,标识为 SEQ0, 其他以此类推。
同时, USIM总是将#2到#33记录的各个SEQ中,最大的那个
保存到#1记录,标识为 SEQ_ms和IND_ms
当USIM进行鉴权同步判决是,应遵循这3个条件:
1) 将网络下发的 鉴权消息中,提取SEQ_net 与 USIM #1记录的SEQ_ms进行比较
SEQ_net – SEQ_ms < Δ (Δ取值很大)
2) SEQ_ms – SEQ_ms < L
也就是 下发比较晚的 鉴权消息中的 SEQ要比之前的SEQ要大
即使新来的小, 也不能小很多, 最多小L (L一般取32)
PS域和CS域的 鉴权频次 相差一般较大
当PS域开启Service Request鉴权时,对智能终端而言,PS域的鉴权频次 将远高于CS域;
PS域关闭Service Request鉴权,而CS域名 开启位置更新鉴权,语音业务,短信业务鉴权时,CS域将远高于PS域
对于新的USIM卡,应该取消第2个条件的判断。
3) SEQ_net > SEQ_k
将 k = IND_net 条记录的 SEQ_k(IND永远小于33) 与 SEQ_NET 比较:
SEQ_net > SEQ_k(不能等于)
大部分厂家的HLR/Auc设备,对于PS和CS的IND分配都是隔开的(0~15分给CS, 16-31分给PS)
当网络收到Synch Failure的Authentication Failure消息时,允许网络侧触发 重同步机制。
MSC或者SGSN将重新向HLR/Auc申请新的鉴权向量(5元组或4元组), 并在请求消息中,将USIM卡传来的
AUTS参数发给HLR/Auc.
HLR/Auc可以根据AUTS算出 SEQ_ms, 从而确保 HLR/Auc新生成的 鉴权向量中的SEQ_net能够比上次鉴权同步
失败时,USIM中保存的SEQ_ms更大。
HE/Auc会发送多组 鉴权向量 给 VLR/SGSN, 鉴权向量 以SQN为序依次存好。
当VLR/SGSN发起一次鉴权是,他从 排好序的数组中,选取下一条鉴权向量,发送RAND,AUTN参数给用户。
USIM检查AUTN是否能接受,如果能,产生一个RES响应,发挥给VLR/SGSN.
如果一个用户长期不注册到网络, SEQ会被初始化为 00 00 00 00 01 00
一般情况下,VLR/SGSN对每个鉴权向量(5元组)只使用一次。但也有例外:
VLR/SGSN已经用某个特定的5元组,发出一个鉴权请求,但是没有从移动台(Mobile Station)收到响应消息(鉴权响应或者鉴权失败)。
它可能会用同样的5元组,重新发送鉴权请求。 多次重传都没有响应, VLR/SGSN应该删除这个5元组。
在MS侧,为了允许这样的重传,而不引起 额外的重新同步过程,ME应该为PS域(以及可选地为CS域名也做同样的事情)存储最后收到的RAND,以及算出来的RES, CK, IK.
如果ME发现受到的鉴权请求中的RAND是重复的,就直接重发响应给基站,就好了,根本不需要再问USIM卡。
SQN包含两部分: SEQ和IND
SQN = SEQ || IND
USIM维护着有a个数组,存储这 SEQ_ms(0), EQ_ms(1), … SEQ_ms(a-1)
这个数组里的a个元素的,初始值都是0
- 如果收到的 SEQ > SEQ_ms (i), 那么,USIM应该认为这个序列号是新的, 接下来将 SEQ_ms(i)设置为SEQ
- 如果 SEQ <= SEQ_ms(i), 那么,USIM应该生成一个 同步失败的消息,带上 本sim卡中 曾经接收到所有SEQ中,最大的那个, 也就是SQN_ms
USIM也可以在 SEQ_ms和SEQ 放一个限制L. 也就是 SEQ_ms – SQE < L都能接受。