<?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 for Hash Collisions</title>
	<atom:link href="http://www.hashcollisions.com/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hashcollisions.com</link>
	<description>Software development, usability, and digital culture</description>
	<lastBuildDate>Tue, 28 Jun 2011 18:47:12 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>Comment on Can bcrypt&#8217;s computational expense be reduced on the server side? by Andres</title>
		<link>http://www.hashcollisions.com/2011/06/can-bcrypts-computational-expense-be-reduced-on-the-server-side/comment-page-1/#comment-537</link>
		<dc:creator>Andres</dc:creator>
		<pubDate>Tue, 28 Jun 2011 18:47:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.hashcollisions.com/?p=22#comment-537</guid>
		<description>Robin,

Yes, if an attacker obtained the password database, they could use the password hashes to log in with any particular user&#039;s account.  They wouldn&#039;t need to know that user&#039;s plaintext password.

Like you, I&#039;d also thought about storing a second-level hash (a hash of the bcrypt hash).  However, I didn&#039;t mention it because I don&#039;t currently understand the complexity of hash functions well enough.  There are at least two issues that come to mind regarding the complexity of the second-level hash function:

1) If we used MD5 or SHA-1, would this cause the same problem Coda Hale warned against?  A bcrypt hash would likely be longer and more complex than a typical user-defined 6 character password.  Could a cracker feasibly produce the MD5 hashes for all the strings as long as a bcrypt hash?  (I don&#039;t know how much slower MD5 gets with each additional input character, or how much slower it gets to produce MD5 hashes for all the strings of a given length.)

2) If we used bcrypt itself as a 2nd-level hash, wouldn&#039;t that cause the same problem I was trying to avoid (running bcrypt at log-in time)?  Maybe this 2nd-level bcrypt hash could be configured to be less computationally expensive that the 1st-level hash (the one used on a user&#039;s plaintext password).  Thus it&#039;d be moderately inexpensive to verify a user&#039;s password, but more expensive to crack it (since the input string the password cracker is trying to find is a bcrypt hash, not a traditional, weak user-selected password).  Like you said, I need a security expert (or several) to look into this.

Thank you for your feedback.</description>
		<content:encoded><![CDATA[<p>Robin,</p>
<p>Yes, if an attacker obtained the password database, they could use the password hashes to log in with any particular user&#8217;s account.  They wouldn&#8217;t need to know that user&#8217;s plaintext password.</p>
<p>Like you, I&#8217;d also thought about storing a second-level hash (a hash of the bcrypt hash).  However, I didn&#8217;t mention it because I don&#8217;t currently understand the complexity of hash functions well enough.  There are at least two issues that come to mind regarding the complexity of the second-level hash function:</p>
<p>1) If we used MD5 or SHA-1, would this cause the same problem Coda Hale warned against?  A bcrypt hash would likely be longer and more complex than a typical user-defined 6 character password.  Could a cracker feasibly produce the MD5 hashes for all the strings as long as a bcrypt hash?  (I don&#8217;t know how much slower MD5 gets with each additional input character, or how much slower it gets to produce MD5 hashes for all the strings of a given length.)</p>
<p>2) If we used bcrypt itself as a 2nd-level hash, wouldn&#8217;t that cause the same problem I was trying to avoid (running bcrypt at log-in time)?  Maybe this 2nd-level bcrypt hash could be configured to be less computationally expensive that the 1st-level hash (the one used on a user&#8217;s plaintext password).  Thus it&#8217;d be moderately inexpensive to verify a user&#8217;s password, but more expensive to crack it (since the input string the password cracker is trying to find is a bcrypt hash, not a traditional, weak user-selected password).  Like you said, I need a security expert (or several) to look into this.</p>
<p>Thank you for your feedback.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Can bcrypt&#8217;s computational expense be reduced on the server side? by Andres</title>
		<link>http://www.hashcollisions.com/2011/06/can-bcrypts-computational-expense-be-reduced-on-the-server-side/comment-page-1/#comment-536</link>
		<dc:creator>Andres</dc:creator>
		<pubDate>Tue, 28 Jun 2011 17:22:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.hashcollisions.com/?p=22#comment-536</guid>
		<description>This article is being disccussed on Hacker News.  Be sure to check it out:

http://news.ycombinator.com/item?id=2705915</description>
		<content:encoded><![CDATA[<p>This article is being disccussed on Hacker News.  Be sure to check it out:</p>
<p><a href="http://news.ycombinator.com/item?id=2705915" rel="nofollow">http://news.ycombinator.com/item?id=2705915</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Can bcrypt&#8217;s computational expense be reduced on the server side? by Robin Message</title>
		<link>http://www.hashcollisions.com/2011/06/can-bcrypts-computational-expense-be-reduced-on-the-server-side/comment-page-1/#comment-535</link>
		<dc:creator>Robin Message</dc:creator>
		<pubDate>Tue, 28 Jun 2011 16:24:47 +0000</pubDate>
		<guid isPermaLink="false">http://www.hashcollisions.com/?p=22#comment-535</guid>
		<description>&gt; Account Log-in
&gt; 6 The browser submits Turing’s username and bcrypted hash to SecureR.
&gt; 7 SecureR directly compares the hash submitted by Turing with the one stored in his user record. If they match, account access is granted.

So, suppose I&#039;ve stolen the password database of SecureR. Unfortunately, I can&#039;t recover the password of the user. However, I only need the hash of it (which is stored in the database) to log in, so I don&#039;t need to recover the password anyway.

This does protect against exposing the user&#039;s password, so it&#039;s not a total waste. An additional wrinkle:

You could store the hash of the bcrypted password in the database. The browser would submit the bcrypted password in 6, and the server would hash it in 7 before checking it. This makes recovering the password infeasible but logging in is cheap for the server, and the input to the hash function has high entropy, so it will still be hard to crack. At this point though, you need a security expert to evaluate it.</description>
		<content:encoded><![CDATA[<p>&gt; Account Log-in<br />
&gt; 6 The browser submits Turing’s username and bcrypted hash to SecureR.<br />
&gt; 7 SecureR directly compares the hash submitted by Turing with the one stored in his user record. If they match, account access is granted.</p>
<p>So, suppose I&#8217;ve stolen the password database of SecureR. Unfortunately, I can&#8217;t recover the password of the user. However, I only need the hash of it (which is stored in the database) to log in, so I don&#8217;t need to recover the password anyway.</p>
<p>This does protect against exposing the user&#8217;s password, so it&#8217;s not a total waste. An additional wrinkle:</p>
<p>You could store the hash of the bcrypted password in the database. The browser would submit the bcrypted password in 6, and the server would hash it in 7 before checking it. This makes recovering the password infeasible but logging in is cheap for the server, and the input to the hash function has high entropy, so it will still be hard to crack. At this point though, you need a security expert to evaluate it.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

