1 | =pod
|
---|
2 |
|
---|
3 | =head1 NAME
|
---|
4 |
|
---|
5 | EVP_PKEY-RSA, EVP_KEYMGMT-RSA, RSA
|
---|
6 | - EVP_PKEY RSA keytype and algorithm support
|
---|
7 |
|
---|
8 | =head1 DESCRIPTION
|
---|
9 |
|
---|
10 | The B<RSA> keytype is implemented in OpenSSL's default and FIPS providers.
|
---|
11 | That implementation supports the basic RSA keys, containing the modulus I<n>,
|
---|
12 | the public exponent I<e>, the private exponent I<d>, and a collection of prime
|
---|
13 | factors, exponents and coefficient for CRT calculations, of which the first
|
---|
14 | few are known as I<p> and I<q>, I<dP> and I<dQ>, and I<qInv>.
|
---|
15 |
|
---|
16 | =head2 Common RSA parameters
|
---|
17 |
|
---|
18 | In addition to the common parameters that all keytypes should support (see
|
---|
19 | L<provider-keymgmt(7)/Common parameters>), the B<RSA> keytype implementation
|
---|
20 | supports the following.
|
---|
21 |
|
---|
22 | =over 4
|
---|
23 |
|
---|
24 | =item "n" (B<OSSL_PKEY_PARAM_RSA_N>) <unsigned integer>
|
---|
25 |
|
---|
26 | The RSA modulus "n" value.
|
---|
27 |
|
---|
28 | =item "e" (B<OSSL_PKEY_PARAM_RSA_E>) <unsigned integer>
|
---|
29 |
|
---|
30 | The RSA public exponent "e" value.
|
---|
31 | This value must always be set when creating a raw key using L<EVP_PKEY_fromdata(3)>.
|
---|
32 | Note that when a decryption operation is performed, that this value is used for
|
---|
33 | blinding purposes to prevent timing attacks.
|
---|
34 |
|
---|
35 | =item "d" (B<OSSL_PKEY_PARAM_RSA_D>) <unsigned integer>
|
---|
36 |
|
---|
37 | The RSA private exponent "d" value.
|
---|
38 |
|
---|
39 | =item "rsa-factor1" (B<OSSL_PKEY_PARAM_RSA_FACTOR1>) <unsigned integer>
|
---|
40 |
|
---|
41 | =item "rsa-factor2" (B<OSSL_PKEY_PARAM_RSA_FACTOR2>) <unsigned integer>
|
---|
42 |
|
---|
43 | =item "rsa-factor3" (B<OSSL_PKEY_PARAM_RSA_FACTOR3>) <unsigned integer>
|
---|
44 |
|
---|
45 | =item "rsa-factor4" (B<OSSL_PKEY_PARAM_RSA_FACTOR4>) <unsigned integer>
|
---|
46 |
|
---|
47 | =item "rsa-factor5" (B<OSSL_PKEY_PARAM_RSA_FACTOR5>) <unsigned integer>
|
---|
48 |
|
---|
49 | =item "rsa-factor6" (B<OSSL_PKEY_PARAM_RSA_FACTOR6>) <unsigned integer>
|
---|
50 |
|
---|
51 | =item "rsa-factor7" (B<OSSL_PKEY_PARAM_RSA_FACTOR7>) <unsigned integer>
|
---|
52 |
|
---|
53 | =item "rsa-factor8" (B<OSSL_PKEY_PARAM_RSA_FACTOR8>) <unsigned integer>
|
---|
54 |
|
---|
55 | =item "rsa-factor9" (B<OSSL_PKEY_PARAM_RSA_FACTOR9>) <unsigned integer>
|
---|
56 |
|
---|
57 | =item "rsa-factor10" (B<OSSL_PKEY_PARAM_RSA_FACTOR10>) <unsigned integer>
|
---|
58 |
|
---|
59 | RSA prime factors. The factors are known as "p", "q" and "r_i" in RFC8017.
|
---|
60 | Up to eight additional "r_i" prime factors are supported.
|
---|
61 |
|
---|
62 | =item "rsa-exponent1" (B<OSSL_PKEY_PARAM_RSA_EXPONENT1>) <unsigned integer>
|
---|
63 |
|
---|
64 | =item "rsa-exponent2" (B<OSSL_PKEY_PARAM_RSA_EXPONENT2>) <unsigned integer>
|
---|
65 |
|
---|
66 | =item "rsa-exponent3" (B<OSSL_PKEY_PARAM_RSA_EXPONENT3>) <unsigned integer>
|
---|
67 |
|
---|
68 | =item "rsa-exponent4" (B<OSSL_PKEY_PARAM_RSA_EXPONENT4>) <unsigned integer>
|
---|
69 |
|
---|
70 | =item "rsa-exponent5" (B<OSSL_PKEY_PARAM_RSA_EXPONENT5>) <unsigned integer>
|
---|
71 |
|
---|
72 | =item "rsa-exponent6" (B<OSSL_PKEY_PARAM_RSA_EXPONENT6>) <unsigned integer>
|
---|
73 |
|
---|
74 | =item "rsa-exponent7" (B<OSSL_PKEY_PARAM_RSA_EXPONENT7>) <unsigned integer>
|
---|
75 |
|
---|
76 | =item "rsa-exponent8" (B<OSSL_PKEY_PARAM_RSA_EXPONENT8>) <unsigned integer>
|
---|
77 |
|
---|
78 | =item "rsa-exponent9" (B<OSSL_PKEY_PARAM_RSA_EXPONENT9>) <unsigned integer>
|
---|
79 |
|
---|
80 | =item "rsa-exponent10" (B<OSSL_PKEY_PARAM_RSA_EXPONENT10>) <unsigned integer>
|
---|
81 |
|
---|
82 | RSA CRT (Chinese Remainder Theorem) exponents. The exponents are known
|
---|
83 | as "dP", "dQ" and "d_i in RFC8017".
|
---|
84 | Up to eight additional "d_i" exponents are supported.
|
---|
85 |
|
---|
86 | =item "rsa-coefficient1" (B<OSSL_PKEY_PARAM_RSA_COEFFICIENT1>) <unsigned integer>
|
---|
87 |
|
---|
88 | =item "rsa-coefficient2" (B<OSSL_PKEY_PARAM_RSA_COEFFICIENT2>) <unsigned integer>
|
---|
89 |
|
---|
90 | =item "rsa-coefficient3" (B<OSSL_PKEY_PARAM_RSA_COEFFICIENT3>) <unsigned integer>
|
---|
91 |
|
---|
92 | =item "rsa-coefficient4" (B<OSSL_PKEY_PARAM_RSA_COEFFICIENT4>) <unsigned integer>
|
---|
93 |
|
---|
94 | =item "rsa-coefficient5" (B<OSSL_PKEY_PARAM_RSA_COEFFICIENT5>) <unsigned integer>
|
---|
95 |
|
---|
96 | =item "rsa-coefficient6" (B<OSSL_PKEY_PARAM_RSA_COEFFICIENT6>) <unsigned integer>
|
---|
97 |
|
---|
98 | =item "rsa-coefficient7" (B<OSSL_PKEY_PARAM_RSA_COEFFICIENT7>) <unsigned integer>
|
---|
99 |
|
---|
100 | =item "rsa-coefficient8" (B<OSSL_PKEY_PARAM_RSA_COEFFICIENT8>) <unsigned integer>
|
---|
101 |
|
---|
102 | =item "rsa-coefficient9" (B<OSSL_PKEY_PARAM_RSA_COEFFICIENT9>) <unsigned integer>
|
---|
103 |
|
---|
104 | RSA CRT (Chinese Remainder Theorem) coefficients. The coefficients are known as
|
---|
105 | "qInv" and "t_i".
|
---|
106 | Up to eight additional "t_i" exponents are supported.
|
---|
107 |
|
---|
108 | =back
|
---|
109 |
|
---|
110 | =head2 RSA key generation parameters
|
---|
111 |
|
---|
112 | When generating RSA keys, the following key generation parameters may be used.
|
---|
113 |
|
---|
114 | =over 4
|
---|
115 |
|
---|
116 | =item "bits" (B<OSSL_PKEY_PARAM_RSA_BITS>) <unsigned integer>
|
---|
117 |
|
---|
118 | The value should be the cryptographic length for the B<RSA> cryptosystem, in
|
---|
119 | bits.
|
---|
120 |
|
---|
121 | =item "primes" (B<OSSL_PKEY_PARAM_RSA_PRIMES>) <unsigned integer>
|
---|
122 |
|
---|
123 | The value should be the number of primes for the generated B<RSA> key. The
|
---|
124 | default is 2. It isn't permitted to specify a larger number of primes than
|
---|
125 | 10. Additionally, the number of primes is limited by the length of the key
|
---|
126 | being generated so the maximum number could be less.
|
---|
127 | Some providers may only support a value of 2.
|
---|
128 |
|
---|
129 | =item "e" (B<OSSL_PKEY_PARAM_RSA_E>) <unsigned integer>
|
---|
130 |
|
---|
131 | The RSA "e" value. The value may be any odd number greater than or equal to
|
---|
132 | 65537. The default value is 65537.
|
---|
133 | For legacy reasons a value of 3 is currently accepted but is deprecated.
|
---|
134 |
|
---|
135 | =back
|
---|
136 |
|
---|
137 | =head2 RSA key generation parameters for FIPS module testing
|
---|
138 |
|
---|
139 | When generating RSA keys, the following additional key generation parameters may
|
---|
140 | be used for algorithm testing purposes only. Do not use these to generate
|
---|
141 | RSA keys for a production environment.
|
---|
142 |
|
---|
143 | =over 4
|
---|
144 |
|
---|
145 | =item "xp" (B<OSSL_PKEY_PARAM_RSA_TEST_XP>) <unsigned integer>
|
---|
146 |
|
---|
147 | =item "xq" (B<OSSL_PKEY_PARAM_RSA_TEST_XQ>) <unsigned integer>
|
---|
148 |
|
---|
149 | These 2 fields are normally randomly generated and are used to generate "p" and
|
---|
150 | "q".
|
---|
151 |
|
---|
152 | =item "xp1" (B<OSSL_PKEY_PARAM_RSA_TEST_XP1>) <unsigned integer>
|
---|
153 |
|
---|
154 | =item "xp2" (B<OSSL_PKEY_PARAM_RSA_TEST_XP2>) <unsigned integer>
|
---|
155 |
|
---|
156 | =item "xq1" (B<OSSL_PKEY_PARAM_RSA_TEST_XQ1>) <unsigned integer>
|
---|
157 |
|
---|
158 | =item "xq2" (B<OSSL_PKEY_PARAM_RSA_TEST_XQ2>) <unsigned integer>
|
---|
159 |
|
---|
160 | These 4 fields are normally randomly generated. The prime factors "p1", "p2",
|
---|
161 | "q1" and "q2" are determined from these values.
|
---|
162 |
|
---|
163 | =back
|
---|
164 |
|
---|
165 | =head2 RSA key parameters for FIPS module testing
|
---|
166 |
|
---|
167 | The following intermediate values can be retrieved only if the values
|
---|
168 | specified in L</"RSA key generation parameters for FIPS module testing"> are set.
|
---|
169 | These should not be accessed in a production environment.
|
---|
170 |
|
---|
171 | =over 4
|
---|
172 |
|
---|
173 | =item "p1" (B<OSSL_PKEY_PARAM_RSA_TEST_P1>) <unsigned integer>
|
---|
174 |
|
---|
175 | =item "p2" (B<OSSL_PKEY_PARAM_RSA_TEST_P2>) <unsigned integer>
|
---|
176 |
|
---|
177 | =item "q1" (B<OSSL_PKEY_PARAM_RSA_TEST_Q1>) <unsigned integer>
|
---|
178 |
|
---|
179 | =item "q2" (B<OSSL_PKEY_PARAM_RSA_TEST_Q2>) <unsigned integer>
|
---|
180 |
|
---|
181 | The auxiliary probable primes.
|
---|
182 |
|
---|
183 | =back
|
---|
184 |
|
---|
185 | =head2 RSA key validation
|
---|
186 |
|
---|
187 | For RSA keys, L<EVP_PKEY_param_check(3)> and L<EVP_PKEY_param_check_quick(3)>
|
---|
188 | both return 1 unconditionally.
|
---|
189 |
|
---|
190 | For RSA keys, L<EVP_PKEY_public_check(3)> conforms to the SP800-56Br1 I<public key
|
---|
191 | check> when the OpenSSL FIPS provider is used. The OpenSSL default provider
|
---|
192 | performs similiar tests but relaxes the keysize restrictions for backwards
|
---|
193 | compatibility.
|
---|
194 |
|
---|
195 | For RSA keys, L<EVP_PKEY_public_check_quick(3)> is the same as
|
---|
196 | L<EVP_PKEY_public_check(3)>.
|
---|
197 |
|
---|
198 | For RSA keys, L<EVP_PKEY_private_check(3)> conforms to the SP800-56Br1
|
---|
199 | I<private key test>.
|
---|
200 |
|
---|
201 | For RSA keys, L<EVP_PKEY_pairwise_check(3)> conforms to the
|
---|
202 | SP800-56Br1 I<KeyPair Validation check> for the OpenSSL FIPS provider. The
|
---|
203 | OpenSSL default provider allows testing of the validity of multi-primes.
|
---|
204 |
|
---|
205 | =head1 CONFORMING TO
|
---|
206 |
|
---|
207 | =over 4
|
---|
208 |
|
---|
209 | =item FIPS186-4
|
---|
210 |
|
---|
211 | Section B.3.6 Generation of Probable Primes with Conditions Based on
|
---|
212 | Auxiliary Probable Primes
|
---|
213 |
|
---|
214 | =item RFC 8017, excluding RSA-PSS and RSA-OAEP
|
---|
215 |
|
---|
216 | =for comment RSA-PSS, and probably also RSA-OAEP, need separate keytypes,
|
---|
217 | and will be described in separate pages for those RSA keytypes.
|
---|
218 |
|
---|
219 | =back
|
---|
220 |
|
---|
221 | =head1 EXAMPLES
|
---|
222 |
|
---|
223 | An B<EVP_PKEY> context can be obtained by calling:
|
---|
224 |
|
---|
225 | EVP_PKEY_CTX *pctx =
|
---|
226 | EVP_PKEY_CTX_new_from_name(NULL, "RSA", NULL);
|
---|
227 |
|
---|
228 | An B<RSA> key can be generated simply like this:
|
---|
229 |
|
---|
230 | pkey = EVP_RSA_gen(4096);
|
---|
231 |
|
---|
232 | or like this:
|
---|
233 |
|
---|
234 | EVP_PKEY *pkey = NULL;
|
---|
235 | EVP_PKEY_CTX *pctx =
|
---|
236 | EVP_PKEY_CTX_new_from_name(NULL, "RSA", NULL);
|
---|
237 |
|
---|
238 | EVP_PKEY_keygen_init(pctx);
|
---|
239 | EVP_PKEY_generate(pctx, &pkey);
|
---|
240 | EVP_PKEY_CTX_free(pctx);
|
---|
241 |
|
---|
242 | An B<RSA> key can be generated with key generation parameters:
|
---|
243 |
|
---|
244 | unsigned int primes = 3;
|
---|
245 | unsigned int bits = 4096;
|
---|
246 | OSSL_PARAM params[3];
|
---|
247 | EVP_PKEY *pkey = NULL;
|
---|
248 | EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_from_name(NULL, "RSA", NULL);
|
---|
249 |
|
---|
250 | EVP_PKEY_keygen_init(pctx);
|
---|
251 |
|
---|
252 | params[0] = OSSL_PARAM_construct_uint("bits", &bits);
|
---|
253 | params[1] = OSSL_PARAM_construct_uint("primes", &primes);
|
---|
254 | params[2] = OSSL_PARAM_construct_end();
|
---|
255 | EVP_PKEY_CTX_set_params(pctx, params);
|
---|
256 |
|
---|
257 | EVP_PKEY_generate(pctx, &pkey);
|
---|
258 | EVP_PKEY_print_private(bio_out, pkey, 0, NULL);
|
---|
259 | EVP_PKEY_CTX_free(pctx);
|
---|
260 |
|
---|
261 | =head1 SEE ALSO
|
---|
262 |
|
---|
263 | L<EVP_RSA_gen(3)>, L<EVP_KEYMGMT(3)>, L<EVP_PKEY(3)>, L<provider-keymgmt(7)>
|
---|
264 |
|
---|
265 | =head1 COPYRIGHT
|
---|
266 |
|
---|
267 | Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved.
|
---|
268 |
|
---|
269 | Licensed under the Apache License 2.0 (the "License"). You may not use
|
---|
270 | this file except in compliance with the License. You can obtain a copy
|
---|
271 | in the file LICENSE in the source distribution or at
|
---|
272 | L<https://www.openssl.org/source/license.html>.
|
---|
273 |
|
---|
274 | =cut
|
---|