= Specification for IMSI Pseudonymization on the Radio Interface for 2G/3G/4G

== Introduction

=== Protecting the IMSI on the Radio Interface is Desirable

A long-standing issue in the 3GPP specifications for cellular mobile
communications starting from 2G (GSM) is, that mobile phones and
other mobile equipment (ME) have to send the International Mobile Subscriber
Identity (IMSI) unencrypted over the air.  Each IMSI is a unique identifier for
the subscriber. Therefore, most people can be uniquely identified by recording
the IMSI that their ME is sending.

The 3GPP specifications provide means for implementations to send the
IMSI less often by using the Temporary Mobile Subscriber Identity (TMSI)
where possible.  However, the decision on when to use IMSI or TMSI is
entirely on the networks side, without any control by the ME or even the
subscriber.

This leads to a variety of attacks on subscriber location privacy, including
the use of passive air-interface sniffing as well as false base station
attacks, where an attacker impersonates a base station which
subsequently inquires every ME about its IMSI.

Some related devices have been termed _IMSI catchers_ or _Stingray_ in
both scientific literature as well as mainstream media. IMSI catchers have
become small and affordable during the last decade; criminals actors
and in some cases even tabloid journalists without much budget have
reportedly used them to track anybody with a mobile phone.

5G addresses this problem with the Subscriber Concealed Identifier (SUCI),
which uses public-key cryptography to ensure that the permanent subscriber
identity (IMSI) is not transmitted over the air interface anymore.
Rather, a concealed version of it is transmitted (3GPP TS 33.501,
Section 6.12.2).  The 5G SUCI mechanism can not be adapted easily for previous
generations of cellular networks as it relies on introducing an entirely
new mobile identity type of larger size (SUCI) than any of the existing
ones (e.g. IMSI), causing significant implications on protocol stacks
and implementations all across the protocol stack of all network elements,
including the ME.

No mechanism for increasing subscriber identity and location privacy on
the radio interface has been specified for the previous cellular
technologies 2G (GSM), 3G (UMTS) and 4G (LTE).  Meanwhile, pure 5G
networks are and will remain rare for many years to come, as operators
have to support billions of deployed legacy pre-5G ME.  Operating
combined 5G + previous technology networks enables the so-called
"downgrade attacks" where the attacker blocks access to 5G e.g. by means
of jamming/interference, and hence triggers the ME to use a previous
generation which is still susceptible to the attacks.

This specification proposes a different approach to conceal the
IMSI for legacy 2G, 3G and 4G networks.

=== Summary of Proposed Solution

The solution presented in this document is to periodically change the IMSI of
the ME to a new pseudonymous IMSI allocated by the Home Location Register (HLR)
or Home Subscriber Service (HSS). The next pseudonymous IMSI is sent to the SIM/USIM
via Short Message Service (SMS), then a SIM applet overwrites the IMSI of the
SIM/USIM with the new value. The only components in the network that need to be
changed in order to support this mechanism are the SIM/USIM and the
HLR/HSS.  All other elements (like BTS, NodeB, eNodeB, BSC, RNC, MME,
MSC/VLR, SGSN, GGSN, S-GW, P-GW, ...) remain as-is, without any changes
to their specification or implementation.

Constraining the required changes to only two elements in the network
enables quick adoption potential for the proposed mechanism.
Furthermore, as SIM/USIM and HLR/HSS are the only two elements under control
of a Mobile Virtual Network Operator (MVNO), this mechanism can be
deployed by a MVNO without any changes to the operators of the physical
infrastructure (MNO).

<<<
=== Summary of Existing Location Updating Procedures in RAN and CN

Every subscriber's SIM/USIM is provisioned with the IMSI and secret
cryptographic keys (Ki or K+OP[c]).  The same IMSI and key data is also provisioned
into the HLR/HSS, the central subscriber database of a cellular network.

In a number of different situations, the IMSI is sent over the air
interface and back-haul towards the Core Network (CN), where it is
validated by the HLR/HSS. The involved components vary by the generation
of the network and whether the SIM/USIM is attempting a Circuit Switched (CS)
or Packet Switched (PS) connection, but the principle is the same. This
document uses 2G CS Location Updating for reference, as in
<<figure-imsi-regular>>.

The IMSI is transmitted in the Location Updating Request from ME. The VLR
needs an authentication challenge specific to the secret keys on the SIM/USIM to
authenticate the SIM/USIM, and looks the authentication challenges up by the IMSI.
If the VLR does not have any more authentication challenges for the IMSI (as it
happens when the VLR sees the IMSI for the first time), the VLR requests new
authentication challenges from the HLR/HSS. Then the HLR/HSS verifies that the IMSI is
known and, if it is unknown, sends back an error that will terminate the
Location Updating procedure.

