Update for OPIE use in CURRENT.

Tested against:	"make lint" using the docproj port.
This commit is contained in:
Mark Murray 2001-09-19 14:05:27 +00:00
parent 92d186764c
commit 1d36303c9d
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=10756

View file

@ -1,7 +1,7 @@
<!--
The FreeBSD Documentation Project
$FreeBSD: doc/en_US.ISO8859-1/books/handbook/security/chapter.sgml,v 1.80 2001/09/13 20:06:28 logo Exp $
$FreeBSD: doc/en_US.ISO8859-1/books/handbook/security/chapter.sgml,v 1.81 2001/09/13 22:11:10 logo Exp $
-->
<chapter id="security">
@ -984,73 +984,82 @@ lrwxr-xr-x 1 root wheel 15 Mar 19 06:56 libcrypt_p.a -&gt; libdescrypt_p.a</s
growing number of other operating systems. S/Key is a registered
trademark of Bell Communications Research, Inc.</para>
<para>From version 5.0 of FreeBSD, S/Key has been replaced with
the functionally equivalent OPIE (Onetime Passwords In
Everything). OPIE uses the MD5 hash by default.</para>
<para>There are three different sorts of passwords which we will talk
about in the discussion below. The first is your usual Unix-style or
Kerberos password; we will call this a <quote>Unix password</quote>.
The second sort is the one-time password which is generated by the
S/Key <command>key</command> program and accepted by the
<command>keyinit</command> program and the login prompt; we will
S/Key <command>key</command> program or the OPIE
<command>opiekey</command> program and accepted by the
<command>keyinit</command> or <command>opiepasswd</command> programs
and the login prompt; we will
call this a <quote>one-time password</quote>. The final sort of
password is the secret password which you give to the
<command>key</command> program (and sometimes the
<command>keyinit</command> program) which it uses to generate
<command>key</command>/<command>opiekey</command> programs (and
sometimes the
<command>keyinit</command>/<command>opiepasswd</command> programs)
which it uses to generate
one-time passwords; we will call it a <quote>secret password</quote>
or just unqualified <quote>password</quote>.</para>
<para>The secret password does not have anything to do with your Unix
password; they can be the same but this is not recommended. S/Key
secret passwords are not limited to 8 characters like Unix passwords,
they can be as long as you like. Passwords of six or seven word
long phrases are fairly common. For the most part, the S/Key system
operates completely independently of the Unix password
system.</para>
and OPIE secret passwords are not limited to 8 characters like Unix
passwords, they can be as long as you like. Passwords of six or
seven word long phrases are fairly common. For the most part, the
S/Key or OPIE system operates completely independently of the Unix
password system.</para>
<para>Besides the password, there are two other pieces of data that
are important to S/Key. One is what is known as the
are important to S/Key and OPIE. One is what is known as the
<quote>seed</quote> or <quote>key</quote>, consisting of two letters
and five digits. The other is what is called the <quote>iteration
count</quote>, a number between 1 and 100. S/Key creates the
one-time password by concatenating the seed and the secret password,
then applying the MD4 hash as many times as specified by the
then applying the MD4/MD5 hash as many times as specified by the
iteration count and turning the result into six short English words.
These six English words are your one-time password. The
<command>login</command> and <command>su</command> programs keep
authentication system (primarily PAM) keeps
track of the last one-time password used, and the user is
authenticated if the hash of the user-provided password is equal to
the previous password. Because a one-way hash is used it is
impossible to generate future one-time passwords if a successfully
used password is captured; the iteration count is decremented after
each successful login to keep the user and the login program in
sync. When the iteration count gets down to 1, S/Key must be
sync. When the iteration count gets down to 1, S/Key and OPIE must be
reinitialized.</para>
<para>There are four programs involved in the S/Key system which we
will discuss below. The <command>key</command> program accepts an
iteration count, a seed, and a secret password, and generates a
one-time password. The <command>keyinit</command> program is used
to initialize S/Key, and to change passwords, iteration counts, or
seeds; it takes either a secret password, or an iteration count,
seed, and one-time password. The <command>keyinfo</command> program
examines the <filename>/etc/skeykeys</filename> file and prints out
the invoking user's current iteration count and seed. Finally, the
<command>login</command> and <command>su</command> programs contain
the necessary logic to accept S/Key one-time passwords for
authentication. The <command>login</command> program is also
capable of disallowing the use of Unix passwords on connections
coming from specified addresses.</para>
<para>There are three programs involved in each system
which we will discuss below. The <command>key</command> and
<command>opiekey</command> programs accept an iteration
count, a seed, and a secret password, and generate a one-time
password or or a consecutive list of one-time passwords. The
<command>keyinit</command> and <command>opiepasswd</command>
programs are used to initialize S/Key and OPIE respectively,
and to change passwords, iteration counts, or seeds; they
take either a secret passphrase, or an iteration count,
seed, and one-time password. The <command>keyinfo</command>
and <command>opieinfo</command> programs examine the
relevant credentials files (<filename>/etc/skeykeys</filename> or
<filename>/etc/opiekeys</filename>) and print out the invoking user's
current iteration count and seed.</para>
<para>There are four different sorts of operations we will cover. The
first is using the <command>keyinit</command> program over a secure
connection to set up S/Key for the first time, or to change your
password or seed. The second operation is using the
<command>keyinit</command> program over an insecure connection, in
conjunction with the <command>key</command> program over a secure
connection, to do the same. The third is using the
<command>key</command> program to log in over an insecure
connection. The fourth is using the <command>key</command> program
to generate a number of keys which can be written down or printed
out to carry with you when going to some location without secure
connections to anywhere.</para>
first is using <command>keyinit</command> or
<command>opiepasswd</command> over a secure connection to set up
one-time-passwords for the first time, or to change your password
or seed. The second operation is using <command>keyinit</command>
or <command>opiepasswd</command> over an insecure connection, in
conjunction with <command>key</command> or <command>opiekey</command>
over a secure connection, to do the same. The third is using
<command>key</command>/<command>opiekey</command> to log in over
an insecure connection. The fourth is using <command>key</command>
or <command>opiekey</command> to generate a number of keys which
can be written down or printed out to carry with you when going to
some location without secure connections to anywhere.</para>
<sect2>
<title>Secure Connection Initialization</title>
@ -1071,12 +1080,28 @@ Again secret password:
ID unfurl s/key is 99 to17757
DEFY CLUB PRO NASH LACE SOFT</screen>
<para>At the <prompt>Enter secret password:</prompt> prompt, you
<para>For OPIE, <command>opiepasswd</command> is used instead:</para>
<screen>&prompt.user; <userinput>opiepasswd -c</userinput>
[grimreaper] ~ $ opiepasswd -f -c
Adding unfurl:
Only use this method from the console; NEVER from remote. If you are using
telnet, xterm, or a dial-in, type ^C now or exit with no password.
Then run opiepasswd without the -c parameter.
Using MD5 to compute responses.
Enter new secret pass phrase:
Again new secret pass phrase:
ID unfurl OTP key is 499 to4268
MOS MALL GOAT ARM AVID COED
</screen>
<para>At the <prompt>Enter new secret pass phrase:</prompt> or
<prompt>Enter secret password:</prompt> prompts, you
should enter a password or phrase. Remember, this is not the
password that you will use to login with, this is used to generate
your one-time login keys. The <quote>ID</quote> line gives the
parameters of your particular S/Key instance; your login name, the
iteration count, and seed. When logging in with S/Key, the system
parameters of your particular instance; your login name, the
iteration count, and seed. When logging in the system
will remember these parameters and present them back to you so you
do not have to remember them. The last line gives the particular
one-time password which corresponds to those parameters and your
@ -1087,10 +1112,10 @@ DEFY CLUB PRO NASH LACE SOFT</screen>
<sect2>
<title>Insecure Connection Initialization</title>
<para>To initialize S/Key or change your secret password over an
<para>To initialize change your secret password over an
insecure connection, you will need to already have a secure
connection to some place where you can run the
<command>key</command> program; this might be in the form of a
connection to some place where you can run <command>key</command>
or <command>opiekey</command>; this might be in the form of a
desk accessory on a Macintosh, or a shell prompt on a machine you
trust. You will also need to make up an iteration count (100 is
probably a good value), and you may make up your own seed or use a
@ -1105,7 +1130,26 @@ Reminder you need the 6 English words from the key command.
Enter sequence count from 1 to 9999: <userinput>100</userinput>
Enter new key [default to17759]:
s/key 100 to 17759
s/key access password:</screen>
s/key access password:
s/key access password:<userinput>CURE MIKE BANE HIM RACY GORE</userinput>
</screen>
<para>For OPIE, you need to use <command>opiepasswd</command>:</para>
<screen>&prompt.user; <userinput>opiepasswd</userinput>
Updating unfurl:
You need the response from an OTP generator.
Old secret pass phrase:
otp-md5 498 to4268 ext
Response: GAME GAG WELT OUT DOWN CHAT
New secret pass phrase:
otp-md5 499 to4269
Response: LINE PAP MILK NELL BUOY TROY
ID mark OTP key is 499 gr4269
LINE PAP MILK NELL BUOY TROY
</screen>
<para>To accept the default seed (which the
<command>keyinit</command> program confusingly calls a
@ -1118,22 +1162,23 @@ Reminder - Do not use this program while logged in via telnet or rlogin.
Enter secret password: <userinput>&lt;secret password&gt;</userinput>
CURE MIKE BANE HIM RACY GORE</screen>
<para>Or for OPIE:</para>
<screen>&prompt.user; <userinput>opiekey 498 to4268</userinput>
Using the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
GAME GAG WELT OUT DOWN CHAT
</screen>
<para>Now switch back over to the insecure connection, and copy the
one-time password generated by <command>key</command> over to the
<command>keyinit</command> program:</para>
<screen>s/key access password:<userinput>CURE MIKE BANE HIM RACY GORE</userinput>
ID unfurl s/key is 100 to17759
CURE MIKE BANE HIM RACY GORE</screen>
<para>The rest of the description from the previous section applies
here as well.</para>
one-time password generated over to the relevant program.</para>
</sect2>
<sect2>
<title>Generating a Single one-time Password</title>
<para>Once you have initialized S/Key, when you login you will be
<para>Once you have initialized S/Key or OPIE, when you login you will be
presented with a prompt like this:</para>
<screen>&prompt.user; <userinput>telnet example.com</userinput>
@ -1147,15 +1192,24 @@ login: <userinput>&lt;username&gt;</userinput>
s/key 97 fw13894
Password: </screen>
<para>As a side note, the S/Key prompt has a useful feature
<Para>Or for OPIE:</para>
<screen>&prompt.user; <userinput>telnet example.com</userinput>
Trying 10.0.0.1...
Connected to example.com
Escape character is '^]'.
FreeBSD/i386 (example.com) (ttypa)
login: <userinput>&lt;username&gt;</userinput>
otp-md5 498 gr4269 ext
Password: </screen>
<para>As a side note, the S/Key and OPIE prompts have a useful feature
(not shown here): if you press return at the password prompt, the
login program will turn echo on, so you can see what you are
prompter will turn echo on, so you can see what you are
typing. This can be extremely useful if you are attempting to
type in an S/Key by hand, such as from a printout. Also, if this
machine were configured to disallow Unix passwords over a
connection from the source machine, the prompt would have also included
the annotation <literal>(s/key required)</literal>, indicating
that only S/Key one-time passwords will be accepted.</para>
type in a password by hand, such as from a printout.</para>
<indexterm><primary>MS-DOS</primary></indexterm>
<indexterm><primary>Windows</primary></indexterm>
@ -1163,12 +1217,12 @@ Password: </screen>
<para>At this point you need to generate your one-time password to
answer this login prompt. This must be done on a trusted system
that you can run the <command>key</command> command on. (There
are versions of the <command>key</command> program for MS-DOS,
Windows and MacOS as well.) The <command>key</command> program
needs both the iteration count and the seed as command line
options. You can cut-and-paste these right from the login prompt
on the machine that you are logging in to.</para>
that you can run <command>key</command> or
<command>opiekey</command> on. (There are versions of these for DOS,
Windows and MacOS as well.) They need both the iteration count and
the seed as command line options. You can cut-and-paste these
right from the login prompt on the machine that you are logging
in to.</para>
<para>On the trusted system:</para>
@ -1177,6 +1231,14 @@ Reminder - Do not use this program while logged in via telnet or rlogin.
Enter secret password:
WELD LIP ACTS ENDS ME HAAG</screen>
<para>For OPIE:</para>
<screen>&prompt.user; <userinput>opiekey 498 to4268</userinput>
Using the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
GAME GAG WELT OUT DOWN CHAT</screen>
<para>Now that you have your one-time password you can continue
logging in:</para>
@ -1187,12 +1249,6 @@ s/key 97 fw13894
Password [echo on]: WELD LIP ACTS ENDS ME HAAG
Last login: Tue Mar 21 11:56:41 from 10.0.0.2 ... </screen>
<para>This is the easiest mechanism <emphasis>if</emphasis> you have
a trusted machine. There is a Java S/Key <command>key</command>
applet, <ulink
url="http://www.cs.umd.edu/~harry/jotp/src.html">The Java OTP
Calculator</ulink>, that you can download and run locally on any
Java supporting browser.</para>
</sect2>
<sect2>