-
Notifications
You must be signed in to change notification settings - Fork 31
Add support for the WPA3-SAE PAKE (part of 802.11) #293
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
* Overview of key types, accessors, and ECC/DH familes * Definition of unstructured key types * Definition of asymmetric key types
* Add a structured key category * Define the WPA3-SAE password token key types
Prefix with 'finite field' when describing the cyclic groups and group families.
@stevew817, @oberon-sk - as previous requesters of this functionality:
Do you have specific use cases that would help to determine the answer for open issues 2, 4, and 5? |
Ooops! - The following comment by @bheeb was a response to a mispost by me on the wrong PR. Copied to this PR to ensure it is addressed here.
An implementation specific import/export format is problematic because the standard export format is also the standard key format used by the driver.
We would like to use the approach with the scalar and the element (without the 0x04) in a single input/output step. There is no need for splitting or concatenation in the application, the combination of the two can be copied directly to/from the WPA3-SAE 802.11 frame. A similar question arises in the Confirm step: should we include the Send-Confirm field in front of the Confirm value?
To keep the implementation simple, we currently use the following rules: |
@bheeb - thanks for the feedback (via my misposted questions in #178). On ordering (comment item 3)The current text basically reflects this approach, although I have not specified flexibility in providing the salt value after the send-confirm counter value. Mostly because the latter might be done multiple times in case of lost confirmation frames - so easiter to specify that salt is provided just once between the commit and confirm phases. On export key format (comment item 1/PR open issue 2)Testability is good enough reason to define the format for the password token, implementing support for exportable password tokens is then an implementation decision. Using the same format as that used for COMMIT-ELEMENT makes sense (as defined in 802-11 §12.4.7.2). On Commit-phase PAKE steps (comment item 2/PR open issue 3)I've read the details of the 802-11 frame formats for authentication, which does indicate that the commit-scalar and COMMIT-ELEMENT values are adjacent in the frame body for all messages in which they appear, and that the size of these elements is fixed by the PAKE primitive being used. If we defined a I would prefer to not include the Finite Cyclic Group value in the input or output for two reasons:
|
Combine the scalar and group-element values into a single PAKE step for the WPA3-SAE algorithm.
I've update the PR to incorporate those changes (and updated the PR description to remove the related open issues). We now need to conclude on the key type name and wildcard items. |
Removing them should be fine.
Yes, permitting
Probably yes. |
Thinking about the wildcard policies:
This does not enable a single password key object to be used for both H2E and Looping derivation methods (the latter passes the password directly to the PAKE). However, there are strict constraints already in place on which hash algorithm must be used in both the H2E KDF and the WPA3-SAE PAKE algorithms (they must match a valid cipher suite that is based on the PAKE primitive's cyclic group). Thus defining a wildcard key policy that appears to be more relaxed, does not actually permit additional usage. Instead we could just define a single
|
That leads to a question of what value to use. It cannot match both the KDF and the PAKE category, but we have a precedent that suggests that the We could use a distinct value in the PAKE category, that is perhaps related to the PAKE algorithms. For example |
This is the full documentation PR for WPA3-SAE, building on the outline for the API in #230 contributed by Oberon.
It provides support for all cipher-suites and operational variants that are defined in IEEE-802.11-2024 §12.4:
Open items
1. The password token key type names currently have a
_PT
suffix, following the contributed design. This is not required to distinguish the types, as there are no non-password-token key types for WPA3-SAE. I suggest removing them.2.
Done3.
Done4. The evolution of the WPA3-SAE protocol over 3 versions of IEEE-802.11 results in the password value being used in more than one type of algorithm:
PSA_ALG_WPA3_SAE_FIXED(PSA_ALG_SHA256)
.PSA_ALG_WPA3_SAE_H2E()
KDF operation, parameterized by a hash related to the PAKE primitive in use.Either we will require the application (the 802.11 implementation of SAE) to store the password, and import a volatile password key with an appropriate policy once the variant and cipher suite is determined; or we would need a wildcard algorithm identifier for use in the password key policy.
It might be sufficient to permit
PSA_ALG_ANY_HASH
to be used inPSA_ALG_WPA3_SAE_H2E()
as a wildcard policy when using the password to derive the password token, and not provide support for looping vs hash-to-element use of a password key?5. A password token that is derived through the hash-to-element procedure is specific to the PAKE primitive (type of cyclic group, selected family, and size). The same password token can be used in both the
PSA_ALG_WPA3_SAE_FIXED()
andPSA_ALG_WPA3_SAE_GDH()
algorithms - noting that the hash algorithm is effectively determined by the PAKE primitive.Is it valuable to have a wildcard permitted-algorithm policy for WPA3-SAE password token keys, so that the same key could be used in either the fixed-sized or group-dependent-hash-sized variants of WPA3-SAE?
Fixes #203