123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- wpa_supplicant and Wi-Fi Protected Setup (WPS)
- ==============================================
- This document describes how the WPS implementation in wpa_supplicant
- can be configured and how an external component on the client (e.g.,
- management GUI) is used to enable WPS enrollment and registrar
- registration.
- 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
- wpa_supplicant implementation
- -----------------------------
- wpa_supplicant includes an optional WPS component that can be used as
- an Enrollee to enroll new network credential or as a Registrar to
- configure an AP.
- wpa_supplicant configuration
- ----------------------------
- WPS is an optional component that needs to be enabled in
- wpa_supplicant build configuration (.config). Here is an example
- configuration that includes WPS support and Linux nl80211 -based
- driver interface:
- CONFIG_DRIVER_NL80211=y
- CONFIG_WPS=y
- If you want to enable WPS external registrar (ER) functionality, you
- will also need to add following line:
- CONFIG_WPS_ER=y
- Following parameter can be used to enable support for NFC config method:
- CONFIG_WPS_NFC=y
- WPS needs the Universally Unique IDentifier (UUID; see RFC 4122) for
- the device. This is configured in the runtime configuration for
- wpa_supplicant (if not set, UUID will be generated based on local MAC
- address):
- # example UUID for WPS
- uuid=12345678-9abc-def0-1234-56789abcdef0
- The network configuration blocks needed for WPS are added
- automatically based on control interface commands, so they do not need
- to be added explicitly in the configuration file.
- WPS registration will generate new network blocks for the acquired
- credentials. If these are to be stored for future use (after
- restarting wpa_supplicant), wpa_supplicant will need to be configured
- to allow configuration file updates:
- update_config=1
- 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. wpa_supplicant 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. "wpa_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.
- If the client device has a display, a random PIN has to be generated
- for each WPS registration session. wpa_supplicant can do this with a
- control interface request, e.g., by calling wpa_cli:
- wpa_cli wps_pin any
- This will return the generated 8-digit PIN which will then need to be
- entered at the Registrar to complete WPS registration. At that point,
- the client will be enrolled with credentials needed to connect to the
- AP to access the network.
- If the client device does not have a display that could show the
- random PIN, a hardcoded PIN that is printed on a label can be
- used. wpa_supplicant is notified this with a control interface
- request, e.g., by calling wpa_cli:
- wpa_cli wps_pin any 12345670
- This starts the WPS negotiation in the same way as above with the
- generated PIN.
- When the wps_pin command is issued for an AP (including P2P GO) mode
- interface, an optional timeout parameter can be used to specify
- expiration timeout for the PIN in seconds. For example:
- wpa_cli wps_pin any 12345670 300
- If a random PIN is needed for a user interface, "wpa_cli wps_pin get"
- can be used to generate a new PIN without starting WPS negotiation.
- This random PIN can then be passed as an argument to another wps_pin
- call when the actual operation should be started.
- If the client design wants to support optional WPS PBC mode, this can
- be enabled by either a physical button in the client device or a
- virtual button in the user interface. The PBC operation requires that
- a button is also pressed at the AP/Registrar at about the same time (2
- minute window). wpa_supplicant is notified of the local button event
- over the control interface, e.g., by calling wpa_cli:
- wpa_cli wps_pbc
- At this point, the AP/Registrar has two minutes to complete WPS
- negotiation which will generate a new WPA PSK in the same way as the
- PIN method described above.
- If the client wants to operate in the Registrar role to learn the
- current AP configuration and optionally, to configure an AP,
- wpa_supplicant is notified over the control interface, e.g., with
- wpa_cli:
- wpa_cli wps_reg <AP BSSID> <AP PIN>
- (example: wpa_cli wps_reg 02:34:56:78:9a:bc 12345670)
- This is used to fetch the current AP settings instead of actually
- changing them. The main difference with the wps_pin command is that
- wps_reg uses the AP PIN (e.g., from a label on the AP) instead of a
- PIN generated at the client.
- In order to change the AP configuration, the new configuration
- parameters are given to the wps_reg command:
- wpa_cli wps_reg <AP BSSID> <AP PIN> <new SSID> <auth> <encr> <new key>
- examples:
- wpa_cli wps_reg 02:34:56:78:9a:bc 12345670 testing WPA2PSK CCMP 12345678
- wpa_cli wps_reg 02:34:56:78:9a:bc 12345670 clear OPEN NONE ""
- <auth> must be one of the following: OPEN WPAPSK WPA2PSK
- <encr> must be one of the following: NONE WEP TKIP CCMP
- Scanning
- --------
- Scan results ('wpa_cli scan_results' or 'wpa_cli bss <idx>') include a
- flags field that is used to indicate whether the BSS support WPS. If
- the AP support WPS, but has not recently activated a Registrar, [WPS]
- flag will be included. If PIN method has been recently selected,
- [WPS-PIN] is shown instead. Similarly, [WPS-PBC] is shown if PBC mode
- is in progress. GUI programs can use these as triggers for suggesting
- a guided WPS configuration to the user. In addition, control interface
- monitor events WPS-AP-AVAILABLE{,-PBC,-PIN} can be used to find out if
- there are WPS enabled APs in scan results without having to go through
- all the details in the GUI. These notification could be used, e.g., to
- suggest possible WPS connection to the user.
- wpa_gui
- -------
- wpa_gui-qt4 directory contains a sample GUI that shows an example of
- how WPS support can be integrated into the GUI. Its main window has a
- WPS tab that guides user through WPS registration with automatic AP
- selection. In addition, it shows how WPS can be started manually by
- selecting an AP from scan results.
- Credential processing
- ---------------------
- By default, wpa_supplicant processes received credentials and updates
- its configuration internally. However, it is possible to
- control these operations from external programs, if desired.
- This internal processing can be disabled with wps_cred_processing=1
- option. When this is used, an external program is responsible for
- processing the credential attributes and updating wpa_supplicant
- configuration based on them.
- Following control interface messages are sent out for external programs:
- WPS-CRED-RECEIVED <hexdump of Credential attribute(s)>
- For example:
- <2>WPS-CRED-RECEIVED 100e006f10260001011045000c6a6b6d2d7770732d74657374100300020020100f000200081027004030653462303435366332363666653064333961643135353461316634626637313234333761636664623766333939653534663166316230323061643434386235102000060266a0ee1727
- wpa_supplicant as WPS External Registrar (ER)
- ---------------------------------------------
- wpa_supplicant can be used as a WPS ER to configure an AP or enroll
- new Enrollee to join the network. This functionality uses UPnP and
- requires that a working IP connectivity is available with the AP (this
- can be either over a wired or wireless connection).
- Separate wpa_supplicant process can be started for WPS ER
- operations. A special "none" driver can be used in such a case to
- indicate that no local network interface is actually controlled. For
- example, following command could be used to start the ER:
- wpa_supplicant -Dnone -c er.conf -ieth0
- Sample er.conf:
- ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=admin
- device_name=WPS External Registrar
- wpa_cli commands for ER functionality:
- wps_er_start [IP address]
- - start WPS ER functionality
- - the optional IP address parameter can be used to filter operations only
- to include a single AP
- - if run again while ER is active, the stored information (discovered APs
- and Enrollees) are shown again
- wps_er_stop
- - stop WPS ER functionality
- wps_er_learn <UUID|BSSID> <AP PIN>
- - learn AP configuration
- wps_er_set_config <UUID|BSSID> <network id>
- - use AP configuration from a locally configured network (e.g., from
- wps_reg command); this does not change the AP's configuration, but
- only prepares a configuration to be used when enrolling a new device
- to the AP
- wps_er_config <UUID|BSSID> <AP PIN> <new SSID> <auth> <encr> <new key>
- - examples:
- wps_er_config 87654321-9abc-def0-1234-56789abc0002 12345670 testing WPA2PSK CCMP 12345678
- wpa_er_config 87654321-9abc-def0-1234-56789abc0002 12345670 clear OPEN NONE ""
- <auth> must be one of the following: OPEN WPAPSK WPA2PSK
- <encr> must be one of the following: NONE WEP TKIP CCMP
- wps_er_pbc <Enrollee UUID|MAC address>
- - accept an Enrollee PBC using External Registrar
- wps_er_pin <Enrollee UUID|"any"|MAC address> <PIN> [Enrollee MAC address]
- - add an Enrollee PIN to External Registrar
- - if Enrollee UUID is not known, "any" can be used to add a wildcard PIN
- - if the MAC address of the enrollee is known, it should be configured
- to allow the AP to advertise list of authorized enrollees
- WPS ER events:
- WPS_EVENT_ER_AP_ADD
- - WPS ER discovered an AP
- WPS-ER-AP-ADD 87654321-9abc-def0-1234-56789abc0002 02:11:22:33:44:55 pri_dev_type=6-0050F204-1 wps_state=1 |Very friendly name|Company|Long description of the model|WAP|http://w1.fi/|http://w1.fi/hostapd/
- WPS_EVENT_ER_AP_REMOVE
- - WPS ER removed an AP entry
- WPS-ER-AP-REMOVE 87654321-9abc-def0-1234-56789abc0002
- WPS_EVENT_ER_ENROLLEE_ADD
- - WPS ER discovered a new Enrollee
- WPS-ER-ENROLLEE-ADD 2b7093f1-d6fb-5108-adbb-bea66bb87333 02:66:a0:ee:17:27 M1=1 config_methods=0x14d dev_passwd_id=0 pri_dev_type=1-0050F204-1 |Wireless Client|Company|cmodel|123|12345|
- WPS_EVENT_ER_ENROLLEE_REMOVE
- - WPS ER removed an Enrollee entry
- WPS-ER-ENROLLEE-REMOVE 2b7093f1-d6fb-5108-adbb-bea66bb87333 02:66:a0:ee:17:27
- WPS-ER-AP-SETTINGS
- - WPS ER learned AP settings
- WPS-ER-AP-SETTINGS uuid=fd91b4ec-e3fa-5891-a57d-8c59efeed1d2 ssid=test-wps auth_type=0x0020 encr_type=0x0008 key=12345678
- 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 station acts as an Enrollee, a local NFC tag with a password
- token can be used by touching the NFC interface of a Registrar.
- "wps_nfc [BSSID]" command starts WPS protocol run with the local end as
- the Enrollee using 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 included nfc_pw_token tool
- (build with "make nfc_pw_token") can be used to generate NFC password
- tokens during manufacturing (each station needs to have its own random
- keys).
- The "wps_nfc_config_token <WPS/NDEF>" command can be used to build an
- NFC configuration token when wpa_supplicant is controlling an AP
- interface (AP or P2P GO). 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.
- The "wps_nfc_config_token <WPS/NDEF> <network id>" command can be used
- to build an NFC configuration token based on a locally configured
- network.
- If the station includes NFC interface and 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 wpa_supplicant using the
- following wpa_cli command:
- wps_nfc_tag_read <hexdump of payload>
- If the NFC tag contains a configuration token, the network is added to
- wpa_supplicant configuration. If the NFC tag contains a password token,
- the token is added to the WPS Registrar component. This information can
- then be used with wps_reg command (when the NFC password token was from
- an AP) using a special value "nfc-pw" in place of the PIN parameter. If
- the ER functionality has been started (wps_er_start), the NFC password
- token is used to enable enrollment of a new station (that was the source
- of the NFC password token).
- "nfc_get_handover_req <NDEF> <WPS-CR>" command can be used to build the
- WPS carrier record for a Handover Request Message for connection
- handover. The first argument selects the format of the output data and
- the second argument selects which type of connection handover is
- requested (WPS-CR = Wi-Fi handover as specified in WSC 2.0).
- "nfc_get_handover_sel <NDEF> <WPS> [UUID|BSSID]" 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). If the options
- UUID|BSSID argument is included, this is a request to build the handover
- message for the specified AP when wpa_supplicant is operating as a WPS
- ER.
- "nfc_report_handover <INIT/RESP> WPS <carrier from handover request>
- <carrier from handover select>" can be used as an alternative way for
- reporting 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.
- The "wps_er_nfc_config_token <WPS/NDEF> <UUID|BSSID>" command can be
- used to build an NFC configuration token for the specified AP when
- wpa_supplicant is operating as a WPS ER. The output value from this
- command is a hexdump of the selected 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.
|