I can't refuse your arguments about this kind of security, they sound good for me, except that the extra data are bigger than 128 bit: actually is a string in database.<div><br></div><div>I suppose it will be improved in the future.</div>
<div><br></div><div>Thanks for the complete explanation, Adam.</div><div><div><div><br></div><div><br><div class="gmail_quote">2009/10/16 Frisby, Adam <span dir="ltr"><<a href="mailto:adam@deepthink.com.au">adam@deepthink.com.au</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">









<div lang="EN-AU" link="blue" vlink="purple">

<div>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Just because other software may do it wrong does not mean it is
secure.</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Drupal using a plain MD5 is alarming – since it allows for very
quick plain lookups in existing databases (no need to calculate the dictionary
+ permuation with your fixed salt). Storing a custom salt for each user is
essential if you wish to make dictionary attacks significantly more expensive.
(Actually it also allows for plain collision attacks too.)</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Consider this case:</span></p>

<p><span style="font-size:11.0pt;font-family:Symbol;color:#1F497D"><span>·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><span style="font-size:11.0pt;color:#1F497D">Calculate Every Permutation of the Dictionary plus a couple of
common modifications, plus your fixed salt. (this will get ~80%+ of user
passwords).</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Versus</span></p>

<p><span style="font-size:11.0pt;font-family:Symbol;color:#1F497D"><span>·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><span style="font-size:11.0pt;color:#1F497D">Do the above, but for each user – since the salt is changing per
user.</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">The second will take ‘n’ times longer to calculate (where N is equivalent
to the size of your database), it also works in the inverse – if you have a 10
million user database, it means you need 1/10millionth of the time to try
calculate a valid hit. It adds up. Bigtime.</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">A unique hash for the whole application helps against global
world-wide MD5 databases, but it still does not help the above situation.</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Frankly the storage and transmission size arguments are complete
bunk. We are talking 128-bits extra data per user for a good salt which adds up
to about ‘jack shit’ when summed over the lifetime of the application. It takes
very little extra time, and we already stuff that data into our default database
schemas.</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Likewise, having a long salt versus a short salt makes very
little difference – because it’s the uniqueness that counts (see the two cases
above.)</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Short summary of the above: Do it if you have any desire to
follow good security practices with your users. It takes almost no extra time
and gives you appreciable benefits.</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Adam</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">

<div>

<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">

<p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt">From:</span></b><span lang="EN-US" style="font-size:10.0pt"> <a href="mailto:opensim-dev-bounces@lists.berlios.de" target="_blank">opensim-dev-bounces@lists.berlios.de</a>
[mailto:<a href="mailto:opensim-dev-bounces@lists.berlios.de" target="_blank">opensim-dev-bounces@lists.berlios.de</a>] <b>On Behalf Of </b>Impalah
Shenzhou<br>
<b>Sent:</b> Friday, 16 October 2009 4:37 AM</span></p><div><div></div><div class="h5"><br>
<b>To:</b> <a href="mailto:opensim-dev@lists.berlios.de" target="_blank">opensim-dev@lists.berlios.de</a><br>
<b>Subject:</b> Re: [Opensim-dev] open sim UUID and Passwordhash</div></div><p></p>

</div>

</div><div><div></div><div class="h5">

<p class="MsoNormal"> </p>

