123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- hostapd and Wi-Fi Protected Setup (WPS)
- =======================================
- This document describes how the WPS implementation in hostapd can be
- configured and how an external component on an AP (e.g., web UI) is
- used to enable enrollment of client devices.
- Introduction to WPS
- -------------------
- Wi-Fi Protected Setup (WPS) is a mechanism for easy configuration of a
- wireless network. It allows automated generation of random keys (WPA
- passphrase/PSK) and configuration of an access point and client
- devices. WPS includes number of methods for setting up connections
- with PIN method and push-button configuration (PBC) being the most
- commonly deployed options.
- While WPS can enable more home networks to use encryption in the
- wireless network, it should be noted that the use of the PIN and
- especially PBC mechanisms for authenticating the initial key setup is
- not very secure. As such, use of WPS may not be suitable for
- environments that require secure network access without chance for
- allowing outsiders to gain access during the setup phase.
- WPS uses following terms to describe the entities participating in the
- network setup:
- - access point: the WLAN access point
- - Registrar: a device that control a network and can authorize
- addition of new devices); this may be either in the AP ("internal
- Registrar") or in an external device, e.g., a laptop, ("external
- Registrar")
- - Enrollee: a device that is being authorized to use the network
- It should also be noted that the AP and a client device may change
- roles (i.e., AP acts as an Enrollee and client device as a Registrar)
- when WPS is used to configure the access point.
- More information about WPS is available from Wi-Fi Alliance:
- http://www.wi-fi.org/wifi-protected-setup
- hostapd implementation
- ----------------------
- hostapd includes an optional WPS component that can be used as an
- internal WPS Registrar to manage addition of new WPS enabled clients
- to the network. In addition, WPS Enrollee functionality in hostapd can
- be used to allow external WPS Registrars to configure the access
- point, e.g., for initial network setup. In addition, hostapd can proxy a
- WPS registration between a wireless Enrollee and an external Registrar
- (e.g., Microsoft Vista or Atheros JumpStart) with UPnP.
- hostapd configuration
- ---------------------
- WPS is an optional component that needs to be enabled in hostapd build
- configuration (.config). Here is an example configuration that
- includes WPS support and uses madwifi driver interface:
- CONFIG_DRIVER_MADWIFI=y
- CFLAGS += -I/usr/src/madwifi-0.9.3
- CONFIG_EAP=y
- CONFIG_WPS=y
- CONFIG_WPS_UPNP=y
- Following section shows an example runtime configuration
- (hostapd.conf) that enables WPS:
- # Configure the driver and network interface
- driver=madwifi
- interface=ath0
- # WPA2-Personal configuration for the AP
- ssid=wps-test
- wpa=2
- wpa_key_mgmt=WPA-PSK
- wpa_pairwise=CCMP
- # Default WPA passphrase for legacy (non-WPS) clients
- wpa_passphrase=12345678
- # Enable random per-device PSK generation for WPS clients
- # Please note that the file has to exists for hostapd to start (i.e., create an
- # empty file as a starting point).
- wpa_psk_file=/etc/hostapd.psk
- # Enable control interface for PBC/PIN entry
- ctrl_interface=/var/run/hostapd
- # Enable internal EAP server for EAP-WSC (part of Wi-Fi Protected Setup)
- eap_server=1
- # WPS configuration (AP configured, do not allow external WPS Registrars)
- wps_state=2
- ap_setup_locked=1
- # If UUID is not configured, it will be generated based on local MAC address.
- uuid=87654321-9abc-def0-1234-56789abc0000
- wps_pin_requests=/var/run/hostapd.pin-req
- device_name=Wireless AP
- manufacturer=Company
- model_name=WAP
- model_number=123
- serial_number=12345
- device_type=6-0050F204-1
- os_version=01020300
- config_methods=label display push_button keypad
- # if external Registrars are allowed, UPnP support could be added:
- #upnp_iface=br0
- #friendly_name=WPS Access Point
- External operations
- -------------------
- WPS requires either a device PIN code (usually, 8-digit number) or a
- pushbutton event (for PBC) to allow a new WPS Enrollee to join the
- network. hostapd uses the control interface as an input channel for
- these events.
- When a client device (WPS Enrollee) connects to hostapd (WPS
- Registrar) in order to start PIN mode negotiation for WPS, an
- identifier (Enrollee UUID) is sent. hostapd will need to be configured
- with a device password (PIN) for this Enrollee. This is an operation
- that requires user interaction (assuming there are no pre-configured
- PINs on the AP for a set of Enrollee).
- The PIN request with information about the device is appended to the
- wps_pin_requests file (/var/run/hostapd.pin-req in this example). In
- addition, hostapd control interface event is sent as a notification of
- a new device. The AP could use, e.g., a web UI for showing active
- Enrollees to the user and request a PIN for an Enrollee.
- The PIN request file has one line for every Enrollee that connected to
- the AP, but for which there was no PIN. Following information is
- provided for each Enrollee (separated with tabulators):
- - timestamp (seconds from 1970-01-01)
- - Enrollee UUID
- - MAC address
- - Device name
- - Manufacturer
- - Model Name
- - Model Number
- - Serial Number
- - Device category
- Example line in the /var/run/hostapd.pin-req file:
- 1200188391 53b63a98-d29e-4457-a2ed-094d7e6a669c Intel(R) Centrino(R) Intel Corporation Intel(R) Centrino(R) - - 1-0050F204-1
- Control interface data:
- WPS-PIN-NEEDED [UUID-E|MAC Address|Device Name|Manufacturer|Model Name|Model Number|Serial Number|Device Category]
- For example:
- <2>WPS-PIN-NEEDED [53b63a98-d29e-4457-a2ed-094d7e6a669c|02:12:34:56:78:9a|Device|Manuf|Model|Model Number|Serial Number|1-0050F204-1]
- When the user enters a PIN for a pending Enrollee, e.g., on the web
- UI), hostapd needs to be notified of the new PIN over the control
- interface. This can be done either by using the UNIX domain socket
- -based control interface directly (src/common/wpa_ctrl.c provides
- helper functions for using the interface) or by calling hostapd_cli.
- Example command to add a PIN (12345670) for an Enrollee:
- hostapd_cli wps_pin 53b63a98-d29e-4457-a2ed-094d7e6a669c 12345670
- If the UUID-E is not available (e.g., Enrollee waits for the Registrar
- to be selected before connecting), wildcard UUID may be used to allow
- the PIN to be used once with any UUID:
- hostapd_cli wps_pin any 12345670
- To reduce likelihood of PIN being used with other devices or of
- forgetting an active PIN available for potential attackers, expiration
- time can be set for the new PIN:
- hostapd_cli wps_pin any 12345670 300
- After this, the Enrollee can connect to the AP again and complete WPS
- negotiation. At that point, a new, random WPA PSK is generated for the
- client device and the client can then use that key to connect to the
- AP to access the network.
- If the AP includes a pushbutton, WPS PBC mode can be used. It is
- enabled by pushing a button on both the AP and the client at about the
- same time (2 minute window). hostapd needs to be notified about the AP
- button pushed event over the control interface, e.g., by calling
- hostapd_cli:
- hostapd_cli wps_pbc
- At this point, the client has two minutes to complete WPS negotiation
- which will generate a new WPA PSK in the same way as the PIN method
- described above.
- Credential generation and configuration changes
- -----------------------------------------------
- By default, hostapd generates credentials for Enrollees and processing
- AP configuration updates internally. However, it is possible to
- control these operations from external programs, if desired.
- The internal credential generation can be disabled with
- skip_cred_build=1 option in the configuration. extra_cred option will
- then need to be used to provide pre-configured Credential attribute(s)
- for hostapd to use. The exact data from this binary file will be sent,
- i.e., it will have to include valid WPS attributes. extra_cred can
- also be used to add additional networks if the Registrar is used to
- configure credentials for multiple networks.
- Processing of received configuration updates can be disabled with
- wps_cred_processing=1 option. When this is used, an external program
- is responsible for creating hostapd configuration files and processing
- configuration updates based on messages received from hostapd over
- control interface. This will also include the initial configuration on
- first successful registration if the AP is initially set in
- unconfigured state.
- Following control interface messages are sent out for external programs:
- WPS-REG-SUCCESS <Enrollee MAC address <UUID-E>
- For example:
- <2>WPS-REG-SUCCESS 02:66:a0:ee:17:27 2b7093f1-d6fb-5108-adbb-bea66bb87333
- This can be used to tricker change from unconfigured to configured
- state (random configuration based on the first successful WPS
- registration). In addition, this can be used to update AP UI about the
- status of WPS registration progress.
- WPS-NEW-AP-SETTINGS <hexdump of AP Setup attributes>
- For example:
- <2>WPS-NEW-AP-SETTINGS 10260001011045000c6a6b6d2d7770732d74657374100300020020100f00020008102700403065346230343536633236366665306433396164313535346131663462663731323433376163666462376633393965353466316631623032306164343438623510200006024231cede15101e000844
- This can be used to update the externally stored AP configuration and
- then update hostapd configuration (followed by restarting of hostapd).
|