After the VLR found the authentication challenge, it authenticates the SIM/USIM, and
performs a Classmark Enquiry and Physical Channel Reconfiguration. Then the VLR
has the required information to finish the Location Updating, and continues
with Process Update_Location_HLR (3GPP TS 29.002). Afterwards, the VLR assigns
a new TMSI with the Location Updating Accept, which is acknowledged by the TMSI
Reallocation Complete. In following Location Updates with the same MSC, the ME
sends the TMSI instead of the IMSI in the Location Updating Request.

However, the allocation of the TMSI is optional (the network may choose
to not perform it), and particularly at mobility changes across the
MSC/VLR boundary, or even across the PLMN boundary, the TMSI allocated
by the previouis network element may not be known, and an IMSI based
Location Updating procedure is used.

Furthermore, at any given point in time, a legitimate network or a rogue
base station can inquire the IMSI from the ME using the "MM IDENTITY
REQUEST (IMSI)" command.

[[figure-imsi-regular]]
.Location Updating in 2G CS with IMSI
["mscgen"]
----
msc {
  hscale="1.75";
  ME [label="ME"], BTS [label="BTS"], BSC [label="BSC"], MSC [label="MSC/VLR"],
  HLR [label="HLR"];

  // BTS <=> BSC: RSL
  // BSC <=> MSC: BSSAP, RNSAP
  // MSC <=> HLR: MAP (process Update_Location_HLR, 3GPP TS 29.002)

  ME   => BTS [label="Location Updating Request"];
  BTS  => BSC [label="Location Updating Request"];
  BSC  => MSC [label="Location Updating Request"];

  --- [label="If necessary: VLR requests new authentication challenges for this IMSI"];
  MSC  => HLR [label="Send Auth Info Request"];
  MSC <=  HLR [label="Send Auth Info Result"];
  ---;

  BSC <=  MSC [label="Authentication Request"];
  BTS <=  BSC [label="Authentication Request"];
  ME  <=  BTS [label="Authentication Request"];
  ME   => BTS [label="Authentication Response"];
  BTS  => BSC [label="Authentication Response"];
  BSC  => MSC [label="Authentication Response"];
  BSC <=  MSC [label="Classmark Enquiry"];
  BTS <=  BSC [label="Classmark Enquiry"];
  ME  <=  BTS [label="Classmark Enquiry"];
  ME   => BTS [label="Classmark Change"];
  BTS  => BSC [label="Classmark Change"];
  BSC  => MSC [label="Classmark Update"];
  BSC <=  MSC [label="Physical Channel Reconfiguration"];
  BTS <=  BSC [label="Ciphering Mode Command"];
  ME  <=  BTS [label="Ciphering Mode Command"];
  ME   => BTS [label="Ciphering Mode Complete"];
  BTS  => BSC [label="Ciphering Mode Complete"];
  BSC  => MSC [label="Ciphering Mode Complete"];

  --- [label="Process Update_Location_HLR (3GPP TS 29.002)"];
  MSC  => HLR [label="Update Location Request"];
  MSC <=  HLR [label="Insert Subscriber Data Request"];
  MSC  => HLR [label="Insert Subscriber Data Result"];
  MSC <=  HLR [label="Update Location Result"];
  ---;

  BSC <=  MSC [label="Location Updating Accept"];
  BTS <=  BSC [label="Location Updating Accept"];
  ME  <=  BTS [label="Location Updating Accept"];
  ME   => BTS [label="TMSI Reallocation Complete"];
  BTS  => BSC [label="TMSI Reallocation Complete"];
  BSC  => MSC [label="TMSI Reallocation Complete"];
}
----

<<<
== Required Changes

This section covers the changes / enhancements required
compared to the existing 3GPP specifications.

[[hlr-imsi-pseudo-storage]]
=== Pseudonymous IMSI Storage in the HLR/HSS

The HLR/HSS must store up to two pseudonymous IMSIs (`imsi_pseudo`) and
their related counters (`imsi_pseudo_i`) per subscriber. Each subscriber
initially has one pseudonymous IMSI allocated. A subscriber has two
valid pseudonymous IMSIs only during the transition phase from the old
pseudonymous IMSI to the new one.

Subsequently, the amount of available IMSIs must be higher than the
amount of subscribers registered with the HLR/HSS. If the amount of
available IMSIs is too small, the HLR/HSS could delay assigning new
pseudonymous IMSIs until new IMSIs are available again.

