<div dir="ltr"><div style="font-family:arial,sans-serif;font-size:12.666666984558105px">Hello Rahul,</div><div style="font-family:arial,sans-serif;font-size:12.666666984558105px"><br></div><div style="font-family:arial,sans-serif;font-size:12.666666984558105px">

Thanks for explaining me the point. I would like to discuss on few key points. I would take them one by one from start.</div><div style="font-family:arial,sans-serif;font-size:12.666666984558105px"><br></div><div style="font-family:arial,sans-serif;font-size:12.666666984558105px">

We all are clear with the reason that why we need to <b>hash</b> passwords before storing them in database. Next point is that even when we are storing hashed password if someone get access to our database he will be able to see the hashed passwords and he can easily lookup in <b>rainbow table</b> corresponding to that hashing algorithm. As quoted on *Stack Overflow* :</div>

<div style="font-family:arial,sans-serif;font-size:12.666666984558105px"><br></div><div style="font-family:arial,sans-serif;font-size:12.666666984558105px"><span style="color:rgb(51,51,51);font-family:'Helvetica Neue',Arial,sans-serif;line-height:14.399999618530273px">"frameworks such as </span><a href="http://en.wikipedia.org/wiki/OpenCL" target="_blank" style="color:rgb(27,96,138);margin:0px;padding:0px;border-width:0px 0px 1px;border-bottom-style:dotted;vertical-align:baseline;text-decoration:initial;font-family:'Helvetica Neue',Arial,sans-serif;line-height:14.399999618530273px">OpenCL</a><span style="color:rgb(51,51,51);font-family:'Helvetica Neue',Arial,sans-serif;line-height:14.399999618530273px"> and </span><a href="http://en.wikipedia.org/wiki/CUDA" target="_blank" style="color:rgb(27,96,138);margin:0px;padding:0px;border-width:0px 0px 1px;border-bottom-style:dotted;vertical-align:baseline;text-decoration:initial;font-family:'Helvetica Neue',Arial,sans-serif;line-height:14.399999618530273px">CUDA</a><span style="color:rgb(51,51,51);font-family:'Helvetica Neue',Arial,sans-serif;line-height:14.399999618530273px"> can be leveraged in order to massively accelerate the operation of hash algorithms. Run </span><a href="http://hashcat.net/oclhashcat-lite/" target="_blank" style="color:rgb(27,96,138);margin:0px;padding:0px;border-width:0px 0px 1px;border-bottom-style:dotted;vertical-align:baseline;text-decoration:initial;font-family:'Helvetica Neue',Arial,sans-serif;line-height:14.399999618530273px">oclHashcat</a><span style="color:rgb(51,51,51);font-family:'Helvetica Neue',Arial,sans-serif;line-height:14.399999618530273px"> with a decent graphics card and you can compute an excess of 10,000,000,000 MD5 hashes per second"</span></div>

<div style="font-family:arial,sans-serif;font-size:12.666666984558105px"><br></div><div style="font-family:arial,sans-serif;font-size:12.666666984558105px">As computational power is increasing so is the database of "Rainbow tables", hence it is<b>very insecure to just store hash</b>. So we will add a <b>salt to the password</b>, now if salt is just a static 10-15 digit string and attacker comes to know about it along with database access, he can generate a Rainbow Table of his own for that (salt + different_combinations) and can easily compromise security of thousands of users that are present in that database.</div>

<div style="font-family:arial,sans-serif;font-size:12.666666984558105px"><br></div><div style="font-family:arial,sans-serif;font-size:12.666666984558105px">Hence it is necessary to generate dynamic salts for each user and store them in database. So even if the attacker has access to database he will not be able to reverse lookup passwords because even though he knows dynamic salt but he still does not has static salt which is securely stored in configuration file and not in database.</div>

<div style="font-family:arial,sans-serif;font-size:12.666666984558105px"><br></div><div style="font-family:arial,sans-serif;font-size:12.666666984558105px"><b>My point is</b>, even if an <b>attack takes place</b> and attacker gains just database access there is really no need <b>change the value of static salt </b>because it is still kept secured inside configuration file.  I find no valid reason for changing static salt <b>except when</b> the configuration file is itself compromised which is worst scenario (if he has file level access then he can delete them also !!)</div>

