The Ticket Service
We propose to provide a “ticket service”. Its job is to issue tickets, verify previously issued tickets, and record when tickets have been used. It has three entry points, all presumably available as URL’s:
We know how to implement such a server very efficiently. Think in terms of a single PC
servicing 10K requests/second, limited only by its communication bandwidth. We
would of course use some fault-tolerance technique to avoid single points of
failure.
This service can now be used in a variety of scenarios, for example:
There are several scenarios for spam control. Most naively, when someone new
sends me email, my mail server stashes it away and sends a bounce containing a
link to the ticket server. The sender receives the bounce, gets a ticket kit,
solves the challenge, and sends the resulting ticket to my mail server, together with the ID of
the relevant email message. My mail server takes the ticket, calls the ticket
server to mark the ticket as having been used, and frees the email message into
my inbox. I probably add the sender to a safe-list.
A more advanced user might acquire valid tickets ahead of time and include a
ticket with each outgoing email message, to avoid the danger of a bounce
message.
If such a service became popular, we could
straightforwardly sell tickets for real money or by contractual agreement. This
might be convenient for legitimate, large-scale mail senders. However, the
act of selling tickets conflicts to some extent with the ticket server's primary
functionality of deterring spam. Therefore, we have focused our attention
on non-monetary schemes.
Undoubtedly, there would in due course be an issue about such a service being
run by any one organization. This should be fixable in the usual way, by having
a Ticket Server Federation. The end-user of a ticket would choose to trust some
particular incarnation of the ticket server, but it would be fine if there were
other ticket servers too. The (small number of) tickets servers would trust each
other because of corporate contractual agreements. A user could get a ticket
from any ticket server and send it to any end-user. The end-user sends the
CancelTicket request to a server whom the user trusts, and that server forwards the
request to the appropriate originating ticket server. There are of course some
obvious optimizations of this flow, to avoid excessive message traffic.