[3197] in Kerberos

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

Re: S/Key and Kerberos

daemon@ATHENA.MIT.EDU (Jeffrey I. Schiller)
Thu Apr 28 18:21:00 1994

Date: Thu, 28 Apr 94 18:03:40 EST
From: jis@MIT.EDU (Jeffrey I. Schiller)
To: marc@cam.ov.com (Marc Horowitz)
Cc: kerberos@MIT.EDU
Reply-To: jis@MIT.EDU

> >>      I looked into this with one of the folks here who initially
> >> worked on S/Key, and we determined that you basically can't do it.
> 
> I don't know if he's paying attention, but Jeff Schiller at MIT has a
> hack to use S/Key with kerberos.  I remember thinking it was clever,
> but I don't remember what the hack was.

Yep, I'm here. Here is how my design works:

Warning: This design uses Public Key Cryptography, but can be 
implemented via RSAREF.

You have a new service (called skrbd at the moment) that has a database 
of principals and associated S/Key entries (what is normally stored on e 
host). [You establish these via a (yet to be designed) Kerberos 
authenticated protocol which uses the "change_password" instance]. There 
is one well known public key for the skrbd service. The corresponding 
private key is stored securely on the host that has the skrbd. The other 
secret that skrbd needs is the Kerberos DES key for krbtgt.[LOCALREALM].

The client starts the protocol by fetching the public key from the skrbd 
server and the S/Key challenge for the user who is proposing to login.
In the schematic below I represent the "User" who is remote from the 
"Client" which is the machine to which the User wants to login and have 
Kerberos tickets instantiated for. Keep in mind that we assume that an 
attacker may be along either the path User <--> Client or the Path 
Client <--> skrbd (or Client <--> Server, but we won't talk about that 
here).

User   --> Client               UserName
Client --> skrbd                UserName
skrbd  --> Client               PublicKey (Kp), S/Key challenge
Client --> User                 S/Key challenge

The client then generates a random DES key (DK). This key along with the 
proper S/Key response is sent to skrbd encrypted in the PublicKey.

User   --> Client              S/Key One-Time Password
Client --> skrbd               {S/Key One-Time password, DES Key (DK)}Kp

skrbd verifies if the supplied One-Time password is correct. Obviously 
if it isn't an error condition is signalled. If the password is correct 
then skrbd constructs a traditional Kerberos Ticket Granting Ticket. 
However rather then supplying this back to the Client workstation 
encrypted in the user's regular password, it is encrypted in the 
randomly chosen DES Key (DK) which the Client still has.

skrbd  --> Client               {T,Kc,s}DK

At this point the "normal" Kerberos protocol ensues.

Notes:

1) skrbd does *not* need to run on the same server as the KDC. All it 
needs to know is the DES key of the local realm's ticket granting 
service. The host running skrbd does need to be protected because if any 
of its secrets are compromised an attacker can inpersonate any user. 
However restoring security after a compromise only requires changing the 
skrbd Public/Private key and the Kerberos ticket granting service key. 
This is not a trivial cleanup operation, however you do *not* have to 
require the whole realm to get new regular passwords (not even a new 
S/Key database needs to be provided because it is not confidential).

2) The Client <--> skrbd path is vulnerable to an active attacker unless 
the Client has out of band knowledge of the skrbd Public Key.

3) The Client <--> User path is vulnerable to an active attacker. This 
is a fundamental problem of S/Key itself. It can be mitigated if the end 
user knows which S/Key challenge number will next be asked and is wary 
of challenges that have too low a number [You need to understand how 
S/Key works to grock this].

Comments?

                        -Jeff

P.S. Please cc me directly on responses. Although I receive the Kerberos 
mailing list I am often too busy to catch all the traffic on it.

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