.Examples for additional subscriber data in HLR
[options="header"]
|===
| Subscriber ID | imsi_pseudo | imsi_pseudo_i
// example IMSIs taken from Wikipedia
| 123
| 310150123456789
| 1

| 234
| 502130123456789
| 1

| 234
| 460001357924680
| 2
|===

==== imsi_pseudo

The value for `imsi_pseudo` is a random choice from the pool of available
IMSIs that the HLR/HSS controls. The pseudonymous IMSI must not be used
by any subscriber as pseudonymous IMSI yet, but may be the real IMSI of
a subscriber.

[[hlr-imsi-pseudo-i]]
==== imsi_pseudo_i

The counter `imsi_pseudo_i` indicates how often a subscribers pseudonymous IMSI
was changed. The value is 1 for the first allocated pseudonymous IMSI of a
subscriber. When allocating a new pseudonymous IMSI for the same subscriber,
the new `imsi_pseudo_i` value is increased by 1. The counter is used by the SIM/USIM
applet to detect and ignore outdated requests related to changing the
pseudonymous IMSI.

<<<
=== SIM/USIM Provisioning

IMSI pseudonymization as specified by this document works with
traditional SIM (used in 2G), as well as with USIM (used from 3G
onwards).

The initial IMSI provisioned in the SIM/USIM is provisioned as the initial
pseudonymous IMSI in the HLR/HSS.

[[sim-app]]
==== SIM applet

SIM/USIM have long supported the installation and operation of
additional applets on the card itself.  The programming language and
runtime environment for such applets is an implementation detail.
However, the industry has converged around JavaCards with related
additional APIs specific to SIM, UICC and USIM.  Depending on the card
profile / provisioning, it is possible for such applets to access the
card file system and modify files on the card, such as the file storing
the IMSI.

A SIM/USIM compatible with this specification is provisioned with a SIM
applet, which is able to change the IMSI once the next pseudonymous IMSI
arrives from the HLR/HSS. A reference implementation is provided in
<<reference-src>>.

===== Counter Storage

The following counter variables are stored in the SIM applet.

[options="header",cols="20%,12%,68%"]
|===
| Name | Initial value | Description

| imsi_pseudo_i
| 1
| See <<hlr-imsi-pseudo-i>>.

| imsi_pseudo_lu
| 0
| Amount of Location Updating procedures done with the same pseudonymous IMSI.

| imsi_pseudo_lu_max
| (decided by operator)
| Maximum amount of Location Updating procedures done with the same
  pseudonymous IMSI, before the SIM applet shows a warning to the subscriber.
|===

===== Switch to Next Pseudonymous IMSI

The SIM applet registers to a suitable SMS trigger (3GPP TS 43.019, Section
6.2). When an SMS from the HLR/HSS in the structure of <<sms-structure>> arrives,
the applet must verify that the SMS is not outdated by comparing `imsi_pseudo_i`
from the SMS with the last `imsi_pseudo_i` that was used when changing the IMSI
(initially 1 as in <<hlr-imsi-pseudo-i>>). The new value must be higher,
otherwise the SMS should not be processed further.

The SIM applet registers a timer with `min_sleep_time` from the SMS. When the
timer triggers, EF~IMSI~ of the SIM/USIM is overwritten with the new pseudonymous
IMSI. The TMSI and related data (EF~LOCI~, EF~PSLOCI~) and ciphering keys
(EF~Kc~, EF~KcGPRS~, EF~Keys~, EF~KeysPS~) are invalidated (see 3GPP TS
31.102). The current `imsi_pseudo_i` from the SMS is stored in the
SIM applet to compare it with the next SMS. `imsi_pseudo_lu` is reset to 0. Afterwards,
the EF~IMSI~ changing procedure in 3GPP TS 11.14, Section 6.4.7.1 is executed
to apply the new IMSI.

// FIXME: do we need to enforce the LU now, with an arbitrary CM Service
// Request, or would this only be necessary for Osmocom? (OS#4404)

===== Warning the Subscriber If the Pseudonymous IMSI Does Not Change

An attacker could potentially block the next pseudonymous IMSI SMS on purpose.
Because the SIM applet cannot decide the next pseudonymous IMSI, it would have
the same pseudonymous IMSI for a long time. Then it could become feasible for
an attacker to track the subscriber by their pseudonymous IMSI. Therefore the
SIM applet should warn the subscriber if the pseudonymous IMSI does not change.

