S/KEY One-Time Password System (Version 1.1 11-01-03)


Authors
-------
  
   Neil M. Haller	nmh@thumper.bellcore.com
   Philip R. Karn	karn@chicago.qualcomm.com
   John S. Walden       jsw@thumper.bellcore.com
   Scott Chasin         chasin@crimelab.com


Archive Contents Listing
------------------------

   src		- Sources for the S/Key system (key, keyinit, keysh, libskey.a)
   man		- Man pages for the S/Key tools
   tools        - S/Key tools
   misc		- Miscellaneous S/Key support programs (login, su, ftpd)
   

S/Key anonymous FTP archive sites
---------------------------------

   thumper.bellcore.com [128.96.41.1]   Directory: /pub/nmh
   crimelab.com [198.64.127.1]          Directory: /pub/skey

   Both archive sites contain "key" binaries for DOS, MSWINDOWS,
   MAC, and various UNIX flavors.

S/Key mailing list
------------------

We have established a mailing list to be used for S/Key announcements,
Bug reporting, and for any general discussion of S/Key system.
 
To get added or deleted from this list, send mail to:
 
        skey-users-request@thumper.bellcore.com
 
To send to the list, send mail to:
 
        skey-users@thumper.bellcore.com
 
Please do not send add/delete requests to the entire list.


Description of The S/KEY One-Time Password System
-------------------------------------------------
  
The S/KEY one-time password system provides authentication over networks
that are subject to eavesdropping/reply attacks. This system has several
advantages compared with other one-time or multi-use authentication
systems.  The user's secret password never crosses the network during
login, or when executing other commands requiring authentication such as
the UNIX passwd or su commands.  No secret information is stored anywhere,
including the host being protected, and the underlying algorithm may be
(and it fact, is) public knowledge. The remote end of this system can run
on any locally available computer.  The host end could be integrated into
any application requiring authentication.


Attributes of the S/KEY One-Time Password System
------------------------------------------------

The S/KEY authentication system is a simple scheme that protects user
passwords against passive attacks.  It is not as powerful or general in
scope as Kerberos or SDASS; nor does it protect against active attacks.
It can, however, be easily and quickly added to almost any UNIX system
without requiring any additional hardware and without requiring the
system to store information (such as plain text passwords) that would
be more sensitive than the encrypted passwords already stored.  The
S/KEY system can be used with non programmable terminals or personal
computers (e.g., systems running DOS or Apple Macintoshes) with
conventional communications programs.
 
Some of the properties of the S/KEY system are:

   o	Eavesdropping protection

   o	Conceptually simple and easy to use

   o	Based on a memorized secret password; does not require a
	special device although it can easily be adapted to do so.

   o	Can be automated for authentication from a trusted system.
	(Can also be partially automated for fast operation.)

   o	No secret algorithms.

   o	No secrets stored on host.



Description of the S/KEY One-Time Password System
-------------------------------------------------

There are two sides to the operation of our one-time password system.
On the user (or client) side, the appropriate one-time password must
be generated.  On the system (server) side, the one-time password must
be verified.  One time passwords are generated and verified using a
one-way function based on MD4 [Rivest].  (Conversion to MD5 would be
trivial)  
 
We have defined our one-way function to take 8 bytes of input and to
produce 8 bytes of output.  This is done by running the 8 bytes of
input through MD4 and then "folding" pairs of bytes in the 16-byte MD4
output down to 8 bytes with exclusive-OR operations.  This allows us to
apply the one-way function an arbitrary number of times.


Generation of One-Time Passwords 

The sequence of one-time passwords is produced by applying the one-way
function multiple times.  That is, the first one-way password is
produced by running the user's secret password (s) through the one-way
function some specified number of times, (n).  Assuming n=4,

			p(1) =  f(f(f(f(s))))
 
The next one-way password is generated by running the user's password
through the one-way function only n-1  times.
  
			p(2) = f(f(f(s))) 
 
An eavesdropper who has monitored the use of the one-time password  
p(i) will not be able to generate the next one in the sequence p(i+1)
because doing so would require inverting the one-way function. Without
knowing the secret key that was the starting point of the function
iterations, this can not be done.

Seeding the Password

A user might want to use the same secret password on several machines,
or might allow the iteration count to go to zero.  An initial step
concatenates a seed with the arbitrary length secret password, crunches
the result with MD4, and folds the result to 64 bits.  The result of
this process is then iterated n times.


System Verification of Passwords 

The host computer first saves a copy of the one-time password it
receives, then it applies the one-way function to it.  If the result
does not match the copy stored in the system's password file, then the
request fails.  If they match, then the user's entry in the system
password file is updated with the copy of the one-time password that
was saved before the final execution (by the server) of the one-way
function.  This updating advances the password sequence.

