EAP-PEAP-GTC

What is Expansion of EAP-PEAP-GTC?

EAP-PEAP-GTC stands for Extensible Authentication Protocol – Protected Extensible Authentication Protocol – Generic Token Card.

What is EAP-PEAP-GTC?

It is an authentication method that encapsulates Generic Token Card (GTC) authentication inside a secure TLS tunnel provided by PEAP (Protected EAP). It is mainly used for secure identity verification in enterprise wireless and VPN networks.

Why is EAP-PEAP-GTC useful?

  • Provides secure authentication over untrusted networks.

  • Encapsulates credentials in a TLS tunnel, preventing eavesdropping.

  • Supports token-based and password-based authentication.

  • Works in enterprise WLAN environments with RADIUS servers.

How it works?

  • A TLS tunnel is created between client and authentication server using PEAP.

  • Inside this tunnel, GTC exchanges user credentials (passwords or tokens).

  • Server validates credentials with a backend authentication system (like RADIUS).

  • If valid, mutual authentication completes and encryption keys are derived.

Where is EAP-PEAP-GTC used?

  • Enterprise Wi-Fi authentication (WPA2/WPA3-Enterprise).

  • VPN authentication with RADIUS backend.

  • Corporate and government secure networks.

  • Environments requiring token card or password-based identity verification.

Which OSI layer does this protocol belong to?

  • Primarily operates at the Application Layer.

  • Relies on TLS (Transport Layer Security) for encryption.

  • Uses transport protocols (TCP/UDP) at lower layers for message delivery.

Is EAP-PEAP-GTC Windows specific?

  • No. Supported on Windows but not limited to it.

Is EAP-PEAP-GTC Linux specific?

  • No. It is supported across multiple platforms including Linux, Windows, and mobile OS with supplicant support.

Which Transport Protocol is used by EAP-PEAP-GTC?

  • Uses EAP over RADIUS, typically carried over UDP (ports 1812/1813).

  • TLS runs inside EAP to protect credentials.

Which Port is used by EAP-PEAP-GTC?

  • RADIUS: UDP 1812 (authentication), UDP 1813 (accounting).

  • Older systems may use UDP 1645/1646.

Is EAP-PEAP-GTC using Client-Server model?

  • Yes. - Client (supplicant) ↔ Authenticator (AP/Switch) ↔ Authentication Server (RADIUS).

Whether EAP-PEAP-GTC protocol uses certificates?

  • Yes. Server certificates are mandatory to establish the TLS tunnel.

How many frame exchanges are seen during connection for EAP-PEAP-GTC protocol?

  • Multiple exchanges: - EAPOL-Start / EAP-Request / Identity. - TLS handshake frames. - GTC credential exchange inside TLS tunnel. - Success/Failure frames.

  • Typically 6–10 round trips depending on handshake complexity.

Whether EAP-PEAP-GTC Protocol uses client certificates?

  • No. Generally only server certificates are required.

  • Client authenticates with username/password or token inside TLS tunnel.

Whether EAP-PEAP-GTC Protocol uses Server Certificates?

  • Yes. Server certificate is essential to create the TLS tunnel and prove server identity.

Is EAP-PEAP-GTC Protocol dependent on TCP?

  • Indirectly, yes – TLS typically uses TCP transport when carried over RADIUS over TCP or in tunneled environments.

  • However, with RADIUS it usually uses UDP.

Is EAP-PEAP-GTC Protocol dependent on UDP?

  • Yes. Standard RADIUS messages carrying EAP use UDP ports 1812/1813.

What are the roles involved when testing EAP-PEAP-GTC Protocol?

  • Supplicant (Client device) – requests access.

  • Authenticator (AP/Switch) – passes EAP messages.

  • Authentication Server (RADIUS) – validates credentials inside TLS tunnel.

Does EAP-PEAP-GTC Protocol work with freeRADIUS server on Linux?

  • Yes. FreeRADIUS supports PEAP with GTC as an inner method.

