glenda.party
term% ls -F
term% cat index.txt
AUTHSRV(6)                       Games Manual                       AUTHSRV(6)

NAME
       authsrv, p9any, p9sk1, p9sk2 - authentication protocols

DESCRIPTION
       This manual page describes the protocols used to authorize connections,
       confirm  the identities of users and machines, and maintain the associ‐
       ated databases.  The machine that provides these services is called the
       authentication server (AS).  The AS may be a stand-alone machine  or  a
       general-use  machine such as a CPU server.  The network database ndb(6)
       holds for each public machine, such as a CPU server or file server, the
       name of the authentication server that machine uses.

       Each machine contains  three  values  important  to  authentication;  a
       56-bit  DES key, a 28-byte authentication ID, and a 48-byte authentica‐
       tion domain name.  The ID is a user name and  identifies  who  is  cur‐
       rently  responsible for the kernel running on that machine.  The domain
       name identifies the machines across which the ID is  valid.   Together,
       the ID and domain name identify the owner of a key.

       When  a terminal boots, factotum(4) prompts for user name and password.
       The user name becomes the terminal's authentication ID.   The  password
       is converted using passtokey (see authsrv(2)) into a 56-bit DES key and
       saved  in memory.  The authentication domain is set to the null string.
       If possible, factotum validates the key with the AS before  saving  it.
       For Internet machines the correct AS to ask is found using dhcpd(8).

       When a CPU or file server boots, factotum reads the key, ID, and domain
       name  from non-volatile RAM.  This allows servers to reboot without op‐
       erator intervention.

       The details of any authentication are mixed with the semantics  of  the
       particular service they are authenticating so we describe them one case
       at a time. The following definitions will be used in the descriptions:

       Ks     server's host ID's key

       Kc     client's host ID's key

       Kn     a nonce key created for a ticket (key)

       K{m}   message m encrypted with key K

       CHc    an 8-byte random challenge from a client (chal)

       CHs    an 8-byte random challenge from a server (chal)

       IDs    server's ID (authid)

       DN     server's authentication domain name (authdom)

       IDc    client's ID (hostid, cuid)

       IDr    client's desired ID on server (uid, suid)

       The  parenthesized  names are the ones used in the Ticketreq and Ticket
       structures in <authsrv.h>.

       The message type constants AuthTreq, AuthChal,  AuthPass,  AuthOK,  Au‐
       thErr,  AuthMod,  AuthApop,  AuthOKvar, AuthChap, AuthMSchap, AuthCram,
       and AuthVNC (type) are defined in <authsrv.h>,  as  are  the  encrypted
       message types AuthTs, AuthAs, AuthAc, AuthTp, and AuthHr (num).

   Ticket Service
       When a client and server wish to authenticate to each other, they do so
       using  tickets  issued by the AS.  Obtaining tickets from the AS is the
       client's responsibility.

       The protocol to obtain a ticket pair is:

       C→A    AuthTreq, IDs, DN, CHs, IDc, IDr
       A→C    AuthOK, Kc{AuthTc, CHs, IDc, IDr, Kn}, Ks{AuthTs, CHs, IDc, IDr,
              Kn}

       The two tickets are identical except for their type fields and the keys
       with which they are encrypted.  The client and server can each  decrypt
       one of the tickets, establishing a shared secret Kn.

       The tickets can be viewed as a statement by the AS that ‘‘a client pos‐
       sessing the Kn key is allowed to authenticate as IDr.''

       The  presence  of  the  server  challenge  CHs in the ticket allows the
       server to verify the freshness of the ticket pair.

       The AS sets the IDr in the tickets to the requested IDr only if IDc  is
       allowed to speak for (q.v.)  IDr.  If not, the AS sets IDr to the empty
       string.

       If  the  users  IDc or IDs do not exist, the AS silently generates one-
       time random keys to use in place of Kc or Ks, so  that  clients  cannot
       probe the AS to learn whether a user name is valid.

   P9sk1
       The  Plan 9 shared key protocol p9sk1 allows a client and server to au‐
       thenticate each other.  The protocol is:

       C→S    CHc
              The client starts by sending a random challenge to the server.

       S→C    AuthTreq, IDs, DN, CHs, -, -
              The server replies with a ticket request giving its id  and  au‐
              thentication domain along with its own random challenge.

       C→S    Ks{AuthTs, CHs, IDc, IDr, Kn}, Kn{AuthAc, CHs}
              The  client adds IDc and IDr to the ticket request and obtains a
              ticket pair from the AS as described above.  The  client  relays
              the server's ticket along with an authenticator, the AuthAc mes‐
              sage.   The  authenticator  proves to the server that the client
              knows Kn and is therefore allowed to authenticate as IDr.   (The
              inclusion of CHs in the authenticator avoids replay attacks.)

       S→C    Kn{AuthAs, CHc}
              The  server  replies  with its own authenticator, proving to the
              client that it also knows Kn and therefore Ks .

       P9sk2 is an older  variant  of  p9sk1  used  only  when  connecting  to
       pre-9P2000  remote  execution services.  It omits the first message and
       last messages and therefore does not authenticate  the  server  to  the
       client.

   P9any
       P9any is the standard Plan 9 authentication protocol.  It consists of a
       negotiation to determine a common protocol, followed by the agreed-upon
       protocol.

       The negotiation protocol is:

       S→C    v.2 proto@authdom proto@authdom ...
       C→S    proto dom
       S→C    OK

       Each  message  is  a  NUL-terminated  UTF string.  The server begins by
       sending a list of proto, authdom pairs  it  is  willing  to  use.   The
       client  responds with its choice.  Requiring the client to wait for the
       final OK ensures that the client will not start the chosen protocol un‐
       til the server is ready.

       The above is version 2 of the protocol.  Version  1,  no  longer  used,
       omitted the first message's v.2 prefix and the OK message.

       The  p9any  protocol  is the protocol used by all Plan 9 services.  The
       file server runs it over special authentication files (see fauth(2) and
       attach(5)).  Other services, such as cpu(1) and exportfs(4), run  p9any
       over the network and then use Kn to derive an ssl(3) key to encrypt the
       rest of their communications.

   Password Change
       Users connect directly to the AS to change their passwords.  The proto‐
       col is:

       C→A    AuthPass, IDc, DN, CHc, IDc, IDc
              The client sends a password change ticket request.

       A→C    Kc{AuthTp, CHc, IDc, IDc, Kn}
              The  server  responds  with  a  ticket containing the key Kn en‐
              crypted with the client's key Kc

       C→A    Kn{AuthPass, old, new, changesecret, secret}
              The client decrypts the ticket using the old password  and  then
              sends back an encrypted password request (Passwordreq structure)
              containing  the old password and the new password.  If changese‐
              cret is set, the AS also changes the user's secret, the password
              used for non-Plan 9 authentications.

       A→C    AuthOK or AuthErr, 64-byte error message
              The AS responds with simply AuthOK or with AuthErr followed by a
              64-byte error message.

   Authentication Database
       An ndb(2) database file /lib/ndb/auth exists for the AS.  This database
       maintains ‘‘speaks for'' relationships, i.e., it lists which users  may
       speak  for  other users when authtenticating.  The attribute types used
       by the AS are hostid and uid.  The value in  the  hostid  is  a  client
       host's  ID.   The  values in the uid pairs in the same entry list which
       users that host ID make speak for.  A uid value of * means the host  ID
       may  speak  for  all users.  A uid value of !user means the host ID may
       not speak for user.  For example:

       hostid=bootes
            uid=!sys uid=!adm uid=*

       is interpreted as bootes may speak for any user  except  sys  and  adm.
       This property is used heavily on CPU servers.

   Foreign Protocols
       The  AS accepts ticket request messages of types other than AuthTreq to
       allow users to authenticate using non-Plan 9 protocols.  In these situ‐
       ations, the server communicates directly with the AS.   Some  protocols
       must  begin  without knowing the client's name.  They ignore the client
       name in the ticket request.  All the protocols end with the AS  sending
       an AuthOK message containing a server ticket and authenticator.

       AuthOK  messages  always  have a fixed but context-dependent size.  The
       occasional variable-length OK message starts with a AuthOKvar byte  and
       a five-byte space-padded decimal length of the data that follows.

       Anywhere  an  AuthOK message is expected, a AuthErr message may be sub‐
       stituted.

       S→A    AuthChal, IDs, DN, CHs, IDs, IDc
       A→S    AuthOK, challenge
       S→A    response
       A→S    AuthOK, Ks{AuthChal, IDs, DN, CHs,  IDs,  IDc,  Kn},  Kn{AuthTs,
              CHs}

              This  protocol allows the use of handheld authenticators such as
              SecureNet keys and SecureID tokens in programs  such  as  ssh(1)
              and ftpd (see ipserv(8)).

              Challenge and response are text strings, NUL -padded to 16 bytes
              (NETCHLEN).   The  challenge is a random five-digit decimal num‐
              ber.  When using a SecureNet key or netkey (see passwd(1)),  the
              response is an eight-digit decimal or hexadecimal number that is
              an encryption of the challenge using the user's DES key.

              When  using a SecureID token, the challenge is ignored.  The re‐
              sponse is the user's PIN followed by the six-digit  number  cur‐
              rently  displayed on the token.  In this case, the AS queries an
              external RADIUS server to check the response.  Use of  a  RADIUS
              server  requires  an  entry in the authentication database.  For
              example:

                  radius=server-name secret=xyzzy
                      uid=howard rid=trickey
                      uid=sape   rid=smullender

              In this example, the secret xyzzy is the hash key used in  talk‐
              ing  to  the  RADIUS  server.  The uid/rid lines map from Plan 9
              user ids to RADIUS ids.  Users not listed are  assumed  to  have
              the same id in both places.

       S→A    AuthApop , IDs, DN, CHs, -, -
       A→S    AuthOKvar, challenge
       S→A    AuthApop , IDs, DN, CHs, IDc, IDc; hexadecimal MD5 checksum
       A→S    AuthOK,  Ks{AuthApop,  IDs,  DN,  CHs, IDs, IDc, Kn}, Kn{AuthTs,
              CHs}

              This protocol implements APOP authentication (see pop3(8)).  Af‐
              ter receiving a ticket request of type AuthApop, the  AS  gener‐
              ates a random challenge of the form <random@domain>.  The client
              then replies with a new ticket request giving the user name fol‐
              lowed by the MD5 checksum of the challenge concatenated with the
              user's  secret.   If the response is correct, the authentication
              server sends back a ticket and authenticator.  If  the  response
              is  incorrect,  the  client  may  repeat  the ticket request/MD5
              checksum message to try again.

              The AuthCram protocol runs identically to the AuthApop protocol,
              except that the expected MD5 checksum is the keyed MD5 hash  us‐
              ing the user's secret as the key (see hmac_md5 in sechash(2)).

       S→A    AuthChap, IDs, DN, CHs, -, -
       A→S    challenge
       S→A    pktid, IDc, response
       A→S    AuthOK,  Ks{AuthChap,  IDs,  DN,  CHs, IDs, IDc, Kn}, Kn{AuthTs,
              CHs}

              This protocol implements CHAP authentication (see ppp(8)).   The
              challenge  is eight random bytes.  The response is a 16-byte MD5
              checksum over the packet id, user's secret, and challenge.   The
              reply packet is defined as OChapreply in <authsrv.h>.

       S→A    AuthMSchap, IDs, DN, CHs, -, -
       A→S    challenge
       S→A    IDc, lm-response, nt-response
       A→S    AuthOK,  Ks{AuthMschap,  IDs, DN, CHs, IDs, IDc, Kn}, Kn{AuthTs,
              CHs}

              This protocol implements Microsoft's MS-CHAP authentication (see
              ppp(8)).  The challenge is eight  random  bytes.   The  two  re‐
              sponses  are  Microsofts LM and NT hashes.  Only the NT hash may
              be used to authenticate, as the LM hash is considered too  weak.
              The reply packet is defined as OMSchapreply in <authsrv.h>.

       S→A    AuthVNC, IDs, DN, CHs, IDs, IDc
       A→S    AuthOKvar, challenge
       S→A    response
       A→S    AuthOK, Ks{, IDs, DN, CHs, IDs, IDc, Kn}, Kn{AuthTs, CHs}

              This   protocol  implements  VNC  authentication  (see  vncs  in
              vnc(1)).  The challenge is 16 random bytes, and the response  is
              a  DES ECB encryption of the challenge.  The method by which VNC
              converts the user's secret into a DES key is  weak,  considering
              only the first eight bytes of the secret.

FILES
       /lib/ndb/auth
              database file

       /lib/ndb/auth.*
              hash files for /lib/ndb/auth

SEE ALSO
       auth(2), fauth(2), cons(3), attach(5), auth(8)

                                                                    AUTHSRV(6)