blob: af485ce8e7081a76a35d4c28f7724d4e3ebc1935 [file] [log] [blame] [view]
Manuel Pégourié-Gonnard73a0e1d2021-09-21 13:55:00 +02001This document describes the compile-time configuration option
2`MBEDTLS_USE_PSA_CRYPTO` from a user's perspective, more specifically its
3current effects as well as the parts that aren't covered yet.
Manuel Pégourié-Gonnard13b0beb2021-09-20 13:21:25 +02004
5Current effects
6===============
7
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +02008General limitations
9-------------------
Manuel Pégourié-Gonnard13b0beb2021-09-20 13:21:25 +020010
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020011Compile-time: enabling `MBEDTLS_USE_PSA_CRYPTO` requires
12`MBEDTLS_ECP_RESTARTABLE` and
13`MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER` to be disabled.
14
15Effect: `MBEDTLS_USE_PSA_CRYPTO` currently has no effect on TLS 1.3 (which is
16itself experimental and only partially supported so far): TLS 1.3 always uses
17the legacy APIs even when this option is set.
18
19Stability: any API that's only available when `MBEDTLS_USE_PSA_CRYPTO` is
20defined is considered experimental and may change in incompatible ways at any
21time. Said otherwise, these APIs are explicitly excluded from the usual API
22stability promises.
23
24New APIs / API extensions
25-------------------------
26
27Some of these APIs are meant for the application to use in place of
28pre-existing APIs, in order to get access to the benefits; in the sub-sections
29below these are indicated by "Use in (X.509 and) TLS: opt-in", meaning that
30this requires changes to the application code for the (X.509 and) TLS layers
31to pick up the improvements.
32
33Some of these APIs are mostly meant for internal use by the TLS (and X.509)
34layers; they are indicated below by "Use in (X.509 and) TLS: automatic",
35meaning that no changes to the application code are required for the TLS (and
36X.509) layers to pick up the improvements.
37
38### PSA-held (opaque) keys in the PK layer
39
Manuel Pégourié-Gonnardca910172021-09-24 10:14:32 +020040There is a new API function `mbedtls_pk_setup_opaque()` that can be used to
41wrap a PSA keypair into a PK context. The key can be used for private-key
42operations and its public part can be exported.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020043
44Benefits: isolation of long-term secrets, use of PSA Crypto drivers.
45
46Limitations: only for private keys, only ECC. (That is, only ECDSA signature
Manuel Pégourié-Gonnardca910172021-09-24 10:14:32 +020047generation. Note: currently this will use randomized ECDSA while Mbed TLS uses
48deterministic ECDSA by default.) The following operations are not supported
49with a context set this way, while they would be available with a normal
50`ECKEY` context: `mbedtls_pk_verify()`, `mbedtls_pk_check_pair()`,
51`mbedtls_pk_debug()`.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020052
53Use in X.509 and TLS: opt-in. The application needs to construct the PK context
54using the new API in order to get the benefits; it can then pass the
55resulting context to the following existing APIs:
56
57- `mbedtls_ssl_conf_own_cert()` or `mbedtls_ssl_set_hs_own_cert()` to use the
58 key together with a certificate for ECDSA-based key exchanges;
59- `mbedtls_x509write_csr_set_key()` to generate a CSR (certificate signature
60 request).
61
Manuel Pégourié-Gonnardca910172021-09-24 10:14:32 +020062In the TLS and X.509 API, there are two other functions which accept a key or
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020063keypair as a PK context: `mbedtls_x509write_crt_set_subject_key()` and
64`mbedtls_x509write_crt_set_issuer_key()`. Use of opaque contexts here probably
65works but is so far untested.
66
Manuel Pégourié-Gonnard9155b0e2021-09-24 10:17:07 +020067### PSA-held (opaque) keys for TLS pre-shared keys (PSK)
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020068
Manuel Pégourié-Gonnardca910172021-09-24 10:14:32 +020069There are two new API functions `mbedtls_ssl_conf_psk_opaque()` and
70`mbedtls_ssl_set_hs_psk_opaque()`. Call one of these from an application to
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020071register a PSA key for use with a PSK key exchange.
72
73Benefits: isolation of long-term secrets.
74
Manuel Pégourié-Gonnard9155b0e2021-09-24 10:17:07 +020075Limitations: the key can only be used with "pure"
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020076PSK key exchanges (ciphersuites starting with `TLS_PSK_WITH_`), to the
77exclusion of RSA-PSK, DHE-PSK and ECDHE-PSK key exchanges. It is the responsibility of
78the user to make sure that when provisioning an opaque pre-shared key, the
79only PSK ciphersuites that can be negotiated are "pure" PSK; other XXX-PSK key
80exchanges will result in a handshake failure with the handshake function
81returning `MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE`.
82
83Use in TLS: opt-in. The application needs to register the key using the new
84APIs to get the benefits.
85
86### PSA-based operations in the Cipher layer
87
Manuel Pégourié-Gonnardca910172021-09-24 10:14:32 +020088There is a new API function `mbedtls_cipher_setup_psa()` to set up a context
89that will call PSA to store the key and perform the operations.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020090
91Benefits: use of PSA Crypto drivers; partial isolation of short-term secrets
92(still generated outside of PSA, but then held by PSA).
93
94Limitations: the key is still passed in the clear by the application. The
95multi-part APIs are not supported, only the one-shot APIs. The only modes
96supported are ECB, CBC without padding, GCM and CCM (this excludes stream
97ciphers and ChachaPoly); the only cipher supported is AES (this excludes Aria,
98Camellia, and ChachaPoly).
99
100Use in TLS: automatic. Used when the cipher and mode is supported (with
101gracious fallback to the legacy API otherwise) in all places where a cipher is
102used. There are two such places: in `ssl_tls.c` for record protection, and in
103`ssl_ticket.c` for protecting tickets we issue.
104
105Internal changes
106----------------
107
108All of these internal changes are active as soon as `MBEDTLS_USE_PSA_CRYPTO`
109is enabled, no change required on the application side.
110
111### TLS: cipher operations based on PSA
112
113See "PSA-based operations in the Cipher layer" above.
114
115### PK layer: ECDSA verification based on PSA
116
117Scope: `mbedtls_pk_verify()` will call to PSA for ECDSA signature
118verification.
119
120Benefits: use of PSA Crypto drivers.
121
122Use in TLS and X.509: in all places where an ECDSA signature is verified.
123
124### TLS: ECDHE computation based on PSA
125
126Scope: Client-side, for ECDHE-RSA and ECDHE-ECDSA key exchanges, the
127computation of the ECDHE key exchange is done by PSA.
128
129Limitations: client-side only, ECDHE-PSK not covered
130
131Benefits: use of PSA Crypto drivers.
132
133### TLS: handshake hashes and PRF computed with PSA
134
135Scope: with TLS 1.2, the following are computed with PSA:
136- the running handshake hashes;
137- the hash of the ServerKeyExchange part that is signed;
138- the `verify_data` part of the Finished message;
139- the TLS PRF.
140
141Benefits: use of PSA Crypto drivers.
142
143### X.509: some hashes computed with PSA
144
145Scope: the following hashes are computed with PSA:
146- when verifying a certificate chain, hash of the child for verifying the
147 parent's signature;
148- when writing a CSR, hash of the request for self-signing the request.
149
150Benefits: use of PSA Crypto drivers.
151
152Parts that are not covered yet
153==============================
Manuel Pégourié-Gonnard13b0beb2021-09-20 13:21:25 +0200154
Manuel Pégourié-Gonnard73a0e1d2021-09-21 13:55:00 +0200155This is only a high-level overview, grouped by theme
Manuel Pégourié-Gonnard13b0beb2021-09-20 13:21:25 +0200156
Manuel Pégourié-Gonnard9155b0e2021-09-24 10:17:07 +0200157TLS: 1.3 experimental support
158-----------------------------
159
160No part of the experimental support for TLS 1.3 is covered at the moment.
161
Manuel Pégourié-Gonnard73a0e1d2021-09-21 13:55:00 +0200162TLS: key exchanges / asymmetric crypto
163--------------------------------------
Manuel Pégourié-Gonnard13b0beb2021-09-20 13:21:25 +0200164
Manuel Pégourié-Gonnardd3ac4a92021-09-24 10:06:04 +0200165The following key exchanges are not covered at all:
166
167- RSA
168- DHE-RSA
169- DHE-PSK
170- RSA-PSK
171- ECDHE-PSK
172- ECDH-RSA
173- ECDH-ECDSA
174- ECJPAKE
175
176The following key exchanges are only partially covered:
177
178- ECDHE-RSA: RSA operations are not covered and, server-side, the ECDHE
179 operation isn't either
180- ECDHE-ECDSA: server-side, the ECDHE operation isn't covered. (ECDSA
181 signature generation is only covered if using `mbedtls_pk_setup_opaque()`.)
182
183PSK if covered when the application uses `mbedtls_ssl_conf_psk_opaque()` or
184`mbedtls_ssl_set_hs_psk_opaque()`.
Manuel Pégourié-Gonnard13b0beb2021-09-20 13:21:25 +0200185
Manuel Pégourié-Gonnard73a0e1d2021-09-21 13:55:00 +0200186TLS: symmetric crypto
187---------------------
188
189- some ciphers not supported via PSA yet: ARIA, Camellia, ChachaPoly (silent
190 fallback to the legacy APIs)
Manuel Pégourié-Gonnardd3ac4a92021-09-24 10:06:04 +0200191- the HMAC part of the CBC and NULL ciphersuites
Manuel Pégourié-Gonnard73a0e1d2021-09-21 13:55:00 +0200192- the HMAC computation in `ssl_cookie.c`
193
194X.509
195-----
196
197- most hash operations are still done via the legacy API, except the few that
198 are documented above as using PSA
Manuel Pégourié-Gonnardd3ac4a92021-09-24 10:06:04 +0200199- RSA PKCS#1 v1.5 signature generation (from PSA-held keys)
200- RSA PKCS#1 v1.5 signature verification
201- RSA-PSS signature verification