<div>I doubt people use Last.fm, but they had a leak too. </div><div><br clear="all">--Cameron<a href="http://ghostfreeman.net" target="_blank"></a><br>
<br><br><div class="gmail_quote">On Fri, Jun 8, 2012 at 10:13 AM, Tim Watts <span dir="ltr">&lt;<a href="mailto:tim@cliftonfarm.org" target="_blank">tim@cliftonfarm.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Makes sense now.  Thanks!<br>
<div class="HOEnZb"><div class="h5"><br>
On Fri, 2012-06-08 at 09:58 -0400, Michael H. Warfield wrote:<br>
&gt; On Fri, 2012-06-08 at 08:54 -0400, Tim Watts wrote:<br>
&gt; &gt; Thanks for this Mike.  Great lesson as usual!<br>
&gt;<br>
&gt; &gt; On Thu, 2012-06-07 at 22:56 -0400, Michael H. Warfield wrote:<br>
&gt;<br>
&gt; &gt; RE Salts:<br>
&gt; &gt; &gt; So it prevents some optimization in brute forcing<br>
&gt; &gt; &gt; large tables of passwords (like the Linkedin dump).<br>
&gt;<br>
&gt; &gt; I guess I don&#39;t quite see this.  If the salt is invariably stored with<br>
&gt; &gt; the hash this sounds a bit like claiming base64 is a form of encryption.<br>
&gt; &gt; The only way I can make sense of this is if the encoding of or<br>
&gt; &gt; association between the salt and hash is somehow a system secret.  Or if<br>
&gt; &gt; you don&#39;t know the hashes are salted.  Am I missing something?<br>
&gt;<br>
&gt; Without salt, the attacker would take a brute force password guess and<br>
&gt; hash it once and compare that hash to all the hashes in the database.<br>
&gt; One hash operation per guess to do all the hashes in the table and it&#39;s<br>
&gt; a straight compare.<br>
&gt;<br>
&gt; With salt, you have to hash your password with the hash salt that&#39;s<br>
&gt; there for each entry in the table.  So, if you have 6.5 million entries<br>
&gt; in the compromised hash table you would likely have to hash the guess<br>
&gt; with each individual salt (6.5 million is still a very tiny percentage<br>
&gt; of even 2^48 so collisions are almost non-existent) resulting in 6.5<br>
&gt; million hash operations where you would only have needed 1 hash<br>
&gt; operation without the salts.  6,500,000:1 is quite an optimization and<br>
&gt; that&#39;s why I said &quot;large tables&quot;.  The larger the table, the bigger the<br>
&gt; effect.<br>
&gt;<br>
&gt; The hash is a one-way function.  Even with the salt present with the<br>
&gt; hash (necessary for verification) you can&#39;t reverse the hash back to the<br>
&gt; password so the presence of the salt doesn&#39;t weaken the hash.  It&#39;s not<br>
&gt; any more secret than the hash itself and is necessary to compute the<br>
&gt; hash given a password to test and verify.<br>
&gt;<br>
&gt; Here...  I&#39;ll give you an example from the shadow file (no, it&#39;s not an<br>
&gt; active account but it&#39;s a real hash, you can try and brute force it if<br>
&gt; you like...)<br>
&gt;<br>
&gt; *****:$1$mVyvPlQz$M02ivX0uzi6al7vWWu5X6.:15499:1:::::<br>
&gt;                   ^^^^^^^^^^^^^^^^^^^^^^ Hash<br>
&gt;          ^^^^^^^^ 48 bit salt - almost 3 * 10^14 possibilities.<br>
&gt;       ^^ Algorithm 1 - md5<br>
&gt;<br>
&gt; This is a SHA512 hash pulled from a web page I had handy...<br>
&gt;<br>
&gt; *****:$6$QR3drPrQ$JLolPKyiVuXvea1F2IpbPx9F9PEV0s/IGcNCpm6ZrBA6AFDvwHPQG7EsTQHuUqxfCvlsuKRb.O7w5RLPyj8nS/:15119:0:99999:7:::<br>
&gt;<br>
&gt; Same format, just algorithm 6, sha512.<br>
&gt;<br>
&gt; With the salt, you can hash a password the user enters and, if it then<br>
&gt; matches the hash you expect, you have a verification match.  That salt<br>
&gt; has to be present with the hash at the point and time of verification.<br>
&gt; In theory, they could be stored in different locations but, in practice,<br>
&gt; that really doesn&#39;t buy you much since they have to be retrieved<br>
&gt; together and are tightly associated, so they&#39;re generally stored<br>
&gt; together.  If that table is compromised, the brute force attacker would<br>
&gt; then merely take the salt, combine it with the password he&#39;s using to<br>
&gt; guess, and then compare.  But, without a salt, he only has to hash the<br>
&gt; password once and do a simple compare to all the entries.  Grep would do<br>
&gt; the job.<br>
&gt;<br>
&gt; Regards,<br>
&gt; Mike<br>
</div></div><div class="HOEnZb"><div class="h5">&gt; _______________________________________________<br>
&gt; Ale mailing list<br>
&gt; <a href="mailto:Ale@ale.org">Ale@ale.org</a><br>
&gt; <a href="http://mail.ale.org/mailman/listinfo/ale" target="_blank">http://mail.ale.org/mailman/listinfo/ale</a><br>
&gt; See JOBS, ANNOUNCE and SCHOOLS lists at<br>
&gt; <a href="http://mail.ale.org/mailman/listinfo" target="_blank">http://mail.ale.org/mailman/listinfo</a><br>
<br>
</div></div><br>_______________________________________________<br>
Ale mailing list<br>
<a href="mailto:Ale@ale.org">Ale@ale.org</a><br>
<a href="http://mail.ale.org/mailman/listinfo/ale" target="_blank">http://mail.ale.org/mailman/listinfo/ale</a><br>
See JOBS, ANNOUNCE and SCHOOLS lists at<br>
<a href="http://mail.ale.org/mailman/listinfo" target="_blank">http://mail.ale.org/mailman/listinfo</a><br>
<br></blockquote></div><br></div>