[228] in Kerberos_V5_Development

home help back first fref pref prev next nref lref last post

Smartcards

daemon@ATHENA.MIT.EDU (Jeffrey I. Schiller)
Fri Apr 20 19:42:39 1990

Date: Fri, 20 Apr 90 19:41:45 -0400
From: Jeffrey I. Schiller <jis@MIT.EDU>
To: bcn@CS.WASHINGTON.EDU
Cc: krbdev@ATHENA.MIT.EDU, geer@CRL.DEC.COM, lstans@SANDIA.GOV
In-Reply-To: Clifford Neuman's message of Fri, 20 Apr 90 10:42:51 -0700 <9004201742.AA00219@n1dmm.cs.washington.edu>
	I suspect that the SmartCard type you are referring  to is the
product available  from Security  Dynamics, which  is of the  kind you
described.

	I spent some time thinking  about how to  do this. The problem
isn't in the human  time delay  (the   card changes relatively  slowly
compared to human response time), but instead  it is the fact that the
clock on the card can drift. In the timesharing situation this problem
can be addressed as follows:

	The  system keeps track  of  the "seed" used  for  the  number
generation  of the card (and thus  in theory can   compute what number
should  be displayed as a   function  of time  t0, seed initialization
time, and  the current time).  It  also keeps track   of a drift value
which is a frequency offset of where the card tends  to be relative to
true tick,  and a phase   offset, which  is the  known time  offset as
measured when the card was  last used.  Finally you  keep track of the
time the card was last used.

	Basically  when a user  attempts to  login with  the card, you
compute the expected value given the known offset and drift value. You
then compute a set of values that are "around" the expected value. The
more time  that has gone by since  the card was   last used,  the more
values you have to put into the acceptable set. When  a number (in the
acceptable set) is typed in, you use that  value to correct the offset
error and drift values in the systems database.

	Without modest modification to the initial ticket transaction,
it is difficult  to provide  the  feedback to the  system about  which
value was successful (so the database can be kept up  to date). What I
have come  up with  involves  a new field to be  added  to the initial
ticket request which  represents a requested "time shift"  value. When
you first attempt to get a ticket you  specify time shift value 0, the
default, which results in a TGT being  encrypted in the expected value
on  the  card (possibly mixed   with a  fixed  password for additional
security).  If this cannot be decrypted (because of clock drift on the
card) you ask for  either value 1  or  -1 and try again. Basically the
client code hunts around with differing values of times shift until it
is  successful, or  until  the server  returns  a "time   shift error"
response which implies that an  unacceptable time shift value has been
requested. The range of acceptable time shift values that the kerberos
server will accept depends on how long it has  been since the card was
successfully used  (which is a measure of  how uncertain its displayed
value may be).

	The server keeps track of the time  shift values requested and
caches the last one requested  in some short  term memory (ie. a table
indexed by principal id that is not kept for more then a few minutes).
When a successful  APPLICATION request  (ie. use of  the TGT) comes in
from the same location,  the  kerberos  server updates its database to
indicate a successful  "login" and uses  the value of   the last "time
shift" value  requested to   determine the necessary offset  and phase
adjustments to store about the card (and the info can  be removed from
the short term cache).

	Comments?

			-Jeff

home help back first fref pref prev next nref lref last post