<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Mesh design pattern: hash-and-decrypt</title>
	<atom:link href="http://rdist.root.org/2007/04/09/mesh-design-pattern-hash-and-decrypt/feed/" rel="self" type="application/rss+xml" />
	<link>http://rdist.root.org/2007/04/09/mesh-design-pattern-hash-and-decrypt/</link>
	<description>Embedded security, crypto, software protection</description>
	<lastBuildDate>Mon, 06 Feb 2012 20:16:28 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: Nate Lawson</title>
		<link>http://rdist.root.org/2007/04/09/mesh-design-pattern-hash-and-decrypt/comment-page-1/#comment-2658</link>
		<dc:creator><![CDATA[Nate Lawson]]></dc:creator>
		<pubDate>Thu, 23 Aug 2007 19:11:49 +0000</pubDate>
		<guid isPermaLink="false">http://rdist.root.org/2007/04/09/mesh-design-pattern-hash-and-decrypt/#comment-2658</guid>
		<description><![CDATA[Thanks for the reference, ivan.  There&#039;s a huge hole in defining the various properties of this primitive, and it&#039;s nice to see your paper covers more ground than I did here.

I have to write another post on this explaining how to obfuscate the process of gathering information for the hash.  There are some really tricky things you can do to tie the hashing process to the functioning of the program such that it is hard to isolate which inputs actually have an effect on the output and which are no-ops.]]></description>
		<content:encoded><![CDATA[<p>Thanks for the reference, ivan.  There&#8217;s a huge hole in defining the various properties of this primitive, and it&#8217;s nice to see your paper covers more ground than I did here.</p>
<p>I have to write another post on this explaining how to obfuscate the process of gathering information for the hash.  There are some really tricky things you can do to tie the hashing process to the functioning of the program such that it is hard to isolate which inputs actually have an effect on the output and which are no-ops.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ivan</title>
		<link>http://rdist.root.org/2007/04/09/mesh-design-pattern-hash-and-decrypt/comment-page-1/#comment-2653</link>
		<dc:creator><![CDATA[ivan]]></dc:creator>
		<pubDate>Wed, 22 Aug 2007 05:32:55 +0000</pubDate>
		<guid isPermaLink="false">http://rdist.root.org/2007/04/09/mesh-design-pattern-hash-and-decrypt/#comment-2653</guid>
		<description><![CDATA[ahhh nice... similar ideas are presented, in a somewhat more &quot;theoretical&quot; manner &lt;a href=&quot;http://www.coresecurity.com/files/attachments/FuKaSaWa_2003.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;. A particularly interesting case is when the encrypted stages i..n+i are &quot;triggered&quot; (decrypted and executed) upon hiting the &quot;right&quot; hash on some external, enviromental input that is somewhere into the &quot;future&quot;, which makes and dynamic analysis quite painful (static analysis already is) because it does not suffice to artificially move the clock forward, you need to mvoe the entire programs state into the future]]></description>
		<content:encoded><![CDATA[<p>ahhh nice&#8230; similar ideas are presented, in a somewhat more &#8220;theoretical&#8221; manner <a href="http://www.coresecurity.com/files/attachments/FuKaSaWa_2003.pdf" rel="nofollow">here</a>. A particularly interesting case is when the encrypted stages i..n+i are &#8220;triggered&#8221; (decrypted and executed) upon hiting the &#8220;right&#8221; hash on some external, enviromental input that is somewhere into the &#8220;future&#8221;, which makes and dynamic analysis quite painful (static analysis already is) because it does not suffice to artificially move the clock forward, you need to mvoe the entire programs state into the future</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nate Lawson</title>
		<link>http://rdist.root.org/2007/04/09/mesh-design-pattern-hash-and-decrypt/comment-page-1/#comment-520</link>
		<dc:creator><![CDATA[Nate Lawson]]></dc:creator>
		<pubDate>Thu, 12 Apr 2007 23:26:09 +0000</pubDate>
		<guid isPermaLink="false">http://rdist.root.org/2007/04/09/mesh-design-pattern-hash-and-decrypt/#comment-520</guid>
		<description><![CDATA[I don&#039;t understand how the fact that block ciphers have some of the same criteria as a hash function has any bearing on this.  SHA-1 is being used to gather state at various points during operation, from various components.  You could construct a hash function using AES as a primitive to get the same function as just using SHA, but why do that?

Your second point seems to be that you just brute force the input bits of state.  If the protection gathers more than 128 bits of data, the naive brute force attack will not produce the necessary key in our lifetime.  If you try to identify all the places where it gathers data, you&#039;re back to needing to understand the protection code.  If you try to find the key in memory just before it is used to decrypt the next stage, same thing.

Hash-and-decrypt is a primitive and needs to be used in conjunction with other primitives to prevent simple attacks like the above.  The whole point of a mesh design is to have multiple checks which are interdependent and not easy to isolate for attack.  I&#039;ll be adding more articles on complementary mechanisms in the future.]]></description>
		<content:encoded><![CDATA[<p>I don&#8217;t understand how the fact that block ciphers have some of the same criteria as a hash function has any bearing on this.  SHA-1 is being used to gather state at various points during operation, from various components.  You could construct a hash function using AES as a primitive to get the same function as just using SHA, but why do that?</p>
<p>Your second point seems to be that you just brute force the input bits of state.  If the protection gathers more than 128 bits of data, the naive brute force attack will not produce the necessary key in our lifetime.  If you try to identify all the places where it gathers data, you&#8217;re back to needing to understand the protection code.  If you try to find the key in memory just before it is used to decrypt the next stage, same thing.</p>
<p>Hash-and-decrypt is a primitive and needs to be used in conjunction with other primitives to prevent simple attacks like the above.  The whole point of a mesh design is to have multiple checks which are interdependent and not easy to isolate for attack.  I&#8217;ll be adding more articles on complementary mechanisms in the future.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: pepe</title>
		<link>http://rdist.root.org/2007/04/09/mesh-design-pattern-hash-and-decrypt/comment-page-1/#comment-519</link>
		<dc:creator><![CDATA[pepe]]></dc:creator>
		<pubDate>Thu, 12 Apr 2007 23:03:45 +0000</pubDate>
		<guid isPermaLink="false">http://rdist.root.org/2007/04/09/mesh-design-pattern-hash-and-decrypt/#comment-519</guid>
		<description><![CDATA[&gt; Since a cryptographic hash (e.g., SHA-1) is sensitive to a change of even a single bit of input,
&gt; this pattern provides a strong way to insure the next stage (code, data, more checks) is not
&gt; accessible unless all the input bits are correct.

This should be covered by the avalanche-criterium for ciphers. Hashing gains no security, I simply prepend the hash-op myself when bruteforcing the needed game-state. No?]]></description>
		<content:encoded><![CDATA[<p>&gt; Since a cryptographic hash (e.g., SHA-1) is sensitive to a change of even a single bit of input,<br />
&gt; this pattern provides a strong way to insure the next stage (code, data, more checks) is not<br />
&gt; accessible unless all the input bits are correct.</p>
<p>This should be covered by the avalanche-criterium for ciphers. Hashing gains no security, I simply prepend the hash-op myself when bruteforcing the needed game-state. No?</p>
]]></content:encoded>
	</item>
</channel>
</rss>

