123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352 |
- 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 nl80211 driver interface:
- CONFIG_DRIVER_NL80211=y
- CONFIG_WPS=y
- CONFIG_WPS_UPNP=y
- Following parameter can be used to enable support for NFC config method:
- CONFIG_WPS_NFC=y
- Following section shows an example runtime configuration
- (hostapd.conf) that enables WPS:
- # Configure the driver and network interface
- driver=nl80211
- interface=wlan0
- # 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.
- The PIN value used in the commands must be processed by an UI to
- remove non-digit characters and potentially, to verify the checksum
- digit. "hostapd_cli wps_check_pin <PIN>" can be used to do such
- processing. It returns FAIL if the PIN is invalid, or FAIL-CHECKSUM if
- the checksum digit is incorrect, or the processed PIN (non-digit
- characters removed) if the PIN is valid.
- 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 in seconds can be set for the new PIN (value 0 indicates no
- expiration):
- hostapd_cli wps_pin any 12345670 300
- If the MAC address of the enrollee is known, it should be configured
- to allow the AP to advertise list of authorized enrollees:
- hostapd_cli wps_pin 53b63a98-d29e-4457-a2ed-094d7e6a669c \
- 12345670 300 00:11:22:33:44:55
- 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.
- When an external Registrar is used, the AP can act as an Enrollee and
- use its AP PIN. A static AP PIN (e.g., one one a label in the AP
- device) can be configured in hostapd.conf (ap_pin parameter). A more
- secure option is to use hostapd_cli wps_ap_pin command to enable the
- AP PIN only based on user action (and even better security by using a
- random AP PIN for each session, i.e., by using "wps_ap_pin random"
- command with a timeout value). Following commands are available for
- managing the dynamic AP PIN operations:
- hostapd_cli wps_ap_pin disable
- - disable AP PIN (i.e., do not allow external Registrars to use it to
- learn the current AP settings or to reconfigure the AP)
- hostapd_cli wps_ap_pin random [timeout]
- - generate a random AP PIN and enable it
- - if the optional timeout parameter is given, the AP PIN will be enabled
- for the specified number of seconds
- hostapd_cli wps_ap_pin get
- - fetch the current AP PIN
- hostapd_cli wps_ap_pin set <PIN> [timeout]
- - set the AP PIN and enable it
- - if the optional timeout parameter is given, the AP PIN will be enabled
- for the specified number of seconds
- hostapd_cli get_config
- - display the current configuration
- hostapd_cli wps_config <new SSID> <auth> <encr> <new key>
- examples:
- hostapd_cli wps_config testing WPA2PSK CCMP 12345678
- hostapd_cli wps_config "no security" OPEN NONE ""
- <auth> must be one of the following: OPEN WPAPSK WPA2PSK
- <encr> must be one of the following: NONE WEP TKIP CCMP
- 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 trigger 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).
- WPS with NFC
- ------------
- WPS can be used with NFC-based configuration method. An NFC tag
- containing a password token from the Enrollee can be used to
- authenticate the connection instead of the PIN. In addition, an NFC tag
- with a configuration token can be used to transfer AP settings without
- going through the WPS protocol.
- When the AP acts as an Enrollee, a local NFC tag with a password token
- can be used by touching the NFC interface of an external Registrar. The
- wps_nfc_token command is used to manage use of the NFC password token
- from the AP. "wps_nfc_token enable" enables the use of the AP's NFC
- password token (in place of AP PIN) and "wps_nfc_token disable" disables
- the NFC password token.
- The NFC password token that is either pre-configured in the
- configuration file (wps_nfc_dev_pw_id, wps_nfc_dh_pubkey,
- wps_nfc_dh_privkey, wps_nfc_dev_pw) or generated dynamically with
- "wps_nfc_token <WPS|NDEF>" command. The nfc_pw_token tool from
- wpa_supplicant can be used to generate NFC password tokens during
- manufacturing (each AP needs to have its own random keys).
- The "wps_nfc_config_token <WPS/NDEF>" command can be used to build an
- NFC configuration token. The output value from this command is a hexdump
- of the current AP configuration (WPS parameter requests this to include
- only the WPS attributes; NDEF parameter requests additional NDEF
- encapsulation to be included). This data needs to be written to an NFC
- tag with an external program. Once written, the NFC configuration token
- can be used to touch an NFC interface on a station to provision the
- credentials needed to access the network.
- When the NFC device on the AP reads an NFC tag with a MIME media type
- "application/vnd.wfa.wsc", the NDEF message payload (with or without
- NDEF encapsulation) can be delivered to hostapd using the
- following hostapd_cli command:
- wps_nfc_tag_read <hexdump of payload>
- If the NFC tag contains a password token, the token is added to the
- internal Registrar. This allows station Enrollee from which the password
- token was received to run through WPS protocol to provision the
- credential.
- "nfc_get_handover_sel <NDEF> <WPS>" command can be used to build the
- contents of a Handover Select Message for connection handover when this
- does not depend on the contents of the Handover Request Message. The
- first argument selects the format of the output data and the second
- argument selects which type of connection handover is requested (WPS =
- Wi-Fi handover as specified in WSC 2.0).
- "nfc_report_handover <INIT/RESP> WPS <carrier from handover request>
- <carrier from handover select>" is used to report completed NFC
- connection handover. The first parameter indicates whether the local
- device initiated or responded to the connection handover and the carrier
- records are the selected carrier from the handover request and select
- messages as a hexdump.
|