|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T U
Length: 112892 (0x1b8fc)
Types: TextFile
Notes: Uncompressed file
└─⟦4f9d7c866⟧ Bits:30007245 EUUGD6: Sikkerheds distributionen
└─⟦d7a0ed7c6⟧ »./papers/Kerberos/techplan.txt.Z«
└─⟦this⟧
PROJECT ATHENA TECHNICAL PLAN
OWL
Section E.2.1
Kerberos Authentication and Authorization System
by S. P. Miller, B. C. Neuman, J. I. Schiller, and J. H. Saltzer
@g<Kerberos>; also spelled Cerberus. "n. The watch dog of Hades,
whose duty it was to guard the entranceMagainst whom or what does
not clearly appear; . . . is known to have had three heads. . ."
MAmbrose Bierce, The Enlarged Devil's Dictionary
This document describes the assumptions, short and long term goals, and
system model for a network authentication system, named Kerberos, for the
Athena environment. An appendix specifies the detailed design and protocols
to support these goals, and a set of UNIX(UNIX is a trademark of AT&T Bell
Laboratories.) manual pages, not included here, describes an implementation
for Berkeley 4.3 UNIX of both user interface commands and also library
interfaces for clients and servers. The next section of the technical plan,
E.2.2, describes a set of network applications that use Kerberos for
authentication.
DEFINITIONS
Accounting Measuring resource usage attributable to a particular client.
Authentication Verifying the claimed identity of a client or service.
Authorization Allowing an authenticated client to use a particular service.
Client A program that makes use of a network service, on behalf of a
user.
KDBM Kerberos Data Base Manager, a system that maintains and
provides an interface for update of authoritative Kerberos
data consisting of principal identifiers and private keys for
both clients and services.
Kerberos Aside from the 3-headed dog guarding Hades, the name given to
the Athena authentication service, the protocol used by that
service, and the libraries used to invoke the authentication
and authorization services.
KKDS Kerberos Key Distribution Service, a network service that
supplies tickets and temporary session keys; or Kerberos Key
Distribution Server, an instance of that service.
Principal A uniquely named client or server instance that participates
in a network communication.
Principal identifier
The name used to uniquely identify each different client and
server.
Private key An encryption key between a principal and the KKDS,
distributed outside the system, with a long lifetime;
Seal To encipher a record containing several fields, in such a way
that the fields cannot be individually replaced without either
knowledge of the key or leaving evidence of tampering.
Session key A temporary encryption key used between two principals, with a
lifetime limited to the duration of a single communications
"session".
Ticket A record that authenticates a client to a service; it contains
the client's identity, a session key, and a timestamp, all of
which is sealed by encryption using the service's private key.
The term "principal," being somewhat formal, is replaced with the word
"user" in this document wherever the context permits that usage without
confusion.
1. Introduction to Kerberos
PURPOSE OF THIS PLAN
Most conventional time-sharing systems require a prospective user to
identify him or herself and to authenticate that identity before using its
services. In an environment consisting of a network that connects prospective
clients with services, a network service has a corresponding need to identify
and authenticate its clients. When the client is a user of a time-sharing
system, one approach is for the service to trust the authentication that was
performed by the time-sharing system. For example, the network applications
lpr and rcp provided with Berkeley 4.3 UNIX trust the user's time-sharing
system to reliably authenticate its clients.
In contrast with the time-sharing system, in which a protection wall
separates the operating system from its users, a workstation is under the
complete control of its user, to the extent that the user can run a private
version of the operating system, or even replace the machine itself. As a
result, a network service cannot rely on the integrity of the workstation
operating system when it (the network service) performs authentication.
This plan extends the conventional notions of authentication, authorization,
and accounting to the network environment with untrusted workstations. It
establishes a trusted third-party service named Kerberos that can perform
authentication to the mutual satisfaction of both clients and services. The
authentication approach allows for integration with authorization and
accounting facilities. The resulting design is also applicable to a mixed
time-sharing/network environment in which a network service is not willing to
rely on the authentication performed by the client's time-sharing system.
GOALS OF KERBEROS
Authentication
Authentication is not an end in itself, but rather a tool to support both
integrity and authorization. Its basic purpose is to prevent fraudulent
connection requests. The goal of Kerberos is to support both one-way and
mutual authentication of principals, to the granularity of at least an
individual user and specific service instance.
Authorization
Authentication can imply a coarse-grained authorizationMfor example, some
services may allow anyone who can be reliably authenticated by the local
Kerberos to use the service. In cases where more selective authorization is
needed, the goal of Kerberos is to allow different services to implement
different authorization models, and to allow those authorization models to
assume that authentication of user identities is reliable.
Accounting
Given an authenticated client, the goal of accounting is to support either
quotas charged against the client (to limit consumption), e.g. disk quota,
and/or charges based on consumption, e.g. $.01 per page printed. The goal of
Kerberos is to permit modular attachment of an integrated, secure, reliable
accounting system.
REQUIREMENT EXAMPLES
Some examples of network services best illustrate the requirements of user
authentication and authorization:
- PrintingMOnly members of a certain group may use a printer that
belongs to that group, an expensive and relatively scarce shared
resource. On a more public printer, users may be billed for
printing, and may have a priori limits on their use.
- Remote File AccessMOnly designated users may perform operations on a
given remote file system or virtual disk. Different users may have
different permissions allowed, e.g. only the owner may write, while
others may read.
- Remote LoginMOnly authorized users may rlogin to centrally-managed
hosts, or to a private workstation.
- Window systemMThe user of a network-driven display may want to limit
the ability of others to create or manipulate windows on that
display.
- MailMOnly the addressee should be able to pick up his or her own
mail at the Post Office.
- Service Management serviceMUsers may be authorized to create,
modify, or destroy records that control various services. For
example, system administrators may have unlimited privileges, while
the teaching assistant for a subject may only be allowed to
authorize use of the libraries belonging to the subject. A user may
be able to add or delete his or her own name on a public mailing
list, but not to affect any other user's record in that list.
Other Requirements Assumed by the Design
- The authentication requirement is two-way. That is, the service
learns with confidence who the client is, and the client, if it
wishes, can be certain that the correct service is being used.
- No cleartext passwords should be transmitted over the net;
- No cleartext passwords should be stored on servers;
- At clients, cleartext passwords should be handled for the shortest
possible time and then destroyed.
- The design should confine any authentication compromises to the
current session or the current user.
- Authentication has a limited lifetime, of the order of a single
login session, but may be re-used within that lifetime;
- Network authentication should go on largely unnoticed in normal
cases; the traditional model of password-mediated login should be
the only point that the user notices that authentication is
occurring.
- The design should minimize the effort needed to modify network
services that previously used other means of authentication.
Future requirement possibilities
The following are not currently considered essential, but may be
re-evaluated as experience increases:
- Forwarding of authentications, so that one service can do part of a
job, then invoke another service to complete it, under the
credentials of the original client.
- Revocation of authentication or authorization within a login
session.
2. Assumptions Surrounding Authentication
ASSUMED PHYSICAL AND OPERATIONAL SECURITY ENVIRONMENT
From a security perspective, the environment will include:
- both public and private workstations. Public workstations are in
areas with minimal physical security; private workstations are under
physical and administrative control of individuals with no
responsibility to central network administration.
- a campus network without link encryption, composed of local nets of
varying types linked by gateways to a backbone net; the local nets
are widely dispersed physically and thus are very vulnerable to
security attacks; the backbone and gateways are in locked closets
and therefore are moderately secure.
- centrally-operated servers in locked rooms, assumed to operate under
moderate physical security with known legitimate software;
- a small number of centrally-operated servers, such as the Kerberos
authentication server, that operate under considerable physical
security.
RELEVANT THREATS AND RISKS
The environment is not appropriate for sensitive data or high risk
operations, such as bank transactions, classified government data, student
grades, controlling dangerous experiments, and such. The risks are primarily
uncontrolled use of resources by unauthorized parties, violations of the
integrity of either the system's or user's resources, and wholesale violations
of privacy such as casual browsing through personal files.
The primary security threats result from the potential of a workstation user
to forge the identity of another user in order to gain unauthorized access to
data and/or resources. Since a workstation, including its operating system
and network interface, is under the complete control of the user, the user can
attempt to masquerade as another user or even as another host. In lieu of the
authentication provided by a centrally administered time sharing system, an
authentication service is required to counter such attempts.
Privacy of data being transported across the network is currently a low
priority, except where it is necessary to prevent subsequent violations of
integrity, e.g. the transmission of passwords. When the cost of providing
communications privacy can be significantly reduced, it will attain higher
priority.
Traffic analysis and covert channels are not an issue.
ASSUMPTIONS ABOUT ENCRYPTION
The private-key Data Encryption Standard (DES), when used in
single-encryption mode, is assumed to provide enough security for campus
applications that cryptanalysis is not a significant threat.
DES implementations are available in both hardware and software. Because
system-integrated hardware implementations are not yet sufficiently low in
cost, it is assumed that software implementations will be used for Kerberos
except optionally at a small number of sites (Key Distribution Servers) that
do a lot of encryption.
DES implementations may not be exported from the U.S. without special
license. For this reason, the Kerberos design makes the cryptosystem a
modular, replaceable unit. The initial implementation of Kerberos is based on
DES.
GLOBAL CLOCK AVAILABILITY
The design of Kerberos assumes that system clocks are loosely
synchronizedMwithin a few minutesMon all machines that run Kerberos-
authenticated services, and that this global time is similarly available to
all workstations that use Kerberos. We do not assume that all workstations
correctly maintain the time, but in order to request authentication tickets, a
workstation is required to maintain its clock within the allowable margin.
Timeservers provide the official time, and other systems synchronize
periodically, for example, at system boot time.
SERVICE MANAGEMENT SYSTEM
This plan connects with the Athena Service Management System in a several
ways. The Athena Service Management System provides authoritative information
for Kerberos as well as the related naming system.
3. Naming
This plan assumes a means for numbering network hosts and service ports so
that clients may request connection to services, including Kerberos itself. If
a naming system for services is also available, it is important that the
service names can be congruent with Kerberos principal identifiers (defined in
the next paragraph) that are used to authenticate services. In addition,
Kerberos clients can make use of such a name service to locate Kerberos
service itself. The design of Kerberos is modular; it can operate (somewhat
less conveniently) in the absence of name services, and it does not require
that the name service itself be secure. A general network name service,
Hesiod, is also an Athena development, described in another Technical Plan
section.
In addition to such network host and service name spaces, Kerberos itself
defines a name space of authenticated users and services. For use in
authentication the following simple naming model applies.
Unifying Names
There isn't much difference between a client and a service. In fact, a
service that wants to use an authorization server must be able to authenticate
itself to the authorization server in the same manner a client would
authenticate itself to a service. For this reason both client and service
names share the same structure so that they can be interchanged as necessary.
A principal identifier consists of three components:
- a principal name
- an instance name
- a realm name
all three of which are strings of upper and lower case letters and numbers.
Each different client and service has a unique principal name, assigned by
negotiation with the manager of Kerberos.
The instance name is a label that permits the possibility that the same
client or service may exist in several forms that require distinct
authentication; it is useful for both clients and services. In the case of
services, an instance may specify the host that provides the service. For
example, the rlogin service on host menelaus is distinct from the rlogin
service on host tartaros. For client principals the instance can be useful
when one wishes to have different identifiers for different privileges. For
example, JLSmith operating as a class-administrator may have different
privileges from JLSmith operating as a normal user. The usual case is that
users operate using a name with the null instance.
To allow independently administered sites, such as Athena, the M.I.T.
administrative services, and the M.I.T. Laboratory for Computer Science, to
inter-operate using Kerberos, a realm name is defined to identify each such
independent Kerberos site. Thus a {principal name, instance name } is
qualified by the realm name to which it belongs, and is unique only within
that realm. Kerberos does not specify any constraints on the form of the
realm name; it can be defined to be an ARPA internet domain name which is
itself a qualified hierarchical name. That choice makes it possible to use
the ARPA internet domain name resolution system to locate the Kerberos
authentication service for the realm.
As described below, authentication is accomplished by giving out tickets.
Tickets are labeled with the name of the realm for the service for which they
are issued. Principal identifiers included in tickets include a non-null
realm only if it is different from the realm for which the ticket was issued.
Workstations and service hosts have network names and network addresses, for
example those specified by the ARPA internet domain name system.
Each application protocol using the authentication service binds Kerberos
{name, instance} tuples for services to addresses using whatever means its
chooses. It may use, for example, the internet domain name service or the
Hesiod service and cluster location system.
Specifying names
The primary interface where the user will have to be concerned with names is
when "logging in" to a workstation. Normally the user would simply enter his
or her principal name, which might be the user's last name. Optionally, the
user might specify an instance; if not specified, a null instance would be
used as default. The realm is normally supplied by the workstation as a
default, but the user might override that default, in effect requesting
authentication by a different Kerberos server.
The principal name and the instance name are separated by a period (".").
If no "." is included in the name, it is assumed that the instance is null.
In order to include a "." as part of the principal name or the instance name,
it must be quoted with a backslash.
In order to specify authentication in a realm different from the default for
this workstation, a user must specify the realm preceded by an at-sign ("@").
The realm itself may contain periods without the use of a backslash. As an
example, consider the user who desires authentication through the LCS.MIT.EDU
realm using a system management instance. That user might log in as follows:
Kerberos login: RLSmith.sysadmin@LCS.MIT.EDU
Local Names
The namespace used for Kerberos authentication and authorization is
independent of any particular host's means of referring to users or services,
and any operating system specified conventions. Each host may translate the
Kerberos principal identifiers to its own local user names as required. Local
translation provides a convenient means of supporting proxiesMfor example,
Kerberos name {RLSmith,""} might translate to guest on a host where RLSmith
does not have an account. Berkeley Unix applications that are modified to use
Kerberos authentication generally support only the identity mapping from a
Kerberos principal identifier to the same Unix login name.
4. The Kerberos Authentication Model
In response to the requirements and assumptions sketched above, this section
describes the Athena Kerberos model for authentication and authorization, with
provision for accounting. This model is based on the Needham and Schroeder
key distribution protocols, modified with the addition of timestamps. Their
paper (listed in the References section) describes the basic protocol; a
tutorial paper by Voydock and Kent provides a broader introduction to the
topic and explains the timestamp modifications.
The basic approach for Kerberos authentication is the following: to use a
service, a client must supply a ticket previously obtained from Kerberos. A
ticket for a service is a string of bits with the property that it has been
enciphered using the private key for that service. That private key is known
only to the service itself and to Kerberos. As a result of that property, the
service can be confident that any information found inside the ticket
originated from Kerberos. As will be seen, Kerberos will have placed the
identity of the client inside the ticket, so the service that receives a
ticket has a Kerberos-authenticated opinion of the identity of the client. To
help ensure that one user does not steal and reuse another user's tickets, the
client accompanies the ticket with an authenticator, explained later. (In
addition, tickets expire after a specified lifetime, which is usually on the
order of several hours.)
The client obtains a ticket by sending a message to Kerberos naming the
principal identifier of the desired service, the principal identifier of the
(alleged) client, and mentioning the current time of day. Anyone could send
such a message or intercept its response; that response, however, is usable
only to the client named in the original request, because Kerberos seals the
response by enciphering it in the private key of that client. The response
contains three parts: the ticket (which itself is further sealed in the
private key of the service), a newly-minted key for use in this client-server
session, and a timestamp issued by the Kerberos server.
A legitimate user will be able to unseal this message, obtain the ticket and
session key, and verify that the timestamp is current (thereby preventing
replays of old responses). No other user, without the named user's private
key, can correctly decrypt the reply to produce the sealed tickets and
corresponding session key.
Once a client obtains a ticket and sends it to a service, and the service
has identified the client, further use of the fact of authentication is
specific to the protocol of the service. One application might use the
session key (Kerberos seals a copy in the ticket) for secure end-to-end
encryption, while at the other extreme, another application might throw
everything but the source network address away and assume that all further
requests coming on the connection from this particular network address are
from the same user.
The authenticator mentioned above is a simple mechanism designed to
discourage attempts at unauthorized reuse ("replay") of tickets by someone who
notices a ticket going by on the network and makes a copy. The authenticator
consists of, among other things, the client's principal identifier, network
address, and the current time of day all sealed with the key that Kerberos
minted for this session. After the service decrypts the ticket, it uses the
session key found in that ticket to decrypt the authenticator. If the
principal identifier of the authenticator matches the one in the ticket, the
network address in the authenticator is the same as the one that sent the
packet, and the time in the authenticator is within the last few minutes, the
authenticator is probably not a replay, and the service accepts the associated
ticket. It is because authenticators expire in a short time that all the
clients and servers in a Kerberos realm need to have their clocks loosely
synchronized.
If a private key is compromised, another party may successfully pose as the
principal until the private key is changed and all tickets previously issued
under it expire. If a session key is compromised, another party may
successfully pose as the principal until the previously issued tickets expire.
One more mechanism rounds out the complete Kerberos scenario. If a client
uses several services, a distinct ticket is needed for each. Not all the
services to be used may be known at the beginning of a login session, but that
is when the user provides the password used as a private key to decrypt
tickets. To avoid storing the private key in the workstation memory for the
entire duration of the session, at login time the user obtains a single
ticket, useful only for a service provided by Kerberos itself, the
ticket-granting service. Whenever the client goes back to Kerberos for an
additional, service-specific ticket, the response is actually enciphered in
the session key of the ticket-granting service. Thus the private key is
needed only for the initial ticket, and the workstation software can
immediately destroy its copy of that private key after that single use.
AUTHENTICATION SCENARIOS
Here, at the next level of detail, are more complete scenarios of
authentication using Kerberos. These scenarios omit several options described
in the next section. The reader not interested in security protocols can skip
this and the next section without missing anything needed later. The reader
interested in full detail will also want to consult the complete protocol
specification (in the Appendix to this section), which includes provision for
errors, key versions, and protocol versions, and which manipulates timestamps
in ways not apparent in this simplified description.
Scenario I. Getting the First Ticket.
1. The user establishes a principal name N and a private
client
key, K , through some channel outside the system, for example,
client
by walking up to the system administrator, and presenting his or her
identification card. The private key K becomes the
client
authenticator between the user and the Kerberos Key Distribution
Server. The Kerberos Authentication Server stores the user's
private key encrypted under its own master key, K . For the
master
purpose of campus security, a one-way encrypted 8-character secret
password serves as the user's private key. (One-way encryption of
the original password serves the function of assuring that if the
user's Kerberos key is somehow compromised it does not reveal the
original password, which the user may also be using on other
systems.)
2. The user initiates a workstation session by invoking a login
command, giving as one argument the principal name of the client,
N .
client
User M> WS N
client
The workstation knows the name of its default realm, R. The login
command makes a request to the Kerberos Key Distribution Server for
realm R, asking for a session key and a ticket for the Kerberos
ticket-granting service.
WS M> KKDS {N @R, N , T }
R client tgs current
where N is the name of the ticket-granting service, and T
tgs current
is the current date and time.
This request crosses the network in cleartext to the KKDS for realm
R.
3. The KKDS looks up N and N , finding private keys
client tgs
K and K . It creates a new temporary session key,
client tgs
K , for use in this session, and prepares a ticket for
temporary
tgs
the ticket-granting service:
K
Ticket : {K , N , N ,T , WS, Lifetime} tgs
tgs temporary client tgs current
tgs
K
where the notation {X} y means that message X is enciphered using
encryption key K . The value WS is the network address of the
y
requesting workstation. The value Lifetime is the ticket lifetime
chosen by the KKDS. An explanation of the rules for the ticket
lifetime appears in the next section.
4. The KKDS sends a response packet:
K
KKDS M> WS {K , N , Lifetime, T , Ticket } client
R temporary tgs current tgs
tgs
Note that authentication has not yet occurredMa sealed response
containing a further sealed ticket comes back even if the user has
misrepresented his or her identity.
5. At this point, the workstation asks the user for the password.
User M> WS <password>
and the workstation runs the password through the one-way encryption
algorithm to produce K . It immediately destroys its copy of
client
the password.
6. The workstation decrypts the response from KKDS using K
R client
and checks its authenticity by comparing T and N in the
current tgs
response with the corresponding values in the initial request. If
the response passes this test, the user knows for certain that the
response was prepared by the Kerberos Key Distribution Service,
because that is the only other entity in the universe that knows
K . The response is current rather than a replay of a response
client
from yesterday, because it contains T . A fraudulent user
current
finds that the response (including the sealed ticket) is a worthless
set of random bits because it is enciphered with the unknown private
key of the legitimate user.
The legitimate user stashes away K and Ticket for
temporary tgs
tgs
later use. The workstation destroys its copy of the user's private
key K , because it will not be needed again during this login
client
session.
Scenario II. Using a Kerberos-Mediated Service
To use a service S, the user must have a ticket Ticket and the
service
corresponding temporary session key for that service, K .
temporary
service
Scenario I traced the acquisition of one such ticket. Assume for the moment
that the client now has a ticket and temporary session key for service
S. (Scenario III, later, demonstrates how the client can get additional
tickets without having to again present the user's password.)
1. To use service S, the client first prepares an authenticator.
K
Authenticator : {N , T WS} temporary
service client current service
where WS is the workstation's network address, T is a current
current
timestamp, and K is the temporary key that came with
temporary
service
ticket Ticket .
service
Now the workstation begins the protocol for the target service
S. The protocol has one difference from the corresponding,
non-Kerberos protocol for the same service: it is prefaced with the
authenticator and the ticket.
WS M> Service {Authenticator , Ticket }
service service
2. When the target service receives this request, it first
decrypts the ticket using its private key, K . Since the only
service
two entities in the universe that know K are the service
service
itself and Kerberos, the service can be confident that if the ticket
deciphers properly it must have been originally prepared by
Kerberos. The test of whether or not the ticket deciphered properly
is whether or not the next step works. A correct ticket
decipherment exposes the temporary session key, the client's name,
and the timestamp. The temporary session key allows the service to
decrypt the authenticator, exposing its data. If the client's name
and network address in the ticket and authenticator match, the
ticket's timestamp has not expired, the network address in the
authenticator matches that in the incoming packet, and the
authenticator timestamp is sufficiently recent, then the request is
taken as legitimate. The service knows for certain the identity of
the requesting client and the service and the client now share a
temporary secret key. This authentication remains valid for the
lifetime of the client-service connection.
3. Finally, the application protocol begins, typically by
transferring an application request from the client to the server,
perhaps at the end of the packet that contained the ticket.
If a client has a ticket for some service, that client may reuse the ticket
as often as desired, until it expires. Each reuse requires constructing a new
authenticator, one that contains a current time stamp.
Scenario III. Getting Additional Tickets
If a client wants to use a service for which a ticket wasn't obtained as
part of the initial encounter with Kerberos, the client invokes the Kerberos
Ticket-Granting Service. The Kerberos Ticket-Granting Service is simply
another protocol for talking to the Kerberos Authentication Service, one that
makes use of the ticket-granting ticket passed in the initial encounter,
rather than the user's private key, to establish authenticity.
1. The client first prepares an authenticator exactly as before,
though with a current timestamp and using the temporary session key
that came with the ticket-granting ticket.
K
Authenticator : {N , T , WS} temporary
tgs client current tgs
Now the workstation sends the authenticator, the previously obtained
ticket for the ticket-granting service, and the name of the service
for which a ticket is wanted to the ticket granting service.
WS M> KTGS {Authenticator , Ticket , N @R}
R tgs tgs service
2. The ticket-granting service goes through the same procedure as
does any other Kerberos-mediated service, first decrypting the
ticket with its private key, and using the temporary session key
found inside to decrypt the authenticator. If all the authenticity
checks verify correctly, the ticket-granting service knows for
certain the identity of the requesting client. In addition, it has
recovered the temporary session key which is known only to it and
the client; this session key can be used to securely return a ticket
to the client. KTGS looks up the service name N in its
service
database and finds the private key, K , for that service. It
service
now prepares a ticket:
K
Ticket : {K , N , T , Lifetime} service
service temporary client current
service
where K is a new temporary session key for use
temporary
service
between this client and the service; it then sends the response:
K
KTGS M> WS {K , N , T , Ticket } temporary
R temporary service current service tgs
service
Note that the form of this response is identical to the form of the
original response of the KKDS when it returned the ticket granting
ticket.
3. The client, knowing the value of K , decrypts the
temporary
tgs
response, verifies its authenticity as before, and stashes away the
ticket for the target service.
Scenario III emphasizes that the ticket-granting service is simply another
example of a Kerberos-mediated network service. The form of the messages in
step one of scenarios II and III is identical, once one realizes that the last
field in the second message of scenario III is the application request
mentioned in step three of Scenario II.
SOME OPTIONS
As mentioned, the three scenarios above follow what is expected to be the
most common form of use of Kerberos authentication. There are several
optional possibilities available for applications that use Kerberos:
- The examples specified no values for the instance name of either the
client or the service; those values are optional and default to the
null instance.
- An application client may include in the sealed authenticator an
application authenticator, such as a checksum of data to be sent.
Calculating that checksum is, of course, feasible only if all the
data to be transmitted is known at connect time. As an alternative,
an application could devise a commit message that appears at the end
of the protocol, and that includes a checksum sealed with the
session key.
- If the application requires mutual authentication, it sets an option
in its service request, and places no application protocol
information in the initial packet. The application server responds
by adding one to the workstation's request timestamp, encrypting the
result using the session key, and sending the encrypted result back
to the client. Once the client receives and decrypts this handshake
response, it can be certain that the server is authentic, and the
application protocol may safely begin.
- The application server may retain state (timestamps) about previous
use to aid detecting replay attempts.
- The application may use the application authenticator and the
session key to continue a session in which every message is both
completely encrypted and authenticated.
- An application may request a ticket with a specified lifetime; if
the requested lifetime is less than the default ticket lifetime and
less than that specified in the Kerberos database for the service,
Kerberos issues a ticket with the shorter lifetime.
APPLICATION AND USER INTERFACE
For the most part, Kerberos is designed to operate under the covers, without
separate actions by the user. For network applications that make use of
Kerberos authentication there is a library of Kerberos functions that simplify
the obtaining of authentication. The primary interface consists of three
generic user commands and two generic subroutines that are used by
applications.
- User command kinit: This command asks the user for a password,
obtains a ticket-granting ticket, and destroys the password as soon
as it has stored the ticket-granting ticket and associated session
key. Note that the function of this command may be combined with
the login command.
- User command klist: Displays the list of tickets obtained so far in
this login session.
- User command kdestroy: Destroys all tickets. The function of this
command may be combined with the logout command.
- Subroutine make_application_request(): Used by an application to get
a copy of, or if necessary obtain, a ticket and session key for a
named service, to prepare an authenticator, and return the result to
the application for inclusion in the initial service request.
- Subroutine read_application_request: Used by an application server
to validate a presented ticket and authenticator. It returns the
identity found in the ticket and a judgement about the authenticity
of that identity.
Note that the actual names, arguments, and parameters of these generic
commands and subroutines are implementation-dependent. The Kerberos library
implemented for UNIX, for example, shortens some names, combines kinit and
kdestroy with login and logout, contains about a dozen additional supporting
subroutines for the convenience of applications that are using optional
features, and includes conventions about where to store tickets in the UNIX
environment.
REALMS
Kerberos provides for partitioning authentication information according to
administrative divisions. All users need not be registered with a single
organization. In addition, organizations that share authentication need not
trust one another. A realm is an authentication domain. It is that part of
the namespace of authenticable users and services that relies on a separately
administered authentication server (or set of servers sharing the same
database) for their authenticity. A service can accept credentials produced
by an authentication server only for a realm of which it is a member. Both
users and services may belong to multiple realms. Realm names within a
network need to be unique. The earlier-mentioned convention of naming realms
with ARPA Internet domain names has the side effect of guaranteeing
uniqueness.
Realms can be either independent or semi-independent.
Independent Realms
Some users will want to access services from realms with which they aren't
registered. Some services will be willing to provide services to users from
other realms. These two requirements lead to a mechanism to authenticate
users across realms.
This mechanism is provided through the cooperation of the administrators of
the two realms involved. The Kerberos for each such realm is a client of the
Kerberos in the other, and shares a secret key for a cross-realm
ticket-granting service. This mutual client relationship between the Kerberos
services allows a client of the Kerberos in one realm to authenticate itself
to the Kerberos in the other realm even though no information is shared
between the client and the other Kerberos service. Once a client has
authenticated itself to the Kerberos in the new realm, that client can request
tickets for services issued by that Kerberos.
As an example, consider a user in the LCS realm who wants to access a server
in the Athena realm. The user must first authenticate with the LCS Kerberos
using the initial authentication protocol. Once this authentication is done,
the user can request a ticket for the Athena Kerberos. The user presents this
ticket to the Athena Kerberos which accepts the user's identity since the
Athena Kerberos is a client of the LCS Kerberos. The user can then request a
ticket for an Athena service and the Athena Kerberos will comply. However,
the ticket that the Athena Kerberos issues indicates that the user is from the
LCS realm. Thus, all the ticket says is that the Athena Kerberos acknowledges
that the user has been authenticated by the LCS Kerberos. The client then
presents the new ticket to the end service which decides whether or not to
accept it, based on its own authorization policy.
Semi-independent Realms
The realm mechanism can also be used to provide authentication services for
off-campus independent living groups. The problem is that the ILGs must have
a way of authenticating users to local services even when their connection to
the campus-based facilities fails. Yet, at the same time, there cannot be a
copy of the Kerberos for the Athena realm in the ILG since there would be no
guarantee of its security. Instead, each ILG has its own realm.
Local services accept authentication by either realm. Most services on
campus, however, accept authentication only from the Athena realm. When
communication with the campus network is operational, ILG users authenticate
themselves to the Athena Kerberos, then use the protocol described above to
authenticate themselves to the ILG Kerberos. In this way ILG users have to
provide only one password (the one required by the Athena Kerberos) to use
both local and campus services. Users on campus who want to use services
located at the ILG will also be able to use this mechanism.
If the connection between the ILG and main campus ceases to function, ILG
users authenticate themselves directly to the ILG Kerberos and are thus be
able to use local services. This local authentication does not allow them to
use all the services on campus, but since they are disconnected it doesn't
matter.
It is suggested that users choose different keys for the Athena Kerberos and
the ILG Kerberos since the ILG Kerberos may be much easier to compromise. We
do not plan to enforce such a suggestion, however.
More Complex Realm Relationships
The realm mechanism of Kerberos is not fully developed. In particular, the
protocol does not provide the target service with detailed information about
the provenance of tickets that have been authenticated in other realms. More
work is required on security implications of cross-realm authentication, so
that a service examining a ticket can know exactly whom it is trusting for
authentication.
5. Management of Kerberos Data
The database underlying Kerberos contains a record for each user identity
and for each service (that is, for each principal) known within that Kerberos
realm. In order to allow security of the data to be the primary consideration
when making operational tradeoffs about management of a Kerberos service, the
information that Kerberos stores is the minimum required to accomplish and
manage authentication. Thus, although a Kerberos record is a kind of per-user
record, it does not contain information such as telephone number and office
address, which are not used by Kerberos for authentication. Nevertheless, if
there are a large number of users, the Kerberos database can still be quite
large and it requires some tools for its management. The data management
interface of Kerberos is designed to be used in two ways:
- By a set of manual tools manually from a system manager's
workstation. This approach is suitable for management of a Kerberos
realm that has a small number of users.
- By an automated Service Management System. This approach is
intended for managing a system with thousands of users.
In both cases, the management of the Kerberos service is accomplished
remotely via the network, using Kerberos-authenticated secure connections.
The information stored for each principal that Kerberos is prepared to
authenticate is the following:
- The principal identifier, including instance identifier.
- The private key (password) for this principal.
- The expiration date for this identity.
- The date that this record was last modified.
- Identity of the principal who last modified this record.
- Maximum lifetime of tickets to be given to this principal.
- Attributes (unused).
- Implementation data, not visible externally:
* Key version and master key version.
* Pointer to old values of this record.
One piece of information in each record, the private key, must remain
secret. Kerberos reversibly enciphers the private key fields, using a master
key for this Key Distribution Service. Encipherment of the private key fields
allows a manager to remove copies of the database from the machine and it also
allows the Kerberos master to send copies over the network to slave servers
without going to extraordinary lengths to protect the privacy of those copies.
Kerberos does not store the master key in the database; it manages that one
key separately.
KERBEROS DATABASE REPLICATION
The Kerberos database for a realm is managed and updated by a single
Kerberos Database Management server (the KDBM); authentication requests are
handled by one or more Kerberos Key Distribution Servers (KKDS's), each of
which contains an identical complete copy of the Kerberos database. Since all
KKDS's have identical data any KKDS can handle any authentication request; a
client uses a name service to obtain a list of KKDS's, and chooses the one
that is nearest in terms of network topology. The separation of
responsibility between KDBM and KKDS's does not imply that several distinct
host computers are required; in the simplest deployment, one host can run both
a KDBM server and a KKDS. The purpose of separation is to simplify update of
the database while permitting replicated KKDS's for improved availability and
performance. (Since many other network services may depend on it, continuous
availability of Key Distribution Service is essential; continuous availability
of update service is not nearly so important.)
With respect to the Kerberos database, all operations done by a KKDS are
"read-only," so the only coordination among KKDS's and the KDBM is for the
KKDS's to receive updates of the information when changes are made at the
KDBM. Again for simplicity, the KDBM issues KKDS updates occasionally (e.g.,
a few times per day) and by copying the entire database. Complete copying
eliminates the need for considerably more complex update procedures that would
maintain update queues at the KDBM and recovery procedures at the KKDS's.
Because updates occur on a batch basis, the KKDS's may have data that is
slightly stale; update delay of a few hours is acceptable for this
application.
The KDBM copies its database to the KKDS's using a Kerberos-protected
protocol. First, using the Kerberos mutual authentication protocol, a secure
encryption key is exchanged between the KDBM site and a given KKDS site. The
KDBM creates a checkpoint of the data to be transferred, and calculates its
(strong) checksum, seeding the checksum with the session key. Then it
transfers the actual data using a conventional file transfer protocol. Recall
that the data does not include any cleartext passwords or other particularly
sensitive information. However, its integrity must be assured. The receiving
KKDS temporarily stores all the transferred data, then recalculates the
checksum of the received data using the secret session key. It then compares
the calculated checksum with the original checksum, which was separately
transmitted using the secure Kerberos protocol. If and only if the two
checksums match, the newly received data updates the KKDS database.
UPDATES TO THE KERBEROS DATA BASE
Updates are done by an update protocol that runs between any authenticated
client at a workstation and the KDBM. If the KDBM is not accessible, updates
are temporarily not allowed.
There are several routine updates made to the Kerberos database.
1. adding a new user
2. a user changes a password
3. system manager changes a forgotten or compromised password
4. deactivating an old user
5. removing old user identities
In emergencies, a system manager can also tinker directly with raw Kerberos
data for repair and other extraordinary maintenance operations. Such
tinkering must be done by logging in directly on the host that runs the master
Kerberos service.
ADDING A NEW USER
Adding a new user to the Kerberos database is accomplished by invoking the
add-user message type of the Kerberos protocol, which requires that the user
doing the addition be a previously-added user of the system whose identity
appears in an add-user access control list maintained by the Kerberos master
system.
If an SMS is in use, a different approach is taken that is more suitable for
mass production. The intent of this different approach is that a user can
choose a principal identifier and register the chosen principal identifier and
associated password without actually involving a system manager. Each fall,
the SMS is primed with a list of potential new users (obtained from a list of
all registered students) including for each user a full name and a student
identification number. A prospective user walks up to an Athena workstation,
logs in as an unauthenticated user (the user identity "register", with
publicly-known password "athena", is used for this purpose) and interacts with
a user registration program that obtains from the user his or her full name,
student identification number, proposed principal identifier and proposed
password. The user registration program first connects to SMS to verify that
this user's full name and student identification number match one in the list
of as-yet-unregistered users. If so, it informs SMS of the principal
identifier that the user has chosen, and in turn receives an add-user session
key from SMS. The user registration program then opens an encrypted
connection with the master Kerberos service using the add-user session key.
It supplies the user's chosen principal identifier and password to Kerberos,
which checks to see that the principal identifier is not one already on record
(rejecting the request if it is) and then records it and the password. If the
transaction with Kerberos is successful, the user registration program
confirms the success with SMS, which then commits this registration
transaction.
This unsupervised registration scenario is a compromise that is only weakly
secure, because any one who knows another person's name and student
identification number can register as that person. There is some protection
against such an attack, however, because when the authentic person with that
identity attempts to register, the fraud will be discovered when both SMS and
Kerberos reject the second registration attempt. The legitimate user can then
appeal to a real system administrator, who can sort things out by forcing into
the Kerberos database a new password known only to the legitimate user.
USER-INITIATED PASSWORD CHANGE
The basic scenario for changing a password is that the user does it him or
herself by invoking the password-changing program at a workstation. This
program demands the old and new passwords, uses the old password to create a
completely encrypted session with the master Kerberos server, and sends the
new password on the encrypted connection. If the user has reason to believe
that the old password is so badly compromised that it is not safe to send the
new password this way, the user may appeal to the system manager to install a
new password.
SYSTEM-MANAGER-INITIATED PASSWORD CHANGE
Kerberos maintains an access control list, which consists of a list of
Kerberos principal identifiers of individuals who are authorized to act as
system manager. When a user reports that a password is forgotten or
compromised, the system manager opens an encrypted connection from the
manager's workstation to the Kerberos master server and runs a
password-installation protocol. This protocol requires that the invoker
appear in the system manager access control list.
USER DEACTIVATION
Kerberos maintains an expiration date and an activation flag for every
principal identity that it is prepared to authenticate. Kerberos always
rejects attempts to authenticate expired or inactive users, with an
appropriate error response. The purpose of deactivation is to provide a
simple means of avoiding accidental reuse of principal identifiers, which may
continue to appear in access control lists for some time after a user departs
from the scene.
There is a secure protocol message type by which the system manager can
deactivate or reactivate a principal identifier, or change its expiration
date.
REMOVING OLD USER IDENTITIES
Kerberos maintains a last-modified-date as part of each record of a
principal identity. Deactivation updates this date. One use of this date is
to allow a system manager to identify old identities that have not been in use
for a sufficient period (e.g., one year) that it is safe to remove them. A
secure protocol message allows an authorized system manager to remove any
specific inactive identity, and to remove all inactive identities that have
not been changed since a specified date. This operation is designed under the
assumption that it occurs rarely, perhaps two or three times a year, so the
only record of identities removed is in the Kerberos log.
KEEPING SYNCHRONIZED WITH SMS
If a Service Management System is in use, it maintains its own records of
registered and prospective users; those records are correlated with the
records of Kerberos by principal identifer. Since the principal identifier is
the only piece of duplicate information maintained, the only synchronization
problem is to insure that every principal identifier that appears in an SMS
record also appears in some Kerberos record, and vice-versa. User
registration, as described above, is the normal way of creating principal
identifiers, and if a user registration operation completes normally, both
records will match. Failures, or hand-tinkering, may unsynchronize these two
sets of records. No special tools are provided to deal with this problem; the
system manager, if trouble is suspected, may extract from Kerberos a list of
principal identifers to sort and compare with the corresponding list from SMS.
DATABASE BACKUP AND RELOAD
The Kerberos database is backed up by running a special backup program on
the master Kerberos server, which should be equipped with a private tape
drive. The Kerberos master key is not stored on the backup tape. A special
reload program is also available, although if the system is completely reset
the Kerberos master key must be reinstalled by hand. Reload of slave servers
is done by invoking the usual Master-Slave update procedure, which transfers a
complete copy of the database.
6. Authorization Model
The Kerberos authentication model provides only a certification of the
identity of a requesting client; by itself it provides no information as to
whether or not that client is actually authorized to use the service. There
are three forms in which authorization could be integrated with the Kerberos
authentication model:
- The Kerberos database could also contain authorization information
for each service, and issue service tickets only to authorized users
of each service.
- A separate authorization service could maintain authorization
information by keeping access lists for each service and allowing
the client to obtain sealed certification of list membership. The
client would present that certification, rather than a Kerberos
ticket, to the ultimate service.
- Each service could maintain its own authorization information, with
the optional help of a service that stores shared public lists and
provides certification of public list membership.
The first of these alternatives places the large, dynamically updated
authorization database in the midst of the small, slowly changing,
high-security encryption key database. Operational parameters such as primary
and secondary memory size, degree of replication, nature of backup, and
physical security must be chosen as a compromise between the requirements of
the two services. It also locks in one particular authorization model for all
applications.
The second alternative separates the authorization database from the
authentication database, thereby improving separation of administration and
making the authentication service simpler and smaller, which should make it
more reliable and easier to secure. But this alternative leads to an
extraordinarily complex (and therefore potentially fragile) collection of
interacting protocols among the client and the authentication, authorization,
and target services. It also creates a rendezvous problem, in that the client
must know which membership certification to request from the authorization
server.
The Kerberos authorization model is based on the principle that each service
knows best who its users should be and what form of authorization is
appropriate, so it adopts the third of these alternatives. This choice has
several advantages:
- Many services will have short, private lists of authorized users.
For example, the display server on a private workstation may have as
its list of authorized users only one entryMthe current user of the
workstationMand that user's identity is already known by the
workstation. (In addition, the identity of the user allowed to use
the display on a public workstation changes as often as someone logs
in.) By far the simplest way to manage that information is to place
it in the server. Completely private services (e.g., a dating
service exported from a private workstation) thus require no central
registration, yet can take advantage of Kerberos-quality
authentication and implement access control.
- Services that maintain their own lists (e.g., the display server) or
that do not require an access control list (e.g., a public library)
do not depend on availability of and network continuity to an
authorization service.
- Rendezvous is limited to getting the client together with the
service; the client does not need to figure out what kind of
authorization to request for this particular service.
- No one authorization model applies to all services; by making
authorization the responsibility of the server, the designer of the
service has the option of using a standard library authorization
model, or creating a different model that is better adapted to the
particular service it is offering.
- Since the amount of information storage required for authorization
information is proportional to the number of services offered,
storing and managing the authorization information at the service
scales up well. This scaling advantage is of particular interest
when one realizes that every workstation exports at least its
display service, and may export others. It is also administratively
preferable to have each service provide its own authorization list
storage, rather than burdening a public storehouse with this
responsibility.
- Administrative authority to set and change the authorization
information for a service tends to be automatically delegated to the
appropriate entityMthe administration of the service itself.
There is one significant disadvantage to requiring the service to do its own
authorization: Services that cannot depend on other network services (for
example, because they are single-threaded and should not block waiting for a
network reply) cannot make use of shared public access control lists.
AUTHORIZATION MECHANICS
A standard authorization model based on access control lists is provided,
and an authorization library package is available for incorporation into any
service that finds the standard model useful. Under this standard model, the
service takes the (known, authenticated) identity of the client and inquires
whether or not that client is a member of a named list. The access list
library package maintains any number of named lists in the local storage of
the server. A list may contain three kinds of names:
1. Kerberos-authenticable principal identifiers,
2. names of other local lists, and
3. names of shared, public access control lists.
The access list library undertakes a search of the named list, local
sublists stored at the service host, and shared, public lists. If the
client's identity is found in this search, the operation is authorized.
Rather than associating operation-specific permissions with access list
entries, the service maintains distinct, named access lists for each different
kind of operation.
The lists are maintained as simple ASCII text string files in a special
access list directory that is protected from modification except by
administrators of the target service. Their format allows, in simple cases,
maintenance by use of standard text editors, or in more complex cases,
automatic maintenance by the Athena Service Management System.
THE PUBLIC LIST SERVER
A public list server provides Kerberos-quality certifications that principal
identifier A is (or is not) in list B. The ability to use remote servers for
such a certification allows the possibility of shared, centrally managed
lists. The ability to use local lists allows the possibility of lists whose
contents are unknown to any central authority. The architecture allows that
these two possibilities can be mixed and matched in any way desired by the
implementer or manager of the host that offers the service. (The detailed
design of a public list service has not yet been undertaken. Issues such as
what action to take in the face of a cycle in a list, and management of very
large lists, have not yet been addressed.)
AUTHENTICATION/AUTHORIZATION SCENARIO WITH NAME SERVICE
A complete scenario for integrating name service, Kerberos, and
authorization is as follows (there are a lot of services flying around in this
discussionMthe one the client really wants to invoke is called the "desired
service"):
1. Assume for starters that each client (and service) knows the
internet address of a name service and the name of Kerberos. As
part of its initialization, the client invokes the name service to
determine the internet address of Kerberos. It also performs an
initial transaction with Kerberos to obtain a ticket-granting
ticket. Each service that cares about authorization has done the
same thing as part of its initialization.
2. The person exporting the desired service has previously
registered the name of that service with the name service. If this
step hasn't happened, it doesn't prevent use of the desired service,
but it does mean that the client has to invoke it by discovering and
using a host name and port number, rather than by name.
3. The user learns the name of a desired service. Learning may
happen one of any number of ways. Here are a few examples:
- A prospective user reads the name on a bulletin board.
- The user copies a program from a public place; the program has
the name buried in it.
- The name is embedded in a system-provided library program.
- The name is embedded in a class-provided library program.
- The user learns about the service name from a system staff
member.
4. The client invokes the Kerberos ticket-granting service,
requesting a ticket for the desired service name. If Kerberos has
never heard of the desired service, that doesn't cause the scenario
to abort; it may simply be that the desired service doesn't require
authentication.
5. The client invokes the name service to learn the host name and
port of the desired service. The client can cache this information
at its own risk, to allow future invocations of the desired service
without using the name service again. The name service provides a
time-to-live value for the information that gives the client a hint
about how long it is safe to cache it.
6. The client invokes the name service again, to transform the
host name of the desired service into an internet address.
7. The client invokes the desired service, presenting its Kerberos
ticket (if by now it has one) certifying the client's identity.
8. The desired service decides whether or not it wishes to deal
with this client. To decide, it may invoke the access list library,
giving the name of the client and the name of an access control
list. The access list library performs a recursive descent through
that list and any lists, local or remote, named in that list, trying
to verify list membership of the client.
Because the desired service is depending on the authenticity of the
certifications of the list membership service, each connection with a remote
list membership service must be initiated via Kerberos and the responses from
the service need to be integrity-assured. Integrity assurance is provided by
having the remote list membership service return a copy of the original
request, with a yes or no bit added, enciphered in the session key that the
invoker obtained at initial connection with the list membership service.
ACKNOWLEDGMENTS
Many people have provided ideas, or have been involved with the
implementation of this design. In addition to the authors of this document,
they include: John Ostlund, Mark Colan, Bob Baldwin, Dan Geer, Stan Zanarotti,
Bill Sommerfeld, John Kohl, Jim Aspnes, Chris Reed, and Brian Murphy. The
name "Kerberos" was suggested by Bill Bryant.
7. Appendix IMDesign Specifications
This section contains detailed design specifications for the current
implementation of Kerberos. It is of interest primarily to implementers.
7.1. Design
7.1.1. Conventions
The following conventions apply:
- encryption or decryption implies DES private key in a
modified(Modified to provide forward error propagation of a single
bit error in the ciphertext thru to the end of the resulting
cleartext. Refer to Voydock and Kent [17].) cipher-block-chaining
mode
- "{data}K " means that "data" is encrypted using "x"s DES key;
x
- all data to be encrypted is padded with trailing 0 bytes to an
integral multiple of 8 bytes;
- all references to session key imply a distinct random session key
valid only for that particular session;
- bit 0 refers to the least significant bit;
- all field sizes are expressed in numbers of 8-bit bytes, unless
otherwise stated, and whether or not the value is signed (s),
unsigned (u) or only printable ASCII, null terminated (a);
- strings are sequences of printable ASCII bytes, null terminated;
- all messages are self-framing, that is, do not depend on packet
boundaries to determine their extent;
- where not otherwise stated, name implies the local realm; similarly,
a null realm implies the local one;
- principal, indicated in the protocols by either subscript p or
principal, refers to the subject requesting authentication and/or
authorization, i.e either a user's or service's {name, instance}
pair.
- service, indicated in the protocols by either a subscript s or
service refers to the end service, object, or other user for which
authentication/authorization was requested. This is most often a
service's {name, instance} pair, but could also be any user's to
allow secure key distribution between two users.
Common fields used in messages
field size u,s,a description
------------------------------------------------------------------------------
version 1 u Protocol version number;
auth_msg_type 1 u Protocol message type and byte order;
= m_type << 1 + byte_order ;
m_type 7bits u Protocol message type;
byte_order 1bit u Byte order of sender;
name >=0 a Athena principal name (user or service);
instance >=0 a Athena principal instance (user or service);
realm >=0 a Authentication realm name;
group >=0 a Athena group name;
time_sec 4 u UTC timestamp, sec since 0000 GMT 1/1/70;
may also have direction encoded in msbit;
time_5ms 1 u rest of UTC timestamp, 5ms units;
lifetime 1 u valid ticket lifetime, 5 minute units;
key 8 u 64 bit encryption key;
kvno 1 u key version number;
n 1 u count of service entries;
address 4 Internet host address, IP format and order;
length 1 u length of a field, 0 - 255, bytes;
length_2 2 u length of a field, 0 - 65535, bytes;
length_4 4 u length of a field, 0 - 4,294,967,295, bytes;
exp_date 4 u UTC expiration date,
sec since 0000 GMT 1/1/1970;
direction 1bit u within an association,
zero if sending {addr, port } <
receiving {addr,port}, else one;
multiplex into msb of time_sec;
app_data n application specific data, arbitrary length;
checksum_4 4 u 4 byte checksum;
checksum_16 16 u 16 byte checksum;
flags 1 u bit-flags within ticket, set by Kerberos;
err_code 4 s Kerberos error code;
err_text >=0 a description of Kerberos error;
Network Representations
byte ordering The least significant bit of auth_msg_type will encode the
byte ordering for the transmitting host. LSB_FIRST, one,
implies least signigicant byte in lowest address, e.g. VAX and
IBM PC's. MSB_FIRST, zero, implies most significant byte in
lowest address, e.g. Sun 68000 and IBM RT's. The transmitter
of a message always transmits in natural host order, and marks
its byte ordering in auth_msg_type. The receiver, if
necessary, converts fields to its own byte ordering.
alignment to avoid possible incompatibilities between compiler alignment
rules, all protocol messages must be defined without use of
structures. All protocol messages have no holes for alignment.
Each field begins on the next byte boundary.
Protocol Message pattern
{ version, auth_msg_type, name , instance , realm , time_sec, cleartext,
p p p
ciphertext }
where unneeded parts are omitted.
The protocol message specifications should be read in increasing byte order
within the message as you read from left to right, with no holes.
7.1.2. KKDS
7.1.2.1. Protocol. All the Kerberos protocols described are layered on a UDP
datagram between the client and the KKDS. The client interface may retransmit
a request up to <AUTH_RETRY_MAX> times if a response is not received within
time interval <AUTH_RETRY_WAIT>. All protocol messages between a client and
the KKDS must be idempotent. To minimize retransmissions, all requests should
generate a response, either an auth_reply or an err_reply, even if the
response only implies failure.
auth_request = { version, auth_msg_type, name , instance , realm ,
p p p
time_sec ,
ws
lifetime , name , instance }
s s s
where
auth_msg_type = <AUTH_MSG_KDC_REQUEST>
The service requested is local to the realm managed by the
Kerberos receiving the request.
auth_reply = { version, auth_msg_type, name , instance , realm ,
p p p
time_sec ,
ws
exp_date , kvno , length_2, {cipher}K }
p p p
kvno
where
auth_msg_type = <AUTH_MSG_KDC_REPLY>
length_2 = length of cipher; zero if {name , instance } is
p p
unknown;
cipher =
{K , name , instance , realm , lifetime , kvno ,
session s s s s s
{ticket }K ,
s s
kvno
time_sec }
kkds
where
ticket = { flags, name , instance , realm , address ,
p p p p
K , lifetime, time_sec , name , instance }
session kkds s s
note:
the lifetime returned is the minimum of the principal's,
server's, and the lifetime requested.
err_reply = { version, auth_msg_type, name , instance , realm ,
p p p
time_sec , err_code, err_text }
ws
where
auth_msg_type = <AUTH_MSG_ERR_REPLY> ,
err_code = Kerberos error code, defined in prot.h ,
err_text = text string describing error.
7.1.2.2. Protocol Vulnerability.
- replay -- The timestamp serves to prevent replay attempts by
limiting the lifetime of the key. If the server retains all the
still valid timestamps for previous associations for the user, all
replay attempts can be prevented. The latter requires stable store
across process and machine crashes.
- modification -- The timestamps and name can serve as effective
integrity checks to detect modification to the packet. If the
ciphertext was changed or forged, with extremely high probability
the timestamp would no longer be valid, and the name in the ticket
and in the authenticator would not match.
7.1.2.3. Administrative Protocol. A set of protocols is required for
interaction between administrators, users, and the Kerberos Database Manager,
for example to create new principals and to change keys. These protocols are
not yet specified.
7.1.2.4. Authentication Database. Each Kerberos realm maintains an
independent set of databases. The following are represented:
- Private keys of clients and services; estimate 10,000 users + <=
15000 services x 1 record; tag each key with an index number noting
which KKDS master key was used to store it. (In case the KKDS master
key needs to be changed, this allows a more orderly transition to a
new master key.)
record = {name, instance, kvno, {key }K , KKDS-kvno,
kvno KKDS
KKDS-kvno
exp_date, max_life, last_modified_by_name,
last_modified_by_instance, last_modified_date}
- Audit trail -- A management audit trail of selected database
operations, not yet specified, will be maintained(Probably as a side
effect of journaling the database.).
- Statistics - To be specified.
7.1.2.5. Database management. Kerberos is built on a database management
layer with a very simple set of lookup operations that can be implemented
using any available database system. The initial implementation of that layer
uses Ingres as the supporting database system; a second implementation uses
the UNIX dbm package. Slave servers use the second implementation. The
master server can use either implementation; the advantage of the Ingres
implementation is that administration of a large number of users (e.g.,
producing a list of all users whose accounts will expire in the next six
months) can be done with more potent tools.
7.1.2.6. User interface. An implementation of a user interface to obtain,
list, and destroy Kerberos tickets for Berkeley 4.3 UNIX is described in a set
of UNIX man pages named kerberos(1), kinit(1), klist(1), and kdestroy(1). A
command to change a user's Kerberos password is described in kpasswd(1), and
the Kerberos database administrator's program, used for registering new
Kerberos principals and setting or changing passwords, is explained in the
kadmin(8) manual page.
7.1.3. Application Authentication Protocols
7.1.3.1. Request Interface. The changes involved in using a service should
be as transparent as possible. When a user uses lpr, lpr should automatically
include the authenticator in its request without the user having to do
anything extra. In the event that the ticket for a service has not been
obtained, or has expired, the service should obtain a ticket on the user's
behalf using the ticket granting ticket obtained when the user logged in.
7.1.3.2. Client Request. The following KKDS block normally would be
transmitted from the client to the server before any user data as the first
packet sent, though this need not be first. It serves to identify the
requestor, present his or her ticket, and authenticate the request. By
appropriately decrypting and checking the integrity, the service may proceed
to offer or deny the requested service.
appl_request { version, auth_msg_type , kvno , realm , length_2,
s s
{ticket}K , {authenticator}K }
s session
kvno
where
auth_msg_type = <AUTH_MSG_APPL_REQUEST>
i.e. one-way authentication, or
<AUTH_MSG_APPL_REQUEST_MUTUAL>
i.e. mutual (two-way) authentication request
length_2 = length of ticket, then length of authenticator
ticket = { flags, name , instance , realm , address ,
p p p p
K , lifetime , time_sec , name , instance }
session s kkds s s
authenticator = {name , instance , realm , checksum_4,
p p p
time_5ms , time_sec }
ws_now ws_now
checksum_4 = optional data checksum to be used by service,
checksum algorithm selected by service.
7.1.3.3. Server Verification and Response. The server decrypts request,
checking name, instance, realm, address, and time_sec, and optionally checks
for a recent playback attempt. If the authentication is invalid, the client's
request is denied, and an appl_err message is returned. Otherwise, the
service may then request the client's authorizations from the authorization
service, if need be. It then performs the requested operation within the
bounds of the authorizations granted.
If auth_msg_type requests mutual authentication (two-way), the server
replies with the message noted below. If the client is satisfied with the
server's response, it then begins the normal operation.
appl_reply { version, auth_msg_type, {svc_authent}K }
session
where
auth_msg_type = <AUTH_MSG_APPL_REPLY_MUTUAL>
svc_authent = { time_sec +1 }
ws_now
appl_err = { version, auth_msg_type, err_code, err_text }
where
auth_msg_type = <AUTH_MSG_APPL_ERR> ,
err_code = Kerberos error code, defined in prot.h ,
err_text = text string describing error.
7.1.3.4. Secure Conversations. The authentication protocols described
previously create a secure session key exchange and authenticate the
principals. This is sufficient for many purposes, but other services, such as
the authorization service and the KDBM service require protection for every
message exchanged, not just for initial "connections". Such protection may
take two alternate forms:
- message authentication -- guarantee that a given message has not
been modified, forged, replayed, or made out of sequence; the
message is still readable on the network;
- message secrecy -- in addition to offering message authentication,
providing message secrecy by encrypting the contents of the message.
Two additional protocol message envelopes are provided for these purposes;
safe_msg provides message authentication, and private_msg provides both
message authentication and privacy. The app_data field is application
specific data. Each application determines the pattern of message types needed
-- private_msg, safe_msg, appl_err, and application specific messages.
A safe_msg provides strong means to detect any modification attempts,
forgery, or replays, but does not provide privacy.
safe_msg = { version, auth_msg_type, safe_data,
checksum_16(K , safe_data) }
session
where
auth_msg_type = <AUTH_MSG_SAFE>
length_4 = length of safe_data,
safe_data = { length_4 , app_data, time_5ms ,
safe_data ws_now
address , direction, time_sec }
source ws_now
checksum_16 is a function of both K and safe_data,
session
using the quad_cksum() algorithm.
A private_msg provides strong means to detect any modification attempts,
forgery, or replays, and in addition provides privacy. However, to provide
the privacy, it incurs significant additional run-time overhead for
encryption. Since the lifetime of a session key may be greater than that of a
process, timestamps are used instead of sequence numbers.
private_msg = { version, auth_msg_type, length_4 , cipher }
cipher
where
auth_msg_type = <AUTH_MSG_PRIVATE>
length_4 = length of the encrypted portion of the
cipher
message,
cipher ={ private_data } K
session
private_data = { length_4 , app_data, time_5ms ,
app ws_now
address , direction, time_sec }
source ws_now
length_4 = length of app_data,
app
app_data = application specific data,
Rules for safe_msg and private_msg:
- Both sides discard messages with duplicate timestamps and messages
with the wrong direction (replay attempts);
- Both sides retain state of both the transmitted and the received
timestamps; messages with out of order timestamps are discarded
(limited pipelining is possible if one were ambitious);
- Messages with invalid checksums are discarded;
- (Discarded messages cause a security log entry to be made either
locally or sent to a security audit trail log process ???).
7.1.4. Library Routines
Kerberos uses two major libraries. The first is a general purpose DES
encryption library, and the second is a Kerberos-specific library to help
interface to the Kerberos protocols.
7.1.4.1. DES Encryption Library. The DES encryption library created for
Kerberos is a software only implementation of the DES algorithm, certain modes
of operation, and related utilities. It may be used independently of
Kerberos, or may be replaced (for example, for export) by any other 64-bit
block cipher algorithms which maintain a compatible interface.
The routines supported include ecb mode, cbc mode, and pcbc mode(pcbc is a
modified cbc mode to provide indefinite error propagation on decryption.)
encryption and decryption, a cbc checksum mode, a quadratic checksum mode,
(not DES), a DES random key generator, a routine to prompt and read a password
without echoing, a routine to one-way-encrypt an arbitrary string into a DES
key, and a routine to create a DES key schedule from a DES key.
The implementation for Berkeley 4.3 UNIX is described in a UNIX man page
labelled des_crypt(3).
7.1.4.2. Kerberos Protocol Library. A Kerberos Protocol Library provides a
callable interface to the protocol described earlier.
The implementation for Berkeley 4.3 UNIX is described in a UNIX man page
labelled kerberos(3).
7.2. Issues
Master key management for the servers is a yet unresolved operational
problem. To maintain security during maintenance operation it is preferable
not to store the master key on disk on the server, yet it is an operational
headache to manually enter the master key at each server every time it is
restarted. One possible solution is to build a simple hardware box that
supplies the master key from a set of thumbwheels, over a serial port. This
box could remain plugged in to the KKDS in case a power loss causes it to
reboot, yet it could be unplugged (or the thumbwheels set to zero) when it is
necessary to turn the machine over to a field service engineer for
maintenance. A related requirement is to completely clear all copies of the
master key, including any that may be in virtual memory swap areas on the
disk, when sanitizing the KKDS for service.
Key management for user keys also presents some problems. In order to make
this authentication mechanism as familiar and transparent to the user as
possible, keys are based on a password of the user's choice. Because of this,
Kerberos suffers from some of the same problems as passwords. In particular,
users may choose keys which are easy to guess, or they may record them where
others can find them.
Servers may require stable storage for the recently used authenticators, in
order to eliminate replay attempts that cross system boot or process restart
boundaries. Whether this is needed depends on the difference between the
expected maximum downtime for the service and the size of the service's
timestamp window.[The service's timestamp window is the valid range for
time_sec for which the service will honor a request.]
ws_now
The KKDS workload needs to be estimated and measured, since it (they) can
easily become a bottleneck. We will then need to determine how to tune the
KKDS's, and how many are needed where.
The server's private key is needed to decrypt the ticket for every
application request. This subjects it to potential exposure much more than is
desirable for a private key. In the future, a means to automatically change
the server's private key on a daily basis, using a higher level key, is
desirable. Also, a hardware implementation of DES supporting write-only master
keys is highly desirable for the Kerberos servers.
Another problem that is not easily dealt with at the moment is
authenticating the workstation to the user. How does a user know that an
adversary hasn't modified the software on the machine he or she is using so
that it will store the secret key? One approach to this problem is to have
the user carry around a boot disk. The user would then boot the machine off
that disk, and upon logging in, the authentication would be taken care of by
software on that disk. The problem with this approach though, is that it
requires the user to carry something extra around.
Another approach, although not practical at the moment, is the use of smart
cards that would do the encryption for initial authentication internally.
With this approach, the key never leaves the card, thus, there's nothing for a
spoofer to store except the session key (which has a limited lifetime).
The representation of names as entered by the user is somewhat awkward.
The timestamp granularity for requests -- 5 ms. -- is more than sufficient
for software encryption, 4.3BSD, and current processors, but may be too large
for systems 5 years from now. (The granularity will have to be reduced and the
fields extended, and the systems will have to provide higher resolution
timestamps than the 10ms currently provided by 4.3BSD UNIX.)
The timestamp base used in the protocols is based on the Berkeley UNIX clock
standard rather than the ARPA internet clock standard used elsewhere in TCP/IP
protocol family; the IP standard should be used instead.
7.3. Well Known Services
All Kerberos installations should adhere to the following conventions:
- The following literals are reserved Kerberos principal names:
{K,M}, krbtgt, changepw, default.
- The Kerberos service is accessible at a well known UDP port, 750.
The Kerberos administration protocol is carried on via UDP port
751.(These two port assignments are not official ones. An official
assignment is needed.) In UNIX implementations, these ports are
named kerberos and kerberos_master, respectively.
7.4. Revision History
7.4.1. Revision 7 --> Release v1.1
Revision 7 represents the definitive specification for the August 1986
Athena staff release of Kerberos.
- Protocol changed to only allow one ticket request up front. This
was done to decrease the complexity of the protocol, and to allow
implementations that are forced to limit the number of tickets
returned to interact with others. This change was made after
reliability problems resulted from the complextity of the old
protocol, and network limitations. For a while, both the old
protocol (V3) and the new protocol (V4) will be supported.
7.4.2. Revision 6 --> Release v1.0
Revision 6 represents the definitive specification for the May 1986 Athena
staff release of Kerberos.
Major changes:
- Moved the design proposals for authorization into a new document,
entitled "Project Athena Technical Plan -- Authorization Proposals".
- Added Kerberos err_reply message type and an appl_err, the latter
message for use with safe_msg and private_msg.
- Disallowed wildcard lookups for ticket requests (either via an
authentication request or ticket-granting-ticket request); removed
the cleartext service {name,instance} and lifetime from the
corresponding reply messages.
- Added a flags field to the beginning of the ticket, to include the
byte order of the system granting the ticket.
- Changed the name of the des_set_key routine to key_sched.
- Modified the safe_msg and private_msg protocols to streamline them,
removed the app_code, and replaced the sequence number with
timestamps.
- Added the cleartext exp_date of the requesting principal to the
auth_reply message.
7.4.3. Rev 5
Major changes:
- Split authentication and authorization into two independent
services; removed authorization information from the authentication
protocols. Redefined the term KDC/AS to be the Key Distribution
Center/Authentication Server.
- Changed the naming of users and services to a single, unified name
model of {name, instance}, with an optional realm specified.
Modified protocols to reflect the new naming model.
- Added a discussion of replication for the authentication database.
- Added more discussion of realms.
- Added protocols for secure conversations.
- Deleted most references to the existing athena_reg Athena Unix login
database.
7.4.4. Rev 4
Major changes:
- Added an authentication realm realm to qualify all uses of the
authentication name {name,instance}. This allowed future
enhancements to support authentication across administratively
independent Kerberos services, for example between Athena's Kerberos
and one at LCS. (This is similar to the Internet domains, but not
necessarily equivalent.)
- Added the cleartext service {name,instance} and lifetime to the
authentication reply message, auth_reply. This supported the use of
wildcard requests by returning to the requestor a readable version
of the specific servers and instances selected.
- Specified byte ordering in the least significant bit of the
auth_msg_type. The transmitter of each message sends in its natural
byte order, while the receiver converts the byte order as needed.
8. Appendix IIMThe Kerberos Encryption Library
The Kerberos encryption library supports various encryption related
operations. Its contents differ from the crypt, setkey, and encrypt library
routines. In this description, eight bit bytes are assumed; bit numbers start
with the least significant bit. Array and bit indices start with 0.
Operation of the library is described below.
For each key that may be simultaneously active, create a Key_schedule
structure, defined in "krb.h" as a structure of 64 bit-fields:
typedef bit_64 Key_schedule[16];
Next, create key schedules (from the 8-byte keys) as needed, using
krb_key_sched, prior to using the encryption or checksum routines. Then set up
the input and output areas. Make sure to note the restrictions on lengths
being multiples of eight bytes. Finally, invoke an encryption/decryption
routine such as pcbc_encrypt, or, to generate a cryptographic checksum, use a
routine such as quad_cksum.
A C_Block structure is an 8 byte block used as the fundamental unit for data
and keys, defined as:
typedef unsigned char C_Block[8];
The individual library functions krb_read_password, krb_string_to_key,
krb_random_key, krb_key_sched, pcbc_encrypt, and quad_cksum will now be
described.
int krb_read_password(key, prompt, verify)
C_Block *key;
char *prompt;
int verify;
krb_read_password writes the string specified by prompt to the standard
output, turns off echo (if possible) and reads an input string from standard
input until terminated with a newline. If verify is non-zero, it prompts and
reads input again, for use in applications such as changing a password; both
versions are compared, and the input is requested repeatedly until they match.
Then krb_read_password converts the input string into a valid key, internally
using the krb_string_to_key routine. The newly created key is copied to the
area pointed to by the key argument. krb_read_password returns a zero if no
errors occurred, or -1 indicating that an error occurred trying to manipulate
the terminal echo.
int krb_string_to_key(s, k)
char *s;
C_Block *k;
krb_string_to_key converts a null-terminated string of arbitrary length
(e.g., a user's password) into an 8 byte key, with odd byte parity, per the
FIPS Data Encryption Standard (DES) specification. A one-way function is used
to convert the string to a key, making it very difficult to reconstruct the
string, given the key. The s argument is a pointer to the string, and k
should point to a C_Block supplied by the caller to receive the generated key.
No meaningful value is returned. Void is not used for compatibility with other
compilers. The algorithm for the conversion is described below.
The first step is to flatten the input string into a stream of 7*length(s)
bits b as follows:
b[0] = bit 0 of s[0]
b[1] = bit 1 of s[0]
...
b[6] = bit 6 of s[0]
b[7] = bit 0 of s[1]
b[8] = bit 1 of s[1]
...
b[7n + m] (0<=m<=6) = bit m of s[n]
In other words, the eighth (most significant) bit of each byte of s is
dropped, and the remaining bits are shifted over to fill in the gaps.
The second step is to "fan-fold" and XOR b into a string b' exactly 56 bits
long. For example, if b is 63 bits long:
b'[55] = b[55] XOR b[56],
b'[54] = b[54] XOR b[57],
...
b'[49] = b[49] XOR b[62]
(The two steps described above can easily be combined.)
A key is 8 bytes long, but with odd parity in each byte; the least
significant bit of the byte is the parity bit. The key is formed from b'
above in two steps. The first step is to form the key with zero parity as
follows:
bit 1 of k[0] = b'[0]
bit 2 of k[0] = b'[1]
bit 1 of k[1] = b'[7]
...
bit m of k[n] = b'[7n+m-1] (1<=m<=7) and
bit 0 of k[n] = 0
In other words, a zero parity bit is inserted into the stream b' every seven
bits, resulting in the array k of eight 8-bit bytes. The second step is to
set or clear the parity bit in each byte of k as appropriate.
Next, the DES key schedule of k is computed using krb_key_sched. Then the
64 bit DES cipher-block-chaining (CBC) checksum of the original string is
computed, and finally, the CBC checksum is forced to odd parity. The
generated checksum is the resulting key.
[CBC checksumming produces an 8 byte cryptographic checksum by
cipher-block-chain encrypting the cleartext data. All of the ciphertext
output is discarded, except the last 8-byte ciphertext block. If the
cleartext length is not an integral multiple of eight bytes, the last
cleartext block is zero filled (highest addresses). The output is always
eight bytes.]
int krb_random_key(key)
C_Block *key;
krb_random_key generates a random encryption key (eight bytes), set to odd
parity per FIPS specifications. The routine may use any algorithm it wishes
to generate a key at random. The caller must supply space for the output key,
pointed to by the argument key, then after calling krb_random_key should call
the krb_key_sched routine when needed. No meaningful value is returned. Void
is not used for compatibility with other compilers.
int krb_key_sched(k, schedule)
C_Block *k;
Key_schedule schedule;
krb_key_sched calculates a DES key schedule from all eight bytes of the
input key, pointed to by the k argument, and outputs the schedule into the
Key_schedule indicated by the schedule argument. Make sure to pass a valid
eight byte key; no padding is done. The key schedule may then be used in
subsequent encryption/decryption/checksum operations. Many key schedules may
be cached by the user for later use. The user is responsible for clearing
keys and schedules as soon as they are no longer needed, to prevent their
disclosure. The routine also checks the key parity, and returns 0 if the key
is good, -1 indicating a key parity error, or -2 indicating use of an illegal
weak key. If an error is returned, the key schedule was not created.
int pcbc_encrypt(input, output, length, schedule, ivec, encrypt)
C_Block *input;
C_Block *output;
long length;
Key_schedule schedule;
C_Block *ivec;
int encrypt;
pcbc_encrypt encrypts/decrypts using a modified block chaining mode. It
differs in its error propagation characteristics from the DES cipher-block-
chaining (CBC) mode, in that modification of a single bit of the ciphertext
will affect ALL the subsequent (decrypted) cleartext; whereas with CBC,
modifying a single bit of the ciphertext, then decrypting, only affects the
resulting cleartext from the modified block and the succeeding block. PCBC
mode, on encryption, "xors" both the cleartext of block N and the ciphertext
resulting from block N with the cleartext for block N+1 prior to encrypting
block N+1. By "ciphertext", we mean ciphertext generated using the DES
Electronic Code Book (ECB) encryption mode.
If the encrypt argument is non-zero, the routine encrypts the cleartext data
pointed to by the input argument into the ciphertext pointed to by the output
argument, using the key schedule provided by the schedule argument, and
initialization vector provided by the ivec argument. If the length argument
is not an integral multiple of eight bytes, the last block is copied zero
filled (highest addresses). The output is always an integral multiple of
eight bytes.
If encrypt is zero, the routine decrypts the (now) ciphertext data pointed
to by the input argument into (now) cleartext pointed to by the output
argument using the key schedule provided by the schedule argument, and
initialization vector provided by the ivec argument. Decryption ALWAYS
operates on integral multiples of 8 bytes, so it will round the length
provided up to the appropriate multiple. Consequently, it will always produce
the rounded-up number of bytes of output cleartext. The application must
determine if the output cleartext was zero-padded due to original cleartext
lengths that were not integral multiples of 8.
No errors or meaningful values are returned. Void is not used for
compatibility with other compilers.
unsigned long quad_cksum(input, output, length, out_count, seed)
C_Block *input;
C_Block *output;
long length;
int out_count;
C_BLOCK *seed;
The quad_cksum routine is based on the Quadratic Congruential Manipulation
Detection Code described by Jueneman et al. quad_cksum produces a checksum by
chaining quadratic operations on the cleartext data pointed to by the input
argument. The length argument specifies the length of the input -- only
exactly that many bytes are included for the checksum, without any padding.
The algorithm may be iterated over the same input data, if the out_count
argument is 2, 3 or 4, and the optional output argument is a non-null pointer
. The default is one iteration, and it will not run more than 4 times.
Multiple iterations run slower, but provide a longer checksum if desired. The
seed argument provides an 8-byte seed for the first iteration. If multiple
iterations are requested, the results of one iteration are automatically used
as the seed for the next iteration.
It returns both an unsigned long checksum value, and if the output argument
is not a null pointer, up to 16 bytes of the computed checksum are written
into the output.
Modifications to the algorithm described by Jueneman et al. are as follows.
The accumulator (referred to as Z in the paper) is 64 bits, as is its initial
value (referred to as C); and the modulus N is 2**63 - 1 rather than the
suggested 2**31-1. The optional secret seed S is not implemented.
REFERENCES
1. Bauer, R.K., Berson, A., and Feiertag, R.J. "A Key Distribution Protocol
Using Event Markers". ACM Transactions on Computer Systems 1, 3 (August
1983), 249-255.
2. Birrell, Andrew D. et. al. "Grapevine: An Exercise in Distributed
Computing". CACM 25, 4 (April 1982), 260-274.
3. Birrell, A.D. "Secure Communication Using Remote Procedure Calls". ACM
Transactions on Computer Systems 3, 1 (February 1985), 1-14.
4. Denning, Dorothy E. and Sacco, Giovanni Maria. "Timestamps in Key
Distribution Protocols". CACM 24, 8 (August 1981), 533-536.
5. National Bureau of Standards. "DES Modes of Operation". Federal
Information Processing Standards Publication 81 (1980).
6. National Bureau of Standards. "Data Encryption Standard". Federal
Information Processing Standards Publication 46 (1977).
7. Gifford, D.K. "Cryptographic Sealing for Information Secrecy and
Authentication". CACM 25, 4 (April 1982), 274-286.
8. Girling, C. G. Representation and Authentication on Computer Networks.
Ph.D. Th., University of Cambridge, April 1983. Technical report 37.
9. Jaeger, Eric. Protocol for Trusted Third Party Access Control. Bachelor
Thesis, Massachusetts Institute of Technology, February 1985.
10. Jueneman, R.R. et. al. "Message Authentication". IEEE Communications
23, 9 (September 1985), 29-40.
11. Kent, Steven T. Encryption-Based Protection Protocols for Interactive
User-Computer Communications. Master Th., Massachusetts Institute of
Technology,May 1976. MIT-LCS Tech Report TR-162.
12. Miller, Steven P. Security for Local Area Networks. Tech. Rept. TR-227,
Digital Equipment Corporation, August, 1983.
13. Needham, R.M. and Herbert, A.J.. The Cambridge Distributed Computing
System. Addison-Wesley, London, 1982.
14. Needham, R. M. and Schroeder M. D. "Using Encryption for Authentication
in Large Networks of Computers". CACM 21, 12 (Dec 78), 993-999.
15. Neuman, Barry Clifford. Sentry, A Discretionary Access Control Server.
Bachelor Thesis, Massachusetts Institute of Technology, May 1985.
16. Popek, Gerald J. and Kline, Charles S. "Encryption and Secure Computer
Networks". Computing Surveys 11, 4 (December 1979), 331-356.
17. Voydock, Victor L., and Kent, Stephen T. "Security Mechanisms in
High-Level Network Protocols". Computing Surveys 15, 2 (June 1983), 135-171.