[Rets-dev] Extending RETS Authentication Choices

Colby Ackerfield c2 at realgo.com
Mon Apr 16 14:53:06 CDT 2007


Another option to consider that can be used with Basic Authentication 
and no SSL would be a convention for forming the password using a hash. 
I believe this works fine if the plain text is known on both sides.

Password = OTP:MD5(OTP:PIN)

Colby

Paul Hethmon wrote:
>
> Ok, so my scars from last spring in DC are mostly healed now, so I 
> thought I would throw out some new ideas to cover more secure 
> authentication within RETS (and HTTP in general). The problem that I'm 
> trying to solve is the use of one-time passwords for authentication 
> within RETS. In most two factor authentication systems, a one-time 
> password plus a PIN number is used to validate a users identity. By 
> its very nature, a one-time password (OTP) is very secure, you can 
> send it in clear text across the network because it does no one any 
> good to sniff it and try to reuse it. The PIN number though is reused 
> each time, so you would like that to be more secure. Normal Digest 
> authentication can protect the PIN number (and OTP), but is a one-way 
> hash solution. For most two-factor systems to work, you have to get 
> the plain text values of the OTP and PIN to the authentication server. 
> So Digest does not work. Basic works, but you end up with plain text 
> over the wire.
>
> So are kicking some ideas around with a few people, we thought we 
> should throw it out here to the developer community to see which way 
> people would lean with our three solutions.
>
> Solution 1. This one is the easiest to implement, simply require SSL 
> for all transactions to the RETS server. By doing this, you can simply 
> use Basic authentication. Everything on the wire is encrypted, so no 
> worries about using Basic. You gain the fact that no one can sniff not 
> only your authentication credentials, but they can't sniff your data 
> either. The drawback is the potentially extra hardware and bandwidth 
> to support SSL.
>
> Solution 2. This one involves using (or perhaps mis-using) Basic 
> authentication. By private agreement, clients and servers can use a 
> shared encryption key to encrypt the password element of Basic 
> authentication. So instead of the client base64 encoding 
> "username:password", they would instead base64 encode 
> "username:encrypted pwd". Clients and servers would use the shared 
> encryption key for some pre-agreed algorithm such as 3DES, AES, or 
> Blowfish. Advantages are that no HTTP protocol level changes are 
> needed. You are just using a slightly different value for the 
> password. Disadvantages are the distribution of the encryption keys, 
> likely one for each different RETS client (user-agent). Another 
> disadvantage is that you cannot tell at the HTTP protocol level that 
> you are doing something different.
>
> Solution 3. This solution proposes a new HTTP authentication method, 
> extending RFC2617. The new method would be called "PublicKey". With 
> this method, the server would return on the 401 response, this method 
> in the WWW-Authenticate header indicating support. It would also send 
> the server's public key in the body of the response (suitably encoded, 
> etc). The client would use the server's public key to encrypt the 
> users credentials in the form of:
>
>   pk ( username : factor one : factor two : salt )
>
> factor one and factor two would typically be the OTP and PIN number, 
> but would be defined more generally as given. The salt value would be 
> a client produced value that MUST be different in every request during 
> a given RETS session. By using a salt value, you could not replay the 
> encrypted string, it would be different with each submission of it in 
> the Authorization header. The advantages here include no distribution 
> of shared encryption keys and a clear dilineation at the protocol 
> level of what you are doing. Disadvantages would be the work required 
> to override and/or augment typically HTTP client libraries to support 
> a new authentication method for HTTP.
>
> Both solutions 2 and 3 allow you to protect login credentials without 
> having to encrypt all of your data. Both would require similar efforts 
> for the encryption routines. Most platforms/languages have libraries 
> to do the encryption.
>
> So thoughts from anyone? A better solution?
>
> thanks,
>
> Paul
>
> Paul Hethmon
> paul.hethmon at clareitysecurity.com
> Clareity Security, LLC
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Rets-dev mailing list
> Rets-dev at rets.org
> http://lists.rets.org/mailman/listinfo/rets-dev
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.rets.org/pipermail/rets-dev/attachments/20070416/f0d2583a/attachment.html


More information about the Rets-dev mailing list