Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: d6a2febc8ecf1f4288439d5fc158ce42f874fae7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
---
Author: Máté Kovács
Version: 1551-CNL 113 722, Rev. E
Date: 2017-02-02

---
= EAP Protocol Module for TTCN-3 Toolset with TITAN, Description
:author: Máté Kovács
:revnumber: 1551-CNL 113 722, Rev. E
:revdate: 2017-02-02
:toc:

== Presumed Knowledge

To use this protocol module the knowledge of the TTCN-3 language <<_1, [1]>> is essential.

== System Requirements

Protocol modules are a set of TTCN-3 source code files that can be used as part of TTCN-3 test suites only. Hence, protocol modules alone do not put specific requirements on the system used. However, in order to compile and execute a TTCN-3 test suite using the set of protocol modules the following system requirements must be satisfied:

Titan TTCN-3 Test Executor version CRL 113 200 R7A (1.7.pl0) or higher installed. For Installation Guide see <<_2, [2]>>.

NOTE: This version of the test port is not compatible with Titan releases earlier than CRL 113 200 R7A.

= Usage

== Overview

Protocol modules implement the messages structure of the related protocol in a formalized way, using the standard specification language TTCN-3. This allows defining of test data (templates) in the TTCN-3 language <<_1, [1]>> and correctly encoding/decoding messages when executing test suites using the TITAN TTCN-3 test environment.

Protocol modules are using TITAN’s RAW encoding attributes <<_2, [2]>> and hence is usable with the TITAN test toolset only.

== Installation

The set of protocol modules can be used in developing TTCN-3 test suites using any text editor; however, to make the work more efficient a TTCN3enabled text editor is recommended (for example nedit, xemacs). Since the GTPv2 v10.6.0 protocol is used as a part of a TTCN-3 test suite, this requires TTCN-3 Test Executor be installed before the module can be compiled and executed together with other parts of the test suite. For more details on the installation of TTCN-3 Test Executor see the relevant section of <<_2, [2]>>.

== Configuration

None.

== Implemented Protocols

This set of protocol modules implements protocol messages and constants of RFCs of EAP, EAP-AKA, EAP-AKA’, EAP-SIM, EAP-TTLS.

== Implemented Messages

The following messages will be implemented: All message defined in <<_3, [3]>>, <<_4, [4]>>, <<_5, [5]>>, <<_6, [6]>> and <<_7, [7]>>.

[[protocol-modifications-deviations]]
== Protocol Modifications/Deviations

There are currently no deviations from the mentioned standards.

== Backward Incompatibilities

None.

= Implementation Specifics

The `enc_EAP_PDU` and `dec_EAP_PDU` are used to encode and decode the given TTCN PDU_EAP type to octetsting and vice versa respectedly.

The other functions implemented in the Protocol Module are used in junction with the EAP protocol to compute the various parameters in the EAP messages. A usage example can be found in section <<implemented_encoding_and_decoding_functions, Implemented Encoding and Decoding Functions>>. List of the functions implemented can be found in the Function Specification.

= Interface Description

[[encoding-decoding-and-other-related-functions]]
== Encoding/Decoding and Other Related Functions

This product also contains encoding/decoding functions that assure correct encoding of messages when sent from Titan and correct decoding of messages when received by Titan. Other implemented functions are used with the EAP protocol parameter computing.

[[implemented_encoding_and_decoding_functions]]
== Implemented Encoding and Decoding Functions

[cols=3*,options=header]
|===

|Name
|Type of formal parameters
|Type of return value

|`enc_PDU_EAP`
|PDU_EAP
|octetstringdec_PDU_EAP octetstring

|`dec_PDU_EAP`
|octetstring
|PDU_EAP

|`enc_AKA_Attrib`
|EAP_AKA_Attrib_List
|octetstring

|`dec_AKA_Attrib`
|octetstring
|EAP_AKA_Attrib_List

