Skip to main content

Secret Key Transaction Authentication for DNS (TSIG)

The information below is for an old version of the document that is already published as an RFC.
Document Type
This is an older version of an Internet-Draft that was ultimately published as RFC 2845.
Authors Donald E. Eastlake 3rd , Ólafur Guðmundsson , Paul A. Vixie , Brian Wellington
Last updated 2013-03-02 (Latest revision 2000-03-02)
RFC stream Internet Engineering Task Force (IETF)
Intended RFC status Internet Standard
Additional resources Mailing list discussion
Stream WG state (None)
Document shepherd (None)
IESG IESG state Became RFC 2845 (Proposed Standard)
Consensus boilerplate Unknown
Telechat date (None)
Responsible AD (None)
Send notices to (None)
DNSIND Working Group                              Paul Vixie (Ed.) (ISC)
   INTERNET-DRAFT                              Olafur Gudmundsson (NAILabs)
                                             Donald Eastlake 3rd (Motorola)
                                                 Brian Wellington (NAILabs)
   <draft-ietf-dnsext-tsig-00.txt>                               March 2000

   Amends: RFC 1035

             Secret Key Transaction Authentication for DNS (TSIG)

   Status of this Memo

      This document is an Internet-Draft and is in full conformance with
      all provisions of Section 10 of RFC2026.

      Internet-Drafts are working documents of the Internet Engineering
      Task Force (IETF), its areas, and its working groups.  Note that
      other groups may also distribute working documents as Internet-

      Internet-Drafts are draft documents valid for a maximum of six months
      and may be updated, replaced, or obsoleted by other documents at any
      time.  It is inappropriate to use Internet-Drafts as reference
      material or to cite them other than as ``work in progress.''

      The list of current Internet-Drafts can be accessed at

      The list of Internet-Draft Shadow Directories can be accessed at


      This protocol allows for transaction level authentication using
      shared secrets and one way hashing.  It can be used to authenticate
      dynamic updates as coming from an approved client, or to authenticate
      responses as coming from an approved recursive name server.

      No provision has been made here for distributing the shared secrets;
      it is expected that a network administrator will statically configure
      name servers and clients using some out of band mechanism such as
      sneaker-net until a secure automated mechanism for key distribution
      is available.

   Expires September 2000                                          [Page 1]
INTERNET-DRAFT                  DNS TSIG                      March 2000

   1 - Introduction

   1.1. The Domain Name System (DNS) [RFC1034, RFC1035] is a replicated
   hierarchical distributed database system that provides information
   fundamental to Internet operations, such as name <=> address translation
   and mail handling information.  DNS has recently been extended [RFC2535]
   to provide for data origin authentication, and public key distribution,
   all based on public key cryptography and public key based digital
   signatures.  To be practical, this form of security generally requires
   extensive local caching of keys and tracing of authentication through
   multiple keys and signatures to a pre-trusted locally configured key.

   1.2. One difficulty with the [RFC2535] scheme is that common DNS
   implementations include simple ``stub'' resolvers which do not have
   caches.  Such resolvers typically rely on a caching DNS server on
   another host.  It is impractical for these stub resolvers to perform
   general [RFC2535] authentication and they would naturally depend on
   their caching DNS server to perform such services for them.  To do so
   securely requires secure communication of queries and responses.
   [RFC2535] provides public key transaction signatures to support this,
   but such signatures are very expensive computationally to generate.  In
   general, these require the same complex public key logic that is
   impractical for stubs.  This document specifies use of a message
   authentication code (MAC), specifically HMAC-MD5 (a keyed hash
   function), to provide an efficient means of point-to-point
   authentication and integrity checking for transactions.

   1.3. A second area where use of straight [RFC2535] public key based
   mechanisms may be impractical is authenticating dynamic update [RFC2136]
   requests.  [RFC2535] provides for request signatures but with [RFC2535]
   they, like transaction signatures, require computationally expensive
   public key cryptography and complex authentication logic.  Secure Domain
   Name System Dynamic Update ([RFC2137]) describes how different keys are
   used in dynamically updated zones.  This document's secret key based
   MACs can be used to authenticate DNS update requests as well as
   transaction responses, providing a lightweight alternative to the
   protocol described by [RFC2137].

   1.4. A further use of this mechanism is to protect zone transfers.  In
   this case the data covered would be the whole zone transfer including
   any glue records sent.  The protocol described by [RFC2535] does not
   protect glue records and unsigned records unless SIG(0) (transaction
   signature) is used.

   Expires September 2000                                          [Page 2]