<div style="font-family:arial,sans-serif;font-size:12.666666984558105px"><br></div><div style="font-family:arial,sans-serif;font-size:12.666666984558105px">Also, I find no good reason for storing the hashing algo in the database until and unless we are using different hashing algo for different users in one single application (which is generally not the case). </div>

<div style="font-family:arial,sans-serif;font-size:12.666666984558105px"><br></div><div style="font-family:arial,sans-serif;font-size:12.666666984558105px">Imagine a scenario in which attacker has database access but there are <b>only two columns</b>related to passwords in the db, one is the <b>salt</b> and other is the <b>hash</b> itself. Firstly, he will have to figure out which hashing algorithm is used which <b>might be a tedious task, definitely more tedious than by just looking at some column </b>(though I am not sure that if we can determine hashing algorithm used just by looking at hash generated, if you know any such method then please share with us), secondly even if attacker comes to know which hashing algorithm is being used he can practically fetch nothing out of that database until and unless he comes to know about the <b>static salt</b>, which is inside a secure file. This is the main reason of using static salt.</div>

<div style="font-family:arial,sans-serif;font-size:12.666666984558105px"><br></div><div style="font-family:arial,sans-serif;font-size:12.666666984558105px">I was thinking that can we further thwart the process of reverse look up ? For example, I have just one column in the database. In that column, first 30 digits will contain the actual hash and last 20 will contain the salt (just random assumption for illustration purpose). In this case if attacker gains database access, he will have no clue of hash algorithm , no clue of hash, no clue of salt (until and unless the attacker is database manager ! ). So it will essentially increase one more step for attacker in determining reverse hashes. I read this method somewhere on the internet and I am not sure about efficiency / reliability of this method.</div>

<div style="font-family:arial,sans-serif;font-size:12.666666984558105px"><br></div><div style="font-family:arial,sans-serif;font-size:12.666666984558105px">I hope I answered all your questions. </div><div style="font-family:arial,sans-serif;font-size:12.666666984558105px">

<br></div><div style="font-family:arial,sans-serif;font-size:12.666666984558105px">NOTE: All the above conclusion are made by me after going through various articles on OWASP, stack overflow etc. My thinking/assumptions might be wrong in above explanations. Please correct me if so. <b>Learning is the main goal of working with an Open source community</b> !</div>

<div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Sep 4, 2013 at 3:55 AM, rahul chaudhary <span dir="ltr"><<a href="mailto:rahul300chaudhary400@gmail.com" target="_blank">rahul300chaudhary400@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">ok...so you must know the reason why I stored static salt in DB in the first place.....since static salt was a user defined value and I thought that if someone changes the static salt later at some point, the whole application will break down....so to save this thing, I also stored static salt in the DB, so that even if the developer changes the salt at some point (like after some attack) , the application wont fail, it would just start storing new hashed with the new salt and would get the old hashes with the old salt.<div>


So, if everyone will vote-up that static salts must not be stored in the DB, then I will change that. :)</div><div><br></div><div>However, the point you stated that if DB is compromised. that point is perfectly genuine and legit. So, this is definitely a point worth discussing. ^_^</div>


<div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">On Tue, Sep 3, 2013 at 7:32 AM, Abbas Naderi <span dir="ltr"><<a href="mailto:abiusx@owasp.org" target="_blank">abiusx@owasp.org</a>></span> wrote:<br>


</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div style="word-wrap:break-word">Yes<div><br><div>
<span style="border-spacing:0px;text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Helvetica;word-spacing:0px"><div style="word-wrap:break-word">


<span style="border-spacing:0px;text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Helvetica;word-spacing:0px"><div style="word-wrap:break-word">


<span style="border-spacing:0px;text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Helvetica;word-spacing:0px"><div style="word-wrap:break-word">


<span style="border-spacing:0px;text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Helvetica;word-spacing:0px"><div style="word-wrap:break-word">


<span style="border-spacing:0px;text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Helvetica;word-spacing:0px"><div style="word-wrap:break-word">


<span style="border-spacing:0px;text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Helvetica;word-spacing:0px"><div style="word-wrap:break-word">


<span style="border-spacing:0px;text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Helvetica;word-spacing:0px"><div style="word-wrap:break-word">


<span style="border-spacing:0px;text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Helvetica;word-spacing:0px"><div style="word-wrap:break-word">


<span style="border-spacing:0px;text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Helvetica;word-spacing:0px"><div style="word-wrap:break-word">