|`f_enc_eap_sim_attrib_list`
|EAP_SIM_Attrib_List
|octetstring

|`f_dec_eap_sim_attrib_list`
|octetstring
|EAP_SIM_Attrib_List

|`f_enc_eap_aka_attrib_list`
|EAP_AKA_Attrib_List
|octetstring

|`f_dec_eap_aka_attrib_list`
|octetstring
|EAP_AKA_Attrib_List

|`f_enc_tls_handshakeData`
|TLS_HandshakeData
|octetstring

|`f_dec_tls_handshakeData`
|octetstring
|TLS_HandshakeData_t

|`eap_sim_derive_mk`
|octetstring
|octetstring

|`fips186_2_prf`
|octetstring
|octetstring

|`eap_aka_derive_mk`
|octetstring
|octetstring

|`eap_aka_derive_reauth_msk_emsk`
|octetstring
|octetstring

|`eap_akaprime_derive_mk`
|octetstring
|octetstring

|`Calculate_AT_CheckCode`
|octetstring
|octetstring

|`f_calc_Kaut`
|octetstring
|octetstring

|`f_calc_AKA_Keys`
|octetstring
|octetstring

|`f_get_ServersPublicKey`
|octetstring
|octetstring

|`f_prf`
|octetstring
|octetstring
|===

== Authentication and Encryption Key Generation

The following functions are implemented in TCCUsefulFunctions_CNL113472 <<_8, [8]>> / `TCCSecurity_Functions` module, which were earlier part of the EAP Protocol Module:

[cols=2*,options=header]
|===

|Deleted
|Use this from `TCCSecurity_Functions`

|A3A8
|`f_EAPSIM_A3A8`

|hmac_sha1_128_vector
|`f_calculate_HMAC_SHA1`

|aes_128_cbc_decrypt
|`f_AES_CBC_128_Decrypt_OpenSSL`

|aes_128_cbc_encrypt
|`f_AES_CBC_128_Encrypt_OpenSSL`

|f1
|`f_IMSAKA_f1`

|f2345
|`f_IMSAKA_f2345`

|f1star
|`f_IMSAKA_f1star`

|f5star
|`f_IMSAKA_f5star`

|akaprime_hmac_sha256_vector
|`f_calculate_HMAC_SHA256`

|f_calc_SRES
|`f_EAPSIM_A3A8`

|f_sha1_256
|`f_calculate_HMAC_SHA256`

|f_sha1
|`f_calculate_HMAC_SHA1`

|f_md5
|`f_calculateMD5`

|f_calc_EAPSIM_Keys
|`f_EAPSIM_A3A8`
|===

A `Master Key` is derived from the underlying GSM authentication values (`Kc keys`), the `nonce_mt`, and other relevant context as follows.

[source]
----
function eap_sim_derive_mk(octetstring identity, octetstring nonce_mt,integer selected_version, octetstring ver_list, octetstring kc) return octetstring;
----

On EAP-AKA full authentication, a `Master Key (MK)` is derived from the underlying AKA values (`CK` and `IK keys`), and the identity, as follows.

[source]
function eap_aka_derive_mk(octetstring identity, octetstring ik, octetstring ck) return octetstring;

On EAP-AKA fast re-authentication, the `XKEY’` as the seed value of the pseudo-random generator for the `Master Session Key (MSK)` and the `Extended Master Session Key (EMSK)` is derived from the underlying AKA value (`Master Key`), the `nonce_s` and the counter values and the identity, as follows.

[source]
----
function eap_aka_derive_reauth_msk_emsk(octetstring identity, octetstring counter, octetstring nonce_s, octetstring mk) return octetstring;
----

The `_checkcode_` is a hash value, calculated with SHA1 [SHA-1], over all EAP-Request/AKA-Identity and EAP-Response/AKA-Identity packets exchanged in the authentication exchange.

[source]
function Calculate_AT_CheckCode(octetstring rcveap,octetstring sendeap) return octetstring;

