[Rets-dev] Extending RETS Authentication Choices
Colby Ackerfield
c2 at realgo.com
Mon Apr 16 18:32:22 CDT 2007
On second thought, I'm guessing the PIN will likely be a fairly small
value (4 digit number?) making the PIN in this scheme susceptible to a
dictionary attack. I guess I've demonstrated the dangers of trying to
create your own authentication mechanism.
I suspect this same problem exist with mixed url and digest
authentication that was proposed. With only 10,000 pin numbers (assumed
4 digit pin) it would be trivial to compute and match all the possible
nonce and realm md5s for any given request.
Colby
Colby Ackerfield wrote:
> Or better yet, switch this around a bit and you don't have to deal
> with delimiter issues since an MD5 is of a known size.
>
> Password = MD5(OTP:PIN):OTP
>
> Using this with basic authentication, the one time password is in the
> clear but doesn't matter since it can only be used once. The pin is
> hashed with the OTP so it can't be reused and assuming a secure
> one-way hash it isn't reversible. The server will need to know the
> text of the PIN and the expected OTP. The server can verify the OTP,
> and create a PIN hash and compare that as well.
>
> Colby
>
> Colby Ackerfield wrote:
>> 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
>>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Rets-dev mailing list
>> Rets-dev at rets.org
>> http://lists.rets.org/mailman/listinfo/rets-dev
>>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> 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/ff44948c/attachment.html
More information about the Rets-dev
mailing list