<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: HOWTO securely hash&#160;passwords</title>
	<atom:link href="http://boingboing.net/2012/06/11/howto-securely-hash-passwords.html/feed" rel="self" type="application/rss+xml" />
	<link>http://boingboing.net/2012/06/11/howto-securely-hash-passwords.html</link>
	<description>Brain candy for Happy Mutants</description>
	<lastBuildDate>Thu, 23 May 2013 22:24:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.1</generator>
	<item>
		<title>By: Schneems</title>
		<link>http://boingboing.net/2012/06/11/howto-securely-hash-passwords.html#comment-1448024</link>
		<dc:creator>Schneems</dc:creator>
		<pubDate>Tue, 12 Jun 2012 18:48:00 +0000</pubDate>
		<guid isPermaLink="false">http://boingboing.net/?p=165762#comment-1448024</guid>
		<description>Even if you made the wrong decisions from the start, companies can easily secure this data. I did a write up on how a developer could convert insecure passwords to secure passwords in half a day or less http://schneems.com/post/24678036532/zomg-my-passwords-are-insecure-now-what</description>
		<content:encoded><![CDATA[<p>Even if you made the wrong decisions from the start, companies can easily secure this data. I did a write up on how a developer could convert insecure passwords to secure passwords in half a day or less http://schneems.com/post/24678036532/zomg-my-passwords-are-insecure-now-what</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: HahTse</title>
		<link>http://boingboing.net/2012/06/11/howto-securely-hash-passwords.html#comment-1447943</link>
		<dc:creator>HahTse</dc:creator>
		<pubDate>Tue, 12 Jun 2012 16:48:00 +0000</pubDate>
		<guid isPermaLink="false">http://boingboing.net/?p=165762#comment-1447943</guid>
		<description>Crappy password.

See https://xkcd.com/936/ for better alternative.

EDIT: Crappy for not being easy to memorize and thus being easily forgotten if not written down somewhere. The actual entropy of it is fine.</description>
		<content:encoded><![CDATA[<p>Crappy password.</p>
<p>See <a href="https://xkcd.com/936/" rel="nofollow">https://xkcd.com/936/</a> for better alternative.</p>
<p>EDIT: Crappy for not being easy to memorize and thus being easily forgotten if not written down somewhere. The actual entropy of it is fine.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: cfuse</title>
		<link>http://boingboing.net/2012/06/11/howto-securely-hash-passwords.html#comment-1447768</link>
		<dc:creator>cfuse</dc:creator>
		<pubDate>Tue, 12 Jun 2012 07:41:00 +0000</pubDate>
		<guid isPermaLink="false">http://boingboing.net/?p=165762#comment-1447768</guid>
		<description>Why not just expire people&#039;s passwords and shunt them through the upgraded password procedure?

If accounts are suspected of being compromised, you lock them and force the user to go through a password change anyway. Aren&#039;t people accepting of this kind of thing by now? </description>
		<content:encoded><![CDATA[<p>Why not just expire people&#8217;s passwords and shunt them through the upgraded password procedure?</p>
<p>If accounts are suspected of being compromised, you lock them and force the user to go through a password change anyway. Aren&#8217;t people accepting of this kind of thing by now? </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: LennStar</title>
		<link>http://boingboing.net/2012/06/11/howto-securely-hash-passwords.html#comment-1447765</link>
		<dc:creator>LennStar</dc:creator>
		<pubDate>Tue, 12 Jun 2012 07:36:00 +0000</pubDate>
		<guid isPermaLink="false">http://boingboing.net/?p=165762#comment-1447765</guid>
		<description>Even the slowest hash does nothing for security for the top 100 passwords like... password, swordfish and of course 123456
</description>
		<content:encoded><![CDATA[<p>Even the slowest hash does nothing for security for the top 100 passwords like&#8230; password, swordfish and of course 123456</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mercedes42</title>
		<link>http://boingboing.net/2012/06/11/howto-securely-hash-passwords.html#comment-1447696</link>
		<dc:creator>mercedes42</dc:creator>
		<pubDate>Tue, 12 Jun 2012 04:25:00 +0000</pubDate>
		<guid isPermaLink="false">http://boingboing.net/?p=165762#comment-1447696</guid>
		<description>But what does it all MEAN?</description>
		<content:encoded><![CDATA[<p>But what does it all MEAN?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeremiah Blatz</title>
		<link>http://boingboing.net/2012/06/11/howto-securely-hash-passwords.html#comment-1447587</link>
		<dc:creator>Jeremiah Blatz</dc:creator>
		<pubDate>Mon, 11 Jun 2012 23:49:00 +0000</pubDate>
		<guid isPermaLink="false">http://boingboing.net/?p=165762#comment-1447587</guid>
		<description>This is entirely correct. Alternately (and probably easier long-term), add a &quot;version&quot; column to your password table, and overwrite the old password storage value with the new one. Since modern password storage systems like scrypt, bcrypt, PBKDF2, etc are tunable, you&#039;ll want to periodically re-tune your paramaters anyway, so you&#039;ll want the capability to do password versioning anyway.</description>
		<content:encoded><![CDATA[<p>This is entirely correct. Alternately (and probably easier long-term), add a &#8220;version&#8221; column to your password table, and overwrite the old password storage value with the new one. Since modern password storage systems like scrypt, bcrypt, PBKDF2, etc are tunable, you&#8217;ll want to periodically re-tune your paramaters anyway, so you&#8217;ll want the capability to do password versioning anyway.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: BarBarSeven</title>
		<link>http://boingboing.net/2012/06/11/howto-securely-hash-passwords.html#comment-1447579</link>
		<dc:creator>BarBarSeven</dc:creator>
		<pubDate>Mon, 11 Jun 2012 23:39:00 +0000</pubDate>
		<guid isPermaLink="false">http://boingboing.net/?p=165762#comment-1447579</guid>
		<description>Decrypt that hash and win a no prize! Excelsior!</description>
		<content:encoded><![CDATA[<p>Decrypt that hash and win a no prize! Excelsior!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: joshhaglund</title>
		<link>http://boingboing.net/2012/06/11/howto-securely-hash-passwords.html#comment-1447569</link>
		<dc:creator>joshhaglund</dc:creator>
		<pubDate>Mon, 11 Jun 2012 23:14:00 +0000</pubDate>
		<guid isPermaLink="false">http://boingboing.net/?p=165762#comment-1447569</guid>
		<description>yep, nesting hash functions like:  bcrypt(md5( password )) is the easiest and most immediate fix (waiting for users to log in leaves their accounts vulnerable).  But when you make this change you&#039;ll have to take your site down and run:
update users set md5password = bcrypt(md5password)

on your db and that could take a quite a while if you&#039;ve got 1million users.

oh, or, like you said, do this in a different db.  maybe flag accounts that updated pw during the 2day update, run them again at the end</description>
		<content:encoded><![CDATA[<p>yep, nesting hash functions like:  bcrypt(md5( password )) is the easiest and most immediate fix (waiting for users to log in leaves their accounts vulnerable).  But when you make this change you&#8217;ll have to take your site down and run:<br />
update users set md5password = bcrypt(md5password)</p>
<p>on your db and that could take a quite a while if you&#8217;ve got 1million users.</p>
<p>oh, or, like you said, do this in a different db.  maybe flag accounts that updated pw during the 2day update, run them again at the end</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: corydodt</title>
		<link>http://boingboing.net/2012/06/11/howto-securely-hash-passwords.html#comment-1447568</link>
		<dc:creator>corydodt</dc:creator>
		<pubDate>Mon, 11 Jun 2012 23:13:00 +0000</pubDate>
		<guid isPermaLink="false">http://boingboing.net/?p=165762#comment-1447568</guid>
		<description>Hashes don&#039;t really work like that? Your &quot;inner&quot; hash is the user&#039;s password. Your &quot;outer&quot; hash is, I guess, the inner hash? If I understand you correctly.

But nobody ever types the &quot;inner&quot; hash. So when it comes time to log in, you don&#039;t have anything to hash again to compare.

SamLL&#039;s method seems sane, though.

&lt;i&gt;Edit&lt;/i&gt; Ok i think i get it. You keep both hashes, but you still compute the slow hash at login-time. Annoying in that you have an extra column in your database table, but not unreasonable.</description>
		<content:encoded><![CDATA[<p>Hashes don&#8217;t really work like that? Your &#8220;inner&#8221; hash is the user&#8217;s password. Your &#8220;outer&#8221; hash is, I guess, the inner hash? If I understand you correctly.</p>
<p>But nobody ever types the &#8220;inner&#8221; hash. So when it comes time to log in, you don&#8217;t have anything to hash again to compare.</p>
<p>SamLL&#8217;s method seems sane, though.</p>
<p><i>Edit</i> Ok i think i get it. You keep both hashes, but you still compute the slow hash at login-time. Annoying in that you have an extra column in your database table, but not unreasonable.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: SoItBegins</title>
		<link>http://boingboing.net/2012/06/11/howto-securely-hash-passwords.html#comment-1447562</link>
		<dc:creator>SoItBegins</dc:creator>
		<pubDate>Mon, 11 Jun 2012 22:46:00 +0000</pubDate>
		<guid isPermaLink="false">http://boingboing.net/?p=165762#comment-1447562</guid>
		<description> Yes, except you just posted your password in plain view on BoingBoing.</description>
		<content:encoded><![CDATA[<p> Yes, except you just posted your password in plain view on BoingBoing.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ahecht</title>
		<link>http://boingboing.net/2012/06/11/howto-securely-hash-passwords.html#comment-1447559</link>
		<dc:creator>ahecht</dc:creator>
		<pubDate>Mon, 11 Jun 2012 22:38:00 +0000</pubDate>
		<guid isPermaLink="false">http://boingboing.net/?p=165762#comment-1447559</guid>
		<description>Even easier is to just create a database of the slow hashes of your old fast hashes. Yes, it means you have to perform two hash operations when a user logs in, but the fast hash is, by definition, fast, and shouldn&#039;t add a lot of overhead. Assuming the slow hash takes 100ms, it would only take LinkedIn 2 days to generate slow hashes for it&#039;s 161 million members if they can get 100 machines working on it.</description>
		<content:encoded><![CDATA[<p>Even easier is to just create a database of the slow hashes of your old fast hashes. Yes, it means you have to perform two hash operations when a user logs in, but the fast hash is, by definition, fast, and shouldn&#8217;t add a lot of overhead. Assuming the slow hash takes 100ms, it would only take LinkedIn 2 days to generate slow hashes for it&#8217;s 161 million members if they can get 100 machines working on it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: nox</title>
		<link>http://boingboing.net/2012/06/11/howto-securely-hash-passwords.html#comment-1447556</link>
		<dc:creator>nox</dc:creator>
		<pubDate>Mon, 11 Jun 2012 22:33:00 +0000</pubDate>
		<guid isPermaLink="false">http://boingboing.net/?p=165762#comment-1447556</guid>
		<description>Rainbow tables are ultimately a sophisticated dictionary attack and need some expectation of what the plaintext passwords are in order to be effective.  Wouldn&#039;t have had any luck with my password: oqN1ILN8C8mDyC. (created before linked-in supported symbols in passwords).

Users need to be educated to take ownership of their security. Lastpass and yubikey is pretty solid.  </description>
		<content:encoded><![CDATA[<p>Rainbow tables are ultimately a sophisticated dictionary attack and need some expectation of what the plaintext passwords are in order to be effective.  Wouldn&#8217;t have had any luck with my password: oqN1ILN8C8mDyC. (created before linked-in supported symbols in passwords).</p>
<p>Users need to be educated to take ownership of their security. Lastpass and yubikey is pretty solid.  </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: SamLL</title>
		<link>http://boingboing.net/2012/06/11/howto-securely-hash-passwords.html#comment-1447551</link>
		<dc:creator>SamLL</dc:creator>
		<pubDate>Mon, 11 Jun 2012 22:22:00 +0000</pubDate>
		<guid isPermaLink="false">http://boingboing.net/?p=165762#comment-1447551</guid>
		<description>Can&#039;t you retrofit it with the following procedure: 

Start with the old password hashes. Create a new table for the new password hashes, one row per user, and initialize it all to empty. 

Whenever a user attempts to sign in, see if they have an entry in the new hash table. If so, check their password against the new hash table, with the new slow hash, and ignore any entry in the old table.

If they did not have an entry in the new hash table, check their password against the old table with the old fast hash. If it checks out, calculate the slow hash, fill in the row in the new table, and delete their row in the old password has table.

Unless I&#039;m missing something, this should let you gradually switch hash algorithms with no disruption to any user. Obviously you might still have legacy users who haven&#039;t signed in for a long time still with their old-system hash, but you never store the same password with two different hashes, which might conceivably expose you to some kind of cryptographic attack.</description>
		<content:encoded><![CDATA[<p>Can&#8217;t you retrofit it with the following procedure: </p>
<p>Start with the old password hashes. Create a new table for the new password hashes, one row per user, and initialize it all to empty. </p>
<p>Whenever a user attempts to sign in, see if they have an entry in the new hash table. If so, check their password against the new hash table, with the new slow hash, and ignore any entry in the old table.</p>
<p>If they did not have an entry in the new hash table, check their password against the old table with the old fast hash. If it checks out, calculate the slow hash, fill in the row in the new table, and delete their row in the old password has table.</p>
<p>Unless I&#8217;m missing something, this should let you gradually switch hash algorithms with no disruption to any user. Obviously you might still have legacy users who haven&#8217;t signed in for a long time still with their old-system hash, but you never store the same password with two different hashes, which might conceivably expose you to some kind of cryptographic attack.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
