| |
| Osmocom Authentication Protocol (OAP) |
| |
| 1. General |
| |
| The Osmocom Authentication Protocol employs mutual authentication to register a |
| client with a server over an IPA connection. Milenage is used as the |
| authentication algorithm, where client and server have a shared secret. |
| |
| For example, an SGSN, as OAP client, may use its SGSN ID to register with a MAP |
| proxy, an OAP server. |
| |
| 1.1. Connection |
| |
| The protocol expects that a reliable, ordered, packet boundaries preserving |
| connection is used (e.g. IPA over TCP). |
| |
| 1.2. Using IPA |
| |
| By default, the following identifiers should be used: |
| - IPA protocol: 0xee (OSMO) |
| - IPA OSMO protocol extension: 0x06 (OAP) |
| |
| 2. Procedures |
| |
| Ideal communication sequence: |
| |
| Client Server |
| | | |
| | Register (ID) | |
| |----------------------------------->| |
| | | |
| | Challenge (RAND+AUTN) | |
| |<-----------------------------------| |
| | | |
| | Challenge Result (XRES) | |
| |----------------------------------->| |
| | | |
| | Register Result | |
| |<-----------------------------------| |
| |
| Variation "test setup": |
| |
| Client Server |
| | | |
| | Register (ID) | |
| |----------------------------------->| |
| | | |
| | Register Result | |
| |<-----------------------------------| |
| |
| Variation "invalid sequence nr": |
| |
| Client Server |
| | | |
| | Register (ID) | |
| |----------------------------------->| |
| | | |
| | Challenge (RAND+AUTN) | |
| |<-----------------------------------| |
| | | |
| | Sync Request (AUTS) | |
| |----------------------------------->| |
| | | |
| | Challenge (RAND'+AUTN') | |
| |<-----------------------------------| |
| | | |
| | Challenge Result (XRES) | |
| |----------------------------------->| |
| | | |
| | Register Result | |
| |<-----------------------------------| |
| |
| 2.1. Register |
| |
| The client sends a REGISTER_REQ message containing an identifier number. |
| |
| 2.2. Challenge |
| |
| The OAP server (optionally) sends back a CHALLENGE_REQ, containing random bytes |
| and a milenage authentication token generated from these random bytes, using a |
| shared secret, to authenticate itself to the OAP client. The server may omit |
| this challenge entirely, based on its configuration, and immediately reply with |
| a Register Result response. If the client cannot be registered (e.g. id is |
| invalid), the server sends a REGISTER_ERR response. |
| |
| 2.3. Challenge Result |
| |
| When the client has received a Challenge, it may verify the server's |
| authenticity and validity of the sequence number (included in AUTN), and, if |
| valid, reply with a CHALLENGE_RES message. This shall contain an XRES |
| authentication token generated by milenage from the same random bytes received |
| from the server and the same shared secet. If the client decides to cancel the |
| registration (e.g. invalid AUTN), it shall not reply to the CHALLENGE_REQ; a |
| CHALLENGE_ERR message may be sent, but is not mandatory. For example, the |
| client may directly start with a new REGISTER_REQ message. |
| |
| 2.4. Sync Request |
| |
| When the client has received a Challenge but sees an invalid sequence number |
| (embedded in AUTN, according to the milenage algorithm), the client may send a |
| SYNC_REQ message containing an AUTS synchronisation token. |
| |
| 2.5. Sync Result |
| |
| If the server has received a valid Sync Request, it shall answer by directly |
| sending another Challenge (see 2.2.). If an invalid Sync Request is received, |
| the server shall reply with a REGISTER_ERR message. |
| |
| 2.6. Register Result |
| |
| The server sends a REGISTER_RES message to indicate that registration has been |
| successful. If the server cannot register the client (e.g. invalid challenge |
| response), it shall send a REGISTER_ERR message. |
| |
| 3. Message Format |
| |
| 3.1. General |
| |
| Every message is based on the following message format |
| |
| IEI Info Element Type Pres. Format Length |
| Message type 4.2.1 M V 1 |
| |
| The receiver shall be able to receive IEs in any order. Unknown IEs shall be |
| ignored. |
| |
| 3.2.1. Register Request |
| |
| Client -> Server |
| |
| IEI Info Element Type Pres. Format Length |
| Message type 4.2.1 M V 1 |
| 30 Client ID big endian int (2 oct) M TLV 4 |
| |
| 3.2.2. Register Error |
| |
| Server -> Client |
| |
| IEI Info Element Type Pres. Format Length |
| Message type 4.2.1 M V 1 |
| 02 Cause GMM cause, M TLV 3 |
| 04.08: 10.5.5.14 |
| |
| 3.2.6. Register Result |
| |
| Server -> Client |
| |
| IEI Info Element Type Pres. Format Length |
| Message type 4.2.1 M V 1 |
| |
| 3.2.3. Challenge |
| |
| Server -> Client |
| |
| IEI Info Element Type Pres. Format Length |
| Message type 4.2.1 M V 1 |
| 20 RAND octet string (16) M TLV 18 |
| 23 AUTN octet string (16) M TLV 18 |
| |
| 3.2.4. Challenge Error |
| |
| Client -> Server |
| |
| IEI Info Element Type Pres. Format Length |
| Message type 4.2.1 M V 1 |
| 02 Cause GMM cause, M TLV 3 |
| 04.08: 10.5.5.14 |
| |
| 3.2.5. Challenge Result |
| |
| Client -> Server |
| |
| IEI Info Element Type Pres. Format Length |
| Message type 4.2.1 M V 1 |
| 21 XRES octet string (8) M TLV 10 |
| |
| 3.2.3. Sync Request |
| |
| Client -> Server |
| |
| IEI Info Element Type Pres. Format Length |
| Message type 4.2.1 M V 1 |
| 20 AUTS octet string (16) M TLV 18 |
| |
| 3.2.4. Sync Error |
| |
| Server -> Client |
| |
| IEI Info Element Type Pres. Format Length |
| Message type 4.2.1 M V 1 |
| 02 Cause GMM cause, M TLV 3 |
| 04.08: 10.5.5.14 |
| |
| 4. Information Elements |
| |
| 4.1. General |
| |
| [...] |
| |
| 4.2.1. Message Type |
| |
| +---------------------------------------------------+ |
| | 8 7 6 5 4 3 2 1 | |
| | | |
| | 0 0 0 0 0 1 0 0 - Register Request | |
| | 0 0 0 0 0 1 0 1 - Register Error | |
| | 0 0 0 0 0 1 1 0 - Register Result | |
| | | |
| | 0 0 0 0 1 0 0 0 - Challenge Request | |
| | 0 0 0 0 1 0 0 1 - Challenge Error | |
| | 0 0 0 0 1 0 1 0 - Challenge Result | |
| | | |
| | 0 0 0 0 1 1 0 0 - Sync Request | |
| | 0 0 0 0 1 1 0 1 - Sync Error (not used) | |
| | 0 0 0 0 1 1 1 0 - Sync Result (not used) | |
| | | |
| +---------------------------------------------------+ |
| |
| 4.2.2. IE Identifier (informational) |
| |
| These are the standard values for the IEI. |
| |
| +---------------------------------------------------------+ |
| | IEI Info Element Type | |
| | | |
| | 0x02 Cause GMM cause, 04.08: 10.5.5.14 | |
| | 0x20 RAND octet string | |
| | 0x23 AUTN octet string | |
| | 0x24 XRES octet string | |
| | 0x25 AUTS octet string | |
| | 0x30 Client ID big endian int (2 octets) | |
| +---------------------------------------------------------+ |
| |
| 4.2.3. Client ID |
| |
| 8 7 6 5 4 3 2 1 |
| +-----------------------------------------------------+ |
| | | Client ID IEI | octet 1 |
| +-----------------------------------------------------+ |
| | Length of Client ID IE contents (2) | octet 2 |
| +-----------------------------------------------------+ |
| | Client ID number, most significant byte | octet 3 |
| +-----------------------------------------------------+ |
| | Client ID number, least significant byte | octet 4 |
| +-----------------------------------------------------+ |
| |
| The Client ID number shall be interpreted as an unsigned 16bit integer, where 0 |
| indicates an invalid / unset ID. |
| |