Here is a revised approach for fixing the open-relay problem that has
been pointed out, as well as providing some protection if an SRS0-signed
address gets harvested. This breaks the shortcut return method for a
DSN. Any DSN must go through the same series of domains, in reverse
order, that the message took on the outgoing path. This may be
burdensome from the protocol standpoint, but legitimate DSN's are not a
large part of normal mail traffic, so the extra overhead should not be a
practical issue. To the extent that it is adopted, this scheme makes it
very hard to send bogus DSN's anywhere. Even if you can harvest an
SRS-signed address, it must sent to the right domain from another
specific domain for it to be accepted. Hopefully, this plugs the holes
in the system.
The following description uses hashing for SRS0 and reversible
encryption for SRS1. Any of these could be done using a database scheme
resulting in a much shorter, though unreadable, return path. A database
lookup may also take less CPU cycles than the cryptographic solution.
Either approach can be used an any site and there are no compatibility
issues, as each site only has to undo the part of the address it
created.
Here is an example of a message going through a local gateway, two
forwarders and a target gateway with a DSN coming back from the far end.
1) The MUA in my machine sends a message to my MTA for outbound relay:
MAIL FROM:<local_part@domain>
RCPT TO:<alias1@forwarder1>
2) My outgoing mailserver, whose domain is "originating_MTA", relays it
to the MX for forwarder1. To prevent DSN abuse in case its SRS0
signature gets out, it adds the domain that it is sending to,
"forwarder1", to the SRS0 address and protects it with the SRS0 hash:
MAIL FROM:<SRS0+HHH+TT+forwarder1+domain+local_part@originating_MTA>
RCPT TO:<alias1@forwarder1>
3) The MTA at forwarder1 changes the outgoing address to
alias2@forwarder2. Since forwarder1 is relaying a message with an SRS0
return-path, it also rewrites the return-path to an SRS1 path. To
prevent open relaying, it reversibly encrypts both the domain the
message came from, "originating_MTA", and the domain it is going to,
"forwarder2", into the SRS1 return path. It then relays the message to
the MX for forwarder2:
forwarder2+originating_MTA
| |
MAIL
FROM:<SRS1+qwertyuiopasdfghjklzxcvbnm+HHH+TT+forwarder1+domain+local_par
t@forwarder1>
RCPT TO:<alias2@forwarder2>
4) The MTA at forwarder2 changes the outgoing address to
local_part@target_domain. Since forwarder2 is relaying a message with
an SRS1 return path, it extends that path just like forwarder1 did. It
reversibly encrypts both the domain the message came from, "forwarder1",
and the domain it is going to, "target_domain", into the SRS1
return-path. I then relays the message to the MX for target_domain:
target_domain+forwarder1
| |
MAIL
FROM:<SRS1+zxcvbnmasdfghjklqwertyui+qwertyuiopasdfghjklzxcvbnm+HHH+TT+fo
rwarder1+domain+local_part@forwarder2>
RCPT TO:<local_part@target_domain>
5) The MTA at target_domain tries to deliver the message to the MUA for
whatever local_part resolves to, but that mailbox stays full for a week.
The MTA gives up and sends a DSN back to the MX for forwarder2:
MAIL FROM:<>
RCPT
TO:<SRS1+zxcvbnmasdfghjklqwertyui+qwertyuiopasdfghjklzxcvbnm+HHH+TT+forw
arder1+domain+local_part@forwarder2>
6) Since this is an SRS1-signed DSN, the MTA at forwarder2 decrypts the
first field to see if it should accept it. The first field decrypts
into target_domain+forwarder1. Since the DSN did indeed come from
target_domain, it accepts the DSN. The second half of the decrypted
field tells the MTA to forward the DSN to the MX for forwarder1, after
removing the first encrypted field:
MAIL FROM:<>
RCPT
TO:<SRS1+qwertyuiopasdfghjklzxcvbnm+HHH+TT+forwarder1+domain+local_part@
forwarder1>
7) Since this is an SRS1-signed DSN, the MTA at forwarder1 decrypts the
first field to see if it should accept it. The first field decrypts
into forwarder2+originating_MTA. Since the DSN did indeed come from
forwarder2, it accepts the DSN. The second half of the decrypted field
tells the MTA to forward the DSN to the MX for originating_MTA, after
removing the encrypted field and rewriting the return-path as an SRS0
address:
MAIL FROM:<>
RCPT TO:<SRS0+HHH+TT+forwarder1+domain+local_part@originating_MTA>
8) Since this is an SRS0-signed message, the MTA at originating_MTA
validates the hash and also makes sure the connecting machine is from
forwarder1. Since both conditions are met, it accepts the DSN. It then
delivers the DSN to whatever local_part@domain resolves to.
--
Seth Goodman
-------
To unsubscribe, change your address, or temporarily deactivate your subscription,
please go to
http://v2.listbox.com/member/?listname=srs-discuss@v2.listbox.com