<?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: Forged CA cert talk at 25C3</title>
	<atom:link href="http://rdist.root.org/2008/12/30/forged-ca-cert-talk-at-25c3/feed/" rel="self" type="application/rss+xml" />
	<link>http://rdist.root.org/2008/12/30/forged-ca-cert-talk-at-25c3/</link>
	<description>Embedded security, crypto, software protection</description>
	<lastBuildDate>Sat, 13 Mar 2010 14:29:16 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Nate Lawson</title>
		<link>http://rdist.root.org/2008/12/30/forged-ca-cert-talk-at-25c3/#comment-4880</link>
		<dc:creator>Nate Lawson</dc:creator>
		<pubDate>Thu, 22 Jan 2009 06:14:37 +0000</pubDate>
		<guid isPermaLink="false">http://rdist.root.org/?p=254#comment-4880</guid>
		<description>Also, every CA should be logging the entire CSR to disk. Consider a high volume CA that has signed 1 billion certs and all of them are 2x the size of Amazon&#039;s cert (1271 bytes). That&#039;s only 2 terabytes total or two commodity hard drives, for keeping the entire history of a CA.

Such an archive would allow CAs to go back and look for requests which conformed in some way to known attack data, &lt;i&gt;after&lt;/i&gt; an attack was discovered. As it stands, they have no way of knowing how many MD5 collision certs have been maliciously signed before this flaw was announced.</description>
		<content:encoded><![CDATA[<p>Also, every CA should be logging the entire CSR to disk. Consider a high volume CA that has signed 1 billion certs and all of them are 2x the size of Amazon&#8217;s cert (1271 bytes). That&#8217;s only 2 terabytes total or two commodity hard drives, for keeping the entire history of a CA.</p>
<p>Such an archive would allow CAs to go back and look for requests which conformed in some way to known attack data, <i>after</i> an attack was discovered. As it stands, they have no way of knowing how many MD5 collision certs have been maliciously signed before this flaw was announced.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nate Lawson</title>
		<link>http://rdist.root.org/2008/12/30/forged-ca-cert-talk-at-25c3/#comment-4879</link>
		<dc:creator>Nate Lawson</dc:creator>
		<pubDate>Thu, 22 Jan 2009 06:07:28 +0000</pubDate>
		<guid isPermaLink="false">http://rdist.root.org/?p=254#comment-4879</guid>
		<description>Yes, I agree with designing crypto to have more defense-in-depth. A favorite example of mine is SSL3, designed in 1996 by Paul Kocher. He used two hash functions together in an HMAC-like construction, before HMAC had been standardized. The reason he used two was because MD5 seemed like it might be weak in the future and SHA-1 was too new to have a lot of review. (Remember at the time that SHA-1 had just replaced SHA-0 due to a weakness found in SHA-0 just after it had been released.) He made the right decision, and 13 years later we&#039;re not replacing SSL3/TLS due to MD5.

One rule of thumb I use when evaluating protocols is that a signer should always know exactly what he is signing. The more random fields or user-specified fields provided, the more &quot;wiggle room&quot; for an attacker to add potentially malicious data. Conversely, adding random data to a server-controlled area can help increase the attacker uncertainty.

What crypto designers should do is pay more attention to implementation details, including adding defense-in-depth from the beginning. A lot of SSL accelerator implementers complained about having to implement two different hash functions, and it did seem silly at the time. A theoretician who didn&#039;t care about implementation details would never have done this hack, since you should &quot;just use a secure hash function&quot;. However, my credit card is never transmitted over theoretical algorithms, it&#039;s sent over SSL/TLS implementations running on x86 hardware.</description>
		<content:encoded><![CDATA[<p>Yes, I agree with designing crypto to have more defense-in-depth. A favorite example of mine is SSL3, designed in 1996 by Paul Kocher. He used two hash functions together in an HMAC-like construction, before HMAC had been standardized. The reason he used two was because MD5 seemed like it might be weak in the future and SHA-1 was too new to have a lot of review. (Remember at the time that SHA-1 had just replaced SHA-0 due to a weakness found in SHA-0 just after it had been released.) He made the right decision, and 13 years later we&#8217;re not replacing SSL3/TLS due to MD5.</p>
<p>One rule of thumb I use when evaluating protocols is that a signer should always know exactly what he is signing. The more random fields or user-specified fields provided, the more &#8220;wiggle room&#8221; for an attacker to add potentially malicious data. Conversely, adding random data to a server-controlled area can help increase the attacker uncertainty.</p>
<p>What crypto designers should do is pay more attention to implementation details, including adding defense-in-depth from the beginning. A lot of SSL accelerator implementers complained about having to implement two different hash functions, and it did seem silly at the time. A theoretician who didn&#8217;t care about implementation details would never have done this hack, since you should &#8220;just use a secure hash function&#8221;. However, my credit card is never transmitted over theoretical algorithms, it&#8217;s sent over SSL/TLS implementations running on x86 hardware.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andrew</title>
		<link>http://rdist.root.org/2008/12/30/forged-ca-cert-talk-at-25c3/#comment-4859</link>
		<dc:creator>Andrew</dc:creator>
		<pubDate>Mon, 05 Jan 2009 11:18:03 +0000</pubDate>
		<guid isPermaLink="false">http://rdist.root.org/?p=254#comment-4859</guid>
		<description>I have been discussing this attack at work, and my initial point of view mirrored yours in terms of the incremental serial number being a fundamental flaw.  However, I had it pointed out to me that the underlying problem is that the X.509 certificate does not _require_ a (hopefully) unpredictable field to add non user assigned entropy.  

As you have so rightly pointed out in the past, bad crypto happens when you start to rely on assumptions, and it should not be necessary for a serial number to perform any other function than that of a unique identifier.  Being unpredictable was never part of the deal.

Of course, the fundamental problem is that MD5 is broken, and should not be used.  That is a given.  However, as the researchers point out in their presentation, we need defense in depth.  Having non-user assigned, unpredictable data in the cert would at least provide us with some time to switch from a broken hash to something better, if (for example) a devastating chosen prefix attack on SHA1 is published tomorrow. 

I find it interesting as well that the attack appears to rely on the fact that the CA being used issued the certificate exactly 6 seconds after issuing the CSR (otherwise they could not predict the certificate expiry, which is set to one year after the issue time according to the presentation).  The devil in me can&#039;t help but wonder if this was to prevent timing attacks, and their implementation has just exposed another weakness.  If they had implemented random delays instead, this attack would quite possibly be impractical, depending on the size of the delay.

However, in the real world, things tend not to change if there is not a &#039;real and present danger&#039; in the form of a demonstrable attack.  This research proves this point, which you correctly note.  So maybe even defense in depth is of no use; it is in the nature of (some) people to ignore possible until it is the practical.</description>
		<content:encoded><![CDATA[<p>I have been discussing this attack at work, and my initial point of view mirrored yours in terms of the incremental serial number being a fundamental flaw.  However, I had it pointed out to me that the underlying problem is that the X.509 certificate does not _require_ a (hopefully) unpredictable field to add non user assigned entropy.  </p>
<p>As you have so rightly pointed out in the past, bad crypto happens when you start to rely on assumptions, and it should not be necessary for a serial number to perform any other function than that of a unique identifier.  Being unpredictable was never part of the deal.</p>
<p>Of course, the fundamental problem is that MD5 is broken, and should not be used.  That is a given.  However, as the researchers point out in their presentation, we need defense in depth.  Having non-user assigned, unpredictable data in the cert would at least provide us with some time to switch from a broken hash to something better, if (for example) a devastating chosen prefix attack on SHA1 is published tomorrow. </p>
<p>I find it interesting as well that the attack appears to rely on the fact that the CA being used issued the certificate exactly 6 seconds after issuing the CSR (otherwise they could not predict the certificate expiry, which is set to one year after the issue time according to the presentation).  The devil in me can&#8217;t help but wonder if this was to prevent timing attacks, and their implementation has just exposed another weakness.  If they had implemented random delays instead, this attack would quite possibly be impractical, depending on the size of the delay.</p>
<p>However, in the real world, things tend not to change if there is not a &#8216;real and present danger&#8217; in the form of a demonstrable attack.  This research proves this point, which you correctly note.  So maybe even defense in depth is of no use; it is in the nature of (some) people to ignore possible until it is the practical.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