INTERNET-DRAFT                  DNS TSIG                      March 2000

   1.5. The authentication mechanism proposed in this document uses shared
   secret keys to establish a trust relationship between two entities.
   Such keys must be protected in a fashion similar to private keys, lest a
   third party masquerade as one of the intended parties (forge MACs).
   There is an urgent need to provide simple and efficient authentication
   between clients and local servers and this proposal addresses that need.
   This proposal is unsuitable for general server to server authentication
   for servers which speak with many other servers, since key management
   would become unwieldy with the number of shared keys going up
   quadratically.  But it is suitable for many resolvers on hosts that only
   talk to a few recursive servers.

   1.6. A server acting as an indirect caching resolver -- a ``forwarder''
   in common usage -- might use transaction-based authentication when
   communicating with its small number of preconfigured ``upstream''
   servers.  Other uses of DNS secret key authentication and possible
   systems for automatic secret key distribution may be proposed in
   separate future documents.

   1.7. New Assigned Numbers

      RRTYPE = TSIG (250)
      ERROR = 0..15 (a DNS RCODE)
      ERROR = 16 (BADSIG)
      ERROR = 17 (BADKEY)
      ERROR = 18 (BADTIME)

   1.8. The key words "MUST", "REQUIRED", "SHOULD", "RECOMMENDED",  and
   "MAY" in this document are to be interpreted as described in [RFC 2119].

   2 - TSIG RR Format

   2.1 TSIG RR Type

   To provide secret key authentication, we use a new RR type whose
   mnemonic is TSIG and whose type code is 250.  TSIG is a meta-RR and MUST
   not be cached.  TSIG RRs are used for authentication between DNS
   entities that have established a shared secret key.  TSIG RRs are
   dynamically computed to cover a particular DNS transaction and are not
   DNS RRs in the usual sense.

   Expires September 2000                                          [Page 3]
INTERNET-DRAFT                  DNS TSIG                      March 2000

   2.2 TSIG Calculation

   As the TSIG RRs are related to one DNS request/response, there is no
   value in storing or retransmitting them, thus the TSIG RR is discarded
   once it has been used to authenticate a DNS message.  The only message
   digest algorithm specified in this document is ``HMAC-MD5'' (see
   [RFC1321], [RFC2104]).  The ``HMAC-MD5'' algorithm is mandatory to
   implement for interoperability.  Other algorithms can be specified at a
   later date.  Names and definitions of new algorithms MUST be registered
   with IANA.  All multi-octet integers in TSIG Record are sent in network
   byte order (see [RFC1035 2.3.2]).

   2.3. Record Format

      NAME   The name of the key used in domain name syntax.  The name
             should reflect the names of the hosts and uniquely identify
             the key among a set of keys these two hosts may share at any
             given time.  If hosts and share a
             key, possibilities for the key name include
             <id>, <id>, and
             <id>  It should be possible for
             more than one key to be in simultaneous use among a set of
             interacting hosts.  The name only needs to be meaningful to
             the communicating hosts but a meaningful mnemonic name as
             above is strongly recommended.

             The name may be used as a local index to the key involved and
             it is recommended that it be globally unique.  Where a key is
             just shared between two hosts, its name actually only need
             only be meaningful to them but it is recommended that the key
             name be mnemonic and incorporate the resolver and server host
             names in that order.

      TYPE   TSIG (250: Transaction SIGnature)

      CLASS  ANY

      TTL    0

      RdLen  (variable)

   Expires September 2000                                          [Page 4]
INTERNET-DRAFT                  DNS TSIG                      March 2000


             Field Name       Data Type      Notes
             Algorithm Name   domain-name    Name of the algorithm
                                             in domain name syntax.
             Time Signed      u_int48_t      seconds since 1-Jan-70 UTC.
             Fudge            u_int16_t      seconds of error permitted
                                             in Time Signed.
             MAC Size         u_int16_t      number of octets in MAC.
             MAC              octet stream   defined by Algorithm Name.
             Original ID      u_int16_t      original message ID
             Error            u_int16_t      expanded RCODE covering
                                             TSIG processing.
             Other Len        u_int16_t      length, in octets, of
                                             Other Data.
             Other Data       octet stream   empty unless Error == BADTIME

   2.4. Example


      TYPE   TSIG

      CLASS  ANY

      TTL    0

      RdLen  as appropriate


             Field Name       Contents
             Algorithm Name   SAMPLE-ALG.EXAMPLE.
             Time Signed      853804800
             Fudge            300
             MAC Size         as appropriate
             MAC              as appropriate
             Original ID      as appropriate
             Error            0 (NOERROR)
             Other Len        0

   Expires September 2000                                          [Page 5]