The SIM applet registers to EVENT_EVENT_DOWNLOAD_LOCATION_STATUS (3GPP TS
03.19, Section 6.2) and increases `imsi_pseudo_lu` by 1 when the event is
triggered. If `imsi_pseudo_lu` reaches `imsi_pseudo_lu_max`, the SIM applet
displays a warning to the subscriber.

<<<
[[process-update-location-hlr]]
=== Process Update_Location_HLR

All IMSI Pseudonymization related changes to Process Update_Location_HLR
(3GPP TS 29.002) are optional. Deviations from the existing specification that
are outlined in this section are expected to be enabled or disabled entirely
where IMSI pseudonymization is implemented.

[[figure-imsi-pseudo]]
.Process Update_Location_HLR with IMSI pseudonymization changes
["mscgen"]
----
msc {
  hscale="1.75";
  MSC [label="MSC/VLR"], SMSC [label="SMS-SC"], HLR [label="HLR"];

  MSC   => HLR  [label="Update Location Request"];

  --- [label="If new pseudonymous IMSI was used: deallocate and cancel old pseudonymous IMSI"];
  HLR  box HLR  [label="Deallocate old pseudonymous IMSI"];
  MSC  <=  HLR  [label="Cancel Location Request"];
  MSC   => HLR  [label="Cancel Location Result"];
  ---;

  MSC  <=  HLR  [label="Insert Subscriber Data Request"];
  MSC   => HLR  [label="Insert Subscriber Data Result"];
  HLR  box HLR  [label="Start Next_Pseudo_IMSI_Timer"];
  MSC  <=  HLR  [label="Update Location Result"];
  MSC  box MSC  [label="Finish Location Updating with ME"],

  HLR  box HLR  [label="Wait for Next_Pseudo_IMSI_Timer expiry"];
  |||;
  ...;
  |||;
  HLR  box HLR  [label="Next_Pseudo_IMSI_Timer expired"];

  HLR  box HLR  [label="\nAllocate new pseudonymous IMSI\nif subscriber has only one allocated\n"];
  SMSC <=  HLR  [label="Next Pseudonymous IMSI SMS"];
  SMSC box SMSC [label="Deliver SMS to ME"];
}
----

==== Update Location Request

When Update Location Request arrives, the HLR/HSS does not look up the subscriber
by the IMSI, but by the pseudonymous IMSI instead. Unless the subscriber has
two pseudonymous IMSI allocated and used the new pseudonymous IMSI in the
Update Location Request, this is followed by the existing logic to continue
with Insert Subscriber Data Request.

===== Update Location Request With New Pseudonymous IMSI

If the subscriber has two pseudonymous IMSIs allocated, and the newer entry was
used (higher `imsi_pseudo_i`, see <<hlr-imsi-pseudo-i>>), this section applies.
The older pseudonymous IMSI is deallocated in the HLR/HSS. This is done as early
as possible, so the timeframe where two pseudonymous IMSI are allocated for one
subscriber is short.

A Cancel Location Request with the old pseudonymous IMSI is sent to the VLR, so
the conflicting subscriber entry with the old pseudonymous IMSI is deleted from
the VLR. Receiving a Cancel Location Result is followed by the existing logic
to continue with Insert Subscriber Data Request.

===== Update Location Request With Old Pseudonymous IMSI

If the subscriber has two pseudonymous IMSIs allocated, and the older entry was
used (lower `imsi_pseudo_i`, see <<hlr-imsi-pseudo-i>>), the newer entry is _not_
deallocated. This could lock out the subscriber from the network if the SMS
with the new pseudonymous IMSI arrives with a delay.

==== Insert Subscriber Data Result

When Insert Subscriber Data Result arrives, a subscriber specific
Next_Pseudo_IMSI_Timer starts.

==== Next_Pseudo_IMSI_Timer Expires

If the subscriber has only one pseudonymous IMSI allocated, and the amount of
available IMSIs in the HLR/HSS is high enough, a second pseudonymous IMSI and
related `imsi_pseudo_i` gets allocated for the subscriber (as described in
<<hlr-imsi-pseudo-storage>>).

If the subscriber still has only one pseudonymous IMSI, because not enough
IMSIs were available in the HLR/HSS, the process is aborted here and no SMS with
a next pseudonymous IMSI is sent to the subscriber. The subscriber will get a
new pseudonymous IMSI during the next Location Updating Procedure, if
the HLR/HSS has enough IMSIs available at that point.

An SMS is sent to the SMS - Service Centre (SMS-SC) with the newer pseudonymous
IMSI (higher `imsi_pseudo_i`, see <<hlr-imsi-pseudo-i>>) and related
`imsi_pseudo_i` value.

