<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Question for the crypto-gurus out there (skip to <b>TLDR</b> if you want).<div><br></div><div>What is the best practice (for today) when dealing with passwords over websites, given the following context and assumptions:</div><div><br></div><div>Context:</div><div><br></div><div>- Hashed/encrypted passwords stored in server database</div><div>- User enters password in form and sends to server over HTTPS</div><div>- KDF algorithm shouldn't run for more than 2 seconds on any modern mobile device</div><div><br></div><div>Assumptions:</div><div><br></div><div>- It is better to send the encrypted password over the wire than the password itself</div><div><br></div><div>Known knowns:</div><div><br></div><div><div>- Server can run all three KDFs natively.</div><div></div></div><div>- Clients (web browsers) can only run PBKDF2 natively for browsers that support that part of the WebCrypto spec</div><div><br></div><div><b>TLDR:</b></div><div><br></div><div>That last part is the crux of the question: since only PBKDF2 (might) be supported natively, and scrypt/bcrypt are forced to run in JS, does that imply that in the case of login forms PBKDF2 is actually /more secure/ than scrypt/bcrypt given our 2 second runtime constraint?</div><div><br></div><div>How do I even begin to test/validate this question?</div><div><br></div><div>Many thanks!</div><div><br></div><div>Greg Slepak</div><div><br></div><div><div apple-content-edited="true"><span style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; display: inline !important; float: none;">--</span><br style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><span style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; display: inline !important; float: none;">Please do not email me anything that you are not comfortable also sharing</span><span style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; display: inline !important; float: none;"> with the NSA.</span>
</div>

<br></div></body></html>