Demonstration of the UMTS authentication along with Diameter



Testbed Description:
The demonstration was carried out for the purpose of how the Diameter base protocol and the SIM application operate on UMTS environment, and composed of the UMTS terminal emulator, the Diameter client for the UMTS Base Station and the Diameter server supporting SIM application serving for the UMTS authentication.
The test bed architecture for this demonstration is the following:

demo architecture

First of all, the stack of MAC and UMTS on the UMTS terminal and BS (Base Station) is not implemented, but simulated in  the ethernet interface. The UMTS Terminal first requests authentication with its identity and key from the authentication server, the Diameter server. The request is transferred encapsulated in a certain protocol recognized between the terminal and the UMTS BS for authentication. On receipt of the request, the UMTS BS delivers it to the Diameter client and it decapsulates the adhoc-encapsulated parquet and encapsulates it in the Diameter protocol. The Diameter-encapsulated parquet is sent to the authentication server and verified. The delivery between the two points, the Diameter client and server, is done possibly over either IPv4 or IPv6. The authentication procedure is performed along with the (U)SIM mechanism for the UMTS authentication. The authentication response is sent back to the Diameter client, and the UMTS BS possibly performs a certain process according to the authentication response. In this demo, it responds with the value 0 or 1, indicating rejected or authenticated respectively.

Support:
INRIA Diameter implementations support the SIM application for the UMTS authentication and the limited NASREQ as well. They work over both IPv4 and IPv6. The communication between the UMTS terminal and BS is performed over IPv6.

Download: For the moment, only @irs++ participants are authorized to have access to executable codes.
All executable codes are compiled on gcc (linux 8.0 v3.2-7) and Tcl/Tk (v8.3) and successfully tested on Linux kernel 2.4.18-14. Before download, make sure that the required configuration of your system is well adjusted for the following executable codes.

UMTS terminal - utiludp4c.tcl and util_c_tcl, which are implemented in Tcl/Tk and C, respectively, so it is required to download the two files. It is designed to support IPv4 as well as IPv6, but it, as default, is done for IPv6, so a slight modification is required for IPv4.
The Diameter Client - diaclient_umts .
The Diameter Server - diameterd6 .
The configuration files - diadb for the Diameter server and dia_cldb for the Diameter client.
[ Enter Achieve ]

Setup Environment:
Network setup for IPv6 on both Diameter server and client.
1. modify the following on '/etc/sysconfig/network':
HOSTNAME=
NETWORKING_IPV6=
IPV6_DEFAULTDEV=
IPV6_DEFAULTGW=

2. modify the following on '/etc/sysconfig/network-scripts/ifcfg-eth0'
DEVICE=
BOOTPROTO=static
ONBOOT=
IPV6INIT=
IPV6ADDR=

3. validate the modification with the following:
/etc/rc.d/init.d/network restart

4. check whether it's good or not.
/sbin/ifconfig

/usr/sbin/ping6 somewhere
PING host(host.inria.fr) 56 data bytes
ping: recvmsg: No route to host
If you see above, it's fine. There is a very well known bug in linux 2.4.18-14.

Diameter setup on both server and client.
2-2-1. add host names of diameter server and client in ip6 to '/etc/hosts' like
2001:660:xxx:x::100                      host.inria.fr host
2001:660:xxx:x::101                     host2.inria.fr host2

Add the following to '/etc/services'.
diameter        1812/tcp                        # Diameter
diameter-acct   1813/tcp                        # Diameter Accounting

Additionally, the client and the terminal should add the following.
umts-diameter  1811/udp                        # UMTS/Diameter & Terminal

Execution:
The execution should go with the following in order.
1. Diameter Server
./diameterd6 -A inet6 -d ./diadb -sxy -l stdout

description:
-A [inet6/inet] : determine ip6 or ip4
-d [diadb path] : specify the path of diadb
-s : launch a single process for server
-x : debug option
-y : debug option
-l stdout : print log to stdout

2. Diameter Client
./diaclient_umts -A inet6 -e sim -d ./dia_cldb  hostnameofdiaserver 265 clepartage
./diaclient_umts -A inet6  -d ./dia_cldb hostnameofdiaserver 265 clepartage

description:
-A [inet6/inet] : determine the type of usage for ip6 or ip4
-e sim : change/response mechanism
-d [diadb path] : specify the path of diadb
-f [entity file] : contain the entity of user like the following 'User-Name="bob", Password="bob"'
For example, the 'accept' file contains 'User-Name=acpt-usr, Password=bob',
the 'reject' file contains 'User-Name=rej-usr, Password=bob', and
the 'system' file contains 'User-Name=sys-test, Password=testdiameter'. For the sys-test user, check '/etc/passwd' if there is the one or not.
airs : host name of Diameter server. It should be matched with the entity of /etc/hosts
265 : the command number of Diameter, which corresponds to the command code of NASREQ. That should be changed into an appropriate UMTS code.
clepartage : the secret password shared between the server and the client. It should be matched with the entity of /diadb/clients on the server.

Note: bob, accept, reject and system files should be made in hand and also exclude "-e sim". In addition, the entities defined in those files should also be specified in 'diadb/users' along with the appropriate values of 'Auth_Type', respectively.
For example,
badguy  Auth-Type = Reject
        State = "This user is not temporally allowed for login.",
        Reply-Message = "Test for Auth-Type=Reject"

goodguy Auth-Type = Accept
    State = "This user is temporally allowed without password.",
    Reply-Message = "Test for Auth-Type=Accept"

user Auth-Type = System
    Service-Type = Callback-Login-User,
    Login-IP-Host = timeshare1,
    Login-Service = PortMaster,
    Callback-Number = "9,1-800-555-1212",
    Reply-Message = "Test for Auth-Type=System"

are the entities, respectively, for reject, accept and system users. For the system user, the account of the user being authenticated should long to the user group of unix/linux system.

3. UMTS terminal
./utiludp4c.tcl

Trouble shooting:
[1] I encountered an error like "getaddrinfo failed ... Servname not supported for ai_socktype"
[1-A] You forgot to adding port numbers of diameter to /etc/service. refer to setup environment.

[2] I encountered an error like "Failed to find Origin Realm" when I executed "./diaclient_umts -A inet6 -e sim -d ../dia_cldb -f bob hostR 265 cle".
[2-A] '/etc/hosts' should be checked whether there is the entity corresponding to hostR and also the order the following '2001:...  hostR.inria.fr hostR'.

If any questions, email me Hahnsang.Kim@inria.fr . I will try to answer you as soon as i can.

23 May,  2003.