<?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: Securely store passwords with bcrypt-ruby; now compatible with JRuby and Ruby 1.9</title>
	<atom:link href="http://blog.phusion.nl/2009/08/13/securely-store-passwords-with-bcrypt-ruby-now-compatible-with-jruby-and-ruby-1-9/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.phusion.nl/2009/08/13/securely-store-passwords-with-bcrypt-ruby-now-compatible-with-jruby-and-ruby-1-9/</link>
	<description></description>
	<lastBuildDate>Fri, 12 Mar 2010 16:01:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Luca</title>
		<link>http://blog.phusion.nl/2009/08/13/securely-store-passwords-with-bcrypt-ruby-now-compatible-with-jruby-and-ruby-1-9/comment-page-1/#comment-16052</link>
		<dc:creator>Luca</dc:creator>
		<pubDate>Tue, 09 Feb 2010 14:07:50 +0000</pubDate>
		<guid isPermaLink="false">http://blog.phusion.nl/?p=316#comment-16052</guid>
		<description>An easier way (and most likely safer), would just to be hand off the authentication to someone else. Use OpenID!</description>
		<content:encoded><![CDATA[<p>An easier way (and most likely safer), would just to be hand off the authentication to someone else. Use OpenID!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Caffeine Driven Development &#187; Blog Archive &#187; L33t Links #2</title>
		<link>http://blog.phusion.nl/2009/08/13/securely-store-passwords-with-bcrypt-ruby-now-compatible-with-jruby-and-ruby-1-9/comment-page-1/#comment-9832</link>
		<dc:creator>Caffeine Driven Development &#187; Blog Archive &#187; L33t Links #2</dc:creator>
		<pubDate>Thu, 03 Sep 2009 07:22:59 +0000</pubDate>
		<guid isPermaLink="false">http://blog.phusion.nl/?p=316#comment-9832</guid>
		<description>[...] How to securely store passwords (using bcrypt-ruby) [...]</description>
		<content:encoded><![CDATA[<p>[...] How to securely store passwords (using bcrypt-ruby) [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ian</title>
		<link>http://blog.phusion.nl/2009/08/13/securely-store-passwords-with-bcrypt-ruby-now-compatible-with-jruby-and-ruby-1-9/comment-page-1/#comment-9807</link>
		<dc:creator>Ian</dc:creator>
		<pubDate>Wed, 02 Sep 2009 15:58:26 +0000</pubDate>
		<guid isPermaLink="false">http://blog.phusion.nl/?p=316#comment-9807</guid>
		<description>You should think about how the hacker would recreate the hashes not about bruteforcing. As bcrypt is open source and if your hacker had a very large dictionary word or known password list, how hard would it be for him to make a bcrypt version of his list and look for matches?

Good salt for sure is always needed no matter what the crypto when you look at this type of attack method. As really the salt is the only strength no matter what algorithm.</description>
		<content:encoded><![CDATA[<p>You should think about how the hacker would recreate the hashes not about bruteforcing. As bcrypt is open source and if your hacker had a very large dictionary word or known password list, how hard would it be for him to make a bcrypt version of his list and look for matches?</p>
<p>Good salt for sure is always needed no matter what the crypto when you look at this type of attack method. As really the salt is the only strength no matter what algorithm.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ruby on Rails: 9 Articles on Rails Authentication</title>
		<link>http://blog.phusion.nl/2009/08/13/securely-store-passwords-with-bcrypt-ruby-now-compatible-with-jruby-and-ruby-1-9/comment-page-1/#comment-9502</link>
		<dc:creator>Ruby on Rails: 9 Articles on Rails Authentication</dc:creator>
		<pubDate>Thu, 27 Aug 2009 04:39:43 +0000</pubDate>
		<guid isPermaLink="false">http://blog.phusion.nl/?p=316#comment-9502</guid>
		<description>[...] 3. Securely store passwords with bcrypt-ruby; now compatible with JRuby and Ruby 1.9 [...]</description>
		<content:encoded><![CDATA[<p>[...] 3. Securely store passwords with bcrypt-ruby; now compatible with JRuby and Ruby 1.9 [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Josh</title>
		<link>http://blog.phusion.nl/2009/08/13/securely-store-passwords-with-bcrypt-ruby-now-compatible-with-jruby-and-ruby-1-9/comment-page-1/#comment-9241</link>
		<dc:creator>Josh</dc:creator>
		<pubDate>Wed, 19 Aug 2009 17:25:54 +0000</pubDate>
		<guid isPermaLink="false">http://blog.phusion.nl/?p=316#comment-9241</guid>
		<description>I would simply like to say thanks. Phusion has done so much to help the Ruby community and we are all very grateful.</description>
		<content:encoded><![CDATA[<p>I would simply like to say thanks. Phusion has done so much to help the Ruby community and we are all very grateful.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Double Shot #519 &#171; A Fresh Cup</title>
		<link>http://blog.phusion.nl/2009/08/13/securely-store-passwords-with-bcrypt-ruby-now-compatible-with-jruby-and-ruby-1-9/comment-page-1/#comment-9178</link>
		<dc:creator>Double Shot #519 &#171; A Fresh Cup</dc:creator>
		<pubDate>Mon, 17 Aug 2009 10:14:04 +0000</pubDate>
		<guid isPermaLink="false">http://blog.phusion.nl/?p=316#comment-9178</guid>
		<description>[...] Securely store passwords with bcrypt-ruby; now compatible with JRuby and Ruby 1.9 &#8211; Thanks to Phusion. [...]</description>
		<content:encoded><![CDATA[<p>[...] Securely store passwords with bcrypt-ruby; now compatible with JRuby and Ruby 1.9 &#8211; Thanks to Phusion. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rory McCune</title>
		<link>http://blog.phusion.nl/2009/08/13/securely-store-passwords-with-bcrypt-ruby-now-compatible-with-jruby-and-ruby-1-9/comment-page-1/#comment-9169</link>
		<dc:creator>Rory McCune</dc:creator>
		<pubDate>Sun, 16 Aug 2009 20:37:24 +0000</pubDate>
		<guid isPermaLink="false">http://blog.phusion.nl/?p=316#comment-9169</guid>
		<description>A couple of points on your article...

 - The goal of a salted hash is to protect against offline brute-force attacks (attacker has access to the database and the hashes).  It&#039;s worth noting that the ideally the salt should be different per user.  Otherwise the attacker can generate a set of rainbow tables for that combination (@hash + word) for a dictionary, relatively easily.  With per-user hashing they need to start from scratch for each user (so no point in creating a rainbow table as it&#039;s no faster than a straight brute-force)

Also the length of the hash doesn&#039;t (IMO) increase the time required to create the rainbow table (assuming that the attacker has access to the hash, which if they&#039;ve got access to the database is a reasonable assumption).

 - Also on the point of password strength, it&#039;s worth noting that if people choose simple dictionary words for passwords then no matter how slow the algorithm you choose, if the attacker just has to create ~50,000 hashes (a typical large password dictionary) then they&#039;ll be able to do that... One option might be to provide some advice to users about creating mnemonic passwords as a good route to create easy to remember passwords that aren&#039;t going to fall to a dictionary attack.</description>
		<content:encoded><![CDATA[<p>A couple of points on your article&#8230;</p>
<p> &#8211; The goal of a salted hash is to protect against offline brute-force attacks (attacker has access to the database and the hashes).  It&#8217;s worth noting that the ideally the salt should be different per user.  Otherwise the attacker can generate a set of rainbow tables for that combination (@hash + word) for a dictionary, relatively easily.  With per-user hashing they need to start from scratch for each user (so no point in creating a rainbow table as it&#8217;s no faster than a straight brute-force)</p>
<p>Also the length of the hash doesn&#8217;t (IMO) increase the time required to create the rainbow table (assuming that the attacker has access to the hash, which if they&#8217;ve got access to the database is a reasonable assumption).</p>
<p> &#8211; Also on the point of password strength, it&#8217;s worth noting that if people choose simple dictionary words for passwords then no matter how slow the algorithm you choose, if the attacker just has to create ~50,000 hashes (a typical large password dictionary) then they&#8217;ll be able to do that&#8230; One option might be to provide some advice to users about creating mnemonic passwords as a good route to create easy to remember passwords that aren&#8217;t going to fall to a dictionary attack.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: hongli</title>
		<link>http://blog.phusion.nl/2009/08/13/securely-store-passwords-with-bcrypt-ruby-now-compatible-with-jruby-and-ruby-1-9/comment-page-1/#comment-9131</link>
		<dc:creator>hongli</dc:creator>
		<pubDate>Fri, 14 Aug 2009 16:48:31 +0000</pubDate>
		<guid isPermaLink="false">http://blog.phusion.nl/?p=316#comment-9131</guid>
		<description>@Randy: I don&#039;t think forcing a password strength will work. Some people are lazy, or just not in the mood of coming up with a good password, or whatever. If you make the registration process harder by enforcing a password strength you may lose users. In the end I think users themselves are responsible for their password&#039;s strength.</description>
		<content:encoded><![CDATA[<p>@Randy: I don&#8217;t think forcing a password strength will work. Some people are lazy, or just not in the mood of coming up with a good password, or whatever. If you make the registration process harder by enforcing a password strength you may lose users. In the end I think users themselves are responsible for their password&#8217;s strength.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Randy Bias</title>
		<link>http://blog.phusion.nl/2009/08/13/securely-store-passwords-with-bcrypt-ruby-now-compatible-with-jruby-and-ruby-1-9/comment-page-1/#comment-9130</link>
		<dc:creator>Randy Bias</dc:creator>
		<pubDate>Fri, 14 Aug 2009 16:40:08 +0000</pubDate>
		<guid isPermaLink="false">http://blog.phusion.nl/?p=316#comment-9130</guid>
		<description>Why are you letting your end users provide trivially guessable dictionary words for passwords?  That doesn&#039;t make any sense at all.  You will probably get more mileage from simply enforcing semi-sane password picking behavior.</description>
		<content:encoded><![CDATA[<p>Why are you letting your end users provide trivially guessable dictionary words for passwords?  That doesn&#8217;t make any sense at all.  You will probably get more mileage from simply enforcing semi-sane password picking behavior.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: hongli</title>
		<link>http://blog.phusion.nl/2009/08/13/securely-store-passwords-with-bcrypt-ruby-now-compatible-with-jruby-and-ruby-1-9/comment-page-1/#comment-9129</link>
		<dc:creator>hongli</dc:creator>
		<pubDate>Fri, 14 Aug 2009 16:36:58 +0000</pubDate>
		<guid isPermaLink="false">http://blog.phusion.nl/?p=316#comment-9129</guid>
		<description>@jeff: someone already answered this for you on Reddit:
&lt;blockquote&gt;If an attacker gets hold of your database, he can use a modest GPU to crack SHA1 at about 70 million hashes per second. I&#039;m not aware of any GPU bcrypt crackers; he might manage a few hundred per second with the same resources, and even if he has an FPGA to play with he&#039;s not going to do much better than that.

Sure, you can make the login delays fake, but why deliberately pick the solution that&#039;s a million times weaker for a similar amount of implementation effort?

scrypt is an even more secure alternative, since it&#039;s not just processing-hard, but memory-hard, thus eating up even more gates on an FPGA and limiting possible concurrency on a GPU (if you can even implement it there).&lt;/blockquote&gt;

@Dan: That&#039;s assuming there are no weaknesses in SHA-1 to exploit. In practice there are, and the exploits will probably become better over time.</description>
		<content:encoded><![CDATA[<p>@jeff: someone already answered this for you on Reddit:</p>
<blockquote><p>If an attacker gets hold of your database, he can use a modest GPU to crack SHA1 at about 70 million hashes per second. I&#8217;m not aware of any GPU bcrypt crackers; he might manage a few hundred per second with the same resources, and even if he has an FPGA to play with he&#8217;s not going to do much better than that.</p>
<p>Sure, you can make the login delays fake, but why deliberately pick the solution that&#8217;s a million times weaker for a similar amount of implementation effort?</p>
<p>scrypt is an even more secure alternative, since it&#8217;s not just processing-hard, but memory-hard, thus eating up even more gates on an FPGA and limiting possible concurrency on a GPU (if you can even implement it there).</p></blockquote>
<p>@Dan: That&#8217;s assuming there are no weaknesses in SHA-1 to exploit. In practice there are, and the exploits will probably become better over time.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
