

USEFOR Working Group                                            S. Lyall
INTERNET-DRAFT                                               August 1998
                                                   Expires February 1999


                     Cancel-Locks in Usenet articles.
                   draft-ietf-usefor-cancel-lock-00.txt
                           

Status of this memo

     This document is an Internet-Draft.  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-Drafts.

     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."

     To view the entire list of current Internet-Drafts, please check
     the "1id-abstracts.txt" listing contained in the Internet-Drafts
     Shadow Directories on ftp.is.co.za (Africa), ftp.nordu.net
     (Northern Europe), ftp.nis.garr.it (Southern Europe), munnari.oz.au
     (Pacific Rim), ftp.ietf.org (US East Coast), or ftp.isi.edu
     (US West Coast).


Abstract

This document outlines a method that may be used by authors of successor
(or canceling) articles to authenticate their authorship of the original
article.

As a pre-injected article passes through various agents they may include
the hash of a secret string in a Cancel-Key header. Later if they wish to
use a standard mechanism to remove the original article (eg Cancel or
Supersede) they can include this string in the Cancel-Lock header to
verify that they are entitled to perform this operation.

Familiarity with the current News Article Format draft [ARTICLE] is
assumed.


1. Introduction: The Cancel-Key & Cancel-Lock headers

These two headers MAY be used by posters, posting agents, moderators and 
injecting agents in order to mark articles they process and to verify
canceling , superseding and replacing articles they may subsequently be
issued for those originals. They MUST NOT be altered or created by any
other agents.

The scheme works by included a "Cancel-Lock: " header and contents in an
article. Further articles that wish to cancel, supersede or replace this
article are required to include a "Cancel-Key: " header which contains
a code-string that when hashed yields one of the code-strings in the
"Cancel-Lock: " header of the original article.

These headers are intended to be used as a simple method to verify that
the author of a article which removes another one is either the poster,
posting agent, moderator or injecting agent that processed the original
article when it was in its proto-article form.


2. Format


     Cancel-Lock-content = [CFWS] cancel-lock *( CFWS cancel-lock ) [CFWS]
      Cancel-Key-content = [CFWS] cancel-key *( CFWS cancel-key ) [CFWS]
             cancel-lock = scheme ":" code-string
              cancel-key = scheme ":" code-string [ ":" clue-string ]  
                  scheme = 1*DIGIT
             code-string = 1*base64-octet
             clue-string = 2base64-octet
            base64-octet = ALPHA / DIGIT / "+" / "/" / "="


2.1 The "scheme" element

The scheme is the format that is used to encode the code-string. This
document only defines the scheme of "1" which corresponds to the
SHA algorithm [SHA-160]. Other schemes MAY be defined by further IETF
standards.


2.2 The "code-string" element

The code-string is a series of base-64-octets. The code-string in a
cancel-lock is the hash of the corresponding code-string in a cancel-key.
The encoding of the binary key or lock is performed in accordance with the
Base64 Transfer Encoding defined in [RFC-2045].

Under Scheme 1 the code-string element of a cancel-lock is the output hash
of the SHA algorithm.

2.3 The "clue-string" element

The clue-string is an optional element that MAY be included in a
cancel-key. It consists of the first two base64-octets of the code-string
of the cancel-lock to which the cancel-key corresponds.

The clue-string is intended the reduce searching time where multiple
cancel-lock's may be referred to by a single cancel-key.



3. Use

When an serving agent receives an article that attempts to remove a
previous article via Cancel, Supersedes or Replaces, then if the original
article contains a valid cancel-lock the replacing article MUST contain a
valid cancel-key (or keys) that corresponds to one (or more) of the
cancel-lock's in the original article.


3.1 Adding an initial "Cancel-Lock: " header to a proto-article

A Cancel-Lock header MAY be added to a proto-article by the poster
or posting agent which will include one or more cancel-locks in its
Cancel-Lock-content.

If the poster or posting agent does not add a Cancel-Lock header to an
article then an injecting-agent MAY add one provided that it
positively authenticates the author. However this practice is NOT
recommended since the poster will be unable to create a cancel-key to
remove the article later without the co-operation of the injecting agent.

Other agents MUST NOT add this header to articles or proto-articles that
they process.


3.2 Extending the "Cancel-Lock: " header of a proto-article

If a "Cancel-Lock: " header has already been added to a proto-article then
any agent (prior to the article being injected) further processing the
proto-article MAY append a single cancel-lock to those already in the
header.

No more than one cancel-lock SHOULD be added by each agent that
processes the proto-article.

Once an article in injected then this header MUST NOT be altered. In
particular, relaying agents beyond the injecting agent MUST NOT alter it.



3.3 Adding a "Cancel-Key: " header to a proto-article.

The Cancel-Key header MAY be added to a proto-article containing a
"Cancel: ", "Replaces: " or "Supersedes: " header by the poster
or posting agent which will include one or more cancel-keys in its
Cancel-Key-content. These cancel-keys will correspond to some or all of
the   cancel-locks in articles listed in the "Cancel: " , "Replaces: "
and "Supersedes: " headers.

If, as mentioned in 3.1 an injecting agent has added a "Cancel-Lock: "
header to an article listed in the "Cancel: " , "Replaces: " or
"Supersedes: " headers then (assuming it authenticates the poster as being
the same as the poster or the original article(s) ) it MUST add a
"Cancel-Key: " header with the cancel-key(s) that correspond to those
article(s).

Other Agents MUST NOT alter this header.



4. Creating the cancel-lock

It is suggested that when creating a cancel-lock the function
HMAC(message-id+secret) be used, where HMAC is outlined in [HMAC],
message-id is the message-id of the article and secret is a secret key
held locally. 

This method removes the need for a per-article database containing the 
cancel-lock used with every article..

5. Security Issues

General security issues with hash functions are discussed elsewhere, see the 
references in [HMAC] for some pointers. The method outlined in Section 4
is also vulnerable to the secret key being compromised or guessed.


5. References

[ARTICLE] News Article Format. D Ritter. Internet Draft
     draft-ietf-usefor-article-01 . 1998.

[HMAC]  Keyed-Hashing for Message Authentication. H. Krawczyk, M.
     Bellare, R. Canetti. February 1997. RFC 2104.

[SHA-160]  NIST, FIPS PUB 180-1: Secure Hash Standard, Apr 1995.

[RFC-2045] MIME, part 1  Freed, Ned; Borenstein, Nathaniel S.:
     Multipurpose Internet mail extensions (MIME), part 1: format of
     Internet message bodies. RFC 2045, Nov 1996.


6. Author's Address

Simon Lyall,
PO Box 6616,
Auckland,
New Zealand.

Phone: +64 9 358 5067 ext 701
Email:  simon@darkmere.gen.nz