Because the number of one-way function iterations executed by the user
decreases by one each time, at some point the user must reinitialize the
system or be unable to log in again.  This is done by executing a
special version of the passwd command to start a new sequence of
one-time passwords.  This operation is essentially identical to a
normal authentication, except that the one-time password receive
over the network is not checked against the entry already in the
password file before it replaces it. In this way, the selection of a
new password can be done safely even in the presence of an eavesdropper.


Operation of S/KEY One-Time Password System
-------------------------------------------

Overview 

The S/KEY one-time password authentication system uses computation to
generate a finite sequence of single-use passwords from a single secret.
The security is entirely based on a single secret that is known only to
the user. Alternatively, part of or the entire secret can be stored in a
non-retrievable way, in the computing device.
 

Generation of S/KEY One-Time Passwords 

As mentioned above, the one-time password sequence is derived from the
secret password using a computer.  The required computation has been
executed on a variety of PC and UNIX class machines including notebook
and palm-tops. A vendor has estimated that credit card size devices
could be built for less than $30 in large quantities.

The program can also be stored on and executed from a standard floppy
disk.  This would allow operation on a remote computer that could not be
entirely trusted not to contain a Trojan Horse that would attempt
to capture the secret password.  It is sometimes useful to pre-compute
and print several one-time passwords.  These could be carried on a trip
where public terminals or workstations were available, but no trusted
local computation was available. 


Description of Operation 

The following narrative describes the procedure for logging into a UNIX
system using the S/KEY one-time password system.  To illustrate the
most complex case, we assume a hand-held PC compatible computer is used.
 
  o  The user, call her Sue, identifies herself to the system by login name.
 
  o  The system issues a challenge including the sequence number of the
     one-time password expected and a "seed" that is unique to the system.
     This "seed" allows Sue to securely use a single secret for several
     machines.  Here the seed is "unix3" and the sequence number is 54.
 
  o  Sue enters 54 and unix3 into her palm-top computer.  She is prompted
     for her secret password.
 
  o  Sue enters her secret password that may be of any length.  The palm-top
     computes the 54th one-time password and displays it.
 
  o  Sue enters the one-time password and is authenticated.
 
  o  Next time Sue wants access, she will be prompted for one-time
     password sequence number 53.
 

Semi-Automated Operation 

The complexity illustrated above is necessary only when using a terminal
that is not programmable by the user, or when using a non-trusted
terminal.  We have built semi-automatic interfaces for clients using
communications software on popular personal computers.  The following
example illustrates logging in using a trusted personal computer and a
popular terminal emulation program.

  o  Before starting the communication program, Sue runs the CTKEY
     program that ties a TSR to a "hot-key" such as F10.

  o  Sue identifies herself by login name as above.

  o  The system issues the same challenge including the seed "unix3"
     and the sequence number 54.  The host system now expects an
     s/key one-time password.

  o  Sue presses the hot-key and is then prompted for a secret password
     by the TSR program on the local system.

  o  In response to Sue's secret password, the 54th one-time password
     is displayed at the position of the cursor.

  o  Sue presses "Insert" and the terminal emulator transmits the
     one-time password completing the authentication.

If the personal computer were in a trusted location, an option of the
CTKEY program allows the secret password to be stored in a local file.


Form of Password 

Internally the one-time password is a 64 bit number.  Entering a 64 bit
number is not a pleasant task.  The one-time password is therefore
converted to a sequence of six short words (1 to 4 letters). Each word
is chosen from a dictionary of 2048 words.  The contents of this
dictionary is not a secret.


Acknowledgments
---------------
The idea behind our system was originally described by Leslie Lamport. 
Some details of the design were contributed by John S. Walden who
wrote the initial version of the client software.


Trademarks
----------
   Athena and Kerberos of trademarks of MIT.
   S/KEY is a trademark of Bellcore.
   SPX and DEC are trademarks of Digital Equipment Company.
   UNIX is a registered trademark of UNIX System Laboratories, Inc.


References
----------

Eugene H. Spafford, "The internet worm program: An analysis."  Computer
Communications Review 19(1):17-57, January 1989.

 
D. C. Feldmeier and P. R. Karn, "UNIX Password Security - Ten Years
Later", Crypto '89 Conference , Santa Barbara, CA August 20-24, 1989.

 
J. G. Steiner, C. Neuman, and J. I. Schiller. "Kerberos: An
authentication service for open network systems."   USENIX Conference
Proceedings, pp. 191-202, Dallas, Texas, February 1988.

 
Catherine R. Avril and Ronald L. Orcutt. Athena: MIT's Once and
Future Distributed Computing Project.  Information
Technology Quarterly , Fall 1990, pp. 4-11.

 
R. L. Rivest, The MD4 Message Digest Algorithm,  Crypto '90 Abstracts
(August 1990), 281-291.

 
Leslie Lamport, "Password Authentication with Insecure Communication",
 Communications of the ACM  24.11 (November 1981), 770-772.
