(linenum→info "unix/slp.c:2238")

glibc/2.7/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: The GNU C library 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: It also provides support for Secure RPC, and some library functions that
   34: can be used to perform normal DES encryption.
   35: 
   36: @menu
   37: * Legal Problems::              This software can get you locked up, or worse.
   38: * getpass::                     Prompting the user for a password.
   39: * crypt::                       A one-way function for passwords.
   40: * DES Encryption::              Routines for DES encryption.
   41: @end menu
   42: 
   43: @node Legal Problems
   44: @section Legal Problems
   45: 
   46: Because of the continuously changing state of the law, it's not possible
   47: to provide a definitive survey of the laws affecting cryptography.
   48: Instead, this section warns you of some of the known trouble spots; this
   49: may help you when you try to find out what the laws of your country are.
   50: 
   51: Some countries require that you have a licence to use, possess, or import
   52: cryptography.  These countries are believed to include Byelorussia,
   53: Burma, India, Indonesia, Israel, Kazakhstan, Pakistan, Russia, and Saudi
   54: Arabia.
   55: 
   56: Some countries restrict the transmission of encrypted messages by radio;
   57: some telecommunications carriers restrict the transmission of encrypted
   58: messages over their network.
   59: 
   60: Many countries have some form of export control for encryption software.
   61: The Wassenaar Arrangement is a multilateral agreement between 33
   62: countries (Argentina, Australia, Austria, Belgium, Bulgaria, Canada, the
   63: Czech Republic, Denmark, Finland, France, Germany, Greece, Hungary,
   64: Ireland, Italy, Japan, Luxembourg, the Netherlands, New Zealand, Norway,
   65: Poland, Portugal, the Republic of Korea, Romania, the Russian
   66: Federation, the Slovak Republic, Spain, Sweden, Switzerland, Turkey,
   67: Ukraine, the United Kingdom and the United States) which restricts some
   68: kinds of encryption exports.  Different countries apply the arrangement
   69: in different ways; some do not allow the exception for certain kinds of
   70: ``public domain'' software (which would include this library), some
   71: only restrict the export of software in tangible form, and others impose
   72: significant additional restrictions.
   73: 
   74: The United States has additional rules.  This software would generally
   75: be exportable under 15 CFR 740.13(e), which permits exports of
   76: ``encryption source code'' which is ``publicly available'' and which is
   77: ``not subject to an express agreement for the payment of a licensing fee or
   78: royalty for commercial production or sale of any product developed with
   79: the source code'' to most countries.
   80: 
   81: The rules in this area are continuously changing.  If you know of any
   82: information in this manual that is out-of-date, please report it to
   83: the bug database.  @xref{Reporting Bugs}.
   84: 
   85: @node getpass
   86: @section Reading Passwords
   87: 
   88: When reading in a password, it is desirable to avoid displaying it on
   89: the screen, to help keep it secret.  The following function handles this
   90: in a convenient way.
   91: 
   92: @comment unistd.h
   93: @comment BSD
   94: @deftypefun {char *} getpass (const char *@var{prompt})
   95: 
   96: @code{getpass} outputs @var{prompt}, then reads a string in from the
   97: terminal without echoing it.  It tries to connect to the real terminal,
   98: @file{/dev/tty}, if possible, to encourage users not to put plaintext
   99: passwords in files; otherwise, it uses @code{stdin} and @code{stderr}.
  100: @code{getpass} also disables the INTR, QUIT, and SUSP characters on the
  101: terminal using the @code{ISIG} terminal attribute (@pxref{Local Modes}).
  102: The terminal is flushed before and after @code{getpass}, so that
  103: characters of a mistyped password are not accidentally visible.
  104: 
  105: In other C libraries, @code{getpass} may only return the first
  106: @code{PASS_MAX} bytes of a password.  The GNU C library has no limit, so
  107: @code{PASS_MAX} is undefined.
  108: 
  109: The prototype for this function is in @file{unistd.h}.  @code{PASS_MAX}
  110: would be defined in @file{limits.h}.
  111: @end deftypefun
  112: 
  113: This precise set of operations may not suit all possible situations.  In
  114: this case, it is recommended that users write their own @code{getpass}
  115: substitute.  For instance, a very simple substitute is as follows:
  116: 
  117: @smallexample
  118: @include mygetpass.c.texi
  119: @end smallexample
  120: 
  121: The substitute takes the same parameters as @code{getline}
  122: (@pxref{Line Input}); the user must print any prompt desired.
  123: 
  124: @node crypt
  125: @section Encrypting Passwords
  126: 
  127: @comment crypt.h
  128: @comment BSD, SVID
  129: @deftypefun {char *} crypt (const char *@var{key}, const char *@var{salt})
  130: 
  131: The @code{crypt} function takes a password, @var{key}, as a string, and
  132: a @var{salt} character array which is described below, and returns a
  133: printable ASCII string which starts with another salt.  It is believed
  134: that, given the output of the function, the best way to find a @var{key}
  135: that will produce that output is to guess values of @var{key} until the
  136: original value of @var{key} is found.
  137: 
  138: The @var{salt} parameter does two things.  Firstly, it selects which
  139: algorithm is used, the MD5-based one or the DES-based one.  Secondly, it
  140: makes life harder for someone trying to guess passwords against a file
  141: containing many passwords; without a @var{salt}, an intruder can make a
  142: guess, run @code{crypt} on it once, and compare the result with all the
  143: passwords.  With a @var{salt}, the intruder must run @code{crypt} once
  144: for each different salt.
  145: 
  146: For the MD5-based algorithm, the @var{salt} should consist of the string
  147: @code{$1$}, followed by up to 8 characters, terminated by either
  148: another @code{$} or the end of the string.  The result of @code{crypt}
  149: will be the @var{salt}, followed by a @code{$} if the salt didn't end
  150: with one, followed by 22 characters from the alphabet
  151: @code{./0-9A-Za-z}, up to 34 characters total.  Every character in the
  152: @var{key} is significant.
  153: 
  154: For the DES-based algorithm, the @var{salt} should consist of two
  155: characters from the alphabet @code{./0-9A-Za-z}, and the result of
  156: @code{crypt} will be those two characters followed by 11 more from the
  157: same alphabet, 13 in total.  Only the first 8 characters in the
  158: @var{key} are significant.
  159: 
  160: The MD5-based algorithm has no limit on the useful length of the
  161: password used, and is slightly more secure.  It is therefore preferred
  162: over the DES-based algorithm.
  163: 
  164: When the user enters their password for the first time, the @var{salt}
  165: should be set to a new string which is reasonably random.  To verify a
  166: password against the result of a previous call to @code{crypt}, pass
  167: the result of the previous call as the @var{salt}.
  168: @end deftypefun
  169: 
  170: The following short program is an example of how to use @code{crypt} the
  171: first time a password is entered.  Note that the @var{salt} generation
  172: is just barely acceptable; in particular, it is not unique between
  173: machines, and in many applications it would not be acceptable to let an
  174: attacker know what time the user's password was last set.
  175: 
  176: @smallexample
  177: @include genpass.c.texi
  178: @end smallexample
  179: 
  180: The next program shows how to verify a password.  It prompts the user
  181: for a password and prints ``Access granted.'' if the user types
  182: @code{GNU libc manual}.
  183: 
  184: @smallexample
  185: @include testpass.c.texi
  186: @end smallexample
  187: 
  188: @comment crypt.h
  189: @comment GNU
  190: @deftypefun {char *} crypt_r (const char *@var{key}, const char *@var{salt}, {struct crypt_data *} @var{data})
  191: 
  192: The @code{crypt_r} function does the same thing as @code{crypt}, but
  193: takes an extra parameter which includes space for its result (among
  194: other things), so it can be reentrant.  @code{data@w{->}initialized} must be
  195: cleared to zero before the first time @code{crypt_r} is called.
  196: 
  197: The @code{crypt_r} function is a GNU extension.
  198: @end deftypefun
  199: 
  200: The @code{crypt} and @code{crypt_r} functions are prototyped in the
  201: header @file{crypt.h}.
  202: 
  203: @node DES Encryption
  204: @section DES Encryption
  205: 
  206: The Data Encryption Standard is described in the US Government Federal
  207: Information Processing Standards (FIPS) 46-3 published by the National
  208: Institute of Standards and Technology.  The DES has been very thoroughly
  209: analyzed since it was developed in the late 1970s, and no new
  210: significant flaws have been found.
  211: 
  212: However, the DES uses only a 56-bit key (plus 8 parity bits), and a
  213: machine has been built in 1998 which can search through all possible
  214: keys in about 6 days, which cost about US$200000; faster searches would
  215: be possible with more money.  This makes simple DES insecure for most
  216: purposes, and NIST no longer permits new US government systems
  217: to use simple DES.
  218: 
  219: For serious encryption functionality, it is recommended that one of the
  220: many free encryption libraries be used instead of these routines.
  221: 
  222: The DES is a reversible operation which takes a 64-bit block and a
  223: 64-bit key, and produces another 64-bit block.  Usually the bits are
  224: numbered so that the most-significant bit, the first bit, of each block
  225: is numbered 1.
  226: 
  227: Under that numbering, every 8th bit of the key (the 8th, 16th, and so
  228: on) is not used by the encryption algorithm itself.  But the key must
  229: have odd parity; that is, out of bits 1 through 8, and 9 through 16, and
  230: so on, there must be an odd number of `1' bits, and this completely
  231: specifies the unused bits.
  232: 
  233: @comment crypt.h
  234: @comment BSD, SVID
  235: @deftypefun void setkey (const char *@var{key})
  236: 
  237: The @code{setkey} function sets an internal data structure to be an
  238: expanded form of @var{key}.  @var{key} is specified as an array of 64
  239: bits each stored in a @code{char}, the first bit is @code{key[0]} and
  240: the 64th bit is @code{key[63]}.  The @var{key} should have the correct
  241: parity.
  242: @end deftypefun
  243: 
  244: @comment crypt.h
  245: @comment BSD, SVID
  246: @deftypefun void encrypt (char *@var{block}, int @var{edflag})
  247: 
  248: The @code{encrypt} function encrypts @var{block} if
  249: @var{edflag} is 0, otherwise it decrypts @var{block}, using a key
  250: previously set by @code{setkey}.  The result is
  251: placed in @var{block}.
  252: 
  253: Like @code{setkey}, @var{block} is specified as an array of 64 bits each
  254: stored in a @code{char}, but there are no parity bits in @var{block}.
  255: @end deftypefun
  256: 
  257: @comment crypt.h
  258: @comment GNU
  259: @deftypefun void setkey_r (const char *@var{key}, {struct crypt_data *} @var{data})
  260: @comment crypt.h
  261: @comment GNU
  262: @deftypefunx void encrypt_r (char *@var{block}, int @var{edflag}, {struct crypt_data *} @var{data})
  263: 
  264: These are reentrant versions of @code{setkey} and @code{encrypt}.  The
  265: only difference is the extra parameter, which stores the expanded
  266: version of @var{key}.  Before calling @code{setkey_r} the first time,
  267: @code{data->initialized} must be cleared to zero.
  268: @end deftypefun
  269: 
  270: The @code{setkey_r} and @code{encrypt_r} functions are GNU extensions.
  271: @code{setkey}, @code{encrypt}, @code{setkey_r}, and @code{encrypt_r} are
  272: defined in @file{crypt.h}.
  273: 
  274: @comment rpc/des_crypt.h
  275: @comment SUNRPC
  276: @deftypefun int ecb_crypt (char *@var{key}, char *@var{blocks}, unsigned @var{len}, unsigned @var{mode})
  277: 
  278: The function @code{ecb_crypt} encrypts or decrypts one or more blocks
  279: using DES.  Each block is encrypted independently.
  280: 
  281: The @var{blocks} and the @var{key} are stored packed in 8-bit bytes, so
  282: that the first bit of the key is the most-significant bit of
  283: @code{key[0]} and the 63rd bit of the key is stored as the
  284: least-significant bit of @code{key[7]}.  The @var{key} should have the
  285: correct parity.
  286: 
  287: @var{len} is the number of bytes in @var{blocks}.  It should be a
  288: multiple of 8 (so that there is a whole number of blocks to encrypt).
  289: @var{len} is limited to a maximum of @code{DES_MAXDATA} bytes.
  290: 
  291: The result of the encryption replaces the input in @var{blocks}.
  292: 
  293: The @var{mode} parameter is the bitwise OR of two of the following:
  294: 
  295: @vtable @code
  296: @comment rpc/des_crypt.h
  297: @comment SUNRPC
  298: @item DES_ENCRYPT
  299: This constant, used in the @var{mode} parameter, specifies that
  300: @var{blocks} is to be encrypted.
  301: 
  302: @comment rpc/des_crypt.h
  303: @comment SUNRPC
  304: @item DES_DECRYPT
  305: This constant, used in the @var{mode} parameter, specifies that
  306: @var{blocks} is to be decrypted.
  307: 
  308: @comment rpc/des_crypt.h
  309: @comment SUNRPC
  310: @item DES_HW
  311: This constant, used in the @var{mode} parameter, asks to use a hardware
  312: device.  If no hardware device is available, encryption happens anyway,
  313: but in software.
  314: 
  315: @comment rpc/des_crypt.h
  316: @comment SUNRPC
  317: @item DES_SW
  318: This constant, used in the @var{mode} parameter, specifies that no
  319: hardware device is to be used.
  320: @end vtable
  321: 
  322: The result of the function will be one of these values:
  323: 
  324: @vtable @code
  325: @comment rpc/des_crypt.h
  326: @comment SUNRPC
  327: @item DESERR_NONE
  328: The encryption succeeded.
  329: 
  330: @comment rpc/des_crypt.h
  331: @comment SUNRPC
  332: @item DESERR_NOHWDEVICE
  333: The encryption succeeded, but there was no hardware device available.
  334: 
  335: @comment rpc/des_crypt.h
  336: @comment SUNRPC
  337: @item DESERR_HWERROR
  338: The encryption failed because of a hardware problem.
  339: 
  340: @comment rpc/des_crypt.h
  341: @comment SUNRPC
  342: @item DESERR_BADPARAM
  343: The encryption failed because of a bad parameter, for instance @var{len}
  344: is not a multiple of 8 or @var{len} is larger than @code{DES_MAXDATA}.
  345: @end vtable
  346: @end deftypefun
  347: 
  348: @comment rpc/des_crypt.h
  349: @comment SUNRPC
  350: @deftypefun int DES_FAILED (int @var{err})
  351: This macro returns 1 if @var{err} is a `success' result code from
  352: @code{ecb_crypt} or @code{cbc_crypt}, and 0 otherwise.
  353: @end deftypefun
  354: 
  355: @comment rpc/des_crypt.h
  356: @comment SUNRPC
  357: @deftypefun int cbc_crypt (char *@var{key}, char *@var{blocks}, unsigned @var{len}, unsigned @var{mode}, char *@var{ivec})
  358: 
  359: The function @code{cbc_crypt} encrypts or decrypts one or more blocks
  360: using DES in Cipher Block Chaining mode.
  361: 
  362: For encryption in CBC mode, each block is exclusive-ored with @var{ivec}
  363: before being encrypted, then @var{ivec} is replaced with the result of
  364: the encryption, then the next block is processed.  Decryption is the
  365: reverse of this process.
  366: 
  367: This has the advantage that blocks which are the same before being
  368: encrypted are very unlikely to be the same after being encrypted, making
  369: it much harder to detect patterns in the data.
  370: 
  371: Usually, @var{ivec} is set to 8 random bytes before encryption starts.
  372: Then the 8 random bytes are transmitted along with the encrypted data
  373: (without themselves being encrypted), and passed back in as @var{ivec}
  374: for decryption.  Another possibility is to set @var{ivec} to 8 zeroes
  375: initially, and have the first the block encrypted consist of 8 random
  376: bytes.
  377: 
  378: Otherwise, all the parameters are similar to those for @code{ecb_crypt}.
  379: @end deftypefun
  380: 
  381: @comment rpc/des_crypt.h
  382: @comment SUNRPC
  383: @deftypefun void des_setparity (char *@var{key})
  384: 
  385: The function @code{des_setparity} changes the 64-bit @var{key}, stored
  386: packed in 8-bit bytes, to have odd parity by altering the low bits of
  387: each byte.
  388: @end deftypefun
  389: 
  390: The @code{ecb_crypt}, @code{cbc_crypt}, and @code{des_setparity}
  391: functions and their accompanying macros are all defined in the header
  392: @file{rpc/des_crypt.h}.
Syntax (Markdown)