<span style="border-spacing:0px;text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Helvetica;word-spacing:0px"><div style="word-wrap:break-word">


<div style="font-weight:normal"><div>______________________________________________________________</div><div><b>Notice:</b><b> </b>This message is <b>digitally signed</b>, its <b>source</b> and <b>integrity</b> are verifiable.</div>


<div>If you mail client does not support S/MIME verification, it will display a file (smime.p7s), which includes the X.509 certificate and the signature body.  Read more at <a href="http://abiusx.com/certified-e-mail-with-comodo-and-thunderbird/" target="_blank">Certified E-Mail with Comodo and Thunderbird</a> in <a href="http://AbiusX.com" target="_blank">AbiusX.com</a></div>


</div></div></span></div></span></div></span></div></span></div></span></div></span></div></span></div></span></div></span></div></span>
</div>
<br></div><div><div><div><div>On Sep 3, 2013, at 6:12 AM, Shivam Dixit <<a href="mailto:shivamd001@gmail.com" target="_blank">shivamd001@gmail.com</a>> wrote:</div><br><blockquote type="cite"><div dir="ltr">
<div>On Mon, Sep 2, 2013 at 9:47 PM, Abbas Naderi <span dir="ltr"><<a href="mailto:abiusx@owasp.org" target="_blank">abiusx@owasp.org</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">




<div style="word-wrap:break-word">Hi Shivam,<div>Good point.</div><div>We need to move the static salt to the library as a static confidential string object.</div><div>Thanks</div><div>-Abbas<br><div><span style="border-spacing:0px;text-align:-webkit-auto;border-collapse:separate;font-size:medium;font-family:Helvetica">

<div style="word-wrap:break-word"><span style="border-spacing:0px;text-align:-webkit-auto;border-collapse:separate"><div style="word-wrap:break-word">

<span style="border-spacing:0px;text-align:-webkit-auto;border-collapse:separate"><div style="word-wrap:break-word"><span style="border-spacing:0px;text-align:-webkit-auto;border-collapse:separate"><div style="word-wrap:break-word">




<span style="border-spacing:0px;text-align:-webkit-auto;border-collapse:separate"><div style="word-wrap:break-word"><span style="border-spacing:0px;text-align:-webkit-auto;border-collapse:separate"><div style="word-wrap:break-word">




<span style="border-spacing:0px;text-align:-webkit-auto;border-collapse:separate"><div style="word-wrap:break-word"><span style="border-spacing:0px;text-align:-webkit-auto;border-collapse:separate"><div style="word-wrap:break-word">




<span style="border-spacing:0px;text-align:-webkit-auto;border-collapse:separate"><div style="word-wrap:break-word"><br></div></span></div></span></div></span></div></span></div></span></div></span></div></span></div></span></div>




</span></div></div></div></blockquote><div> </div></div></div>Hello Abbas,<div><br></div><div>Shall I file an issue on github for this problem also ?</div><div class="gmail_extra"><br><div dir="ltr"><div style="color:rgb(136,136,136)">




<font color="#999999" face="verdana, sans-serif"><b>Cheers,</b></font></div><div style="color:rgb(136,136,136)"><font color="#999999" face="verdana, sans-serif"><b>Shivam</b></font></div>

</div>
</div></div>
</blockquote></div><br></div></div></div><br></div></div><div class="im">_______________________________________________<br>
OWASP_PHP_Security_Project mailing list<br>
<a href="mailto:OWASP_PHP_Security_Project@lists.owasp.org" target="_blank">OWASP_PHP_Security_Project@lists.owasp.org</a><br>
<a href="https://lists.owasp.org/mailman/listinfo/owasp_php_security_project" target="_blank">https://lists.owasp.org/mailman/listinfo/owasp_php_security_project</a><br>
<br></div></blockquote></div><span class="HOEnZb"><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div>Regards,</div><div>Rahul Chaudhary</div><div>Ph - 412-519-9634</div>
</font></span></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr"><div style="color:rgb(136,136,136);background-color:rgb(255,255,255)"><font color="#999999" face="verdana, sans-serif"><b>Cheers,</b></font></div>

<div style="color:rgb(136,136,136);background-color:rgb(255,255,255)"><font color="#999999" face="verdana, sans-serif"><b>Shivam</b></font></div></div>
</div></div>