blob: 4d72f990d735ebe1af2a67eed5c66347dbc04237 [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
16module.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020017
Manuel Pégourié-Gonnard2ca08c82023-03-24 09:21:46 +010018**Relationship with other options:** This option depends on
19`MBEDTLS_PSA_CRYPTO_C`. These two options differ in the following way:
20- `MBEDTLS_PSA_CRYPTO_C` enables the implementation of the PSA Crypto API.
21 When it is enabled, `psa_xxx()` APIs are available and you must call
22`psa_crypto_init()` before you call any other `psa_xxx()` function. Other
23modules in the library (non-PSA crypto APIs, X.509, TLS) may or may not use
24PSA Crypto but you're not required to call `psa_crypto_init()` before calling
25non-PSA functions, unless when explicitly documented (TLS 1.3).
26- `MBEDTLS_USE_PSA_CRYPTO` means that X.509 and TLS will use PSA Crypto as
27 much as possible (that is, everywhere except for features that are not
28supported by PSA Crypto, see "Internal Changes" below for a complete list of
29exceptions). When it is enabled, you need to call `psa_crypto_init()` before
30calling any function from PK, X.509 or TLS; however it doesn't change anything
31for the rest of the library.
32
33**Scope:** `MBEDTLS_USE_PSA_CRYPTO` has no effect on modules other than PK,
34X.509 and TLS. It also has no effect on most of the TLS 1.3 code, which always
35uses PSA crypto. The parts of the TLS 1.3 code that will use PSA Crypto or not
36depending on this option being set or not are:
Manuel Pégourié-Gonnard439dbc52023-03-10 12:33:15 +010037- record protection;
38- running handshake hash;
39- asymmetric signature verification & generation;
40- X.509 certificate chain verification.
41You need to enable `MBEDTLS_USE_PSA_CRYPTO` if you want TLS 1.3 to use PSA
42everywhere.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020043
Manuel Pégourié-Gonnard2ca08c82023-03-24 09:21:46 +010044**Historical note:** This option was introduced at a time when PSA Crypto was
45still beta and not ready for production, so we made its use in X.509 and TLS
46opt-in: by default, these modules would keep using the stable,
47production-ready legacy (pre-PSA) crypto APIs. So, the scope of was X.509 and
48TLS, as well as some of PK for technical reasons. Nowadays PSA Crypto is no
49longer beta, and production quality, so there's no longer any reason to make
50its use in other modules opt-in. However, PSA Crypto functions require that
51`psa_crypto_init()` has been called before their use, and for backwards
52compatibility reasons we can't impose this requirement on non-PSA functions
53that didn't have such a requirement before. So, nowadays the main meaning of
54`MBEDTLS_USE_PSA_CRYPTO` is that the user promises to call `psa_crypto_init()`
55before calling any PK, X.509 or TLS functions. For the same compatibility
56reasons, we can't extend its scope. However, new modules in the library, such
57as TLS 1.3, can be introduced with a requirement to call `psa_crypto_init()`.
Manuel Pégourié-Gonnard3dd9add2023-03-22 16:17:54 +010058
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020059New APIs / API extensions
60-------------------------
61
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020062### PSA-held (opaque) keys in the PK layer
63
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020064**New API function:** `mbedtls_pk_setup_opaque()` - can be used to
65wrap 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 +020066operations and its public part can be exported.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020067
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020068**Benefits:** isolation of long-term secrets, use of PSA Crypto drivers.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020069
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020070**Limitations:** can only wrap a key pair, can only use it for private key
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +020071operations. (That is, signature generation, and for RSA decryption too.)
72Note: for ECDSA, currently this uses randomized ECDSA while Mbed TLS uses
73deterministic ECDSA by default. The following operations are not supported
Manuel Pégourié-Gonnardca910172021-09-24 10:14:32 +020074with a context set this way, while they would be available with a normal
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020075context: `mbedtls_pk_check_pair()`, `mbedtls_pk_debug()`, all public key
76operations.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020077
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020078**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 +020079using the new API in order to get the benefits; it can then pass the
80resulting context to the following existing APIs:
81
82- `mbedtls_ssl_conf_own_cert()` or `mbedtls_ssl_set_hs_own_cert()` to use the
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020083 key together with a certificate for certificate-based key exchanges;
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020084- `mbedtls_x509write_csr_set_key()` to generate a CSR (certificate signature
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020085 request);
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +020086- `mbedtls_x509write_crt_set_issuer_key()` to generate a certificate.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020087
Manuel Pégourié-Gonnard9155b0e2021-09-24 10:17:07 +020088### PSA-held (opaque) keys for TLS pre-shared keys (PSK)
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020089
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020090**New API functions:** `mbedtls_ssl_conf_psk_opaque()` and
Manuel Pégourié-Gonnardca910172021-09-24 10:14:32 +020091`mbedtls_ssl_set_hs_psk_opaque()`. Call one of these from an application to
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020092register a PSA key for use with a PSK key exchange.
93
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020094**Benefits:** isolation of long-term secrets.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020095
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020096**Limitations:** none.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +020097
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +020098**Use in TLS:** opt-in. The application needs to register the key using one of
99the new APIs to get the benefits.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200100
Manuel Pégourié-Gonnard86efa852023-03-24 09:26:40 +0100101### PSA-held (opaque) keys for TLS 1.2 EC J-PAKE key exchange
102
103**New API function:** `mbedtls_ssl_set_hs_ecjpake_password_opaque()`.
104Call this function from an application to register a PSA key for use with the
105TLS 1.2 EC J-PAKE key exchange.
106
107**Benefits:** isolation of long-term secrets.
108
109**Limitations:** none.
110
111**Use in TLS:** opt-in. The application needs to register the key using one of
112the new APIs to get the benefits.
113
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200114### PSA-based operations in the Cipher layer
115
Manuel Pégourié-Gonnardca910172021-09-24 10:14:32 +0200116There is a new API function `mbedtls_cipher_setup_psa()` to set up a context
117that will call PSA to store the key and perform the operations.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200118
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +0200119This function only worked for a small number of ciphers. It is now deprecated
120and it is recommended to use `psa_cipher_xxx()` or `psa_aead_xxx()` functions
121directly instead.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200122
Manuel Pégourié-Gonnardb5b27c12022-06-10 11:09:03 +0200123**Warning:** This function will be removed in a future version of Mbed TLS. If
124you are using it and would like us to keep it, please let us know about your
125use case.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200126
127Internal changes
128----------------
129
130All of these internal changes are active as soon as `MBEDTLS_USE_PSA_CRYPTO`
131is enabled, no change required on the application side.
132
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +0200133### TLS: most crypto operations based on PSA
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200134
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +0200135Current exceptions:
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200136
Manuel Pégourié-Gonnard55a188b2022-12-06 12:00:33 +0100137- Finite-field (non-EC) Diffie-Hellman (used in key exchanges: DHE-RSA,
138 DHE-PSK).
139- Restartable operations when `MBEDTLS_ECP_RESTARTABLE` is also enabled (see
140 the documentation of that option).
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200141
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +0200142Other than the above exceptions, all crypto operations are based on PSA when
143`MBEDTLS_USE_PSA_CRYPTO` is enabled.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200144
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +0200145### X.509: most crypto operations based on PSA
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200146
Manuel Pégourié-Gonnard55a188b2022-12-06 12:00:33 +0100147Current exceptions:
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200148
Manuel Pégourié-Gonnard55a188b2022-12-06 12:00:33 +0100149- Restartable operations when `MBEDTLS_ECP_RESTARTABLE` is also enabled (see
150 the documentation of that option).
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200151
Manuel Pégourié-Gonnard481846c2022-07-12 09:27:39 +0200152Other than the above exception, all crypto operations are based on PSA when
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +0200153`MBEDTLS_USE_PSA_CRYPTO` is enabled.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200154
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +0200155### PK layer: most crypto operations based on PSA
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200156
Manuel Pégourié-Gonnard55a188b2022-12-06 12:00:33 +0100157Current exceptions:
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200158
Manuel Pégourié-Gonnarda6e02912022-12-21 09:59:33 +0100159- Verification of RSA-PSS signatures with an MGF hash that's different from
160 the message hash.
Manuel Pégourié-Gonnard55a188b2022-12-06 12:00:33 +0100161- Restartable operations when `MBEDTLS_ECP_RESTARTABLE` is also enabled (see
162 the documentation of that option).
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200163
Manuel Pégourié-Gonnarda6e02912022-12-21 09:59:33 +0100164Other than the above exceptions, all crypto operations are based on PSA when
Manuel Pégourié-Gonnardb2bd34e2022-04-20 15:58:00 +0200165`MBEDTLS_USE_PSA_CRYPTO` is enabled.
Manuel Pégourié-Gonnard1b08c5f2021-09-21 11:21:23 +0200166