INTERNET-DRAFT                  DNS TSIG                      March 2000

             Other Data       empty

   3 - Protocol Operation

   3.1. Effects of adding TSIG to outgoing message

   Once the outgoing message has been constructed, the keyed message digest
   operation can be performed.  The resulting message digest will then be
   stored in a TSIG which is appended to the additional data section (the
   ARCOUNT is incremented to reflect this).  If the TSIG record cannot be
   added without causing the message to be truncated, the server MUST alter
   the response so that a TSIG can be included.  This response consists of
   only the question and a TSIG record, and has the TC bit set and RCODE 0
   (NOERROR).  The client SHOULD at this point retry the request using TCP
   (per [RFC1035 4.2.2]).

   3.2. TSIG processing on incoming messages

   If an incoming message contains a TSIG record, it MUST be the last
   record in the additional section.  Multiple TSIG records are not
   allowed.  If a TSIG record is present in any other position, the packet
   is dropped and a response with RCODE 1 (FORMERR) MUST be returned.  Upon
   receipt of a message with a correctly placed TSIG RR, the TSIG RR is
   copied to a safe location, removed from the DNS Message, and decremented
   out of the DNS message header's ARCOUNT.  At this point the keyed
   message digest operation is performed.  If the algorithm name or key
   name is unknown to the recipient, or if the message digests do not
   match, the whole DNS message MUST be discarded.  If the message is a
   query, a response with RCODE 9 (NOTAUTH) MUST be sent back to the
   originator with TSIG ERROR 17 (BADKEY) or TSIG ERROR 16 (BADSIG).  If no
   key is available to sign this message it MUST be sent unsigned (MAC size
   == 0 and empty MAC).  A message to the system operations log SHOULD be
   generated, to warn the operations staff of a possible security incident
   in progress.  Care should be taken to ensure that logging of this type
   of event does not open the system to a denial of service attack.

   Expires September 2000                                          [Page 6]
INTERNET-DRAFT                  DNS TSIG                      March 2000

   3.3. Time values used in TSIG calculations

   The data digested includes the two timer values in the TSIG header in
   order to defend against replay attacks.  If this were not done, an
   attacker could replay old messages but update the ``Time Signed'' and
   ``Fudge'' fields to make the message look new.  This data is named
   ``TSIG Timers'', and for the purpose of digest calculation they are
   invoked in their ``on the wire'' format, in the following order: first
   Time Signed, then Fudge.  For example:

   Field Name    Value       Wire Format         Meaning
   Time Signed   853804800   00 00 32 e4 07 00   Tue Jan 21 00:00:00 1997
   Fudge         300         01 2C               5 minutes

   3.4. TSIG Variables and Coverage

   When generating or verifying the contents of a TSIG record, the
   following data are digested, in network byte order or wire format, as

   3.4.1. DNS Message

   A whole and complete DNS message in wire format, before the TSIG RR has
   been added to the additional data section and before the DNS Message
   Header's ARCOUNT field has been incremented to contain the TSIG RR.  If
   the message ID differs from the original message ID, the original
   message ID is substituted for the message ID.  This could happen when
   forwarding a dynamic update request, for example.

   3.4.2. TSIG Variables

   Source       Field Name       Notes
   TSIG RR      NAME             Key name, in canonical wire format
   TSIG RR      CLASS            (Always ANY in the current specification)
   TSIG RR      TTL              (Always 0 in the current specification)
   TSIG RDATA   Algorithm Name   in canonical wire format
   TSIG RDATA   Time Signed      in network byte order
   TSIG RDATA   Fudge            in network byte order
   TSIG RDATA   Error            in network byte order
   TSIG RDATA   Other Len        in network byte order
   TSIG RDATA   Other Data       exactly as transmitted

   Expires September 2000                                          [Page 7]
