Dmitry Shmidt | 8d520ff | 2011-05-09 14:06:53 -0700 | [diff] [blame] | 1 | wpa_supplicant and Wi-Fi Protected Setup (WPS) |
| 2 | ============================================== |
| 3 | |
| 4 | This document describes how the WPS implementation in wpa_supplicant |
| 5 | can be configured and how an external component on the client (e.g., |
| 6 | management GUI) is used to enable WPS enrollment and registrar |
| 7 | registration. |
| 8 | |
| 9 | |
| 10 | Introduction to WPS |
| 11 | ------------------- |
| 12 | |
| 13 | Wi-Fi Protected Setup (WPS) is a mechanism for easy configuration of a |
| 14 | wireless network. It allows automated generation of random keys (WPA |
| 15 | passphrase/PSK) and configuration of an access point and client |
| 16 | devices. WPS includes number of methods for setting up connections |
| 17 | with PIN method and push-button configuration (PBC) being the most |
| 18 | commonly deployed options. |
| 19 | |
| 20 | While WPS can enable more home networks to use encryption in the |
| 21 | wireless network, it should be noted that the use of the PIN and |
| 22 | especially PBC mechanisms for authenticating the initial key setup is |
| 23 | not very secure. As such, use of WPS may not be suitable for |
| 24 | environments that require secure network access without chance for |
| 25 | allowing outsiders to gain access during the setup phase. |
| 26 | |
| 27 | WPS uses following terms to describe the entities participating in the |
| 28 | network setup: |
| 29 | - access point: the WLAN access point |
| 30 | - Registrar: a device that control a network and can authorize |
| 31 | addition of new devices); this may be either in the AP ("internal |
| 32 | Registrar") or in an external device, e.g., a laptop, ("external |
| 33 | Registrar") |
| 34 | - Enrollee: a device that is being authorized to use the network |
| 35 | |
| 36 | It should also be noted that the AP and a client device may change |
| 37 | roles (i.e., AP acts as an Enrollee and client device as a Registrar) |
| 38 | when WPS is used to configure the access point. |
| 39 | |
| 40 | |
| 41 | More information about WPS is available from Wi-Fi Alliance: |
| 42 | http://www.wi-fi.org/wifi-protected-setup |
| 43 | |
| 44 | |
| 45 | wpa_supplicant implementation |
| 46 | ----------------------------- |
| 47 | |
| 48 | wpa_supplicant includes an optional WPS component that can be used as |
| 49 | an Enrollee to enroll new network credential or as a Registrar to |
Jouni Malinen | 87fd279 | 2011-05-16 18:35:42 +0300 | [diff] [blame^] | 50 | configure an AP. |
Dmitry Shmidt | 8d520ff | 2011-05-09 14:06:53 -0700 | [diff] [blame] | 51 | |
| 52 | |
| 53 | wpa_supplicant configuration |
| 54 | ---------------------------- |
| 55 | |
| 56 | WPS is an optional component that needs to be enabled in |
| 57 | wpa_supplicant build configuration (.config). Here is an example |
| 58 | configuration that includes WPS support and Linux wireless extensions |
| 59 | -based driver interface: |
| 60 | |
| 61 | CONFIG_DRIVER_WEXT=y |
| 62 | CONFIG_WPS=y |
| 63 | CONFIG_WPS2=y |
| 64 | |
| 65 | |
| 66 | WPS needs the Universally Unique IDentifier (UUID; see RFC 4122) for |
| 67 | the device. This is configured in the runtime configuration for |
| 68 | wpa_supplicant (if not set, UUID will be generated based on local MAC |
| 69 | address): |
| 70 | |
| 71 | # example UUID for WPS |
| 72 | uuid=12345678-9abc-def0-1234-56789abcdef0 |
| 73 | |
| 74 | The network configuration blocks needed for WPS are added |
| 75 | automatically based on control interface commands, so they do not need |
| 76 | to be added explicitly in the configuration file. |
| 77 | |
| 78 | WPS registration will generate new network blocks for the acquired |
| 79 | credentials. If these are to be stored for future use (after |
| 80 | restarting wpa_supplicant), wpa_supplicant will need to be configured |
| 81 | to allow configuration file updates: |
| 82 | |
| 83 | update_config=1 |
| 84 | |
| 85 | |
| 86 | |
| 87 | External operations |
| 88 | ------------------- |
| 89 | |
| 90 | WPS requires either a device PIN code (usually, 8-digit number) or a |
| 91 | pushbutton event (for PBC) to allow a new WPS Enrollee to join the |
| 92 | network. wpa_supplicant uses the control interface as an input channel |
| 93 | for these events. |
| 94 | |
| 95 | The PIN value used in the commands must be processed by an UI to |
| 96 | remove non-digit characters and potentially, to verify the checksum |
| 97 | digit. "wpa_cli wps_check_pin <PIN>" can be used to do such processing. |
| 98 | It returns FAIL if the PIN is invalid, or FAIL-CHECKSUM if the checksum |
| 99 | digit is incorrect, or the processed PIN (non-digit characters removed) |
| 100 | if the PIN is valid. |
| 101 | |
| 102 | If the client device has a display, a random PIN has to be generated |
| 103 | for each WPS registration session. wpa_supplicant can do this with a |
| 104 | control interface request, e.g., by calling wpa_cli: |
| 105 | |
| 106 | wpa_cli wps_pin any |
| 107 | |
| 108 | This will return the generated 8-digit PIN which will then need to be |
| 109 | entered at the Registrar to complete WPS registration. At that point, |
| 110 | the client will be enrolled with credentials needed to connect to the |
| 111 | AP to access the network. |
| 112 | |
| 113 | |
| 114 | If the client device does not have a display that could show the |
| 115 | random PIN, a hardcoded PIN that is printed on a label can be |
| 116 | used. wpa_supplicant is notified this with a control interface |
| 117 | request, e.g., by calling wpa_cli: |
| 118 | |
| 119 | wpa_cli wps_pin any 12345670 |
| 120 | |
| 121 | This starts the WPS negotiation in the same way as above with the |
| 122 | generated PIN. |
| 123 | |
| 124 | |
| 125 | If the client design wants to support optional WPS PBC mode, this can |
| 126 | be enabled by either a physical button in the client device or a |
| 127 | virtual button in the user interface. The PBC operation requires that |
| 128 | a button is also pressed at the AP/Registrar at about the same time (2 |
| 129 | minute window). wpa_supplicant is notified of the local button event |
| 130 | over the control interface, e.g., by calling wpa_cli: |
| 131 | |
| 132 | wpa_cli wps_pbc |
| 133 | |
| 134 | At this point, the AP/Registrar has two minutes to complete WPS |
| 135 | negotiation which will generate a new WPA PSK in the same way as the |
| 136 | PIN method described above. |
| 137 | |
| 138 | |
| 139 | If the client wants to operate in the Registrar role to learn the |
| 140 | current AP configuration and optionally, to configure an AP, |
| 141 | wpa_supplicant is notified over the control interface, e.g., with |
| 142 | wpa_cli: |
| 143 | |
| 144 | wpa_cli wps_reg <AP BSSID> <AP PIN> |
| 145 | (example: wpa_cli wps_reg 02:34:56:78:9a:bc 12345670) |
| 146 | |
| 147 | This is used to fetch the current AP settings instead of actually |
| 148 | changing them. The main difference with the wps_pin command is that |
| 149 | wps_reg uses the AP PIN (e.g., from a label on the AP) instead of a |
| 150 | PIN generated at the client. |
| 151 | |
| 152 | In order to change the AP configuration, the new configuration |
| 153 | parameters are given to the wps_reg command: |
| 154 | |
| 155 | wpa_cli wps_reg <AP BSSID> <AP PIN> <new SSID> <auth> <encr> <new key> |
| 156 | examples: |
| 157 | wpa_cli wps_reg 02:34:56:78:9a:bc 12345670 testing WPA2PSK CCMP 12345678 |
| 158 | wpa_cli wps_reg 02:34:56:78:9a:bc 12345670 clear OPEN NONE "" |
| 159 | |
| 160 | <auth> must be one of the following: OPEN WPAPSK WPA2PSK |
| 161 | <encr> must be one of the following: NONE WEP TKIP CCMP |
| 162 | |
| 163 | |
| 164 | Scanning |
| 165 | -------- |
| 166 | |
| 167 | Scan results ('wpa_cli scan_results' or 'wpa_cli bss <idx>') include a |
| 168 | flags field that is used to indicate whether the BSS support WPS. If |
| 169 | the AP support WPS, but has not recently activated a Registrar, [WPS] |
| 170 | flag will be included. If PIN method has been recently selected, |
| 171 | [WPS-PIN] is shown instead. Similarly, [WPS-PBC] is shown if PBC mode |
| 172 | is in progress. GUI programs can use these as triggers for suggesting |
| 173 | a guided WPS configuration to the user. In addition, control interface |
| 174 | monitor events WPS-AP-AVAILABLE{,-PBC,-PIN} can be used to find out if |
| 175 | there are WPS enabled APs in scan results without having to go through |
| 176 | all the details in the GUI. These notification could be used, e.g., to |
| 177 | suggest possible WPS connection to the user. |
| 178 | |
| 179 | |
| 180 | wpa_gui |
| 181 | ------- |
| 182 | |
| 183 | wpa_gui-qt4 directory contains a sample GUI that shows an example of |
| 184 | how WPS support can be integrated into the GUI. Its main window has a |
| 185 | WPS tab that guides user through WPS registration with automatic AP |
| 186 | selection. In addition, it shows how WPS can be started manually by |
| 187 | selecting an AP from scan results. |
| 188 | |
| 189 | |
| 190 | Credential processing |
| 191 | --------------------- |
| 192 | |
| 193 | By default, wpa_supplicant processes received credentials and updates |
| 194 | its configuration internally. However, it is possible to |
| 195 | control these operations from external programs, if desired. |
| 196 | |
| 197 | This internal processing can be disabled with wps_cred_processing=1 |
| 198 | option. When this is used, an external program is responsible for |
| 199 | processing the credential attributes and updating wpa_supplicant |
| 200 | configuration based on them. |
| 201 | |
| 202 | Following control interface messages are sent out for external programs: |
| 203 | |
| 204 | WPS-CRED-RECEIVED <hexdump of Credential attribute(s)> |
| 205 | For example: |
| 206 | <2>WPS-CRED-RECEIVED 100e006f10260001011045000c6a6b6d2d7770732d74657374100300020020100f000200081027004030653462303435366332363666653064333961643135353461316634626637313234333761636664623766333939653534663166316230323061643434386235102000060266a0ee1727 |
| 207 | |
| 208 | |
| 209 | wpa_supplicant as WPS External Registrar (ER) |
| 210 | --------------------------------------------- |
| 211 | |
| 212 | wpa_supplicant can be used as a WPS ER to configure an AP or enroll |
| 213 | new Enrollee to join the network. This functionality uses UPnP and |
| 214 | requires that a working IP connectivity is available with the AP (this |
| 215 | can be either over a wired or wireless connection). |
| 216 | |
| 217 | Separate wpa_supplicant process can be started for WPS ER |
| 218 | operations. A special "none" driver can be used in such a case to |
| 219 | indicate that no local network interface is actually controlled. For |
| 220 | example, following command could be used to start the ER: |
| 221 | |
| 222 | wpa_supplicant -Dnone -c er.conf -ieth0 |
| 223 | |
| 224 | Sample er.conf: |
| 225 | |
| 226 | ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=admin |
| 227 | device_name=WPS External Registrar |
| 228 | |
| 229 | |
| 230 | wpa_cli commands for ER functionality: |
| 231 | |
| 232 | wps_er_start [IP address] |
| 233 | - start WPS ER functionality |
| 234 | - the optional IP address parameter can be used to filter operations only |
| 235 | to include a single AP |
| 236 | - if run again while ER is active, the stored information (discovered APs |
| 237 | and Enrollees) are shown again |
| 238 | |
| 239 | wps_er_stop |
| 240 | - stop WPS ER functionality |
| 241 | |
| 242 | wps_er_learn <UUID> <AP PIN> |
| 243 | - learn AP configuration |
| 244 | |
| 245 | wps_er_set_config <UUID> <network id> |
| 246 | - use AP configuration from a locally configured network (e.g., from |
| 247 | wps_reg command); this does not change the AP's configuration, but |
| 248 | only prepares a configuration to be used when enrolling a new device |
| 249 | to the AP |
| 250 | |
| 251 | wps_er_config <UUID> <AP PIN> <new SSID> <auth> <encr> <new key> |
| 252 | - examples: |
| 253 | wps_er_config 87654321-9abc-def0-1234-56789abc0002 12345670 testing WPA2PSK CCMP 12345678 |
| 254 | wpa_er_config 87654321-9abc-def0-1234-56789abc0002 12345670 clear OPEN NONE "" |
| 255 | |
| 256 | <auth> must be one of the following: OPEN WPAPSK WPA2PSK |
| 257 | <encr> must be one of the following: NONE WEP TKIP CCMP |
| 258 | |
| 259 | |
| 260 | wps_er_pbc <Enrollee UUID> |
| 261 | - accept an Enrollee PBC using External Registrar |
| 262 | |
| 263 | wps_er_pin <Enrollee UUID> <PIN> [Enrollee MAC address] |
| 264 | - add an Enrollee PIN to External Registrar |
| 265 | - if Enrollee UUID is not known, "any" can be used to add a wildcard PIN |
| 266 | - if the MAC address of the enrollee is known, it should be configured |
| 267 | to allow the AP to advertise list of authorized enrollees |
| 268 | |
| 269 | |
| 270 | WPS ER events: |
| 271 | |
| 272 | WPS_EVENT_ER_AP_ADD |
| 273 | - WPS ER discovered an AP |
| 274 | |
| 275 | 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/ |
| 276 | |
| 277 | WPS_EVENT_ER_AP_REMOVE |
| 278 | - WPS ER removed an AP entry |
| 279 | |
| 280 | WPS-ER-AP-REMOVE 87654321-9abc-def0-1234-56789abc0002 |
| 281 | |
| 282 | WPS_EVENT_ER_ENROLLEE_ADD |
| 283 | - WPS ER discovered a new Enrollee |
| 284 | |
| 285 | 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| |
| 286 | |
| 287 | WPS_EVENT_ER_ENROLLEE_REMOVE |
| 288 | - WPS ER removed an Enrollee entry |
| 289 | |
| 290 | WPS-ER-ENROLLEE-REMOVE 2b7093f1-d6fb-5108-adbb-bea66bb87333 02:66:a0:ee:17:27 |
| 291 | |
| 292 | WPS-ER-AP-SETTINGS |
| 293 | - WPS ER learned AP settings |
| 294 | |
| 295 | WPS-ER-AP-SETTINGS uuid=fd91b4ec-e3fa-5891-a57d-8c59efeed1d2 ssid=test-wps auth_type=0x0020 encr_type=0x0008 key=12345678 |