Does EAP-PEAP-GTC Protocol work with Internal RADIUS server of hostapd?

  • Limited support. Hostapd’s built-in RADIUS server may not fully support PEAP-GTC; usually external FreeRADIUS is used.

What is the RFC version used for EAP-PEAP-GTC Protocol?

  • PEAP itself is not an IETF standard RFC but an Internet Draft (Microsoft, Cisco, RSA).

  • EAP is defined in RFC 3748.

  • GTC is defined in RFC 3748 (Section 5.8).

During Connection Procedure which EAPoL packets are encrypted?

  • The packets inside the TLS tunnel are encrypted (credential exchange).

  • Outer EAPoL frames (Identity, Start, Success/Failure) are not encrypted.

Can you explain different stages of Connection Procedure for EAP-PEAP-GTC?

  • Stage 1: EAPoL exchange (Start, Identity).

  • Stage 2: TLS handshake to set up secure tunnel.

  • Stage 3: GTC credentials sent inside TLS tunnel.

  • Stage 4: Authentication server validates credentials.

  • Stage 5: Success message sent, PMK generated.

What is the final output of Connection Procedure?

  • A Pairwise Master Key (PMK) is derived and passed to the authenticator (AP).

  • This key is later used to derive PTK for data encryption in Wi-Fi.

What is the format of the key generated after the connection procedure?

  • PMK is a 256-bit (32-byte) key.

Where is the use of PMK generated by the Connection Procedure?

  • PMK is used in the 4-way handshake to derive PTK (Pairwise Transient Key).

  • PTK is then used for encrypting user data over the secure Wi-Fi link.

  • In this section, you are going to learn

  • Terminology

  • Version Info

  • rfc details

  • Run Free RADIUS

FreeRADIUS: Download latest freeradius source code

Note

  • Make sure internet is available in laptop to download freeradius package

test:~$ wget https://github.com/FreeRADIUS/freeradius-server/archive/v3.0.x.tar.gz

FreeRADIUS: Extract freeradius

test:~$ tar -zvf v3.0.x.tar.gz

FreeRADIUS: Change directory to Radius server

test:~$ cd freeradius-server-3.0/

FreeRADIUS: Check the current working directory using pwd command

Note

  • Make sure your current working directory is freeradius-server-3.0

test:~$ pwd
/home/test/freeradius-server-3.0

FreeRADIUS: Open debian/rules and add this line –without-rml_sql_iodbc above –without-rlm_eap_ikev2

test:~$ vim debian/rules
--without-rml_sql_iodbc \
--without-rlm_eap_ikev2 \

FreeRADIUS: Configure for Compilation

test:~$ ./configure

FreeRADIUS: Build the Radius server

test:~$ make

FreeRADIUS: Go to raddb folder (all radius server/client files and certificates and keys will be generated here)

test:~$ cd /usr/local/etc/raddb

FreeRADIUS: Open clients.conf file and verify localhost client is present else add your own client like below

test:~$ sudo vi clients.conf

client 192.168.56.10{
ipaddr = 192.168.56.10
secret = testing123
}  

FreeRADIUS: Open users file and uncomment below two lines or add

test:~$ sudo vi users

bob 	Cleartext-Password := "testing123"
 	Reply-Message := "Hello, %{User-Name}"

FreeRADIUS: Set default_eap_type=tls in eap file located in /usr/local/etc/raddb/mods-enabled

test:~$ sudo vi /usr/local/etc/raddb/mods-enabled/eap

default_eap_type=peap

FreeRADIUS: Start radius server

test:~$ sudo radiusd -X
  • Run AP mode operation with hostapd

AP : Download hostapd

Note

  • Make sure internet is available in laptop to download hostapd package

test:~$ wget http://w1.fi/releases/hostapd-2.9.tar.gz

AP: Install required packages

test:~$ sudo apt install libnl-genl-3-dev libnl-3-dev libdbus-glib-1-dev

AP : Extract hostapd

