Section: C.1.1 Sequence number generation schemes C.1.1.1 General scheme
Content: According to section 6.3 of this specification, authentication vectors are generated in the authentication centre (AuC) using sequence numbers. This section specifies how these sequence numbers are generated. Authentication vectors may be generated and sent by the AuC in batches. The sequence numbers for the authentication vectors in a batch are generated one after the other according to the process described below. (1) In its binary representation, the sequence number consists of two concatenated parts SQN = SEQ || IND. is an index used in the array scheme described in C.1.2 and C.2.2. SEQ in its turn consists of two concatenated parts SEQ = SEQ1 || SEQ2. SEQ1 represents the most significant bits of SEQ, and SEQ2 represents the least significant bits of represents the least significant bits of SQN. (2) There is a counter SQNHE in the HE. SQN is stored by this counter. SQNHE is an individual counter, i.e. there is one per user. We have SQNHE = SEQHE || INDHE. (3) There is a global counter, e.g. a clock giving universal time. For short we call the value of this global counter at any one time GLC. If GLC is taken from a clock it is computed mod p, where p = 2n and n is the length of GLC and of SEQ2 in bits. (4) If GLC is taken from a clock then there is a number D > 0 such that the following holds: (i) the time interval between two consecutive increases of the clock (the clock unit) shall be chosen such that, for each user, at most D batches are generated at the AuC during any D clock units; (ii) the clock rate shall be significantly higher than the average rate at which batches are generated for any user; (iii) D << 2n. (5) When the HE needs new sequence numbers SQN to create a new batch of authentication vectors, HE retrieves the (user-specific) value of SEQHE = SEQ1HE || SEQ2HE from the database. (i) If SEQ2HE < GLC < SEQ2HE + p – D + 1 then HE sets SEQ= SEQ1HE || GLC; (ii) if GLC SEQ2HE GLC+D - 1 or SEQ2HE + p – D + 1 GLC then HE sets SEQ = SEQHE +1; (iii) if GLC+D - 1 < SEQ2HE then HE sets SEQ = (SEQ1HE +1) || GLC. (iv) After the generation of the authentication vector has been completed SEQHE is reset to SEQ; (v) for the handling of see C.1.2. NOTES 1. The clock unit and the value D have to be chosen with care so that condition (4)(i) is satisfied for every user at all times. Otherwise, user identity confidentiality may be compromised. When the parameters are chosen appropriately sequence numbers for a particular user do not reveal significant information about the user's identity. If authentication vectors for the CS and the PS domains are not separated by other means it is recommended to choose D >1 as requests from the two different domains may arrive completely independently. 2. By setting the parameters in C.1.1.1 (1) to (5) in an appropriate way the general scheme specified in this subsection also includes the cases where either SEQ2 is void and SEQ = SEQ1 or else, SEQ1 is void and SEQ = SEQ2, as follows: (a) If SEQ2 is void the generation of sequence numbers is not time-based. We then formally set SEQ2 GLC 0 (identical to zero) and D = 1. Conditions (4)(i) to (iii) do not apply as there is no clock. Then (5)(ii) always holds, and SEQ is incremented by 1 at each request. For better readability, this case is separated out in C.1.1.2. (b) If SEQ1 is void then we set D = 1. Assuming a start condition SEQ2HE < GLC and the absence of failures in the AuC, the condition (5)(i) then always holds, and SEQ = GLC for each request, i.e. the generation of sequence numbers is entirely time-based. In order to also accommodate potential failures in the AuC for entirely time-based sequence number , the variant described in the following Annex C.1.1.3 may be used.