blob: f2983bd37a41b2dc251501a61c367b22d3a71ab7 [file] [log] [blame] [view]
Manuel Pégourié-Gonnard73a0e1d2021-09-21 13:55:00 +02001This document describes the compile-time configuration option
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +02002`MBEDTLS_USE_PSA_CRYPTO` from a user's perspective.
Manuel Pégourié-Gonnard13b0beb2021-09-20 13:21:25 +02003
Manuel Pégourié-Gonnard2ca08c82023-03-24 09:21:46 +01004This option:
5- makes the X.509 and TLS libraries use PSA for cryptographic operations as
6 much as possible, see "Internal changes" below;
7- enables new APIs for using keys handled by PSA Crypto, such as
8 `mbedtls_pk_setup_opaque()` and `mbedtls_ssl_conf_psk_opaque()`, see
9"New APIs / API extensions" below.
Manuel Pégourié-Gonnardf3f79a02022-05-11 13:31:47 +020010
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020011General considerations
12----------------------
Manuel Pégourié-Gonnard13b0beb2021-09-20 13:21:25 +020013
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020014**Application code:** when this option is enabled, you need to call
Manuel Pégourié-Gonnardf3f79a02022-05-11 13:31:47 +020015`psa_crypto_init()` before calling any function from the SSL/TLS, X.509 or PK
valerio95e57c32023-04-20 12:28:18 +020016modules, except for the various mbedtls_xxx_init() functions which can be called
17at any time.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020018
Manuel Pégourié-Gonnard93b21e72023-03-29 10:30:26 +020019**Why enable this option:** to fully take advantage of PSA drivers in PK,
20X.509 and TLS. For example, enabling this option is what allows use of drivers
Manuel Pégourié-Gonnard9463e782023-03-30 09:37:39 +020021for ECDSA, ECDH and EC J-PAKE in those modules. However, note that even with
Manuel Pégourié-Gonnard93b21e72023-03-29 10:30:26 +020022this option disabled, some code in PK, X.509, TLS or the crypto library might
23still use PSA drivers, if it can determine it's safe to do so; currently
24that's the case for hashes.
25
Manuel Pégourié-Gonnard2ca08c82023-03-24 09:21:46 +010026**Relationship with other options:** This option depends on
27`MBEDTLS_PSA_CRYPTO_C`. These two options differ in the following way:
28- `MBEDTLS_PSA_CRYPTO_C` enables the implementation of the PSA Crypto API.
29 When it is enabled, `psa_xxx()` APIs are available and you must call
30`psa_crypto_init()` before you call any other `psa_xxx()` function. Other
31modules in the library (non-PSA crypto APIs, X.509, TLS) may or may not use
32PSA Crypto but you're not required to call `psa_crypto_init()` before calling
Manuel Pégourié-Gonnard5c8c9e02023-03-29 10:33:03 +020033non-PSA functions, unless explicitly documented (TLS 1.3).
Manuel Pégourié-Gonnard2ca08c82023-03-24 09:21:46 +010034- `MBEDTLS_USE_PSA_CRYPTO` means that X.509 and TLS will use PSA Crypto as
35 much as possible (that is, everywhere except for features that are not
36supported by PSA Crypto, see "Internal Changes" below for a complete list of
37exceptions). When it is enabled, you need to call `psa_crypto_init()` before
38calling any function from PK, X.509 or TLS; however it doesn't change anything
39for the rest of the library.
40
41**Scope:** `MBEDTLS_USE_PSA_CRYPTO` has no effect on modules other than PK,
42X.509 and TLS. It also has no effect on most of the TLS 1.3 code, which always
43uses PSA crypto. The parts of the TLS 1.3 code that will use PSA Crypto or not
44depending on this option being set or not are:
Manuel Pégourié-Gonnard439dbc52023-03-10 12:33:15 +010045- record protection;
46- running handshake hash;
47- asymmetric signature verification & generation;
48- X.509 certificate chain verification.
49You need to enable `MBEDTLS_USE_PSA_CRYPTO` if you want TLS 1.3 to use PSA
50everywhere.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020051
Manuel Pégourié-Gonnard2ca08c82023-03-24 09:21:46 +010052**Historical note:** This option was introduced at a time when PSA Crypto was
53still beta and not ready for production, so we made its use in X.509 and TLS
54opt-in: by default, these modules would keep using the stable,
55production-ready legacy (pre-PSA) crypto APIs. So, the scope of was X.509 and
56TLS, as well as some of PK for technical reasons. Nowadays PSA Crypto is no
57longer beta, and production quality, so there's no longer any reason to make
58its use in other modules opt-in. However, PSA Crypto functions require that
59`psa_crypto_init()` has been called before their use, and for backwards
60compatibility reasons we can't impose this requirement on non-PSA functions
61that didn't have such a requirement before. So, nowadays the main meaning of
62`MBEDTLS_USE_PSA_CRYPTO` is that the user promises to call `psa_crypto_init()`
63before calling any PK, X.509 or TLS functions. For the same compatibility
64reasons, we can't extend its scope. However, new modules in the library, such
65as TLS 1.3, can be introduced with a requirement to call `psa_crypto_init()`.
Manuel Pégourié-Gonnard3dd9add2023-03-22 16:17:54 +010066
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020067New APIs / API extensions
68-------------------------
69
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020070### PSA-held (opaque) keys in the PK layer
71
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020072**New API function:** `mbedtls_pk_setup_opaque()` - can be used to
73wrap a PSA key pair into a PK context. The key can be used for private-key
Manuel Pégourié-Gonnardca910172021-09-24 10:14:32 +020074operations and its public part can be exported.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020075
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020076**Benefits:** isolation of long-term secrets, use of PSA Crypto drivers.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020077
Valerio Settiac81e232024-03-21 16:49:02 +010078**Limitations:** please refer to the documentation of `mbedtls_pk_setup_opaque()`
79for a full list of supported operations and limitations.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020080
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020081**Use in X.509 and TLS:** opt-in. The application needs to construct the PK context
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020082using the new API in order to get the benefits; it can then pass the
83resulting context to the following existing APIs:
84
85- `mbedtls_ssl_conf_own_cert()` or `mbedtls_ssl_set_hs_own_cert()` to use the
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020086 key together with a certificate for certificate-based key exchanges;
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020087- `mbedtls_x509write_csr_set_key()` to generate a CSR (certificate signature
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020088 request);
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +020089- `mbedtls_x509write_crt_set_issuer_key()` to generate a certificate.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020090
Manuel Pégourié-Gonnard9155b0e2021-09-24 10:17:07 +020091### PSA-held (opaque) keys for TLS pre-shared keys (PSK)
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020092
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020093**New API functions:** `mbedtls_ssl_conf_psk_opaque()` and
Manuel Pégourié-Gonnardca910172021-09-24 10:14:32 +020094`mbedtls_ssl_set_hs_psk_opaque()`. Call one of these from an application to
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020095register a PSA key for use with a PSK key exchange.
96
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020097**Benefits:** isolation of long-term secrets.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020098
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020099**Limitations:** none.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200100
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +0200101**Use in TLS:** opt-in. The application needs to register the key using one of
102the new APIs to get the benefits.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200103
Manuel Pégourié-Gonnard86efa852023-03-24 09:26:40 +0100104### PSA-held (opaque) keys for TLS 1.2 EC J-PAKE key exchange
105
106**New API function:** `mbedtls_ssl_set_hs_ecjpake_password_opaque()`.
107Call this function from an application to register a PSA key for use with the
108TLS 1.2 EC J-PAKE key exchange.
109
110**Benefits:** isolation of long-term secrets.
111
112**Limitations:** none.
113
114**Use in TLS:** opt-in. The application needs to register the key using one of
115the new APIs to get the benefits.
116
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200117### PSA-based operations in the Cipher layer
118
Manuel Pégourié-Gonnardca910172021-09-24 10:14:32 +0200119There is a new API function `mbedtls_cipher_setup_psa()` to set up a context
120that will call PSA to store the key and perform the operations.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200121
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +0200122This function only worked for a small number of ciphers. It is now deprecated
123and it is recommended to use `psa_cipher_xxx()` or `psa_aead_xxx()` functions
124directly instead.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200125
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +0200126**Warning:** This function will be removed in a future version of Mbed TLS. If
127you are using it and would like us to keep it, please let us know about your
128use case.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200129
130Internal changes
131----------------
132
133All of these internal changes are active as soon as `MBEDTLS_USE_PSA_CRYPTO`
134is enabled, no change required on the application side.
135
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +0200136### TLS: most crypto operations based on PSA
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200137
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +0200138Current exceptions:
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200139
Manuel Pégourié-Gonnard55a188b2022-12-06 12:00:33 +0100140- Finite-field (non-EC) Diffie-Hellman (used in key exchanges: DHE-RSA,
141 DHE-PSK).
142- Restartable operations when `MBEDTLS_ECP_RESTARTABLE` is also enabled (see
143 the documentation of that option).
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200144
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +0200145Other than the above exceptions, all crypto operations are based on PSA when
146`MBEDTLS_USE_PSA_CRYPTO` is enabled.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200147
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +0200148### X.509: most crypto operations based on PSA
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200149
Manuel Pégourié-Gonnard55a188b2022-12-06 12:00:33 +0100150Current exceptions:
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200151
Manuel Pégourié-Gonnard55a188b2022-12-06 12:00:33 +0100152- Restartable operations when `MBEDTLS_ECP_RESTARTABLE` is also enabled (see
153 the documentation of that option).
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200154
Manuel Pégourié-Gonnard481846c2022-07-12 09:27:39 +0200155Other than the above exception, all crypto operations are based on PSA when
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +0200156`MBEDTLS_USE_PSA_CRYPTO` is enabled.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200157
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +0200158### PK layer: most crypto operations based on PSA
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200159
Manuel Pégourié-Gonnard55a188b2022-12-06 12:00:33 +0100160Current exceptions:
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200161
Manuel Pégourié-Gonnarda6e02912022-12-21 09:59:33 +0100162- Verification of RSA-PSS signatures with an MGF hash that's different from
163 the message hash.
Manuel Pégourié-Gonnard55a188b2022-12-06 12:00:33 +0100164- Restartable operations when `MBEDTLS_ECP_RESTARTABLE` is also enabled (see
165 the documentation of that option).
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200166
Manuel Pégourié-Gonnarda6e02912022-12-21 09:59:33 +0100167Other than the above exceptions, all crypto operations are based on PSA when
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +0200168`MBEDTLS_USE_PSA_CRYPTO` is enabled.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200169