INTERNET-DRAFT                  DNS TSIG                      March 2000

   The RR RDLEN and RDATA MAC Length are not included in the hash since
   they are not guaranteed to be knowable before the MAC is generated.

   The Original ID field is not included in this section, as it has already
   been substituted for the message ID in the DNS header and hashed.

   ``Canonical wire format'' [RFC2535] refers to uncompressed labels
   shifted to lower case.  The use of label types other than 00 is not
   defined for this specification.

   3.4.3. Request MAC

   When generating the MAC to be included in a response, the request MAC
   must be included in the digest.  The request's MAC is digested in wire
   format, including the following fields:

   Field        Type           Description
   MAC Length   u_int16_t      in network byte order
   MAC Data     octet stream   exactly as transmitted

   3.5. Padding

   Digested components are fed into the hashing function as a continuous
   octet stream with no interfield padding.

   4 - Protocol Details

   4.1. TSIG generation on requests

   Client performs the message digest operation and appends a TSIG record
   to the additional data section and transmits the request to the server.
   The client MUST store the message digest from the request while awaiting
   an answer.  The digest components for a request are:

      DNS Message (request)
      TSIG Variables (request)

   Note that some older name servers will not accept requests with a
   nonempty additional data section.  Clients SHOULD only attempt signed
   transactions with servers who are known to support TSIG and share some
   secret key with the client -- so, this is not a problem in practice.

   Expires September 2000                                          [Page 8]
INTERNET-DRAFT                  DNS TSIG                      March 2000

   4.2. TSIG on Answers

   When a server has generated a response to a signed request, it signs the
   response using the same algorithm and key.  The server MUST not generate
   a signed response to an unsigned request.  The digest components are:

      Request MAC
      DNS Message (response)
      TSIG Variables (response)

   4.3. TSIG on TSIG Error returns

   When a server detects an error relating to the key or MAC, the server
   SHOULD send back an unsigned error message (MAC size == 0 and empty
   MAC).  If an error is detected relating to the TSIG validity period, the
   server SHOULD send back a signed error message.  The digest components

      Request MAC (if the request MAC validated)
      DNS Message (response)
      TSIG Variables (response)

   The reason that the request is not included in this digest in some cases
   is to make it possible for the client to verify the error.  If the error
   is not a TSIG error the response MUST be generated as specified in

   4.4. TSIG on TCP connection

   A DNS TCP session can include multiple DNS envelopes.  This is, for
   example, commonly used by zone transfer.  Using TSIG on such a
   connection can protect the connection from hijacking and provide data
   integrity.  The TSIG MUST be included on the first and last DNS
   envelopes.  It can be optionally placed on any intermediary envelopes.
   It is expensive to include it on every envelopes, but it MUST be placed
   on at least every 100'th envelope.  The first envelope is processed as a
   standard answer, and subsequent messages have the following digest

      Prior Digest (running)
      DNS Messages (any unsigned messages since the last TSIG)
      TSIG Timers (current message)

   This allows the client to rapidly detect when the session has been

   Expires September 2000                                          [Page 9]
INTERNET-DRAFT                  DNS TSIG                      March 2000

   altered; at which point it can close the connection and retry.  If a
   client TSIG verification fails, the client MUST close the connection.
   If the client does not receive TSIG records frequently enough (as
   specified above) it SHOULD assume the connection has been hijacked and
   it SHOULD close the connection.  The client SHOULD treat this the same
   way as they would any other interrupted transfer (although the exact
   behavior is not specified).

   4.5. Server TSIG checks

   Upon receipt of a message, server will check if there is a TSIG RR. If
   one exists, the server is REQUIRED to return a TSIG RR in the response.
   The server MUST perform the following checks in the following order,
   check KEY, check TIME values, check MAC.

   4.5.1. KEY check and error handling

   If a non-forwarding server does not recognize the key used by the
   client, the server MUST generate an error response with RCODE 9
   (NOTAUTH) and TSIG ERROR 17 (BADKEY).  This response MUST be unsigned as
   specified in [4.3].  The server SHOULD log the error.

   4.5.2. TIME check and error handling

   If the server time is outside the time interval specified by the request
   (which is: Time Signed, plus/minus Fudge), the server MUST generate an
   error response with RCODE 9 (NOTAUTH) and TSIG ERROR 18 (BADTIME).  The
   server MAY also cache the most recent time signed value in a message
   generated by a key, and MAY return BADTIME if a message received later
   has an earlier time signed value.  A response indicating a BADTIME error
   MUST be signed by the same key as the request.  It MUST include the
   client's current time in the time signed field, the server's current
   time (a u_int48_t) in the other data field, and 6 in the other data
   length field.  This is done so that the client can verify a message with
   a BADTIME error without the verification failing due to another BADTIME
   error.  The data signed is specified in [4.3].  The server SHOULD log
   the error.

   Expires September 2000                                         [Page 10]