[[sms-structure]]
==== Next Pseudonymous IMSI SMS Structure

.Next pseudonymous IMSI SMS structure
[packetdiag]
----
{
	colwidth = 32

	0-31:	 IMSI_PSEUDO_I
	32-63:   MIN_SLEEP_TIME
	64-119:  IMSI_PSEUDO
	120-127: PAD
}
----

// FIXME
IMPORTANT: This is a draft. The structure is likely to change after the
reference implementation phase.

IMSI_PSEUDO_I: 32 bits::
See <<hlr-imsi-pseudo-i>>.

MIN_SLEEP_TIME: 32 bits::
Amount of seconds, which the SIM applet should wait before changing to the new
pseudonymous IMSI. Since it is unclear when the SMS will arrive (ME might be
turned off), this is a minimum amount.

IMSI_PSEUDO: 60 bits::
Telephony Binary Coded Decimal (TBCD, 3GPP TS 29.002) version of the next
pseudonymous IMSI.

PAD: 8 bits::
Padding at the end, should be filled with 1111 as in the TBCD specification.

<<<
== Error Scenarios

=== Next Pseudonymous IMSI SMS is Lost

If the SMS with the next pseudonymous IMSI does not arrive, the SIM/USIM will start
the next Location Updating Procedure with the old pseudonymous IMSI. Because
the HLR/HSS has both the old and the new pseudonymous IMSI allocated at this point,
the subscriber is not locked out of the network.

=== Next Pseudonymous IMSI SMS Arrives Out of Order

The next pseudonymous IMSI SMS may arrive out of order. Either, because the
network is not able to deliver them in order, or even because an attacker would
perform a replay attack.

If the SMS arrives out of order, the `imsi_pseudo_i` counter will not be higher
than the value the SIM applet (<<sim-app>>) has stored. Therefore, the applet
will discard the message and the subscriber is not locked out of the network.

// === SMS Arrives Before Timer Expires
// FIXME: OS#4486

<<<
== Recommendations for Real-World Implementations

=== BCCH SI3: ATT = 0

When changing from one pseudonymous IMSI to the next, it is important that the
ME does not detach from the network. Otherwise it would be trivial for an
attacker to correlate the detach with the attach of the same ME with the next
pseudonymous IMSI.

This is controlled with the ATT flag in the SYSTEM INFORMATION TYPE 3 (SI3)
message on the Broadcast Control Channel (BCCH), see 3GPP TS 44.018 Section
10.5.2.11. It must be set to 0.

// FIXME: verify how it set with operators in germany (OS#4404)

=== End to End Encryption of SMS

When deploying the IMSI pseudonymization, the operator should make sure that
the next pseudonymous IMSI SMS (<<sms-structure>>) cannot be read or modified
by third parties. Otherwise, the next pseudonymous IMSI is leaked, and if the
pseudonymous IMSI in the SMS was changed, the SIM/USIM would be locked out of the
network.

The safest way to protect the next pseudonymous IMSI SMS is a layer of end to
end encryption from the HLR/HSS to the SIM/USIM.  The existing means for OTA SMS
security (3GPP TS 23.048) provide mechanisms for integrity protection,
confidentiality as well as replay protection and must be implemented when using
IMSI pseudonymization.

=== User-configurable Minimum Duration Between IMSI Changes

It may be desirable to let subscribers configure their minimum duration between
IMSI changes. This allows subscribers with a high privacy requirement to switch
their pseudonymous IMSI more often, and it allows the pseudonymous IMSI change
to happen less frequently if it is distracting to the subscriber.

How distracting the pseudonymous IMSI change is, depends on the ME. The
following examples were observed:

// FIXME: might need an update after SYS#4481

* A Samsung GT-I9100 Galaxy SII smartphone with Android 4.0.3 displays a
  message at the bottom of the screen for about 5 seconds, but the user
  interface remains usable.
* A Samsung GT-E1200 feature phone displays a waiting screen for 16 to 17
  seconds and is unusable during that time.

<<<
[[reference-src]]
== Reference Implementation with Source Code

A reference implementation for the SIM applet (<<sim-app>>) is available in
source code under the Apache-2.0 license at:

https://osmocom.org/projects/imsi-pseudo

The HLR/HSS modifications described in <<hlr-imsi-pseudo-storage>> and
<<process-update-location-hlr>> were implemented for reference in OsmoHLR from
the Osmocom project, licensed under AGPL-3.0. Information about the source code
and related branches for IMSI pseudonymization can be found at the above URL as
well.
