Re: 15 reasons for using URLs/HTTP

Hadmut Danisch <[email protected]> Fri, 13 Feb 2004 00:23:40 +0100
Newsgroups gmane.ietf.asrg.smtpverify
Message-ID <[email protected]>
On Thu, Feb 12, 2004 at 01:10:00PM -0800, Mark Baugher wrote:

> At 11:15 AM 2/12/2004, Hadmut Danisch wrote:
> >
> >I received several comments to my proposal
> >to move from DNS to HTTP for fetching the authorization
> >records.
> 
> This is where I am lost.  Authorization is based on some kind of trust, 
> i.e. "trust to do what?"  For example, with DNS, we trust the binding of a 
> name to an address is correct, and with reverse DNS we trust the binding of 
> an address to a name.  What do you propose to replace this with when you 
> move from DNS, which is a global database system based on IANA assignments, 
> to http, which is a client/server protocol?

"Trust" is the wrong word, it has some meaning which is not well
defined. "Trust" is usually avoided in security context, and
if it is used then it means that you rely on someone else to
behave well, e.g. you trust someone else to not generate false 
PGP certificates or something like that. That's why you're confused.

A simple rule to help understanding:

"Authentication" is answering the question "Who are you?", 
were any kind of identifier is (more or less) reliable 
(means: difficult or impossible to forge) determined.
Done with e.g. a password or cryptographical challenge response
protocols.

"Authorization" is the next question: Once we determined 
who we are talking with (through authentication), we can 
lookup what this particular entity (person,...) is 
permitted to do. This is usually any kind of database 
lookup.


Now, as with many other protocols, authentication is a little
bit difficult, because it happens implicetely. The identifier
is _not_ the e-mail address, it is the IP address. This is 
the authenticated identifier. How is it authenticated? 
The TCP sequence number is a kind of poor challenge response
mechanism. You can correctly perform the handshake only after
you received the package that was sent to you before 
(except for routing attacks and weak sequence numbers). 

Therefore, when receiving a TCP connection, then the operating
system has implicetely done a (not strong, but better than 
weak) authentication, and the result is the IP address of the 
peer, which you can get with the getpeername() system call. 

That's why it is difficult to understand, because all this 
happens outside the application and not as part of the mail 
protocol, but the underlaying transport.

So when the MTA gets the SMTP connection, this special kind
of authentication is already done.

What were are here talking about is that second question:

We know that we are talking with a.b.c.d and a.b.c.d is
requiring to make use of the right to use a particular
e-mail address for sending a message. Who is competent 
to permit this? The domain owner. How do we find him?
DNS. So we have to ask him: Whom do you grant permission 
to use this e-mail address/domain for sending e-mail?

The domain owner now gives an explicit technical 
statement, who is permitted = who is authorized. This
statement is what I use the term Authorization Record
for.

That's why it is "Authorization" what we all are talking
about here.



Where do I want to move from DNS to HTTP?

Reconsider what I was writing above: Two steps are to be done,
1. find the domain owner or his statement
2. transmit the statement


For the first step, I still stick to DNS, because that's what
DNS is designed to do and that's what DNS does pretty well.
I expect the domain owner to store the information in DNS where 
to find the Authorization record.

But I do not (longer) agree that it is in any case a good idea
to also keep the authorization record itself in DNS, because 
DNS is not a general database.


Let me give an example: If you want to get someone else's 
homepage. What do you do (what does the Browser do)?

First, you ask the DNS where to find it. Good.

Second, you use a different, appropriate protocol to transport
the data. Here: HTTP

Would you ever put your home page in your DNS zone file instead
on your web server? Or images of your photo album? A sound file?
No? Good. But why do you want to put an authorization record in 
DNS then?

I admit that I have changed my mind.

When developing RMX I had in mind to keep records very compact
and condensed to make them fit into DNS. 

Meanwhile many people told me that they do not want to 
have a new RR type, and that they want to use TXT instead.
And there are a lot of proposals  where the record grows bigger
and bigger. And most of the proposals just differ in the 
way of trying to encode the authorization record in RR types 
which are not supposed to carry that kind of information. 
Microsoft's CallerID tries to make a text file out of several 
TXT entries, and recently there was a proposal about storing 
the number of lines in the lower two bytes of an A ptr. 

That's not good engineering. It shows that this is a wrong 
approach. DNS is good to localize resources like authorization
records, but not to store them.

regards
Hadmut