INTERNET-DRAFT                  DNS TSIG                      March 2000

   4.5.3. MAC check and error handling

   If a TSIG fails to verify, the server MUST generate an error response as
   specified in [4.3] with RCODE 9 (NOTAUTH) and TSIG ERROR 16 (BADSIG).
   This response MUST be unsigned as specified in [4.3].  The server SHOULD
   log the error.

   4.6. Client processing of answer

   When a client receives a response from a server and expects to see a
   TSIG, it first checks if the TSIG RR is present in the response.
   Otherwise, the response is treated as having a format error and
   discarded.  The client then extracts the TSIG, adjusts the ARCOUNT, and
   calculates the keyed digest in the same way as the server.  If the TSIG
   does not validate, that response MUST be discarded, unless the RCODE is
   9 (NOTAUTH), in which case the client SHOULD attempt to verify the
   response as if it were a TSIG Error response, as specified in [4.3].  A
   message containing an unsigned TSIG record or a TSIG record which fails
   verification SHOULD not be considered an acceptable response; the client
   SHOULD log an error and continue to wait for a signed response until the
   request times out.

   4.6.1. Key error handling

   If an RCODE on a response is 9 (NOTAUTH), and the response TSIG
   validates, and the TSIG key is different from the key used on the
   request, then this is a KEY error.  The client MAY retry the request
   using the key specified by the server.  This should never occur, as a
   server MUST NOT sign a response with a different key than signed the

   4.6.2. Time error handling

   If the response RCODE is 9 (NOTAUTH) and the TSIG ERROR is 18 (BADTIME),
   or the current time does not fall in the range specified in the TSIG
   record, then this is a TIME error.  This is an indication that the
   client and server clocks are not synchronized.  In this case the client
   SHOULD log the event.  DNS resolvers MUST NOT adjust any clocks in the
   client based on BADTIME errors, but the server's time in the other data
   field SHOULD be logged.

   Expires September 2000                                         [Page 11]
INTERNET-DRAFT                  DNS TSIG                      March 2000

   4.6.3. MAC error handling

   If the response RCODE is 9 (NOTAUTH) and TSIG ERROR is 16 (BADSIG), this
   is a MAC error, and client MAY retry the request with a new request ID
   but it would be better to try a different shared key if one is
   available.  Client SHOULD keep track of how many MAC errors are
   associated with each key.  Clients SHOULD log this event.

   4.7. Special considerations for forwarding servers

   A server acting as a forwarding server of a DNS message SHOULD check for
   the existence of a TSIG record.  If the name on the TSIG is not of a
   secret that the server shares with the originator the server MUST
   forward the message unchanged including the TSIG.  If the name of the
   TSIG is of a key this server shares with the originator, it MUST process
   the TSIG.  If the TSIG passes all checks, the forwarding server MUST, if
   possible, include a TSIG of his own, to the destination or the next
   forwarder.  If no transaction security is available to the destination
   and the response has the AD flag (see [RFC2535]), the forwarder MUST
   unset the AD flag before adding the TSIG to the answer.

   5 - Shared Secrets

   5.1. Secret keys are very sensitive information and all available steps
   should be taken to protect them on every host on which they are stored.
   Generally such hosts need to be physically protected.  If they are
   multi-user machines, great care should be taken that unprivileged users
   have no access to keying material.  Resolvers often run unprivileged,
   which means all users of a host would be able to see whatever
   configuration data is used by the resolver.

   5.2. A name server usually runs privileged, which means its
   configuration data need not be visible to all users of the host.  For
   this reason, a host that implements transaction-based authentication
   should probably be configured with a ``stub resolver'' and a local
   caching and forwarding name server.  This presents a special problem for
   [RFC2136] which otherwise depends on clients to communicate only with a
   zone's authoritative name servers.

   5.3. Use of strong random shared secrets is essential to the security of
   TSIG.  See [RFC1750] for a discussion of this issue.  The secret should
   be at least as long as the keyed message digest, i.e. 16 bytes for HMAC-
   MD5 or 20 bytes for HMAC-SHA1.

   Expires September 2000                                         [Page 12]
