README revision 22347
122347SpstOPIE Software Distribution, Release 2.3                   Important Information
222347Spst=======================================                   =====================
322347Spst
422347SpstIntroduction
522347Spst============
622347Spst
722347Spst	"One-time Passwords In Everything" (OPIE) is a freely distributable
822347Spstsoftware package originally developed at and for the US Naval Research
922347SpstLaboratory (NRL). Recent versions are the result of a cooperative effort
1022347Spstbetween of NRL, several of the original NRL authors, The Inner Net, and many
1122347Spstother contributors from the Internet community.
1222347Spst
1322347Spst	OPIE is an implementation of the One-Time Password (OTP) System that
1422347Spstis being considered for the Internet standards-track. OPIE provides a one-time
1522347Spstpassword system. The system should be secure against the passive attacks
1622347Spstnow commonplace on the Internet (see RFC 1704 for more details). The system
1722347Spstis vulnerable to active dictionary attacks, though these are not widespread
1822347Spstat present and can be detected through proper use of system audit
1922347Spstsoftware. 
2022347Spst
2122347Spst	OPIE is primarily written for UNIX-like operating systems, but
2222347Spstwe are working to make applicable portions portable to other operating systems.
2322347SpstThe OPIE software is derived in part from and is fully interoperable with the
2422347SpstBell Communications Research (Bellcore) S/Key Release 1 software. Because
2522347SpstBellcore claims "S/Key" as a trademark for their software, NRL was forced to
2622347Spstuse a different name (we picked "OPIE") for this software distribution.
2722347Spst
2822347Spst	OPIE includes the following additions/modifications to the
2922347Spstoriginal Bellcore S/Key(tm) Version 1 software:
3022347Spst
3122347Spst* Just about three command installation (unpack the software, run the
3222347Spst  configure script, and run make install). While we still recommend that you
3322347Spst  follow instructions and test things by hand, the more adventurous can
3422347Spst  install OPIE quickly.
3522347Spst
3622347Spst* A modified BSD FTP daemon that does OTP.
3722347Spst
3822347Spst* A version of su that uses OTP by default. 
3922347Spst
4022347Spst* MD5 support. MD5 is now the default algorithm, though MD4 is still supported
4122347Spst  by changing a parameter in the Makefile. This change was made because MD5 is
4222347Spst  widely believed to be cryptographically stronger than MD4 (see RFC 1321).
4322347Spst
4422347Spst* A more portable version of MD4 has been substituted for the original MD4. 
4522347Spst  This should solve the endian problems that were in S/Key.
4622347Spst
4722347Spst* Most of the system-dependencies have been moved to a new file "opie_cfg.h".
4822347Spst
4922347Spst* Configuration options have been moved to the Makefile.
5022347Spst
5122347Spst* Isolated system dependencies (e.g. BSDisms) with appropriate #ifdefs.
5222347Spst
5322347Spst* Revised the opiekey(1) program to simultaneously support MD4 and MD5, with
5422347Spst  the default algorithm being tunable using the MDX symbol in the Makefile.
5522347Spst
5622347Spst* More operating systems are supported by recent versions of OPIE, but older
5722347Spst  BSD systems that aren't close to being compliant with the POSIX standard are
5822347Spst  no longer supported.
5922347Spst
6022347Spst* Transition mechanisms are optional to prevent potential back doors.
6122347Spst
6222347Spst* On systems using the /etc/opieaccess transition mechanism, users can choose
6322347Spst  to require the use of OPIE to login to their accounts when it would 
6422347Spst  otherwise be optional.
6522347Spst
6622347Spst* Bug fixes
6722347Spst
6822347Spst* Cosmetic changes
6922347Spst
7022347Spst* Prompts (optionally) identify specifically what kind of entry (system
7122347Spst  password, secret pass phrase, or OTP response) is allowed.
7222347Spst
7322347Spst* Changes to mostly conform with the draft Internet OTP standard.
7422347Spst
7522347SpstA Glance at What's New
7622347Spst======================
7722347Spst
7822347Spst	2.3 September 22, 1996
7922347Spst
8022347Spst	Autoconf is now the only supported configuration method.
8122347Spst
8222347Spst	Lots of internal functions got re-written in ways that will make some
8322347Spstplanned future changes easier.
8422347Spst
8522347Spst	OTP extended responses, such as automatic re-initialization.
8622347Spst
8722347Spst	Support for a supplemental key file that stores information that was
8822347Spstnot in the original /etc/skeykeys file. This allows OPIE to store extra data
8922347Spstneeded for things like the OTP re-initialization extended response without
9022347Spstbreaking interoperability with other S/Key derived programs. This file is
9122347Spstnamed "/etc/opiekeys.ext" by default. Unlike the standard key file, it MUST
9222347SpstNOT be world readable.
9322347Spst
9422347Spst	OPIE should better support some of the native "features" of drain
9522347Spstbamaged OSs such as AIX, HP-UX, and Solaris.
9622347Spst
9722347Spst	OPIE's utmp/wtmp handling has been completely re-written. This should
9822347Spstsolve many of the utmp/wtmp problems people have been having.
9922347Spst
10022347Spst	Lots of cleanups.
10122347Spst
10222347Spst	Bug fixes.
10322347Spst
10422347Spst	2.22 May 3, 1996.
10522347Spst
10622347Spst	More minor bug fixes. OPIE once again works on Solaris 2.x.
10722347Spst
10822347Spst	2.21 April 27, 1996.
10922347Spst
11022347Spst	Minor bug fixes.
11122347Spst
11222347Spst        2.2 April 11, 1996.
11322347Spst
11422347Spst        opiesubr.c, opiesubr2.c, and a few other functions moved into
11522347Spsta subdirectory and split into files with fine granularity. Ditto with
11622347Spstmissing function replacements. This subdirectory structure changes a lot
11722347Spstof things around and more splitting like this should be expected in the
11822347Spstnear future.
11922347Spst
12022347Spst        Added opiegenerator() library function that should make it very easy
12122347Spstto create OTP clients using the OPIE library (this function is subject to
12222347Spstchange: there are a few problems remaining to be solved). Just about re-write
12322347Spstopiegetpass() to use raw I/O and got most of the OPIE programs actually using
12422347Spstthat function. Autoconf build fixes. Lots of bug fixes. Lots of portability
12522347Spstfixes. Function declarations should be ANSI style for ANSI compilers. Several
12622347Spstfixes to bring OPIE in line with the latest OTP spec. MJR DES key crunch 
12722347Spstde-implemented.
12822347Spst
12922347Spst	Added sample programs: opiegen (client) and opieserv (server).
13022347Spst
13122347Spst	Probably broke non-autoconf support along the way :(. I've tried to
13222347Spstbring this back in sync, but it may still be broken.
13322347Spst
13422347Spst        2.11 December 27, 1995.
13522347Spst
13622347Spst        Minor bug fixes.
13722347Spst
13822347Spst	2.10 December 26, 1995.
13922347Spst
14022347Spst	Optional autoconf support. opieinfo is now a normal program.
14122347SpstBugs fixed -- should work much better on SunOS, HP-UX, and AIX.
14222347Spst
14322347SpstSystem Requirements
14422347Spst===================
14522347Spst
14622347Spst        In order to build and run properly, OPIE requires:
14722347Spst
14822347Spst        * A UNIX-like operating system
14922347Spst        * An ANSI C compiler and run-time library
15022347Spst        * POSIX.1- and X/Open XPG-compliance (including termios)
15122347Spst        * The BSD sockets API
15222347Spst        * Approximately five megabytes of free disk space
15322347Spst
15422347Spst        In practice, we believe that many systems who are close to meeting
15522347Spstthese requirements but aren't completely there (for example, SunOS with the
15622347Spstnative compiler) will also work. Systems who aren't anywhere near close
15722347Spst(for example, DOS) are not likely to work without major adjustments to the
15822347SpstOPIE code.
15922347Spst
16022347SpstIf OPIE Doesn't Work
16122347Spst====================
16222347Spst
16322347Spst	First and foremost, make sure you have the latest version of OPIE. The
16422347Spstlatest version is available by anonymous FTP at:
16522347Spst
16622347Spst	ftp://ftp.nrl.navy.mil/pub/security/opie
16722347Spst		and
16822347Spst	ftp://ftp.inner.net/pub/opie
16922347Spst
17022347Spst	If you have installed the OPIE software (either through "make test"
17122347Spstin (7) above or "make install" in (14)), you can run "make uninstall" from the
17222347SpstOPIE software distribution directory. This should remove the OPIE software and
17322347Spstrestore the original system programs, but it will not work properly (and can
17422347Spsteven result in the total loss of the old system programs -- beware!) if the
17522347Spstinstallation procedure itself did not work properly.
17622347Spst
17722347Spst	OPIE is NOT supported software. We don't promise to support you or
17822347Spsteven to acknowledge your mail, but we are interested in bug reports and are
17922347Spstreasonable folks. We also have an interest in seeing OPIE work on as many
18022347Spstsystems as we can. However, if your system doesn't meet the basic requirements
18122347Spstfor OPIE, this will probably require an unreasonable amount of effort.
18222347Spst
18322347Spst	The best bug reports include a diagnosis of the problem and a fix. 
18422347SpstYour bug report can still be valuable if you can at least diagnose what the 
18522347Spstproblem is. If you just tell us "it doesn't work," then we won't be able to
18622347Spstdo anything to help you.
18722347Spst
18822347Spst	We've received a number of bug reports from people that look
18922347Spstinteresting, only to find when we try to follow up on them that the user
19022347Spsteither has an invalid return address or never bothered to respond to our
19122347Spstfollowup. Please make sure that bug reports you send us have an electronic
19222347Spstmail address that we can reply to somewhere in them (if necessary, just
19322347Spstput it in the message body). If we send you a response and you are unable
19422347Spstto invest the time to work with us to solve the problem, please tell us --
19522347Spstfew things are more irritating than when someone sends us information
19622347Spstabout a bug that we'd like to fix and then is never heard from again.
19722347Spst
19822347Spst	We try to respond to all properly submitted bug reports. Improperly
19922347Spstsubmitted bug reports will be responded to only if we have time left after
20022347Spstresponding to properly submitted bug reports. We deliberately ignore bug
20122347Spst"reports" sent to mailing lists or USENET news groups instead of or before
20222347Spstour bug report address. At the least, the latter practice is lacking in
20322347Spstcourtesy.
20422347Spst
20522347Spst	The file BUG-REPORT contains our bug reporting form. Please use it
20622347Spstand follow the submission instructions in that file. We are going to switch
20722347Spstto machine-parsed bug report processing sometime in the near future to make
20822347Spstit easier to coordinate bug hunting.
20922347Spst
21022347SpstGotchas
21122347Spst=======
21222347Spst
21322347Spst	While an almost universal "feature", most people remain unaware that
21422347Spstan intruder can log into a system, then log in again by running the "login"
21522347Spstcommand from a shell. Because the second login is from the local host, the
21622347Spstutmp entry will not show a remote login host anymore. The OPIE replacement
21722347Spstfor /bin/login currently carries on this behavior for compatibility reasons.
21822347SpstIf you would like to prevent this from happening, you should change the
21922347Spstpermissions of /bin/login to 0100, thus preventing unprivileged users from
22022347Spstexecuting it. This fix should work on non-OPIE /bin/login programs as well.
22122347Spst
22222347Spst	On 4.3BSDish systems, the supplied /bin/login replacement obtains
22322347Spstthe terminal type for the console comes from the console line in the /etc/ttys
22422347Spstfile. Several systems contain a default entry in this file that specifies the
22522347Spstconsole terminal type as "unknown". This is probably not what you want.
22622347Spst
22722347Spst	The OPIE FTP daemon responds with two 530 error messages if you have 
22822347Spstnot yet logged in and execute a command that will also do a PORT request. This 
22922347Spstis a feature, not a bug, as the FTP client is really sending the server two 
23022347Spstcommands (for instance, a PORT and a LIST if you tell your BSD FTP client to do
23122347Spsta DIR command) and the server is responding to each of them with an error. The
23222347Spststock BSD FTP daemon doesn't check the PORT commands to see if you are logged 
23322347Spstin, so you would only get one error message. This change should not break any
23422347Spststandards-compliant FTP client, but there are a number of brain-damaged GUI
23522347Spstclients that have a track record for not dealing gracefully with any server
23622347Spstother than the stock BSD one.
23722347Spst
23822347Spst	The /etc/opieaccess transition mechanism is, by definition, a security
23922347Spsthole in the OPIE software because an attacker could use it to circumvent the
24022347Spstrequirement for OPIE authentication. You should compile the software with
24122347Spstsupport for this file disabled unless you absolutely cannot use the software
24222347Spstwithout it because of your environment. If you do use this support for
24322347Spsttransition purposes, you should move people to OTP authentication as quickly
24422347Spstas possible and rebuild and reinstall OPIE with this transition support
24522347Spstdisabled so that you won't have a lurking security hole.
24622347Spst
24722347Spst        If this wasn't already clear, do not let your sequence number fall
24822347Spstbelow about ten. If your sequence number reaches zero, your OTP sequence
24922347Spstcan only be reset by the superuser. System administrators should make this
25022347Spstcaveat known to their users.
25122347Spst
25222347Spst	On Solaris 2.x systems (and possibly others) running NIS+, users
25322347Spstshould run keylogin(1) manually after login because opielogin(1) does not
25422347Spstdo that automatically like the system login(1) program.
25522347Spst
25622347Spst	There are reports that some versions of GNU C Compiler (GCC)
25722347Spst(when installed on some systems) use their own termios(4) instead of
25822347Spstthe system's termios(4).  This can cause problems.  If you are having
25922347Spstcompilation problems that seem to relate to termios and you are using
26022347SpstGCC, you should probably verify that it is using the system's
26122347Spsttermios(4) and not some internal-to-GCC termios(4).  One report
26222347Spstindicates that Sun's C compiler works fine with SunOS 4.1.3/4.1.4 on
26322347SpstSPARC, but that some version of GCC on the same system has this
26422347Spsttermios(4) problem.  We haven't reproduced these problems ourselves
26522347Spstand hence aren't sure what is happening, but we pass this along for
26622347Spstyour information. (This may have something to do with the use of GNU
26722347Spstlibc)
26822347Spst
26922347Spst	If a user has a valid entry in the opiekeys database but has an
27022347Spstasterisk in their traditional password entry, they will not be able to
27122347Spstlog in via opielogin, but opielogin will decrement their sequence number
27222347Spstif a valid response is received.
27322347Spst
27422347Spst        On some systems, the OPIE login program does not always display
27522347Spsta "login:" prompt the first time. We think that this has something to do
27622347Spstwith the telnet daemon on those systems. (This is common on SunOS) You should
27722347Spstbe able to fix this by upgrading to the latest version of telnetd.
27822347Spst
27922347Spst	The standard HPUX compiler is severely drain bamaged. One of the
28022347Spstworst parts is that it sometimes won't grok a symbol definition with forward
28122347Spstslashes in them properly and can choke badly on the definition of the key
28222347Spstfile's location. If this happens to you, install and use GCC. (This problem
28322347Spstmay or may not also come up with the optional HP ANSI C compiler -- we don't
28422347Spstknow for sure what compilers have this problem).
28522347Spst
28622347Spst	As of OPIE 2.2, the seed is converted to lower case and its length is
28722347Spstchecked in order to comply with the OTP specification. If any of your users
28822347Spsthave seeds that use capital letters or are too long, they need to run the OPIE
28922347Spst2.2 opiepasswd program to re-initialize their sequence to one with a different
29022347Spstseed.
29122347Spst
29222347Spst	opielogin is a replacement for /bin/login. It is NOT an OPIE "shell."
29322347SpstYou can use it as one, but don't be surprised if it doesn't behave the way
29422347Spstyou expect. An OPIE "shell" is on the TODO list.
29522347Spst
29622347Spst	Clients that use opiegen() will automatically send a re-initialization
29722347Spstextended response if the sequence number falls below ten. If the server does
29822347Spstnot support this, the user will need to log in using opiekey and reset his
29922347Spstsequence manually (using opiepasswd).
30022347Spst
30122347SpstGripes
30222347Spst======
30322347Spst
30422347Spst	Is it too much to ask that certain OS vendors just do the right thing
30522347Spstand not fix what isn't broken? (Look at all the ifdefs in the OPIE code and
30622347Spstthe answer is clear)
30722347Spst
30822347SpstCredits
30922347Spst=======
31022347Spst
31122347Spst	First and foremost credit goes to Phil Karn, Neil M. Haller, and John
31222347SpstS. Walden of Bellcore for creating the S/Key Version 1 software distribution
31322347Spstand for making its source code freely available to the public. Without their
31422347Spstwork, OPIE would not exist. Neil has also invested a good amount of his time 
31522347Spstin the development of a standard for One-Time Passwords so that packages like
31622347SpstOPIE can interoperate.
31722347Spst
31822347Spst	The first NRL OPIE distribution included modifications made primarily 
31922347Spstby Dan McDonald of the U.S. Naval Research Laboratory (NRL) during March 1994.
32022347SpstThe 2nd NRL OPIE distribution, which has a number of improvements in areas
32122347Spstsuch as portability of software and ease of installation, is primarily the
32222347Spstwork of Ran Atkinson and Craig Metz. Other NRL contributors include Brian 
32322347SpstAdamson, Steve Batsell, Preston Mullen, Bao Phan, Jim Ramsey, and Georg Thomas.
32422347Spst
32522347Spst	Some of version 2.2 was developed at NRL and released as a work in
32622347Spstprogress. Most of the release version was developed by Craig Metz (also of
32722347SpstNRL), others at The Inner Net, and contributors from the Internet community.
32822347SpstVersions beyond 2.2 were developed outside NRL, so don't blame them if they
32922347Spstdon't work (But please credit them when it does. Without the NRL effort, there
33022347Spstwouldn't be an OPIE).
33122347Spst
33222347Spst	We would like to also thank everyone who helped us by by beta testing,
33322347Spstreporting bugs, suggesting improvements, and/or sending us patches. We
33422347Spstappreciate your contributions -- they have helped to make OPIE more of a
33522347Spstcommunity effort. These contributors include:
33622347Spst
33722347Spst	Mowgli Assor
33822347Spst	Lawrie Brown
33922347Spst	Axel Grewe
34022347Spst	"Hobbit"
34122347Spst	Darren Hosking
34222347Spst	Martijn Koster
34322347Spst	Osamu Kurati
34422347Spst	Ayamura Kikuchi
34522347Spst	Ikuo Nakagawa
34622347Spst	Angelo Neri
34722347Spst	D. Jason Penney
34822347Spst	John Perkins
34922347Spst	Jim Simmons
35022347Spst	Werner Wiethege
35122347Spst	Wietse Venema
35222347Spst
35322347Spst	OPIE development at NRL was sponsored by the Information Security
35422347SpstProgram Office (PD 71E), U.S. Space and Naval Warfare Systems Command, Crystal
35522347SpstCity, Virginia.
35622347Spst
35722347Spst	If you have problems with OPIE, please follow the instructions under
35822347Spst"If OPIE Doesn't Work." Under NO circumstances should you send trouble
35922347Spstreports directly to the authors or contributors.
36022347Spst
36122347SpstTrademarks
36222347Spst==========
36322347SpstS/Key is a trademark of Bell Communications Research (Bellcore).
36422347SpstUNIX is a trademark of X/Open.
36522347SpstNRL is a trademark of the U. S. Naval Research Laboratory.
36622347Spst
36722347SpstAll other trademarks are trademarks of their respective owners.
36822347Spst
36922347SpstThe term "OPIE" is in the public domain and hence cannot be legally 
37022347Spsttrademarked by anyone.
37122347Spst
37222347SpstCopyrights
37322347Spst==========
37422347Spst%%% portions-copyright-cmetz
37522347SpstPortions of this software are Copyright 1996 by Craig Metz, All Rights
37622347SpstReserved. The Inner Net License Version 2 applies to these portions of
37722347Spstthe software.
37822347SpstYou should have received a copy of the license with this software. If
37922347Spstyou didn't get a copy, you may request one from <license@inner.net>.
38022347Spst
38122347SpstPortions of this software are Copyright 1995 by Randall Atkinson and Dan
38222347SpstMcDonald, All Rights Reserved. All Rights under this copyright are assigned
38322347Spstto the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and
38422347SpstLicense Agreement applies to this software.
38522347Spst
38622347SpstPortions of this software are copyright 1980-1990 Regents of the
38722347SpstUniversity of California, all rights reserved. The Berkeley Software
38822347SpstLicense Agreement specifies the terms and conditions for redistribution.
38922347Spst
39022347SpstPortions of this software are copyright 1990 Bell Communications Research
39122347Spst(Bellcore), all rights reserved.
392