<p class="MsoNormal" style="margin-bottom:12.0pt">Thanks for the info Melanie.<br>
<br>
Adam, I consider Drupal, for example, a CMS with a decent security and it only
uses md5(plain_password) to store user passwords. Some php frameworks (for
example Code Igniter, Cake php...) use, but not mandatory, an unique hash for
all the application.<br>
<br>
A random hash for every user improves security, you're right, but increases the
data sent between DB and servers for every authentication. I prefer not to
overload data transmission for something I think is overprotection. Maybe for
10 or 100 users there won't be no problems, but think on 10000 and each byte
will count (they aren't cheap).<br>
<br>
If you have a long, secret and unique hash for your servers, who can make an
effective attack to you (at least in reasonable time)?<br>
<br>
Maybe the difference could be that Drupal used to be deployed over Apache, and
it can be protected against dictionary attacks activating some modules, while
Opensim/UGAIM are servers "per se", basic servers.<br>
<br>
It's my opinion, if you don't like it, I have more :-P<br>
<br>
Greetings<br>
<br>
</p>

<div>

<p class="MsoNormal">2009/10/16 Frisby, Adam <<a href="mailto:adam@deepthink.com.au" target="_blank">adam@deepthink.com.au</a>></p>

<div>

<div>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">A long fixed salt doesn’t help over the
simple “:” in any practical way. The salt <b>must</b> be unique for each user
for decent security.</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Adam</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<div style="border:none;border-left:solid windowtext 1.5pt;padding:0cm 0cm 0cm 4.0pt;border-color:-moz-use-text-color -moz-use-text-color -moz-use-text-color blue">

<div>

<div style="border:none;border-top:solid windowtext 1.0pt;padding:3.0pt 0cm 0cm 0cm;border-color:-moz-use-text-color -moz-use-text-color">

<p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt">From:</span></b><span lang="EN-US" style="font-size:10.0pt"> <a href="mailto:opensim-dev-bounces@lists.berlios.de" target="_blank">opensim-dev-bounces@lists.berlios.de</a> [mailto:<a href="mailto:opensim-dev-bounces@lists.berlios.de" target="_blank">opensim-dev-bounces@lists.berlios.de</a>]
<b>On Behalf Of </b>Impalah Shenzhou<br>
<b>Sent:</b> Friday, 16 October 2009 3:44 AM</span></p>

<div>

<div>

<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt"><br>
<b>To:</b> <a href="mailto:opensim-dev@lists.berlios.de" target="_blank">opensim-dev@lists.berlios.de</a><br>
<b>Subject:</b> Re: [Opensim-dev] open sim UUID and Passwordhash</span></p>

</div>

</div>

</div>

</div>

<div>

<div>

<p class="MsoNormal"> </p>

<p class="MsoNormal" style="margin-bottom:12.0pt">This
comes from UserManagerBase.AddUser (0.6.6):<br>
<br>
string md5PasswdHash = Util.Md5Hash(Util.Md5Hash(password) + ":" +
String.Empty);<br>
<br>
The salt should be where String.Empty is.<br>
<br>
I think it doesn't change in the most recent versions, so the "create
user" method of the console (both standalone and ugaim) are unsecure by
default.<br>
<br>
<br>
Anyway, I agree with Melanie and Adam that the salt is needed for improving
security, if not a random salt every time you create an user, at least a long
and secret unique salt.<br>
<br>
Greetings<br>
<br>
</p>

<div>

<p class="MsoNormal">2009/10/16
Frisby, Adam <<a href="mailto:adam@deepthink.com.au" target="_blank">adam@deepthink.com.au</a>></p>

<p class="MsoNormal">+1
to Melanie, that code is *not* secure. It is salted with a ":" but
that's a fixed known salt.<br>
<br>
This is what I suggest:<br>
<br>
$passwordSalt = md5(time() . utime() . mt_rand(0,mt_getrandmax())); // or any
other good random source<br>
$passwordHash = md5(md5($password) . ':' . $passwordSalt);<br>
<br>
$passwordSalt should be unique among your database (very likely with the above
code); if there are duplicates, then it allows dictionary attacks to be done,
the more duplicates, the more effective it is.<br>
<span style="color:#888888"><br>
Adam</span></p>

<div>

<div>

<p class="MsoNormal"><br>
> -----Original Message-----<br>
> From: <a href="mailto:opensim-dev-bounces@lists.berlios.de" target="_blank">opensim-dev-bounces@lists.berlios.de</a>
[mailto:<a href="mailto:opensim-dev-" target="_blank">opensim-dev-</a><br>
> <a href="mailto:bounces@lists.berlios.de" target="_blank">bounces@lists.berlios.de</a>]
On Behalf Of Melanie<br>
> Sent: Thursday, 15 October 2009 4:14 PM<br>
> To: <a href="mailto:opensim-dev@lists.berlios.de" target="_blank">opensim-dev@lists.berlios.de</a><br>
> Subject: Re: [Opensim-dev] open sim UUID and Passwordhash<br>
><br>
> Please don't use that code. It creates unsalted hashes, which are<br>
> not secure.<br>
> The "" should be a ranndom salt, stored in the passwordSalt
field in<br>
> the DB. If that is blank, you're running a very insecure system<br>
><br>
><br>
> Melanie<br>
><br>
><br>
> Rich White wrote:<br>
> > here is the PHP code - $password_hash = md5(md5($password) .
":"<br>
> ."");<br>
> ><br>
> > an md5 hash of an md5 hash<br>
> ><br>
> > =====<br>
> ><br>
> > 2009/10/15 Márcio Cardoso <<a href="mailto:marciomaiden@gmail.com" target="_blank">marciomaiden@gmail.com</a>>:<br>
> >> Good night,<br>
> >><br>
> >> will be possible that someone could help me with 2 problems I
have?<br>
> I'm<br>
> >> trying to create a stored procedure in mysql to add users, but do<br>
> not know<br>
> >> how UUID  is generated. anyone have any idea how this
happens?<br>
> Another<br>
> >> problem is how is the encoding of the password.<br>
> >><br>
> >> The ideal was to have access to the code that  opensim uses
to add<br>
> avatars.<br>
> >> but I got tired of looking and nothing. I thank you for your
help.<br>
> >><br>
> >> Greetings,<br>
> >><br>
> >> Márcio Cardoso<br>
> >><br>
> >> _______________________________________________<br>
> >> Opensim-dev mailing list<br>
> >> <a href="mailto:Opensim-dev@lists.berlios.de" target="_blank">Opensim-dev@lists.berlios.de</a><br>
> >> <a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a><br>
> >><br>
> >><br>
> > _______________________________________________<br>
> > Opensim-dev mailing list<br>
> > <a href="mailto:Opensim-dev@lists.berlios.de" target="_blank">Opensim-dev@lists.berlios.de</a><br>
> > <a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a><br>
><br>
> _______________________________________________<br>
> Opensim-dev mailing list<br>
> <a href="mailto:Opensim-dev@lists.berlios.de" target="_blank">Opensim-dev@lists.berlios.de</a><br>
> <a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a><br>
_______________________________________________<br>
Opensim-dev mailing list<br>
<a href="mailto:Opensim-dev@lists.berlios.de" target="_blank">Opensim-dev@lists.berlios.de</a><br>
<a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a></p>

</div>

</div>

</div>

<p class="MsoNormal"> </p>

</div>

</div>

</div>

</div>

</div>

<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
_______________________________________________<br>
Opensim-dev mailing list<br>
<a href="mailto:Opensim-dev@lists.berlios.de" target="_blank">Opensim-dev@lists.berlios.de</a><br>
<a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a></p>

</div>

<p class="MsoNormal"> </p>

</div></div></div>

</div>

</div>


<br>_______________________________________________<br>
Opensim-dev mailing list<br>
<a href="mailto:Opensim-dev@lists.berlios.de">Opensim-dev@lists.berlios.de</a><br>
<a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a><br>
<br></blockquote></div><br></div></div></div>