INTERNET-DRAFT                  DNS TSIG                      March 2000

   6 - Security Considerations

   6.1. The approach specified here is computationally much less expensive
   than the signatures specified in [RFC2535].  As long as the shared
   secret key is not compromised, strong authentication is provided for the
   last hop from a local name server to the user resolver.

   6.2. Secret keys should be changed periodically.  If the client host has
   been compromised, the server should suspend the use of all secrets known
   to that client.  If possible, secrets should be stored in encrypted
   form.  Secrets should never be transmitted in the clear over any
   network.  This document does not address the issue on how to distribute
   secrets. Secrets should never be shared by more than two entities.

   6.3. This mechanism does not authenticate source data, only its
   transmission between two parties who share some secret.  The original
   source data can come from a compromised zone master or can be corrupted
   during transit from an authentic zone master to some ``caching
   forwarder.''  However, if the server is faithfully performing the full
   [RFC2535] security checks, then only security checked data will be
   available to the client.

   7 - IANA Considerations

   IANA is expected to create and maintain a registry of algorithm names to
   be used as "Algorithm Names" as defined in Section 2.3.  The initial
   value should be "HMAC-MD5.SIG-ALG.REG.INT".  Algorithm names are text
   strings encoded using the syntax of a domain name.  There is no
   structure required other than names for different algorithms must be
   unique when compared as DNS names, i.e., comparison is case insensitive.
   Note that the initial value mentioned above is not a domain name, and
   therefore need not be a registed name within the DNS.  New algorithms
   are assigned using the IETF Consensus policy defined in RFC 2434.

   IANA is expected to create and maintain a registry of "TSIG Error
   values" to be used for "Error" values as defined in section 2.3.
   Initial values should be those defined in section 1.7.  New TSIG error
   codes for the TSIG error field are assigned using the IETF Consensus
   policy defined in RFC 2434.

   Expires September 2000                                         [Page 13]
INTERNET-DRAFT                  DNS TSIG                      March 2000

   7 - References

   [RFC1034]  P. Mockapetris, ``Domain Names - Concepts and Facilities,''
              RFC 1034, ISI, November 1987.

   [RFC1035]  P. Mockapetris, ``Domain Names - Implementation and
              Specification,'' RFC 1034, ISI, November 1987.

   [RFC1321]  R. Rivest, ``The MD5 Message-Digest Algorithm,'' RFC 1321,
              MIT LCS & RSA Data Security, Inc., April 1992.

   [RFC1750]  D. Eastlake, S. Crocker, J. Schiller, ``Randomness
              Recommendations for Security,'' RFC 1750, DEC, CyberCash &
              MIT, December 1995.

   [RFC2104]  H. Krawczyk, M. Bellare, R. Canetti, ``HMAC-MD5: Keyed-MD5
              for Message Authentication,'' RFC 2104 , IBM, UCSD & IBM,
              February 1997.

   [RFC2119]  S. Bradner, ``Key words for use in RFCs to Indicate
              Requirement Levels,'' RFC 2119, Harvard, March 1997

   [RFC2136]  P. Vixie (Ed.), S. Thomson, Y. Rekhter, J. Bound ``Dynamic
              Updates in the Domain Name System,'' RFC 2136, ISC & Bellcore
              & Cisco & DEC, April 1997.

   [RFC2137]  D. Eastlake 3rd ``Secure Domain Name System Dynamic Update,''
              CyberCash, April 1997.

   [RFC2535]  D. Eastlake, ``Domain Name System Security Extensions,'' RFC
              2535, IBM, March 1999.

   Expires September 2000                                         [Page 14]
INTERNET-DRAFT                  DNS TSIG                      March 2000

   9 - Authors' Addresses

      Paul Vixie                          Olafur Gudmundsson
         Internet Software Consortium        NAILabs
         950 Charter Street                  3060 Washington Road, Route 97
         Redwood City, CA 94063              Glenwood, MD 21738
         +1 650 779 7001                     +1 443 259 2389
         <>                     <>

      Donald E. Eastlake 3rd              Brian Wellington
         Motorola                            NAILabs
         65 Shindegan Hill Road, RR #1       3060 Washington Road, Route 97
         Carmel, NY 10512 USA                Glenwood, MD 21738
         +1 508 261 5434                     +1 443 259 2369
         <>           <>

   Expires September 2000                                         [Page 15]