When generating `Kaut` and `Kenc` the input octetstring is concatenated from `identifier, A3A8, nonce_mt, version list` and `selected version`.

[source]
function f_calc_Kaut(in octetstring input,inout octetstring kencr) return octetstring;

The function below calculates `XDOUT`, `Kencr`, `Kaut` and `AK` values. `Kaut` is used when calculating MAC values, `Kencr` is used for encryption and decryption of `AT_ENCR_DATA` attributes, and `AK` is used for calculating and verifying `AT_AUTN` and `AT_AUTS` values.

[source]
----
function f_calc_AKA_Keys(in octetstring pl_eap_identity, in octetstring pl_AKA_K,in octetstring pl_rand, inout octetstring pl_AK,inout octetstring pl_Kaut,inout octetstring pl_Kencr) return octetstring

eap_sim_derive_mk rfc4186
eap_aka_derive_mk rfc4187
eap_aka_derive_reauth_msk_emsk rfc4187
Calculate_AT_CheckCode rfc4187
f_calc_Kaut rfc5448
f_get_ServersPublicKey rfc5247
f_prf rfc5281
----

= Examples

== EAP Packet Encoding and Decoding

The following example shows how an EAP packet can be encoded and decoded.

[source]
----
var PDU_EAP v_EAP_PDU;
var octetstring data;

data:= enc_PDU_EAP(v_EAP_PDU);

v_EAP_PDU := dec_PDU_EAP(data);
----

== Computation of MAC Parameter in an EAP Message

The following example shows how an EAP packet MAC parameter can be computed with the

[source]
----
import from TCCSecurity_Functions all;
[…]
var EAP_PDU v_packetToSend_EAP;
var octetstring v_ck, v_ik, v_name;

var octetstring vl_mk:= eap_akaprime_derive_mk(v_name, v_ik,v_ck);
var octetstring vl_k_aut := substr(vl_mk,16,32);
var octetstring vl_macFull :=
f_calculate_HMAC_SHA256 (vl_k_aut,enc_PDU_EAP(v_packetToSend_EAP),32);
var octetstring vl_mac :=substr(vl_macFull,0,16);
----

= Terminology

== Abbreviations

EAP Extensible Authentication Protocol

PDU Protocol Data Unit

IETF Internet Engineering Task Force

TTCN-3 Testing and Test Control Notation version 3

[[terminology-0]]
== Terminology

TITAN TTCN-3 Test Executor (see <<_2, [2]>>).

= References

[[_1]]
[1] ETSI ES 201 873-1 v4.5.1 (2013-04) The Testing and Test Control Notation version 3. Part 1: Core Language

[[_2]]
[2] User Guide for TITAN TTCN-3 Test Executor

[[_3]]
[3] IETF https://tools.ietf.org/html/rfc3748[RFC 3748] +
Extensible Authentication Protocol (EAP)

[[_4]]
[4] IETF https://tools.ietf.org/html/rfc4187[RFC 4187] +
Extensible Authentication Protocol Method for 3rd Generation Authentication and Key Agreement (EAP-AKA)

[[_5]]
[5] IETF https://tools.ietf.org/html/rfc5448[RFC 5448] +
Improved Extensible Authentication Protocol Method for 3rd Generation Authentication and Key Agreement (EAP-AKA')

[[_6]]
[6] IETF https://tools.ietf.org/html/rfc4186[RFC 4186] +
Extensible Authentication Protocol Method for Global System for Mobile Communications (GSM) Subscriber Identity Modules (EAP-SIM)

[[_7]]
[7] IETF https://tools.ietf.org/html/rfc768[RFC 5281] +
Extensible Authentication Protocol Tunneled Transport Layer Security-Authenticated Protocol Version 0 (EAP-TTLSv0)

[[_8]]
[8] TCC Useful Functions for TTCN-3 Toolset with TITAN

Back to the top