]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - lib/libcrypt/crypt.3
Add two missing eventhandler.h headers
[FreeBSD/FreeBSD.git] / lib / libcrypt / crypt.3
1 .\" FreeSec: libcrypt for NetBSD
2 .\"
3 .\" Copyright (c) 1994 David Burren
4 .\" All rights reserved.
5 .\"
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that the following conditions
8 .\" are met:
9 .\" 1. Redistributions of source code must retain the above copyright
10 .\"    notice, this list of conditions and the following disclaimer.
11 .\" 2. Redistributions in binary form must reproduce the above copyright
12 .\"    notice, this list of conditions and the following disclaimer in the
13 .\"    documentation and/or other materials provided with the distribution.
14 .\" 3. Neither the name of the author nor the names of other contributors
15 .\"    may be used to endorse or promote products derived from this software
16 .\"    without specific prior written permission.
17 .\"
18 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 .\" SUCH DAMAGE.
29 .\"
30 .\" $FreeBSD$
31 .\"
32 .Dd August 10, 2016
33 .Dt CRYPT 3
34 .Os
35 .Sh NAME
36 .Nm crypt
37 .Nd Trapdoor encryption
38 .Sh LIBRARY
39 .Lb libcrypt
40 .Sh SYNOPSIS
41 .In unistd.h
42 .Ft char *
43 .Fn crypt "const char *key" "const char *salt"
44 .Ft char *
45 .Fn crypt_r "const char *key" "const char *salt" "struct crypt_data *data"
46 .Ft const char *
47 .Fn crypt_get_format "void"
48 .Ft int
49 .Fn crypt_set_format "const char *string"
50 .Sh DESCRIPTION
51 The
52 .Fn crypt
53 function performs password hashing with additional code added to
54 deter key search attempts.
55 Different algorithms can be used to
56 in the hash.
57 .\"
58 .\" NOTICE:
59 .\" If you add more algorithms, make sure to update this list
60 .\" and the default used for the Traditional format, below.
61 .\"
62 Currently these include the
63 .Tn NBS
64 .Tn Data Encryption Standard (DES) ,
65 .Tn MD5
66 hash,
67 .Tn NT-Hash
68 .Pq compatible with Microsoft's NT scheme
69 and
70 .Tn Blowfish .
71 The algorithm used will depend upon the format of the Salt
72 .Po
73 following
74 the Modular Crypt Format
75 .Pq MCF
76 .Pc ,
77 if
78 .Tn DES
79 and/or
80 .Tn Blowfish
81 is installed or not, and whether
82 .Fn crypt_set_format
83 has been called to change the default.
84 .Pp
85 The first argument to
86 .Nm
87 is the data to hash
88 .Pq usually a password ,
89 in a
90 .Dv NUL Ns -terminated
91 string.
92 The second is the salt, in one of three forms:
93 .Pp
94 .Bl -tag -width Traditional -compact -offset indent
95 .It Extended
96 If it begins with an underscore
97 .Pq Dq _
98 then the
99 .Tn DES
100 Extended Format
101 is used in interpreting both the key and the salt, as outlined below.
102 .It Modular
103 If it begins with the string
104 .Dq $digit$
105 then the Modular Crypt Format is used, as outlined below.
106 .It Traditional
107 If neither of the above is true, it assumes the Traditional Format,
108 using the entire string as the salt
109 .Pq or the first portion .
110 .El
111 .Pp
112 All routines are designed to be time-consuming.
113 .Ss DES Extended Format:
114 The
115 .Ar key
116 is divided into groups of 8 characters
117 .Pq the last group is NUL-padded
118 and the low-order 7 bits of each character
119 .Pq 56 bits per group
120 are used to form the
121 .Tn DES
122 key as follows:
123 the first group of 56 bits becomes the initial
124 .Tn DES
125 key.
126 For each additional group, the XOR of the encryption of the current
127 .Tn DES
128 key with itself and the group bits becomes the next
129 .Tn DES
130 key.
131 .Pp
132 The salt is a 9-character array consisting of an underscore followed
133 by 4 bytes of iteration count and 4 bytes of salt.
134 These are encoded as printable characters, 6 bits per character,
135 least significant character first.
136 The values 0 to 63 are encoded as
137 .Dq ./0-9A-Za-z .
138 This allows 24 bits for both
139 .Fa count
140 and
141 .Fa salt .
142 .Pp
143 The
144 .Fa salt
145 introduces disorder in the
146 .Tn DES
147 algorithm in one of 16777216 or 4096 possible ways
148 .Po
149 i.e., with 24 or 12 bits: if bit
150 .Em i
151 of the
152 .Ar salt
153 is set, then bits
154 .Em i
155 and
156 .Em i+24
157 are swapped in the
158 .Tn DES
159 E-box output
160 .Pc .
161 .Pp
162 The
163 .Tn DES
164 key is used to encrypt a 64-bit constant using
165 .Ar count
166 iterations of
167 .Tn DES .
168 The value returned is a
169 .Dv NUL Ns -terminated
170 string, 20 or 13 bytes
171 .Pq plus NUL
172 in length, consisting of the
173 .Ar salt
174 followed by the encoded 64-bit encryption.
175 .Ss Modular crypt:
176 If the salt begins with the string
177 .Fa $digit$
178 then the Modular Crypt Format is used.
179 The
180 .Fa digit
181 represents which algorithm is used in encryption.
182 Following the token is
183 the actual salt to use in the encryption.
184 The maximum length of the salt used depends upon the module.
185 The salt must be terminated with the end of the string character
186 .Pq NUL
187 or a dollar sign.
188 Any characters after the dollar sign are ignored.
189 .Pp
190 Currently supported algorithms are:
191 .Pp
192 .Bl -enum -compact -offset indent
193 .It
194 MD5
195 .It
196 Blowfish
197 .It
198 NT-Hash
199 .It
200 (unused)
201 .It
202 SHA-256
203 .It
204 SHA-512
205 .El
206 .Pp
207 Other crypt formats may be easily added.
208 An example salt would be:
209 .Bl -tag -width 6n -offset indent
210 .It Cm "$4$thesalt$rest"
211 .El
212 .Ss Traditional crypt:
213 The algorithm used will depend upon whether
214 .Fn crypt_set_format
215 has been called and whether a global default format has been specified.
216 Unless a global default has been specified or
217 .Fn crypt_set_format
218 has set the format to something else, the built-in default format is
219 used.
220 This is currently
221 .\"
222 .\" NOTICE: Also make sure to update this
223 .\"
224 DES
225 if it is available, or MD5 if not.
226 .Pp
227 How the salt is used will depend upon the algorithm for the hash.
228 For
229 best results, specify at least eight characters of salt.
230 .Pp
231 The
232 .Fn crypt_get_format
233 function returns a constant string that represents the name of the
234 algorithm currently used.
235 Valid values are
236 .\"
237 .\" NOTICE: Also make sure to update this, too, as well
238 .\"
239 .Ql des ,
240 .Ql blf ,
241 .Ql md5 ,
242 .Ql sha256 ,
243 .Ql sha512
244 and
245 .Ql nth .
246 .Pp
247 The
248 .Fn crypt_set_format
249 function sets the default encoding format according to the supplied
250 .Fa string .
251 .Pp
252 The
253 .Fn crypt_r
254 function behaves identically to
255 .Fn crypt ,
256 except that the resulting string is stored in
257 .Fa data ,
258 making it thread-safe.
259 .Sh RETURN VALUES
260 The
261 .Fn crypt
262 and
263 .Fn crypt_r
264 functions return a pointer to the encrypted value on success, and NULL on
265 failure.
266 Note: this is not a standard behaviour, AT&T
267 .Fn crypt
268 will always return a pointer to a string.
269 .Pp
270 The
271 .Fn crypt_set_format
272 function will return 1 if the supplied encoding format was valid.
273 Otherwise, a value of 0 is returned.
274 .Sh SEE ALSO
275 .Xr login 1 ,
276 .Xr passwd 1 ,
277 .Xr getpass 3 ,
278 .Xr passwd 5
279 .Sh HISTORY
280 A rotor-based
281 .Fn crypt
282 function appeared in
283 .At v6 .
284 The current style
285 .Fn crypt
286 first appeared in
287 .At v7 .
288 .Pp
289 The
290 .Tn DES
291 section of the code (FreeSec 1.0) was developed outside the United
292 States of America as an unencumbered replacement for the U.S.-only
293 .Nx
294 libcrypt encryption library.
295 .Pp
296 The
297 .Fn crypt_r
298 function was added in
299 .Fx 12.0 .
300 .Sh AUTHORS
301 .An -nosplit
302 Originally written by
303 .An David Burren Aq Mt davidb@werj.com.au ,
304 later additions and changes by
305 .An Poul-Henning Kamp ,
306 .An Mark R V Murray ,
307 .An Michael Bretterklieber ,
308 .An Kris Kennaway ,
309 .An Brian Feldman ,
310 .An Paul Herman
311 and
312 .An Niels Provos .
313 .Sh BUGS
314 The
315 .Fn crypt
316 function returns a pointer to static data, and subsequent calls to
317 .Fn crypt
318 will modify the same data.
319 Likewise,
320 .Fn crypt_set_format
321 modifies static data.
322 .Pp
323 The NT-hash scheme does not use a salt,
324 and is not hard
325 for a competent attacker
326 to break.
327 Its use is not recommended.