v 0.1 gpk@onramp.net 3/27/99

I Intro

   This document covers the use of the modified "chat" program and its 
adjunct "chatchat" to login using the Security Dynamics SecurID card
on a linux system.

   This set of files comprises a modified version of the chat program
(the one distributed with ppp-2.3.5) and a new program called chatchat
that allows you to supply data from the keyboard to the chat program.

   The SecurID card generates passwords that have a lifetime of one
minute and are used as a first layer in dial up security. The only
software I know of for this card is for windows, so I wrote my own. 
This software allows you to type in the time-sensitive password right
when your chat script is asked to supply the passcode by the remote
system. 


II How It Works

   This version of chat his an additional command that can be put into
its options that says "Don't reply with this string. Open this pipe,
read the contents, and reply with that instead." Chatchat creates a
pipe and lets you type your passcode into it, then chat picks that up
and sends it out just as though the passcode was hardcoded into the
options. 


III Installation 

  I've provided intel binaries and source code the the modified chat 
program and the chatchat program. I'll recommend that you copy the 
chat.c program into your ppp-2.3.5/chat directory (save your original 
chat.c program first!) and re-make it using the Makefile that comes 
with chat. Copy the new chat somewhere into your path. (On my system
chat lives in /usr/sbin/chat, so I've copied the modified one into 
/usr/sbin/chat.new and changed my dial in script to call chat.new
instead of chat.

  Second, compile chatchat.c and install it somewhere in your path:

 gcc -g -o chatchat chatchat.c
 cp chatchat /usr/sbin

 Third, modify your chat script to use the chatchat program. Mine
looks something like this:


                       --------------------

#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
# use atm0 to turn down the speaker volume on my sportster x2 voice modem
# gpk 11/2/97

exec /usr/sbin/chat.new  -V -v                       \
         ABORT           "BUSY"                     \
     ABORT              "NO DIAL TONE"      \
         ABORT           "NO ANSWER"                \
         TIMEOUT         50                             \
         ""             "atm0"                  \
         OK              ATDT$TELEPHONE                  \
        CONNECT         ''       \
    name:           \\da0xxxxxx  \
    word:           @/var/tmp/p \
        compress.       ''


                     -----------------------

 This is a standard chat script:

* abort if the modem is busy, you don't get a dial tone, no one
  answers, or 50 seconds elapses.

* use atm0 to mute the modem

* dial the modem, when it connects, wait to be asked for account name

* when we see "name:" prompt, delay briefly then respond with your 
  account name (fill in your account name)

Now we get to the new stuff:

* when we see "word:" in the password prompt, instead of responding
  with "@/var/tmp/p", the modified chat program will open the pipe 
  /var/tmp/p, read the passcode out of there, and send it

* when we see "compress." (the last word before ppp starts), reply
  with nothing. The script ends and we start ppp.

Note:

* Make sure there is some whitespace between the filename and the \.


IV Usage

   To use this install the modified chat and chatchat programs, and
modify your chat script similar to the above. Before you dial in,
start that chatchat program giving it the same pipe as in your config
file. In the above case:

chatchat /var/tmp/p

   Wait until you have one or two tick marks left on your card's
current number, then start your dial up process that eventually calls
chat. When chat goes to open and read the pipe, chatchat will prompt:


type PIN into SecurID card and 
 enter resulting passcode:

   At that point, type your PIN number into your Securid card, press
the diamond, and type the resulting numbers in as your passcode. If
you've left the -V -v options on your chat command you'll see
everything so out, otherwise it works silently.

   If you type the number wrong or run out of time, the server will 
respond with an authentication failure. In that case you will have to 
hang up and start again. I don't know how to build a conditional script 
that says either expect "compress" next, but if you see "name:" again, 
do this instead. 


V Additional Information

  You can obtain additional information about chat and ppp from the
man pages for chat and pppd, as well as the PPP-HOWTO.