test:~$ tar -xzvf hostapd-2.9.tar.gz

AP : Change directory to hostapd

test:~$ cd hostapd-2.9/hostapd/

AP : Check the current working directory using pwd command

Note

  • Make sure your current working directory is hostapd

test:~$ pwd
/home/test/hostapd-2.9/hostapd

AP : Copy the contents of defconfig file to .config file

Note

  • .config file is required for make to start compilation of hostapd

test:~$ sudo cp defconfig .config

AP : Complile hostapd

Note

  • Compile hostapd by running make command

test:~$ make

AP : Check for the binaries created

Note

  • Make sure hostapd and hostapd_cli are present

test:~$ ls
hostapd
hostapd_cli

AP : Create a hostapd.conf file in /etc/hostapd folder with below content

test:~$ sudo vim /etc/hostapd/hostapd.conf

ctrl_interface=/var/run/hostapd
interface=enp0s8
driver=wired
logger_stdout=1
logger_stdout_level=1
debug=2
ieee8021x=1
eap_server=0
eap_user_file=/etc/hostapd/eap_user
eap_reauth_period=3600
use_pae_group_addr=1
auth_algs=1
auth_server_addr=127.0.0.1
auth_server_port=1812
auth_server_shared_secret=testing123
acct_server_addr=127.0.0.1
acct_server_port=1812
acct_server_shared_secret=testing123
macaddr_acl=0
ca_cert=/usr/local/etc/raddb/certs/ca.pem
server_cert=/usr/local/etc/raddb/certs/server.crt
private_key=/usr/local/etc/raddb/certs/server.p12
private_key_passwd=whatever 

AP : Create a file eap_user in /etc/hostapd/ folder with below content

test:~$ sudo vim /etc/hostapd/eap_user

AP : Run hostapd

test:~$ sudo ./hostapd /etc/hostapd/hostapd.conf
enp0s8: interface state UNINITIALIZED->ENABLED
enp0s8: AP-ENABLED

STA : Download wpa_supplicant

Note

  • Make sure internet is available in laptop to download supplicant package

test:~$ wget https://w1.fi/releases/wpa_supplicant-2.9.tar.gz

STA: Install required packages

test:~$ sudo apt install libnl-genl-3-dev libnl-3-dev libdbus-glib-1-dev

STA : Extract wpa_supplicant

test:~$ tar -xvf wpa_supplicant-2.9.tar.gz

STA : Change directory to wpa_supplicant

test:~$ cd wpa_supplicant-2.9/wpa_supplicant/

STA : Check the current working directory using pwd command

Note

  • Make sure your current working directory is wpa_supplicant

test:~$ pwd
/home/test/wpa_supplicant-2.9/wpa_supplicant

STA : Copy the contents of defconfig file to .config file

Note

  • .config file is required for make to start compilation of supplicant

test:~$ cp defconfig .config

STA : Compile wpa_supplicant

Note

  • Compile supplicant by running make command.

test:~$ make

STA: You might get errors while make regarding openssl headers in that case install the openssl headers and then do make clean and then do make again.

test:~$ sudo apt install libssl-dev
test:~$ make clean
test:~$ make

STA : Check for the binaries created

Note

  • Make sure wpa_supplicant and wpa_cli are present

test:~$ ls
wpa_supplicant
wpa_cli

STA: Copy required certificates from hostapd to wpa_supplicant

STA : Create wpa_supplicant.conf

test:~$ sudo vim wpa_supplicant.conf

ctrl_interface=/run/wpa_supplicant
update_config=1
network={
key_mgmt=WPA-EAP
eap=PEAP
phase2="auth=GTC"
identity="bob"
password="testing123"
}

STA : Run wpa_supplicant

test:~$ sudo ./wpa_supplicant -D wired -i enp0s8 -c wpa_supplicant.conf
enp0s8: CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully

STA: Test

test:sudo ./wpa_cli -i enp0s8
> status
  • setup

  • setup

  • packet details

  • usecases

  • features

  • Reference links