]> git.ipfire.org Git - thirdparty/glibc.git/blob - manual/crypt.texi
Document that --enable-static-pie implies PIE
[thirdparty/glibc.git] / manual / crypt.texi
1 @c This node must have no pointers.
2 @node Cryptographic Functions
3 @c @node Cryptographic Functions, Debugging Support, System Configuration, Top
4 @chapter DES Encryption and Password Handling
5 @c %MENU% DES encryption and password handling
6
7 On many systems, it is unnecessary to have any kind of user
8 authentication; for instance, a workstation which is not connected to a
9 network probably does not need any user authentication, because to use
10 the machine an intruder must have physical access.
11
12 Sometimes, however, it is necessary to be sure that a user is authorized
13 to use some service a machine provides---for instance, to log in as a
14 particular user id (@pxref{Users and Groups}). One traditional way of
15 doing this is for each user to choose a secret @dfn{password}; then, the
16 system can ask someone claiming to be a user what the user's password
17 is, and if the person gives the correct password then the system can
18 grant the appropriate privileges.
19
20 If all the passwords are just stored in a file somewhere, then this file
21 has to be very carefully protected. To avoid this, passwords are run
22 through a @dfn{one-way function}, a function which makes it difficult to
23 work out what its input was by looking at its output, before storing in
24 the file.
25
26 @Theglibc{} provides a one-way function that is compatible with
27 the behavior of the @code{crypt} function introduced in FreeBSD 2.0.
28 It supports two one-way algorithms: one based on the MD5
29 message-digest algorithm that is compatible with modern BSD systems,
30 and the other based on the Data Encryption Standard (DES) that is
31 compatible with Unix systems.
32
33 @vindex AUTH_DES
34 @cindex FIPS 140-2
35 It also provides support for Secure RPC, and some library functions that
36 can be used to perform normal DES encryption. The @code{AUTH_DES}
37 authentication flavor in Secure RPC, as provided by @theglibc{},
38 uses DES and does not comply with FIPS 140-2 nor does any other use of DES
39 within @theglibc{}. It is recommended that Secure RPC should not be used
40 for systems that need to comply with FIPS 140-2 since all flavors of
41 encrypted authentication use normal DES.
42
43 @menu
44 * Legal Problems:: This software can get you locked up, or worse.
45 * getpass:: Prompting the user for a password.
46 * crypt:: A one-way function for passwords.
47 * DES Encryption:: Routines for DES encryption.
48 * Unpredictable Bytes:: Randomness for cryptography purposes.
49 @end menu
50
51 @node Legal Problems
52 @section Legal Problems
53
54 Because of the continuously changing state of the law, it's not possible
55 to provide a definitive survey of the laws affecting cryptography.
56 Instead, this section warns you of some of the known trouble spots; this
57 may help you when you try to find out what the laws of your country are.
58
59 Some countries require that you have a license to use, possess, or import
60 cryptography. These countries are believed to include Byelorussia,
61 Burma, India, Indonesia, Israel, Kazakhstan, Pakistan, Russia, and Saudi
62 Arabia.
63
64 Some countries restrict the transmission of encrypted messages by radio;
65 some telecommunications carriers restrict the transmission of encrypted
66 messages over their network.
67
68 Many countries have some form of export control for encryption software.
69 The Wassenaar Arrangement is a multilateral agreement between 33
70 countries (Argentina, Australia, Austria, Belgium, Bulgaria, Canada, the
71 Czech Republic, Denmark, Finland, France, Germany, Greece, Hungary,
72 Ireland, Italy, Japan, Luxembourg, the Netherlands, New Zealand, Norway,
73 Poland, Portugal, the Republic of Korea, Romania, the Russian
74 Federation, the Slovak Republic, Spain, Sweden, Switzerland, Turkey,
75 Ukraine, the United Kingdom and the United States) which restricts some
76 kinds of encryption exports. Different countries apply the arrangement
77 in different ways; some do not allow the exception for certain kinds of
78 ``public domain'' software (which would include this library), some
79 only restrict the export of software in tangible form, and others impose
80 significant additional restrictions.
81
82 The United States has additional rules. This software would generally
83 be exportable under 15 CFR 740.13(e), which permits exports of
84 ``encryption source code'' which is ``publicly available'' and which is
85 ``not subject to an express agreement for the payment of a licensing fee or
86 royalty for commercial production or sale of any product developed with
87 the source code'' to most countries.
88
89 The rules in this area are continuously changing. If you know of any
90 information in this manual that is out-of-date, please report it to
91 the bug database. @xref{Reporting Bugs}.
92
93 @node getpass
94 @section Reading Passwords
95
96 When reading in a password, it is desirable to avoid displaying it on
97 the screen, to help keep it secret. The following function handles this
98 in a convenient way.
99
100 @deftypefun {char *} getpass (const char *@var{prompt})
101 @standards{BSD, unistd.h}
102 @safety{@prelim{}@mtunsafe{@mtasuterm{}}@asunsafe{@ascuheap{} @asulock{} @asucorrupt{}}@acunsafe{@acuterm{} @aculock{} @acucorrupt{}}}
103 @c This function will attempt to create a stream for terminal I/O, but
104 @c will fallback to stdio/stderr. It attempts to change the terminal
105 @c mode in a thread-unsafe way, write out the prompt, read the password,
106 @c then restore the terminal mode. It has a cleanup to close the stream
107 @c in case of (synchronous) cancellation, but not to restore the
108 @c terminal mode.
109
110 @code{getpass} outputs @var{prompt}, then reads a string in from the
111 terminal without echoing it. It tries to connect to the real terminal,
112 @file{/dev/tty}, if possible, to encourage users not to put plaintext
113 passwords in files; otherwise, it uses @code{stdin} and @code{stderr}.
114 @code{getpass} also disables the INTR, QUIT, and SUSP characters on the
115 terminal using the @code{ISIG} terminal attribute (@pxref{Local Modes}).
116 The terminal is flushed before and after @code{getpass}, so that
117 characters of a mistyped password are not accidentally visible.
118
119 In other C libraries, @code{getpass} may only return the first
120 @code{PASS_MAX} bytes of a password. @Theglibc{} has no limit, so
121 @code{PASS_MAX} is undefined.
122
123 The prototype for this function is in @file{unistd.h}. @code{PASS_MAX}
124 would be defined in @file{limits.h}.
125 @end deftypefun
126
127 This precise set of operations may not suit all possible situations. In
128 this case, it is recommended that users write their own @code{getpass}
129 substitute. For instance, a very simple substitute is as follows:
130
131 @smallexample
132 @include mygetpass.c.texi
133 @end smallexample
134
135 The substitute takes the same parameters as @code{getline}
136 (@pxref{Line Input}); the user must print any prompt desired.
137
138 @node crypt
139 @section Encrypting Passwords
140
141 @deftypefun {char *} crypt (const char *@var{key}, const char *@var{salt})
142 @standards{BSD, crypt.h}
143 @standards{SVID, crypt.h}
144 @safety{@prelim{}@mtunsafe{@mtasurace{:crypt}}@asunsafe{@asucorrupt{} @asulock{} @ascuheap{} @ascudlopen{}}@acunsafe{@aculock{} @acsmem{}}}
145 @c Besides the obvious problem of returning a pointer into static
146 @c storage, the DES initializer takes an internal lock with the usual
147 @c set of problems for AS- and AC-Safety. The FIPS mode checker and the
148 @c NSS implementations of may leak file descriptors if canceled. The
149 @c The MD5, SHA256 and SHA512 implementations will malloc on long keys,
150 @c and NSS relies on dlopening, which brings about another can of worms.
151
152 The @code{crypt} function takes a password, @var{key}, as a string, and
153 a @var{salt} character array which is described below, and returns a
154 printable ASCII string which starts with another salt. It is believed
155 that, given the output of the function, the best way to find a @var{key}
156 that will produce that output is to guess values of @var{key} until the
157 original value of @var{key} is found.
158
159 The @var{salt} parameter does two things. Firstly, it selects which
160 algorithm is used, the MD5-based one or the DES-based one. Secondly, it
161 makes life harder for someone trying to guess passwords against a file
162 containing many passwords; without a @var{salt}, an intruder can make a
163 guess, run @code{crypt} on it once, and compare the result with all the
164 passwords. With a @var{salt}, the intruder must run @code{crypt} once
165 for each different salt.
166
167 For the MD5-based algorithm, the @var{salt} should consist of the string
168 @code{$1$}, followed by up to 8 characters, terminated by either
169 another @code{$} or the end of the string. The result of @code{crypt}
170 will be the @var{salt}, followed by a @code{$} if the salt didn't end
171 with one, followed by 22 characters from the alphabet
172 @code{./0-9A-Za-z}, up to 34 characters total. Every character in the
173 @var{key} is significant.
174
175 For the DES-based algorithm, the @var{salt} should consist of two
176 characters from the alphabet @code{./0-9A-Za-z}, and the result of
177 @code{crypt} will be those two characters followed by 11 more from the
178 same alphabet, 13 in total. Only the first 8 characters in the
179 @var{key} are significant.
180
181 The MD5-based algorithm has no limit on the useful length of the
182 password used, and is slightly more secure. It is therefore preferred
183 over the DES-based algorithm.
184
185 When the user enters their password for the first time, the @var{salt}
186 should be set to a new string which is reasonably random. To verify a
187 password against the result of a previous call to @code{crypt}, pass
188 the result of the previous call as the @var{salt}.
189 @end deftypefun
190
191 The following short program is an example of how to use @code{crypt} the
192 first time a password is entered. Note that the @var{salt} generation
193 is just barely acceptable; in particular, it is not unique between
194 machines, and in many applications it would not be acceptable to let an
195 attacker know what time the user's password was last set.
196
197 @smallexample
198 @include genpass.c.texi
199 @end smallexample
200
201 The next program shows how to verify a password. It prompts the user
202 for a password and prints ``Access granted.'' if the user types
203 @code{GNU libc manual}.
204
205 @smallexample
206 @include testpass.c.texi
207 @end smallexample
208
209 @deftypefun {char *} crypt_r (const char *@var{key}, const char *@var{salt}, {struct crypt_data *} @var{data})
210 @standards{GNU, crypt.h}
211 @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{} @ascuheap{} @ascudlopen{}}@acunsafe{@aculock{} @acsmem{}}}
212 @c Compared with crypt, this function fixes the @mtasurace:crypt
213 @c problem, but nothing else.
214
215 The @code{crypt_r} function does the same thing as @code{crypt}, but
216 takes an extra parameter which includes space for its result (among
217 other things), so it can be reentrant. @code{data@w{->}initialized} must be
218 cleared to zero before the first time @code{crypt_r} is called.
219
220 The @code{crypt_r} function is a GNU extension.
221 @end deftypefun
222
223 The @code{crypt} and @code{crypt_r} functions are prototyped in the
224 header @file{crypt.h}.
225
226 @node DES Encryption
227 @section DES Encryption
228
229 @cindex FIPS 46-3
230 The Data Encryption Standard is described in the US Government Federal
231 Information Processing Standards (FIPS) 46-3 published by the National
232 Institute of Standards and Technology. The DES has been very thoroughly
233 analyzed since it was developed in the late 1970s, and no new
234 significant flaws have been found.
235
236 However, the DES uses only a 56-bit key (plus 8 parity bits), and a
237 machine has been built in 1998 which can search through all possible
238 keys in about 6 days, which cost about US$200000; faster searches would
239 be possible with more money. This makes simple DES insecure for most
240 purposes, and NIST no longer permits new US government systems
241 to use simple DES.
242
243 For serious encryption functionality, it is recommended that one of the
244 many free encryption libraries be used instead of these routines.
245
246 The DES is a reversible operation which takes a 64-bit block and a
247 64-bit key, and produces another 64-bit block. Usually the bits are
248 numbered so that the most-significant bit, the first bit, of each block
249 is numbered 1.
250
251 Under that numbering, every 8th bit of the key (the 8th, 16th, and so
252 on) is not used by the encryption algorithm itself. But the key must
253 have odd parity; that is, out of bits 1 through 8, and 9 through 16, and
254 so on, there must be an odd number of `1' bits, and this completely
255 specifies the unused bits.
256
257 @deftypefun void setkey (const char *@var{key})
258 @standards{BSD, crypt.h}
259 @standards{SVID, crypt.h}
260 @safety{@prelim{}@mtunsafe{@mtasurace{:crypt}}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}}
261 @c The static buffer stores the key, making it fundamentally
262 @c thread-unsafe. The locking issues are only in the initialization
263 @c path; cancelling the initialization will leave the lock held, it
264 @c would otherwise repeat the initialization on the next call.
265
266 The @code{setkey} function sets an internal data structure to be an
267 expanded form of @var{key}. @var{key} is specified as an array of 64
268 bits each stored in a @code{char}, the first bit is @code{key[0]} and
269 the 64th bit is @code{key[63]}. The @var{key} should have the correct
270 parity.
271 @end deftypefun
272
273 @deftypefun void encrypt (char *@var{block}, int @var{edflag})
274 @standards{BSD, crypt.h}
275 @standards{SVID, crypt.h}
276 @safety{@prelim{}@mtunsafe{@mtasurace{:crypt}}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}}
277 @c Same issues as setkey.
278
279 The @code{encrypt} function encrypts @var{block} if
280 @var{edflag} is 0, otherwise it decrypts @var{block}, using a key
281 previously set by @code{setkey}. The result is
282 placed in @var{block}.
283
284 Like @code{setkey}, @var{block} is specified as an array of 64 bits each
285 stored in a @code{char}, but there are no parity bits in @var{block}.
286 @end deftypefun
287
288 @deftypefun void setkey_r (const char *@var{key}, {struct crypt_data *} @var{data})
289 @deftypefunx void encrypt_r (char *@var{block}, int @var{edflag}, {struct crypt_data *} @var{data})
290 @standards{GNU, crypt.h}
291 @c setkey_r: @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}}
292 @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}}
293
294 These are reentrant versions of @code{setkey} and @code{encrypt}. The
295 only difference is the extra parameter, which stores the expanded
296 version of @var{key}. Before calling @code{setkey_r} the first time,
297 @code{data->initialized} must be cleared to zero.
298 @end deftypefun
299
300 The @code{setkey_r} and @code{encrypt_r} functions are GNU extensions.
301 @code{setkey}, @code{encrypt}, @code{setkey_r}, and @code{encrypt_r} are
302 defined in @file{crypt.h}.
303
304 @deftypefun int ecb_crypt (char *@var{key}, char *@var{blocks}, unsigned int @var{len}, unsigned int @var{mode})
305 @standards{SUNRPC, rpc/des_crypt.h}
306 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
307
308 The function @code{ecb_crypt} encrypts or decrypts one or more blocks
309 using DES. Each block is encrypted independently.
310
311 The @var{blocks} and the @var{key} are stored packed in 8-bit bytes, so
312 that the first bit of the key is the most-significant bit of
313 @code{key[0]} and the 63rd bit of the key is stored as the
314 least-significant bit of @code{key[7]}. The @var{key} should have the
315 correct parity.
316
317 @var{len} is the number of bytes in @var{blocks}. It should be a
318 multiple of 8 (so that there are a whole number of blocks to encrypt).
319 @var{len} is limited to a maximum of @code{DES_MAXDATA} bytes.
320
321 The result of the encryption replaces the input in @var{blocks}.
322
323 The @var{mode} parameter is the bitwise OR of two of the following:
324
325 @vtable @code
326 @item DES_ENCRYPT
327 @standards{SUNRPC, rpc/des_crypt.h}
328 This constant, used in the @var{mode} parameter, specifies that
329 @var{blocks} is to be encrypted.
330
331 @item DES_DECRYPT
332 @standards{SUNRPC, rpc/des_crypt.h}
333 This constant, used in the @var{mode} parameter, specifies that
334 @var{blocks} is to be decrypted.
335
336 @item DES_HW
337 @standards{SUNRPC, rpc/des_crypt.h}
338 This constant, used in the @var{mode} parameter, asks to use a hardware
339 device. If no hardware device is available, encryption happens anyway,
340 but in software.
341
342 @item DES_SW
343 @standards{SUNRPC, rpc/des_crypt.h}
344 This constant, used in the @var{mode} parameter, specifies that no
345 hardware device is to be used.
346 @end vtable
347
348 The result of the function will be one of these values:
349
350 @vtable @code
351 @item DESERR_NONE
352 @standards{SUNRPC, rpc/des_crypt.h}
353 The encryption succeeded.
354
355 @item DESERR_NOHWDEVICE
356 @standards{SUNRPC, rpc/des_crypt.h}
357 The encryption succeeded, but there was no hardware device available.
358
359 @item DESERR_HWERROR
360 @standards{SUNRPC, rpc/des_crypt.h}
361 The encryption failed because of a hardware problem.
362
363 @item DESERR_BADPARAM
364 @standards{SUNRPC, rpc/des_crypt.h}
365 The encryption failed because of a bad parameter, for instance @var{len}
366 is not a multiple of 8 or @var{len} is larger than @code{DES_MAXDATA}.
367 @end vtable
368 @end deftypefun
369
370 @deftypefun int DES_FAILED (int @var{err})
371 @standards{SUNRPC, rpc/des_crypt.h}
372 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
373 This macro returns 1 if @var{err} is a `success' result code from
374 @code{ecb_crypt} or @code{cbc_crypt}, and 0 otherwise.
375 @end deftypefun
376
377 @deftypefun int cbc_crypt (char *@var{key}, char *@var{blocks}, unsigned int @var{len}, unsigned int @var{mode}, char *@var{ivec})
378 @standards{SUNRPC, rpc/des_crypt.h}
379 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
380
381 The function @code{cbc_crypt} encrypts or decrypts one or more blocks
382 using DES in Cipher Block Chaining mode.
383
384 For encryption in CBC mode, each block is exclusive-ored with @var{ivec}
385 before being encrypted, then @var{ivec} is replaced with the result of
386 the encryption, then the next block is processed. Decryption is the
387 reverse of this process.
388
389 This has the advantage that blocks which are the same before being
390 encrypted are very unlikely to be the same after being encrypted, making
391 it much harder to detect patterns in the data.
392
393 Usually, @var{ivec} is set to 8 random bytes before encryption starts.
394 Then the 8 random bytes are transmitted along with the encrypted data
395 (without themselves being encrypted), and passed back in as @var{ivec}
396 for decryption. Another possibility is to set @var{ivec} to 8 zeroes
397 initially, and have the first block encrypted consist of 8 random
398 bytes.
399
400 Otherwise, all the parameters are similar to those for @code{ecb_crypt}.
401 @end deftypefun
402
403 @deftypefun void des_setparity (char *@var{key})
404 @standards{SUNRPC, rpc/des_crypt.h}
405 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
406
407 The function @code{des_setparity} changes the 64-bit @var{key}, stored
408 packed in 8-bit bytes, to have odd parity by altering the low bits of
409 each byte.
410 @end deftypefun
411
412 The @code{ecb_crypt}, @code{cbc_crypt}, and @code{des_setparity}
413 functions and their accompanying macros are all defined in the header
414 @file{rpc/des_crypt.h}.
415
416 @node Unpredictable Bytes
417 @section Generating Unpredictable Bytes
418
419 Some cryptographic applications (such as session key generation) need
420 unpredictable bytes.
421
422 In general, application code should use a deterministic random bit
423 generator, which could call the @code{getentropy} function described
424 below internally to obtain randomness to seed the generator. The
425 @code{getrandom} function is intended for low-level applications which
426 need additional control over the blocking behavior.
427
428 @deftypefun int getentropy (void *@var{buffer}, size_t @var{length})
429 @standards{GNU, sys/random.h}
430 @safety{@mtsafe{}@assafe{}@acsafe{}}
431
432 This function writes @var{length} bytes of random data to the array
433 starting at @var{buffer}, which must be at most 256 bytes long. The
434 function returns zero on success. On failure, it returns @code{-1} and
435 @code{errno} is updated accordingly.
436
437 The @code{getentropy} function is declared in the header file
438 @file{sys/random.h}. It is derived from OpenBSD.
439
440 The @code{getentropy} function is not a cancellation point. A call to
441 @code{getentropy} can block if the system has just booted and the kernel
442 entropy pool has not yet been initialized. In this case, the function
443 will keep blocking even if a signal arrives, and return only after the
444 entropy pool has been initialized.
445
446 The @code{getentropy} function can fail with several errors, some of
447 which are listed below.
448
449 @table @code
450 @item ENOSYS
451 The kernel does not implement the required system call.
452
453 @item EFAULT
454 The combination of @var{buffer} and @var{length} arguments specifies
455 an invalid memory range.
456
457 @item EIO
458 More than 256 bytes of randomness have been requested, or the buffer
459 could not be overwritten with random data for an unspecified reason.
460
461 @end table
462
463 @end deftypefun
464
465 @deftypefun ssize_t getrandom (void *@var{buffer}, size_t @var{length}, unsigned int @var{flags})
466 @standards{GNU, sys/random.h}
467 @safety{@mtsafe{}@assafe{}@acsafe{}}
468
469 This function writes @var{length} bytes of random data to the array
470 starting at @var{buffer}. On success, this function returns the number
471 of bytes which have been written to the buffer (which can be less than
472 @var{length}). On error, @code{-1} is returned, and @code{errno} is
473 updated accordingly.
474
475 The @code{getrandom} function is declared in the header file
476 @file{sys/random.h}. It is a GNU extension.
477
478 The following flags are defined for the @var{flags} argument:
479
480 @table @code
481 @item GRND_RANDOM
482 Use the @file{/dev/random} (blocking) pool instead of the
483 @file{/dev/urandom} (non-blocking) pool to obtain randomness. If the
484 @code{GRND_RANDOM} flag is specified, the @code{getrandom} function can
485 block even after the randomness source has been initialized.
486
487 @item GRND_NONBLOCK
488 Instead of blocking, return to the caller immediately if no data is
489 available.
490 @end table
491
492 The @code{getrandom} function is a cancellation point.
493
494 Obtaining randomness from the @file{/dev/urandom} pool (i.e., a call
495 without the @code{GRND_RANDOM} flag) can block if the system has just
496 booted and the pool has not yet been initialized.
497
498 The @code{getrandom} function can fail with several errors, some of
499 which are listed below. In addition, the function may not fill the
500 buffer completely and return a value less than @var{length}.
501
502 @table @code
503 @item ENOSYS
504 The kernel does not implement the @code{getrandom} system call.
505
506 @item EAGAIN
507 No random data was available and @code{GRND_NONBLOCK} was specified in
508 @var{flags}.
509
510 @item EFAULT
511 The combination of @var{buffer} and @var{length} arguments specifies
512 an invalid memory range.
513
514 @item EINTR
515 The system call was interrupted. During the system boot process, before
516 the kernel randomness pool is initialized, this can happen even if
517 @var{flags} is zero.
518
519 @item EINVAL
520 The @var{flags} argument contains an invalid combination of flags.
521 @end table
522
523 @end deftypefun