xref: /freebsd/lib/libcrypt/crypt.3 (revision e4f2c10b4c03d7235e140c231bd5467667334ca1)
1e9a56ad5SMark Murray.\" FreeSec: libcrypt for NetBSD
2e9a56ad5SMark Murray.\"
3e9a56ad5SMark Murray.\" Copyright (c) 1994 David Burren
4e9a56ad5SMark Murray.\" All rights reserved.
5e9a56ad5SMark Murray.\"
6e9a56ad5SMark Murray.\" Redistribution and use in source and binary forms, with or without
7e9a56ad5SMark Murray.\" modification, are permitted provided that the following conditions
8e9a56ad5SMark Murray.\" are met:
9e9a56ad5SMark Murray.\" 1. Redistributions of source code must retain the above copyright
10e9a56ad5SMark Murray.\"    notice, this list of conditions and the following disclaimer.
11e9a56ad5SMark Murray.\" 2. Redistributions in binary form must reproduce the above copyright
12e9a56ad5SMark Murray.\"    notice, this list of conditions and the following disclaimer in the
13e9a56ad5SMark Murray.\"    documentation and/or other materials provided with the distribution.
14e9a56ad5SMark Murray.\" 4. Neither the name of the author nor the names of other contributors
15e9a56ad5SMark Murray.\"    may be used to endorse or promote products derived from this software
16e9a56ad5SMark Murray.\"    without specific prior written permission.
17e9a56ad5SMark Murray.\"
18e9a56ad5SMark Murray.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19e9a56ad5SMark Murray.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20e9a56ad5SMark Murray.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21e9a56ad5SMark Murray.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22e9a56ad5SMark Murray.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23e9a56ad5SMark Murray.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24e9a56ad5SMark Murray.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25e9a56ad5SMark Murray.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26e9a56ad5SMark Murray.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27e9a56ad5SMark Murray.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28e9a56ad5SMark Murray.\" SUCH DAMAGE.
29e9a56ad5SMark Murray.\"
30e9a56ad5SMark Murray.\"	$FreeBSD$
31e9a56ad5SMark Murray.\"
32e9a56ad5SMark Murray.\" Manual page, using -mandoc macros
33e9a56ad5SMark Murray.\"
34e9a56ad5SMark Murray.Dd January 19, 1997
35e9a56ad5SMark Murray.Dt CRYPT 3
36a307d598SRuslan Ermilov.Os
37e9a56ad5SMark Murray.Sh NAME
38e9a56ad5SMark Murray.Nm crypt
39e9a56ad5SMark Murray.Nd Trapdoor encryption
40f45f23ddSAlexey Zelkin.Sh LIBRARY
41f45f23ddSAlexey Zelkin.Lb libcrypt
42e9a56ad5SMark Murray.Sh SYNOPSIS
4332eef9aeSRuslan Ermilov.In unistd.h
44d3f0d184SBruce Evans.Ft char *
45d3f0d184SBruce Evans.Fn crypt "const char *key" "const char *salt"
4604c9749fSBrian Feldman.Ft const char *
4704c9749fSBrian Feldman.Fn crypt_get_format "void"
4804c9749fSBrian Feldman.Ft int
4904c9749fSBrian Feldman.Fn crypt_set_format "const char *string"
50e9a56ad5SMark Murray.Sh DESCRIPTION
51e9a56ad5SMark MurrayThe
52e9a56ad5SMark Murray.Fn crypt
53e9a56ad5SMark Murrayfunction performs password hashing with additional code added to
54e9a56ad5SMark Murraydeter key search attempts.  Different algorithms can be used to
55e9a56ad5SMark Murrayin the hash.
56e9a56ad5SMark Murray.\"
57e9a56ad5SMark Murray.\" NOTICE:
58e9a56ad5SMark Murray.\" If you add more algorithms, make sure to update this list
59e9a56ad5SMark Murray.\" and the default used for the Traditional format, below.
60e9a56ad5SMark Murray.\"
61e9a56ad5SMark MurrayCurrently these include the
62e9a56ad5SMark Murray.Tn NBS
63f45f23ddSAlexey Zelkin.Tn Data Encryption Standard (DES) ,
645c129616SMark Murray.Tn MD5
65bf513f69SMark Murrayhash,
66bf513f69SMark Murray.Tn NT-Hash
67bf513f69SMark Murray(compatible with Microsoft's NT scheme)
68f32b1300SKris Kennawayand
695c129616SMark Murray.Tn Blowfish .
7004c9749fSBrian FeldmanThe algorithm used will depend upon the format of the Salt (following
7104c9749fSBrian Feldmanthe Modular Crypt Format (MCF)), if
72f45f23ddSAlexey Zelkin.Tn DES
735c129616SMark Murrayand/or
745c129616SMark Murray.Tn Blowfish
7504c9749fSBrian Feldmanis installed or not, and whether
7604c9749fSBrian Feldman.Fn crypt_set_format
7704c9749fSBrian Feldmanhas been called to change the default.
78e9a56ad5SMark Murray.Pp
79e9a56ad5SMark MurrayThe first argument to
80f45f23ddSAlexey Zelkin.Nm
81e9a56ad5SMark Murrayis the data to hash (usually a password), in a
82e9a56ad5SMark Murray.Dv null Ns -terminated
83e9a56ad5SMark Murraystring.
84e9a56ad5SMark MurrayThe second is the salt, in one of three forms:
85e9a56ad5SMark Murray.Pp
86e9a56ad5SMark Murray.Bl -tag -width Traditional -compact -offset indent
87e9a56ad5SMark Murray.It Extended
88f45f23ddSAlexey ZelkinIf it begins with an underscore
89f45f23ddSAlexey Zelkin.Pq Dq _
90f45f23ddSAlexey Zelkinthen the
91f45f23ddSAlexey Zelkin.Tn DES
92f45f23ddSAlexey ZelkinExtended Format
93a910f192SDima Dorfmanis used in interpreting both the key and the salt, as outlined below.
94e9a56ad5SMark Murray.It Modular
95f45f23ddSAlexey ZelkinIf it begins with the string
96f45f23ddSAlexey Zelkin.Dq $digit$
97f45f23ddSAlexey Zelkinthen the Modular Crypt Format is used, as outlined below.
98e9a56ad5SMark Murray.It Traditional
99e9a56ad5SMark MurrayIf neither of the above is true, it assumes the Traditional Format,
100e9a56ad5SMark Murrayusing the entire string as the salt (or the first portion).
101e9a56ad5SMark Murray.El
102e9a56ad5SMark Murray.Pp
103e9a56ad5SMark MurrayAll routines are designed to be time-consuming.  A brief test on a
104f45f23ddSAlexey Zelkin.Tn Pentium
105f45f23ddSAlexey Zelkin166/MMX shows the
106f45f23ddSAlexey Zelkin.Tn DES
107f45f23ddSAlexey Zelkincrypt to do approximately 2640 crypts
10800587201SMark Murraya CPU second and MD5 to do about 62 crypts a CPU second.
109e9a56ad5SMark Murray.Ss DES Extended Format:
110e9a56ad5SMark Murray.Pp
111e9a56ad5SMark MurrayThe
112e9a56ad5SMark Murray.Ar key
113e9a56ad5SMark Murrayis divided into groups of 8 characters (the last group is null-padded)
114a910f192SDima Dorfmanand the low-order 7 bits of each character (56 bits per group) are
115f45f23ddSAlexey Zelkinused to form the
116f45f23ddSAlexey Zelkin.Tn DES
117f45f23ddSAlexey Zelkinkey as follows:
118f45f23ddSAlexey Zelkinthe first group of 56 bits becomes the initial
119f45f23ddSAlexey Zelkin.Tn DES
120f45f23ddSAlexey Zelkinkey.
121f45f23ddSAlexey ZelkinFor each additional group, the XOR of the encryption of the current
122f45f23ddSAlexey Zelkin.Tn DES
123f45f23ddSAlexey Zelkinkey with itself and the group bits becomes the next
124f45f23ddSAlexey Zelkin.Tn DES
125f45f23ddSAlexey Zelkinkey.
126e9a56ad5SMark Murray.Pp
127e9a56ad5SMark MurrayThe salt is a 9-character array consisting of an underscore followed
128e9a56ad5SMark Murrayby 4 bytes of iteration count and 4 bytes of salt.
129e9a56ad5SMark MurrayThese are encoded as printable characters, 6 bits per character,
130e9a56ad5SMark Murrayleast significant character first.
131e9a56ad5SMark MurrayThe values 0 to 63 are encoded as ``./0-9A-Za-z''.
132e9a56ad5SMark MurrayThis allows 24 bits for both
133e9a56ad5SMark Murray.Fa count
134e9a56ad5SMark Murrayand
135e9a56ad5SMark Murray.Fa salt .
136e9a56ad5SMark Murray.Pp
137e9a56ad5SMark MurrayThe
138e9a56ad5SMark Murray.Fa salt
139e9a56ad5SMark Murrayintroduces disorder in the
140e9a56ad5SMark Murray.Tn DES
141e9a56ad5SMark Murrayalgorithm in one of 16777216 or 4096 possible ways
142e9a56ad5SMark Murray(ie. with 24 or 12 bits: if bit
143e9a56ad5SMark Murray.Em i
144e9a56ad5SMark Murrayof the
145e9a56ad5SMark Murray.Ar salt
146e9a56ad5SMark Murrayis set, then bits
147e9a56ad5SMark Murray.Em i
148e9a56ad5SMark Murrayand
149e9a56ad5SMark Murray.Em i+24
150e9a56ad5SMark Murrayare swapped in the
151e9a56ad5SMark Murray.Tn DES
152e9a56ad5SMark MurrayE-box output).
153e9a56ad5SMark Murray.Pp
154f45f23ddSAlexey ZelkinThe
155f45f23ddSAlexey Zelkin.Tn DES
156f45f23ddSAlexey Zelkinkey is used to encrypt a 64-bit constant using
157e9a56ad5SMark Murray.Ar count
158e9a56ad5SMark Murrayiterations of
159e9a56ad5SMark Murray.Tn DES .
160e9a56ad5SMark MurrayThe value returned is a
161e9a56ad5SMark Murray.Dv null Ns -terminated
162e9a56ad5SMark Murraystring, 20 or 13 bytes (plus null) in length, consisting of the
163e9a56ad5SMark Murray.Ar salt
164e9a56ad5SMark Murrayfollowed by the encoded 64-bit encryption.
165e9a56ad5SMark Murray.Ss "Modular" crypt:
166e9a56ad5SMark Murray.Pp
167e9a56ad5SMark MurrayIf the salt begins with the string
168e9a56ad5SMark Murray.Fa $digit$
169e9a56ad5SMark Murraythen the Modular Crypt Format is used.  The
170e9a56ad5SMark Murray.Fa digit
171e9a56ad5SMark Murrayrepresents which algorithm is used in encryption.  Following the token is
172e9a56ad5SMark Murraythe actual salt to use in the encryption.  The length of the salt is limited
17396f68db5STom Rhodesto 8 characters--because the length of the returned output is also limited
174e9a56ad5SMark Murray(_PASSWORD_LEN).  The salt must be terminated with the end of the string
175e9a56ad5SMark Murray(NULL) or a dollar sign.  Any characters after the dollar sign are ignored.
176e9a56ad5SMark Murray.Pp
177e9a56ad5SMark MurrayCurrently supported algorithms are:
178e9a56ad5SMark Murray.Pp
17942635956SRuslan Ermilov.Bl -enum -compact -offset indent
180067f2c3fSRuslan Ermilov.It
181e9a56ad5SMark MurrayMD5
182067f2c3fSRuslan Ermilov.It
1835c129616SMark MurrayBlowfish
184bf513f69SMark Murray.It
185bf513f69SMark MurrayNT-Hash
186e9a56ad5SMark Murray.El
187e9a56ad5SMark Murray.Pp
18857bd0fc6SJens SchweikhardtOther crypt formats may be easily added.  An example salt would be:
189e9a56ad5SMark Murray.Bl -tag -offset indent
190bf513f69SMark Murray.It Cm "$4$thesalt$rest"
191e9a56ad5SMark Murray.El
192e9a56ad5SMark Murray.Pp
193e9a56ad5SMark Murray.Ss "Traditional" crypt:
194e9a56ad5SMark Murray.Pp
195f45f23ddSAlexey ZelkinThe algorithm used will depend upon whether
19604c9749fSBrian Feldman.Fn crypt_set_format
1979886bcdfSPeter Wemmhas been called and whether a global default format has been specified.
1989886bcdfSPeter WemmUnless a global default has been specified or
19904c9749fSBrian Feldman.Fn crypt_set_format
20088b471a1SPeter Wemmhas set the format to something else, the built-in default format is
20188b471a1SPeter Wemmused.
20288b471a1SPeter WemmThis is currently
203e9a56ad5SMark Murray.\"
204e9a56ad5SMark Murray.\" NOTICE: Also make sure to update this
205e9a56ad5SMark Murray.\"
20688b471a1SPeter WemmDES
20788b471a1SPeter Wemmif it is available, or MD5 if not.
208e9a56ad5SMark Murray.Pp
209e9a56ad5SMark MurrayHow the salt is used will depend upon the algorithm for the hash.  For
210e9a56ad5SMark Murraybest results, specify at least two characters of salt.
21104c9749fSBrian Feldman.Pp
21204c9749fSBrian FeldmanThe
21304c9749fSBrian Feldman.Fn crypt_get_format
21404c9749fSBrian Feldmanfunction returns a constant string that represents the name of the
21504c9749fSBrian Feldmanalgorithm currently used.
21604c9749fSBrian FeldmanValid values are
21704c9749fSBrian Feldman.\"
21804c9749fSBrian Feldman.\" NOTICE: Also make sure to update this, too, as well
21904c9749fSBrian Feldman.\"
2205c129616SMark Murray.Ql des ,
221bf513f69SMark Murray.Ql blf ,
222bf513f69SMark Murray.Ql md5
22304c9749fSBrian Feldmanand
224bf513f69SMark Murray.Ql nth .
22504c9749fSBrian Feldman.Pp
22604c9749fSBrian FeldmanThe
22704c9749fSBrian Feldman.Fn crypt_set_format
22804c9749fSBrian Feldmanfunction sets the default encoding format according to the supplied
22904c9749fSBrian Feldman.Fa string .
2309886bcdfSPeter Wemm.Pp
2319886bcdfSPeter WemmThe global default format can be set using the
2329886bcdfSPeter Wemm.Pa /etc/auth.conf
2339886bcdfSPeter Wemmfile using the
2343ea75eb1SRuslan Ermilov.Va crypt_default
2359886bcdfSPeter Wemmproperty.
236e9a56ad5SMark Murray.Sh RETURN VALUES
237e4f2c10bSPhilippe CharnierThe
238e9a56ad5SMark Murray.Fn crypt
239e4f2c10bSPhilippe Charnierfunction returns a pointer to the encrypted value on success, and NULL on
240e4f2c10bSPhilippe Charnierfailure.
241e9a56ad5SMark MurrayNote: this is not a standard behaviour, AT&T
242e9a56ad5SMark Murray.Fn crypt
243e9a56ad5SMark Murraywill always return a pointer to a string.
24404c9749fSBrian Feldman.Pp
245e4f2c10bSPhilippe CharnierThe
24604c9749fSBrian Feldman.Fn crypt_set_format
247e4f2c10bSPhilippe Charnierfunction will return 1 if the supplied encoding format was valid.
24804c9749fSBrian FeldmanOtherwise, a value of 0 is returned.
249e9a56ad5SMark Murray.Sh SEE ALSO
250e9a56ad5SMark Murray.Xr login 1 ,
251e9a56ad5SMark Murray.Xr passwd 1 ,
2529886bcdfSPeter Wemm.Xr auth_getval 3 ,
25300587201SMark Murray.Xr cipher 3 ,
254e9a56ad5SMark Murray.Xr getpass 3 ,
2559886bcdfSPeter Wemm.Xr auth.conf 5 ,
256eb894267SRuslan Ermilov.Xr passwd 5
257e9a56ad5SMark Murray.Sh BUGS
258e9a56ad5SMark MurrayThe
259e9a56ad5SMark Murray.Fn crypt
260e9a56ad5SMark Murrayfunction returns a pointer to static data, and subsequent calls to
261e9a56ad5SMark Murray.Fn crypt
26204c9749fSBrian Feldmanwill modify the same data.  Likewise,
26304c9749fSBrian Feldman.Fn crypt_set_format
26404c9749fSBrian Feldmanmodifies static data.
265bf513f69SMark Murray.Pp
266bf513f69SMark MurrayThe NT-hash scheme does not use a salt,
267bf513f69SMark Murrayand is not hard
268bf513f69SMark Murrayfor a competent attacker
269bf513f69SMark Murrayto break.
270bf513f69SMark MurrayIts use is not recommended.
271e9a56ad5SMark Murray.Sh HISTORY
272e9a56ad5SMark MurrayA rotor-based
273e9a56ad5SMark Murray.Fn crypt
274e9a56ad5SMark Murrayfunction appeared in
275e9a56ad5SMark Murray.At v6 .
276e9a56ad5SMark MurrayThe current style
277e9a56ad5SMark Murray.Fn crypt
278e9a56ad5SMark Murrayfirst appeared in
279e9a56ad5SMark Murray.At v7 .
280e9a56ad5SMark Murray.Pp
281f45f23ddSAlexey ZelkinThe
282f45f23ddSAlexey Zelkin.Tn DES
283f45f23ddSAlexey Zelkinsection of the code (FreeSec 1.0) was developed outside the United
284f45f23ddSAlexey ZelkinStates of America as an unencumbered replacement for the U.S.-only
285f45f23ddSAlexey Zelkin.Nx
286e9a56ad5SMark Murraylibcrypt encryption library.
287e9a56ad5SMark Murray.Sh AUTHORS
288725ab628SRuslan Ermilov.An -nosplit
289f45f23ddSAlexey ZelkinOriginally written by
290f45f23ddSAlexey Zelkin.An David Burren Aq davidb@werj.com.au ,
291f45f23ddSAlexey Zelkinlater additions and changes by
292725ab628SRuslan Ermilov.An Poul-Henning Kamp ,
29304c9749fSBrian Feldman.An Mark R V Murray ,
294bf513f69SMark Murray.An Michael Bretterklieber ,
2955c129616SMark Murray.An Kris Kennaway ,
2965c129616SMark Murray.An Brian Feldman ,
2975c129616SMark Murray.An Paul Herman
29804c9749fSBrian Feldmanand
2995c129616SMark Murray.An Niels Provos .
300