<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-29731912</id><updated>2011-11-27T16:54:57.788-08:00</updated><category term='Distributed Systems'/><category term='evodevo'/><category term='demand locality'/><category term='fixation'/><category term='infrastructure'/><category term='Spread'/><category term='Bugs'/><category term='Ruby'/><category term='genetic code'/><category term='GCS'/><category term='Floating Point'/><category term='peering'/><title type='text'>Infinite second</title><subtitle type='html'>Enter the 36 chambers of infrastructure wu-tang</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-29731912.post-7600372614953669201</id><published>2008-08-23T15:19:00.000-07:00</published><updated>2008-08-23T15:25:25.294-07:00</updated><title type='text'>Turning on TLS is where you start, not where you finish</title><content type='html'>&lt;a href="http://news.cnet.com/8301-1009_3-10023958-83.html?tag=newsEditorsPicksArea.0"&gt;Google making SSL changes, other sites quiet&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;How many sites other than Google (mis)use TLS in this way?  Be afraid.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-7600372614953669201?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/7600372614953669201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=7600372614953669201' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/7600372614953669201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/7600372614953669201'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/08/turning-on-tls-is-where-you-start-not.html' title='Turning on TLS is where you start, not where you finish'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-3413062703155669234</id><published>2008-07-01T17:29:00.000-07:00</published><updated>2008-07-01T17:32:30.876-07:00</updated><title type='text'>ratproxy unleashed</title><content type='html'>Google j&lt;a href="http://googleonlinesecurity.blogspot.com/"&gt;ust released&lt;/a&gt; their internal tool for passive web security assessment.  While it has the unfortunate name &lt;a href="http://code.google.com/p/ratproxy"&gt;ratproxy&lt;/a&gt;, it looks, frankly, badass.  If you care about the security of your site (and even if you don't, your users probably do), you should consider making ratproxy a regular part of your secure development process.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-3413062703155669234?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/3413062703155669234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=3413062703155669234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/3413062703155669234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/3413062703155669234'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/07/ratproxy-unleashed.html' title='ratproxy unleashed'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-4994579891522577778</id><published>2008-06-15T20:30:00.000-07:00</published><updated>2008-06-15T21:28:35.908-07:00</updated><title type='text'>What not to do, part 2</title><content type='html'>As expected, there are many TLS sites using keys generated using the &lt;a href="http://infinitesecond.blogspot.com/2008/05/what-not-to-do.html"&gt;flawed, Ubuntu version of OpenSSL&lt;/a&gt;.  Netcraft has &lt;a href="http://news.netcraft.com/archives/2008/06/12/ssl_certificates_vulnerable_to_openssl_flaw_on_debian.html"&gt;the latest&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-4994579891522577778?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/4994579891522577778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=4994579891522577778' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/4994579891522577778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/4994579891522577778'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/06/what-not-to-do-part-2.html' title='What not to do, part 2'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-2210291093853428267</id><published>2008-06-12T11:33:00.000-07:00</published><updated>2008-06-12T11:40:37.428-07:00</updated><title type='text'>Selecting cryptographic key sizes</title><content type='html'>&lt;a href="http://www.win.tue.nl/~klenstra/key.pdf"&gt;Selecting cryptographic key sizes&lt;/a&gt; is a valuable reference for estimating the security margin for algorithms and key sizes and is deliciously applicable to TLS configuration choices.&lt;br /&gt;&lt;br /&gt;A few tasty tidbits:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Does anyone seriously believe that published attacks represent the state of the art? It may safely be assumed that unpublished work is many years ahead of what the public at large gets to see: a public announcement that a system is broken provides at best a rather trivial upper bound – and a very simple-minded one, in our opinion – for the date that the system became vulnerable.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;According to Table 1, 512-bit RSA keys should not have been used beyond 1986.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;According to Table 1 usage of 768-bit RSA keys can no longer be recommended.  Even in the cost-equivalent model 768-bit RSA keys will soon no longer offer security comparable to the security of the DES in 1982.&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-2210291093853428267?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/2210291093853428267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=2210291093853428267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/2210291093853428267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/2210291093853428267'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/06/selecting-cryptographic-key-sizes.html' title='Selecting cryptographic key sizes'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-9176461134697856952</id><published>2008-06-12T10:16:00.000-07:00</published><updated>2008-06-12T10:20:13.339-07:00</updated><title type='text'>SNI is goodness</title><content type='html'>&lt;a href="http://www.g-loaded.eu/2007/08/10/ssl-enabled-name-based-apache-virtual-hosts-with-mod_gnutls/"&gt;SSL-enabled Name-based Apache Virtual Hosts with mod_gnutls&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I encourage you to try it out.  I have no experience with &lt;a href="http://www.outoforder.cc/projects/apache/mod_gnutls/"&gt;mod_gnutls&lt;/a&gt;, but &lt;a href="http://www.gnu.org/software/gnutls/"&gt;gnutls&lt;/a&gt; is top notch and 80% less code than mod_ssl is a good thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-9176461134697856952?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/9176461134697856952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=9176461134697856952' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/9176461134697856952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/9176461134697856952'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/06/sni-is-goodness.html' title='SNI is goodness'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-6955195406437619230</id><published>2008-06-10T19:25:00.000-07:00</published><updated>2008-06-10T19:26:34.378-07:00</updated><title type='text'>tls report goes geek hipster big time</title><content type='html'>O'Reilly &lt;a href="http://radar.oreilly.com/archives/2008/06/tlsreport-grade-report-website-security.html"&gt;Radar&lt;/a&gt; post about us.&lt;br /&gt;&lt;br /&gt;And &lt;a href="http://simonwillison.net/2008/Jun/10/tls/"&gt;this guy&lt;/a&gt;, too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-6955195406437619230?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/6955195406437619230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=6955195406437619230' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/6955195406437619230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/6955195406437619230'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/06/tls-report-goes-geek-hipster-big-time.html' title='tls report goes geek hipster big time'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-8094115590282741010</id><published>2008-06-10T19:22:00.000-07:00</published><updated>2008-06-10T19:24:11.374-07:00</updated><title type='text'>Vertebra == genius</title><content type='html'>&lt;a href="http://www.slideshare.net/ezmobius/vertebra"&gt;Vertebra&lt;/a&gt; is absolute genius.  If the implementation is even half as spectacular as the concept, it will take over the planet and we will all worship it like a big golden calf written in Erlang and Ruby.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-8094115590282741010?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/8094115590282741010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=8094115590282741010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/8094115590282741010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/8094115590282741010'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/06/vertebra-genius.html' title='Vertebra == genius'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-8878628053728122318</id><published>2008-06-10T18:02:00.000-07:00</published><updated>2008-06-10T18:06:31.373-07:00</updated><title type='text'>SSLv2 still considered harmful</title><content type='html'>Some argue that, although it is deeply flawed, SSLv2 is better than nothing and some very old clients don't support anything better.  This is true in the same way that a beautiful lie is better than an ugly truth.  I'm an ugly truth kind of guy.  What about you?&lt;br /&gt;&lt;br /&gt;From 2005: &lt;a href="http://financialcryptography.com/mt/archives/000569.html"&gt;SSL V2 SNAFU&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No doubt, everyone is patched up by now and no other such vulnerabilities are present, waiting to be discovered.  No doubt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-8878628053728122318?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/8878628053728122318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=8878628053728122318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/8878628053728122318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/8878628053728122318'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/06/sslv2-still-considered-harmful.html' title='SSLv2 still considered harmful'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-6893154473219456885</id><published>2008-06-09T21:00:00.000-07:00</published><updated>2008-06-09T21:33:54.195-07:00</updated><title type='text'>The excuses</title><content type='html'>I got some feedback from someone responsible for security at a major site currently tracked in the TLS Report.  They took issue with my methodology and gave what I can only describe as excuses for how they were choosing to configure their servers.  His argument went something like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;We support (several) export ciphers because we want to make sure everyone on every browser ever released can access our service.  If users want to negotiate a strong cipher, they can!  Also, we use a mediocre default cipher because stronger ciphers would be too slow.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let's break this down:&lt;br /&gt;&lt;br /&gt;1) Support for export ciphers&lt;br /&gt;&lt;br /&gt;It's 2008.  There is no good reason anymore to support export ciphers.  If you insist on supporting export ciphers, at least alert users when such a weak cipher is negotiated.  Heck, give them suggestions for upgrading to a better browser.  Users see the little lock and they assume everything is locked down.  They don't know the difference between DHE-RSA-AES256-SHA and EXP-RC2-CBC-MD5.  You do.&lt;br /&gt;&lt;br /&gt;2) Stronger ciphers are there if people want them&lt;br /&gt;&lt;br /&gt;Browser vendors recognize they must support a huge variety of ciphers to deal with the huge variety of ciphers supported by servers.  By default, they are almost all turned on.  The result is obvious: regardless of the stronger ciphers that could be negotiated, the server default is what will be used.  In order to get those stronger ciphers, users would either have to disable all the weaker ones, locking them out of numerous sites, or switch to a browser like &lt;a href="http://www.opera.com/"&gt;Opera&lt;/a&gt;, that plays tricks to figure out the strongest available cipher on a server.&lt;br /&gt;&lt;br /&gt;The power for this is almost entirely in the hands of the server operators.  You know this.  Use your power for niceness.&lt;br /&gt;&lt;br /&gt;3) Stronger ciphers would be too slow&lt;br /&gt; &lt;br /&gt;This is mostly true, although not always relevant.  For pages that are not huge, the total processing is often dominated by the session setup.  Public key crypto is extremely expensive.  If you are spending most of your time on it, then moving to a stronger cipher may have no interesting impact on total performance.  See &lt;a href="http://www-rcf.usc.edu/~mdhuang/cs556/CS556-Han.ppt"&gt;this&lt;/a&gt; and &lt;a href="http://www.cs.ucr.edu/~bhuyan/papers/ssl.pdf"&gt;this&lt;/a&gt; for some really interesting analysis.&lt;br /&gt;&lt;br /&gt;The most important aspect of this response, however, is that it is free of any factual basis.  Do the analysis, and make decisions based on the facts.  If you collect statistics on the set of ciphers your customers' browsers are offering, and you see lots of folks who require export ciphers, figure out how to support them.  If you don't see that sort of traffic, or not enough of it to keep supporting it, turn the export ciphers off.  If you do performance analysis based on request traces to see the impact of, say, switching from RC4-SHA to AES128-SHA as your default cipher, and discover it would be hideously expensive to change, then don't.  What you should not do is assert, without analysis, that these things are true (or false).&lt;br /&gt;&lt;br /&gt;No excuses, y'all.  As operators of TLS servers, you are the experts on which your users depend.  Don't let them down.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-6893154473219456885?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/6893154473219456885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=6893154473219456885' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/6893154473219456885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/6893154473219456885'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/06/excuses.html' title='The excuses'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-1537471712971673859</id><published>2008-05-15T20:14:00.000-07:00</published><updated>2008-05-15T20:23:54.058-07:00</updated><title type='text'>What not to do</title><content type='html'>I was discussing the following with a good friend of mine earlier and we are both confused about why it is not major news, getting flogged everywhere such geekery is common.  This is one of the more egregious failures ever perpetrated.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://metasploit.com/users/hdm/tools/debian-openssl/"&gt;Debian (and Ubuntu) OpenSSL stupidity.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is why it is so important that you can't simply hack crypto together and cross your fingers.  Some bright spark decided to comment out the source of entropy for the random number generator, so everything works fine, but the keys are no longer random and no longer from an enormous pool.  Commented out not for a carefully considered engineering reason, but simply because it was generating errors from a code analysis tool.  This is badness.&lt;br /&gt;&lt;br /&gt;I won't get into a rant about how a proper development process could let this through and instead will offer these two tidbits.  The first is a thread from 2003 regarding errors from Valgrind on this very line of code and exactly why they should be ignored.  The second is the entry from the OpenSSL FAQ (added in September 2007) reiterating the point.  This was a known issue with a known solution (ignore it).&lt;br /&gt;&lt;br /&gt;I cannot overstate this: leave crypto to the pros or become a pro yourself (I'm merely an interested amateur).&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://rt.openssl.org/Ticket/Display.html?id=521&amp;user=guest&amp;pass=guest"&gt;thread&lt;/a&gt;.&lt;br /&gt;The &lt;a href="http://www.openssl.org/support/faq.html#PROG14"&gt;FAQ&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-1537471712971673859?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/1537471712971673859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=1537471712971673859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/1537471712971673859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/1537471712971673859'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/05/what-not-to-do.html' title='What not to do'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-6183119742193294196</id><published>2008-05-15T18:53:00.000-07:00</published><updated>2008-06-13T11:26:04.543-07:00</updated><title type='text'>TLS Report beta</title><content type='html'>The &lt;a href="http://tlsreport.layer8.net/"&gt;TLS Report&lt;/a&gt; is stable (give or take).  I'll be migrating it to AWS soon, even though &lt;a href="http://tlsreport.layer8.net/reports/aws-portal.amazon.com?protocol=https"&gt;their report&lt;/a&gt; is not &lt;a href="http://tlsreport.layer8.net/reports/fossbazaar.org?protocol=https"&gt;great&lt;/a&gt;.  But, hey, could be &lt;a href="http://tlsreport.layer8.net/reports/my.usda.gov?protocol=https"&gt;worse&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-6183119742193294196?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/6183119742193294196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=6183119742193294196' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/6183119742193294196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/6183119742193294196'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/05/tls-report-beta.html' title='TLS Report beta'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-233275429058004127</id><published>2008-04-30T20:03:00.000-07:00</published><updated>2008-06-13T11:26:33.735-07:00</updated><title type='text'>TLS Report alpha</title><content type='html'>The TLS Report is in alpha &lt;a href="http://tlsreport.layer8.net/"&gt;here&lt;/a&gt;.  No promises on stability.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-233275429058004127?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/233275429058004127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=233275429058004127' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/233275429058004127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/233275429058004127'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/04/tls-report-alpha.html' title='TLS Report alpha'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-213976335049187067</id><published>2008-04-15T09:41:00.001-07:00</published><updated>2008-06-13T11:27:21.579-07:00</updated><title type='text'>The TLS report is on the way!</title><content type='html'>UPDATE: The production site can be found &lt;a href="http://tlsreport.layer8.net/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My reporting tools are taking over!  Well, taking over my free time.  The TLS Report service will be online in a few weeks.  In the mean time, here are some static pages showing the draft format.  I switched to a very recent, non-OSX version of OpenSSL, as well, so there are some new ciphers shown (the coolest additions being the EC ciphers at Microsoft).  The other, pleasant surprise of the past few days is the sudden, significant improvement of the configuration for &lt;a href="http://www.layer8.net/tlsreport/reports/www.paypal.com,443.html"&gt;www.paypal.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.layer8.net/tlsreport/reports/www.amazon.com,443.html"&gt;Amazon&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.layer8.net/tlsreport/reports/www.facebook.com,443.html"&gt;Facebook&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.layer8.net/tlsreport/reports/www.microsoft.com,443.html"&gt;Microsoft&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.layer8.net/tlsreport/reports/www.thawte.com,443.html"&gt;Thawte&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-213976335049187067?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/213976335049187067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=213976335049187067' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/213976335049187067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/213976335049187067'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/04/tls-report-is-on-way.html' title='The TLS report is on the way!'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-9067118199346267723</id><published>2008-04-13T13:05:00.000-07:00</published><updated>2008-04-13T14:35:07.581-07:00</updated><title type='text'>Recommended reading on TLS/SSL</title><content type='html'>The free stuff:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ietf.org/internet-drafts/draft-ietf-tls-rfc4346-bis-10.txt"&gt;The Transport Layer Security (TLS) Protocol Version 1.2 &lt;i&gt;DRAFT&lt;/i&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ietf.org/rfc/rfc4346.txt"&gt;The Transport Layer Security (TLS) Protocol Version 1.1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ietf.org/rfc/rfc2246.txt"&gt;The TLS Protocol Version 1.0&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ietf.org/rfc/rfc2818.txt"&gt;HTTP Over TLS&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The not-free stuff:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/059600270X?ie=UTF8&amp;tag=layer8network-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=059600270X"&gt;Network Security with OpenSSL&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=layer8network-20&amp;l=as2&amp;o=1&amp;a=059600270X" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0201615983?ie=UTF8&amp;amp;tag=layer8network-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201615983"&gt;SSL and TLS: Designing and Building Secure Systems&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=layer8network-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0201615983" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1" /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0471117099?ie=UTF8&amp;amp;tag=layer8network-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0471117099"&gt;Applied Cryptography: Protocols, Algorithms, and Source Code in C, Second Edition&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=layer8network-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0471117099" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-9067118199346267723?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/9067118199346267723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=9067118199346267723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/9067118199346267723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/9067118199346267723'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/04/recommended-reading-on-tlsssl.html' title='Recommended reading on TLS/SSL'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-3387907991322836487</id><published>2008-04-04T23:30:00.000-07:00</published><updated>2008-04-04T23:33:44.447-07:00</updated><title type='text'>Hard data!</title><content type='html'>Just found this paper: &lt;a href="http://www.imconf.net/imc-2007/papers/imc130.pdf"&gt;Cryptographic Strength of SSL/TLS Servers: Current and Recent Practices&lt;/a&gt;.  Looks like I'm not the first hound down this trail!  Tons of great data in there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-3387907991322836487?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/3387907991322836487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=3387907991322836487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/3387907991322836487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/3387907991322836487'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/04/hard-data.html' title='Hard data!'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-810171881242798306</id><published>2008-04-04T23:05:00.001-07:00</published><updated>2008-04-13T14:42:43.790-07:00</updated><title type='text'>Devilish details (more on my TLS config obsession)</title><content type='html'>I updated the TLS tool to check the complete order of preference for all ciphers supported by a given server.  While the good ones stayed darned good, the bad ones got even worse.  Here are a couple of examples.  Notice that, in both cases, the weakest, non-export ciphers are at the top, and there doesn't seem to be any sense to the ordering of the rest of the ciphers.  In the case of Facebook, they even prefer several export-grade ciphers over those using ephemeral keying!  &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Facebook&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;test run at Sat Apr 05 11:32:09 -0700 2008&lt;br /&gt;&lt;br /&gt;grade for www.facebook.com:443 is low&lt;br /&gt;&lt;br /&gt;supported protocols for www.facebook.com:&lt;br /&gt; -&gt; SSLv3, TLSv1&lt;br /&gt;&lt;br /&gt;default cipher for www.facebook.com:&lt;br /&gt; -&gt; RC4-MD5 TLSv1/SSLv3&lt;br /&gt;&lt;br /&gt;server certificate strength is low&lt;br /&gt; -&gt; excessive certificate lifetime (Fri Sep 28 23:53:12 UTC 2007 to Tue Sep 28 23:53:12 UTC 2010)&lt;br /&gt; -&gt; MD5, RSAEncryption, 1024 bits&lt;br /&gt; -&gt; expires Tue Sep 28 23:53:12 UTC 2010&lt;br /&gt;&lt;br /&gt;valid ciphers for www.facebook.com, in order of preference:&lt;br /&gt; -&gt; RC4-MD5 TLSv1/SSLv3&lt;br /&gt; -&gt; RC4-SHA TLSv1/SSLv3&lt;br /&gt; -&gt; AES128-SHA TLSv1/SSLv3&lt;br /&gt; -&gt; AES256-SHA TLSv1/SSLv3&lt;br /&gt; -&gt; DES-CBC3-SHA TLSv1/SSLv3&lt;br /&gt; -&gt; DES-CBC-SHA TLSv1/SSLv3&lt;br /&gt; -&gt; EXP-RC4-MD5 TLSv1/SSLv3&lt;br /&gt; -&gt; EXP-DES-CBC-SHA TLSv1/SSLv3&lt;br /&gt; -&gt; DHE-RSA-AES256-SHA TLSv1/SSLv3&lt;br /&gt; -&gt; EDH-RSA-DES-CBC3-SHA TLSv1/SSLv3&lt;br /&gt; -&gt; DHE-RSA-AES128-SHA TLSv1/SSLv3&lt;br /&gt; -&gt; EDH-RSA-DES-CBC-SHA TLSv1/SSLv3&lt;br /&gt; -&gt; EXP-EDH-RSA-DES-CBC-SHA TLSv1/SSLv3&lt;br /&gt; -&gt; EXP-RC2-CBC-MD5 TLSv1/SSLv3&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Amazon&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;test run at Sat Apr 05 11:30:07 -0700 2008&lt;br /&gt;&lt;br /&gt;grade for www.amazon.com:443 is low&lt;br /&gt;&lt;br /&gt;supported protocols for www.amazon.com:&lt;br /&gt; -&gt; SSLv2, SSLv3, TLSv1&lt;br /&gt;&lt;br /&gt;default cipher for www.amazon.com:&lt;br /&gt; -&gt; RC4-MD5 TLSv1/SSLv3&lt;br /&gt;&lt;br /&gt;server certificate strength is low&lt;br /&gt; -&gt; SHA1, RSAEncryption, 1024 bits&lt;br /&gt; -&gt; expires Wed Sep 17 23:59:59 UTC 2008&lt;br /&gt;&lt;br /&gt;valid ciphers for www.amazon.com, in order of preference:&lt;br /&gt; -&gt; RC4-MD5 TLSv1/SSLv3&lt;br /&gt; -&gt; RC4-MD5 SSLv2&lt;br /&gt; -&gt; RC4-SHA TLSv1/SSLv3&lt;br /&gt; -&gt; DES-CBC3-SHA TLSv1/SSLv3&lt;br /&gt; -&gt; AES256-SHA TLSv1/SSLv3&lt;br /&gt; -&gt; AES128-SHA TLSv1/SSLv3&lt;br /&gt; -&gt; DES-CBC-SHA TLSv1/SSLv3&lt;br /&gt; -&gt; EXP-RC4-MD5 TLSv1/SSLv3&lt;br /&gt; -&gt; EXP-RC4-MD5 SSLv2&lt;br /&gt; -&gt; EXP-DES-CBC-SHA TLSv1/SSLv3&lt;br /&gt; -&gt; EXP-RC2-CBC-MD5 TLSv1/SSLv3&lt;br /&gt; -&gt; EXP-RC2-CBC-MD5 SSLv2&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-810171881242798306?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/810171881242798306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=810171881242798306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/810171881242798306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/810171881242798306'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/04/devilish-details-more-on-my-tls-config.html' title='Devilish details (more on my TLS config obsession)'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-1250627191604397769</id><published>2008-03-29T18:07:00.000-07:00</published><updated>2008-06-25T14:22:13.766-07:00</updated><title type='text'>Recommended SSLCipherSuite configurations for Apache</title><content type='html'>UPDATE 2008-06-25: Here's my current recommendation (the rest is left for historical context).&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;SSLCipherSuite DHE-RSA-AES256-SHA:EDH-RSA-DES-CBC3-SHA:DHE-RSA-AES128-SHA: AES256-SHA:DES-CBC3-SHA:AES128-SHA:RC4-SHA&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The completist (Thawte-style)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;SSLCipherSuite DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:EDH-RSA-DES-CBC3-SHA: AES256-SHA:DES-CBC3-SHA:AES128-SHA:RC4-SHA:RC4-MD5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The minimalist (Microsoft-style)&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;SSLCipherSuite AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;For the Comodo version of the minimalist, swap the order of the 2 AES ciphers.&lt;br /&gt;&lt;br /&gt;UPDATE 2008-04-04: Slight change to the minimalist config based on more detailed results from the new tool.  This also means that the Comodo config is not what is stated above, but is instead:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The descending minimalist (Comodo-style)&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;SSLCipherSuite AES256-SHA:AES128-SHA:DES-CBC3-SHA:RC4-SHA:RC4-MD5&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-1250627191604397769?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/1250627191604397769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=1250627191604397769' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/1250627191604397769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/1250627191604397769'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/03/recommended-sslciphersuite.html' title='Recommended SSLCipherSuite configurations for Apache'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-7301825577907598945</id><published>2008-03-29T16:41:00.000-07:00</published><updated>2008-04-13T14:46:41.453-07:00</updated><title type='text'>SSL/TLS cipher selection, with examples and discussion</title><content type='html'>The last post has examples of some TLS web server crypto configs, but I didn't explain them, particularly why some are better than others.  Let's remedy that.&lt;br /&gt;&lt;br /&gt;We'll start with some good ones (always start by examining properly packed parachutes!).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Thawte&lt;/b&gt;&lt;br /&gt;The completist&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;grade for www.thawte.com is HIGH&lt;br /&gt;&lt;br /&gt;negotiated cipher for www.thawte.com:&lt;br /&gt;DHE-RSA-AES256-SHA&lt;br /&gt;ephemeral keying -&gt; 1024 bits [expires Sat Jan 17 23:59:59 UTC 2009]&lt;br /&gt;&lt;br /&gt;valid ciphers for www.thawte.com:&lt;br /&gt;DHE-RSA-AES256-SHA&lt;br /&gt;AES256-SHA&lt;br /&gt;EDH-RSA-DES-CBC3-SHA&lt;br /&gt;DES-CBC3-SHA&lt;br /&gt;DHE-RSA-AES128-SHA&lt;br /&gt;AES128-SHA&lt;br /&gt;RC4-SHA&lt;br /&gt;RC4-MD5&lt;br /&gt;RC4-MD5 (SSLv2)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;It is clear that a lot of thought went into the selection of these ciphers and their order of preference (this test only shows us the top choice of the server).  Starting at the bottom we have the sole SSLv2 cipher for use by the crustiest old browsers.  RC4-MD5 is the strongest, widely deployed, unencumbered SSLv2 cipher, so this is the best choice for backwards compatibility.  Next there are 2 more RC4 ciphers (both MD5 versions likely come from the same config statement): the same as the bottom, but in TLSv1/SSLv3 guise, and a slightly improved version with SHA1.  Again, these are great choices for balancing the minimum security supported against the need to support as many clients as possible.&lt;br /&gt;&lt;br /&gt;The top 6 ciphers can be divided into 3 pairs, with each pair using a strong symmetric cipher with and without ephemeral keying.  AES128 and Triple DES (the DES ciphers shown with 168 bit keys) are the most common, high strength, symmetric ciphers in modern browsers.  The top cipher (DHE-RSA-AES256-SHA) is not only the strongest cipher you can reasonably expect browsers to support, it's also the most preferred cipher from this server.  Although I'd like to see a 2048 bit server key to give a bit more strength to sessions not using the DH ciphers, this is a really clean config.&lt;br /&gt;&lt;br /&gt;Great job, Thawte!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Microsoft&lt;/b&gt;&lt;br /&gt;The minimalist&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;grade for www.microsoft.com is MEDIUM&lt;br /&gt;&lt;br /&gt;negotiated cipher for www.microsoft.com:&lt;br /&gt;AES128-SHA&lt;br /&gt;server certificate strength is LOW -&gt; 1024 bits [expires Wed Feb 11 18:25:18 UTC 2009]&lt;br /&gt;&lt;br /&gt;valid ciphers for www.microsoft.com:&lt;br /&gt;AES256-SHA&lt;br /&gt;DES-CBC3-SHA&lt;br /&gt;AES128-SHA&lt;br /&gt;RC4-SHA&lt;br /&gt;RC4-MD5&lt;br /&gt;RC4-MD5 (SSLv2)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;This config is very similar to the one from Thawte (great minds think alike?), with the elimination of the DH ciphers.  One point of note is that they have chosen not to make the default cipher the strongest one available.  This, again, is likely a conscious choice to balance compatibility, security, and performance.  AES128-SHA is a very high security cipher, but it also has good performance on a variety of devices.  A 2048 bit server key would make this a perfect, all-purpose config.&lt;br /&gt;&lt;br /&gt;I haven't checked whether these ciphers are the defaults for IIS.  If they are, even more credit to Microsoft for delivering a default security posture superior to many, competing products.  Either way, good job!&lt;br /&gt;&lt;br /&gt;As a side note, Comodo has a very good, very similar configuration, but the difference makes it less useful as an example.&lt;br /&gt;&lt;br /&gt;UPDATE 2008-03-30: &lt;a href="http://blogs.technet.com/steriley/archive/2007/11/06/changing-the-ssl-cipher-order-in-internet-explorer-7-on-windows-vista.aspx"&gt;This&lt;/a&gt; is a really useful little post about IE ciphers.  Good reading!&lt;br /&gt;&lt;br /&gt;&lt;i&gt;And now, some not so good ones.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Facebook&lt;/b&gt;&lt;br /&gt;The kitchen sink&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;grade for www.facebook.com is LOW&lt;br /&gt;&lt;br /&gt;negotiated cipher for www.facebook.com:&lt;br /&gt;RC4-MD5&lt;br /&gt;server certificate strength is LOW -&gt; 1024 bits [expires Tue Sep 28 23:53:12 UTC 2010]&lt;br /&gt;&lt;br /&gt;valid ciphers for www.facebook.com:&lt;br /&gt;DHE-RSA-AES256-SHA&lt;br /&gt;AES256-SHA&lt;br /&gt;EDH-RSA-DES-CBC3-SHA&lt;br /&gt;DES-CBC3-SHA&lt;br /&gt;DHE-RSA-AES128-SHA&lt;br /&gt;AES128-SHA&lt;br /&gt;RC4-SHA&lt;br /&gt;RC4-MD5&lt;br /&gt;RC4-MD5 (SSLv2)&lt;br /&gt;EDH-RSA-DES-CBC-SHA&lt;br /&gt;DES-CBC-SHA&lt;br /&gt;EXP-EDH-RSA-DES-CBC-SHA&lt;br /&gt;EXP-DES-CBC-SHA&lt;br /&gt;EXP-RC2-CBC-MD5&lt;br /&gt;EXP-RC2-CBC-MD5 (SSLv2)&lt;br /&gt;EXP-RC4-MD5&lt;br /&gt;EXP-RC4-MD5 (SSLv2)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Yikes!  I have to think they didn't put much thought into this configuration.  It looks like they either went with the Apache default config (which is a bloated mess), or just turned on almost every option and (mostly) called it a day.  There is no good reason to include any export ciphers, much less lots of export ciphers (if anyone has solid data supporting or contradicting that assertion, I'd really love to see it).  Those 56 bit DES ciphers are similarly antiquated and have no business in there.&lt;br /&gt;&lt;br /&gt;The worst part is that, having thrown in every cipher they could find, they set the default to RC4-MD5, a medium security cipher.  Facebook has chosen to take the same cipher our good examples above use as a last-ditch fallback for TLSv1/SSLv3 negotiation and made it their preferred cipher.  Adding insult to injury is that 1024 bit server key.&lt;br /&gt;&lt;br /&gt;A little thought and planning would go a long way.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Bank of America&lt;/b&gt;&lt;br /&gt;The heist&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;grade for www.bankofamerica.com is LOW&lt;br /&gt;&lt;br /&gt;negotiated cipher for www.bankofamerica.com:&lt;br /&gt;RC4-MD5&lt;br /&gt;server certificate strength is LOW -&gt; 1024 bits [expires Sat Jan 17 23:59:59 UTC 2009]&lt;br /&gt;&lt;br /&gt;valid ciphers for www.bankofamerica.com:&lt;br /&gt;DES-CBC3-SHA&lt;br /&gt;RC4-MD5&lt;br /&gt;RC4-MD5 (SSLv2)&lt;br /&gt;DES-CBC-SHA&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;It looks like someone spent a little time thinking about what to do here, and then decided on the wrong things.  The 56 bit DES cipher serves no purpose, there are no AES-based ciphers, and the server default cipher is, as with Facebook, a medium security cipher best used as a fallback.  Finally, they have the traditional, 1024 bit server key to round things out.&lt;br /&gt;&lt;br /&gt;I'd like to say I expect better from a bank.  Instead, all I can say is that I hope for better from a bank.  I won't hold my breath.&lt;br /&gt;&lt;br /&gt;Yes, gentle reader, the state of affairs in the rarefied world of SSL/TLS web server configuration is pretty rotten.  I know we can do better than this.  The problems are not technical, but social.  Vendors must ship products with sane defaults.  Companies who run secure web servers must take due care in configuring them.  Customers of those companies should pressure them to fix things that are broken and then take their business elsewhere if problems persist.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;setec astronomy&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-7301825577907598945?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/7301825577907598945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=7301825577907598945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/7301825577907598945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/7301825577907598945'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/03/ssltls-cipher-selection-with-examples.html' title='SSL/TLS cipher selection, with examples and discussion'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-6287039390842459201</id><published>2008-03-29T15:48:00.000-07:00</published><updated>2008-03-30T18:46:19.798-07:00</updated><title type='text'>The sorry state of SSL/TLS operational best practice</title><content type='html'>A recent discussion on the TLS Working Group list got me curious about how well folks are doing at configuring SSL/TLS on their "secure" web servers.  I put together a simple tool to help answer the question, and the the results are pretty grim.  Little adoption of the ciphers that use ephemeral keys, widespread use of known-bad export ciphers, almost universal use of 1024 bit RSA keys for server certificates, etc.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Without discussion, here are some results:&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Amazon.com&lt;/b&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;grade for www.amazon.com is LOW&lt;br /&gt;&lt;br /&gt;negotiated cipher for www.amazon.com:&lt;br /&gt;RC4-MD5&lt;br /&gt;server certificate strength is LOW -&gt; 1024 bits [expires Wed Sep 17 23:59:59 UTC 2008]&lt;br /&gt;&lt;br /&gt;valid ciphers for www.amazon.com:&lt;br /&gt;AES256-SHA&lt;br /&gt;DES-CBC3-SHA&lt;br /&gt;AES128-SHA&lt;br /&gt;RC4-SHA&lt;br /&gt;RC4-MD5&lt;br /&gt;RC4-MD5 (SSLv2)&lt;br /&gt;DES-CBC-SHA&lt;br /&gt;EXP-DES-CBC-SHA&lt;br /&gt;EXP-RC2-CBC-MD5&lt;br /&gt;EXP-RC2-CBC-MD5 (SSLv2)&lt;br /&gt;EXP-RC4-MD5&lt;br /&gt;EXP-RC4-MD5 (SSLv2)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;b&gt;Microsoft&lt;/b&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;grade for www.microsoft.com is MEDIUM&lt;br /&gt;&lt;br /&gt;negotiated cipher for www.microsoft.com:&lt;br /&gt;AES128-SHA&lt;br /&gt;server certificate strength is LOW -&gt; 1024 bits [expires Wed Feb 11 18:25:18 UTC 2009]&lt;br /&gt;&lt;br /&gt;valid ciphers for www.microsoft.com:&lt;br /&gt;AES256-SHA&lt;br /&gt;DES-CBC3-SHA&lt;br /&gt;AES128-SHA&lt;br /&gt;RC4-SHA&lt;br /&gt;RC4-MD5&lt;br /&gt;RC4-MD5 (SSLv2)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;b&gt;Comodo&lt;/b&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;grade for www.comodo.com is MEDIUM&lt;br /&gt;&lt;br /&gt;negotiated cipher for www.comodo.com:&lt;br /&gt;AES256-SHA&lt;br /&gt;server certificate strength is LOW -&gt; 1024 bits [expires Mon Jun 28 23:59:59 UTC 2010]&lt;br /&gt;&lt;br /&gt;valid ciphers for www.comodo.com:&lt;br /&gt;AES256-SHA&lt;br /&gt;DES-CBC3-SHA&lt;br /&gt;AES128-SHA&lt;br /&gt;RC4-SHA&lt;br /&gt;RC4-MD5&lt;br /&gt;RC4-MD5 (SSLv2)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;b&gt;PayPal&lt;/b&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;grade for www.paypal.com is LOW&lt;br /&gt;&lt;br /&gt;negotiated cipher for www.paypal.com:&lt;br /&gt;RC4-MD5&lt;br /&gt;server certificate strength is LOW -&gt; 1024 bits [expires Thu Jan 29 23:59:59 UTC 2009]&lt;br /&gt;&lt;br /&gt;valid ciphers for www.paypal.com:&lt;br /&gt;AES256-SHA&lt;br /&gt;DES-CBC3-SHA&lt;br /&gt;AES128-SHA&lt;br /&gt;RC4-SHA&lt;br /&gt;RC4-MD5&lt;br /&gt;RC4-MD5 (SSLv2)&lt;br /&gt;DES-CBC-SHA&lt;br /&gt;EXP-DES-CBC-SHA&lt;br /&gt;EXP-RC4-MD5&lt;br /&gt;EXP-RC4-MD5 (SSLv2)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;b&gt;Facebook&lt;/b&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;grade for www.facebook.com is LOW&lt;br /&gt;&lt;br /&gt;negotiated cipher for www.facebook.com:&lt;br /&gt;RC4-MD5&lt;br /&gt;server certificate strength is LOW -&gt; 1024 bits [expires Tue Sep 28 23:53:12 UTC 2010]&lt;br /&gt;&lt;br /&gt;valid ciphers for www.facebook.com:&lt;br /&gt;DHE-RSA-AES256-SHA&lt;br /&gt;AES256-SHA&lt;br /&gt;EDH-RSA-DES-CBC3-SHA&lt;br /&gt;DES-CBC3-SHA&lt;br /&gt;DHE-RSA-AES128-SHA&lt;br /&gt;AES128-SHA&lt;br /&gt;RC4-SHA&lt;br /&gt;RC4-MD5&lt;br /&gt;RC4-MD5 (SSLv2)&lt;br /&gt;EDH-RSA-DES-CBC-SHA&lt;br /&gt;DES-CBC-SHA&lt;br /&gt;EXP-EDH-RSA-DES-CBC-SHA&lt;br /&gt;EXP-DES-CBC-SHA&lt;br /&gt;EXP-RC2-CBC-MD5&lt;br /&gt;EXP-RC2-CBC-MD5 (SSLv2)&lt;br /&gt;EXP-RC4-MD5&lt;br /&gt;EXP-RC4-MD5 (SSLv2)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;b&gt;Thawte&lt;/b&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;grade for www.thawte.com is HIGH&lt;br /&gt;&lt;br /&gt;negotiated cipher for www.thawte.com:&lt;br /&gt;DHE-RSA-AES256-SHA&lt;br /&gt;ephemeral keying -&gt; 1024 bits [expires Sat Jan 17 23:59:59 UTC 2009]&lt;br /&gt;&lt;br /&gt;valid ciphers for www.thawte.com:&lt;br /&gt;DHE-RSA-AES256-SHA&lt;br /&gt;AES256-SHA&lt;br /&gt;EDH-RSA-DES-CBC3-SHA&lt;br /&gt;DES-CBC3-SHA&lt;br /&gt;DHE-RSA-AES128-SHA&lt;br /&gt;AES128-SHA&lt;br /&gt;RC4-SHA&lt;br /&gt;RC4-MD5&lt;br /&gt;RC4-MD5 (SSLv2)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;b&gt;Verisign&lt;/b&gt;&lt;br /&gt;Note: Verisign will not negotiate TLSv1&lt;br /&gt;&lt;code&gt;&lt;br /&gt;grade for www.verisign.com is LOW&lt;br /&gt;&lt;br /&gt;negotiated cipher for www.verisign.com:&lt;br /&gt;RC4-MD5&lt;br /&gt;server certificate strength is LOW -&gt; 1024 bits [expires Fri May 08 23:59:59 UTC 2009]&lt;br /&gt;&lt;br /&gt;valid ciphers for www.verisign.com:&lt;br /&gt;DES-CBC3-SHA&lt;br /&gt;RC4-MD5&lt;br /&gt;RC4-MD5 (SSLv2)&lt;br /&gt;DES-CBC-SHA&lt;br /&gt;EXP-RC2-CBC-MD5&lt;br /&gt;EXP-RC2-CBC-MD5 (SSLv2)&lt;br /&gt;EXP-RC4-MD5&lt;br /&gt;EXP-RC4-MD5 (SSLv2)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;b&gt;Bank of America&lt;/b&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;grade for www.bankofamerica.com is LOW&lt;br /&gt;&lt;br /&gt;negotiated cipher for www.bankofamerica.com:&lt;br /&gt;RC4-MD5&lt;br /&gt;server certificate strength is LOW -&gt; 1024 bits [expires Sat Jan 17 23:59:59 UTC 2009]&lt;br /&gt;&lt;br /&gt;valid ciphers for www.bankofamerica.com:&lt;br /&gt;DES-CBC3-SHA&lt;br /&gt;RC4-SHA&lt;br /&gt;RC4-MD5&lt;br /&gt;RC4-MD5 (SSLv2)&lt;br /&gt;DES-CBC-SHA&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;b&gt;GMail&lt;/b&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;grade for www.gmail.com is MEDIUM&lt;br /&gt;&lt;br /&gt;negotiated cipher for www.gmail.com:&lt;br /&gt;AES256-SHA&lt;br /&gt;server certificate strength is LOW -&gt; 1024 bits [expires Thu May 15 17:24:01 UTC 2008]&lt;br /&gt;&lt;br /&gt;valid ciphers for www.gmail.com:&lt;br /&gt;AES256-SHA&lt;br /&gt;DES-CBC3-SHA&lt;br /&gt;AES128-SHA&lt;br /&gt;RC4-SHA&lt;br /&gt;RC4-MD5&lt;br /&gt;RC4-MD5 (SSLv2)&lt;br /&gt;DES-CBC-SHA&lt;br /&gt;EXP-DES-CBC-SHA&lt;br /&gt;EXP-RC2-CBC-MD5&lt;br /&gt;EXP-RC2-CBC-MD5 (SSLv2)&lt;br /&gt;EXP-RC4-MD5&lt;br /&gt;EXP-RC4-MD5 (SSLv2)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;b&gt;CIA&lt;/b&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;grade for www.cia.gov is LOW&lt;br /&gt;&lt;br /&gt;negotiated cipher for www.cia.gov:&lt;br /&gt;RC4-SHA&lt;br /&gt;server certificate strength is LOW -&gt; 1024 bits [expires Sat Feb 12 23:59:59 UTC 2011]&lt;br /&gt;&lt;br /&gt;valid ciphers for www.cia.gov:&lt;br /&gt;RC4-SHA&lt;br /&gt;RC4-MD5&lt;br /&gt;RC4-MD5 (SSLv2)&lt;br /&gt;EXP-RC4-MD5&lt;br /&gt;EXP-RC4-MD5 (SSLv2)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-6287039390842459201?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/6287039390842459201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=6287039390842459201' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/6287039390842459201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/6287039390842459201'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/03/sorry-state-of-ssltls-operational-best.html' title='The sorry state of SSL/TLS operational best practice'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-7753948453353884483</id><published>2008-03-26T18:59:00.000-07:00</published><updated>2008-03-26T22:15:21.653-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Floating Point'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>BigDecimal: mostly acceptable alternative to Float</title><content type='html'>I forgot to mention in &lt;a href="http://infinitesecond.blogspot.com/2008/03/floating-point-arithmetic-bug-reports.html"&gt;yesterday's extended whine&lt;/a&gt; about Ruby floating point that there is a package in the standard library called BigDecimal that is a mostly good alternative to the normal Float class.  Here is the simplest way to use it:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require "bigdecimal"&lt;br /&gt;require "bigdecimal/util"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The second line adds a new method, to_d, to String, Float, and Rational.  Back to my annoying example of broken floating point math:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&gt;&gt; require "bigdecimal"&lt;br /&gt;=&gt; true&lt;br /&gt;&gt;&gt; require "bigdecimal/util"&lt;br /&gt;=&gt; true&lt;br /&gt;&gt;&gt; (9.54 / 0.001)&lt;br /&gt;=&gt; 9540.0&lt;br /&gt;&gt;&gt; (9.54 / 0.001).to_i&lt;br /&gt;=&gt; 9539&lt;br /&gt;&gt;&gt; (9.54 / 0.001).to_d.to_i&lt;br /&gt;=&gt; 9540&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Well, almost.  BigDecimal slows things down a bit compared to Float and the extra work (the remembering part, not the typing part) of adding to_d is effort that shouldn't be required.  I should be clear here that I have no problem with BigDecimal itself.  BigDecimal is &lt;span class="Apple-style-span" style="font-style: italic;"&gt;extremely&lt;/span&gt; useful, as are the extended precision libraries for other languages.  No, the problem remains that, even though the Ruby Core team could implement a reasonable compromise in Float so it behaves consistently, they refuse to.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-7753948453353884483?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/7753948453353884483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=7753948453353884483' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/7753948453353884483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/7753948453353884483'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/03/bigdecimal-mostly-acceptable.html' title='BigDecimal: mostly acceptable alternative to Float'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-8319375347371217378</id><published>2008-03-26T00:03:00.000-07:00</published><updated>2008-03-26T22:03:07.900-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spread'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='GCS'/><category scheme='http://www.blogger.com/atom/ns#' term='Distributed Systems'/><title type='text'>rb_spread patch for Ruby 1.8.recent/1.9 and Spread 4.0</title><content type='html'>&lt;a href="http://www.spread.org/"&gt;Spread&lt;/a&gt; is a group communication system, developed at Johns Hopkins, based on &lt;a href="http://en.wikipedia.org/wiki/Virtual_synchrony"&gt;Virtual Synchrony&lt;/a&gt; and &lt;a href="http://citeseer.ist.psu.edu/moser94extended.html"&gt;Extended Virtual Synchrony&lt;/a&gt;.  Lots of neat stuff therein.  The &lt;a href="http://rbspread.sourceforge.net/"&gt;Ruby API&lt;/a&gt; hasn't been updated since 2005, though, and will not compile against recent versions of Ruby 1.8 or 1.9, nor is it compatible with the 4.0 release of Spread.&lt;br /&gt;&lt;br /&gt;I put together &lt;a href="http://www.layer8.net/rb_spread_bb.patch"&gt;this patch&lt;/a&gt; to update the API to the current goodness and make the test and sample programs actually work.  My apologies for not doing lots of #ifdefs to make it work with both Spread 3.x and 4.x.  I have only tested this on OS X 10.5 on i386.  Success or failure, please let me know your experiences on other platforms.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-8319375347371217378?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/8319375347371217378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=8319375347371217378' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/8319375347371217378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/8319375347371217378'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/03/rbspread-patch-for-ruby-18recent19-and.html' title='rb_spread patch for Ruby 1.8.recent/1.9 and Spread 4.0'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-539554363748915527</id><published>2008-03-25T23:03:00.000-07:00</published><updated>2008-03-26T17:32:09.812-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Floating Point'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Bugs'/><title type='text'>Floating point arithmetic, bug reports, and monkey patching</title><content type='html'>It turns out that Barbie was right and math actually is hard.  At least, math is hard if you &lt;a href="http://docs.sun.com/app/docs/doc/800-7895/6hos0aou4?a=view"&gt;adhere&lt;/a&gt; to IEEE floating point spec.  C adheres to that spec.  Languages built on C inherit that adherence and, even though they could fix some of the problems that come with it, they leave things broken.&lt;br /&gt;&lt;br /&gt;In the case of Ruby, they also tell you there is no problem.  And it is fixed in the next version.  With this monkey patch.  But I'm getting ahead of myself.&lt;br /&gt;&lt;br /&gt;Here's Ruby (1.8.6 on OS X 10.5) in action:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&gt;&gt; (9.54 / 0.001)&lt;br /&gt;=&gt; 9540.0&lt;br /&gt;&gt;&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Well, that seems straightforward enough.  9540 is certainly the right answer.  I need the integer representation, not the floating point version, though, so we'll just call the handy Float#to_i function:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&gt;&gt; (9.54 / 0.001).to_i&lt;br /&gt;=&gt; 9539&lt;br /&gt;&gt;&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Don't feel badly, I blinked several times and had a few more sips of beer before I realized what I was seeing.  A second ago, the value was 9540, but now it is 9539.  I'll just bang on it a bit to see what I've done wrong:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&gt;&gt; (9.54 / 0.001).to_s.to_i&lt;br /&gt;=&gt; 9540&lt;br /&gt;&gt;&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Yup.  By converting the value to a String and then converting that String to an Integer we get the right value back.  Sometimes Ruby admits to the underlying IEEE spec edge case, other times it hides it.  Sadly, Python behaves similarly (though we are alerted to a problem immediately, rather than having it sneak up on us later):&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&gt;&gt;&gt; (9.54 / 0.001)&lt;br /&gt;9539.9999999999982&lt;br /&gt;&gt;&gt;&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Yikes!  And, frowny face, the other trouble is here, too:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&gt;&gt;&gt; str(9.54 / 0.001)&lt;br /&gt;'9540.0'&lt;br /&gt;&gt;&gt;&gt; int(9.54 / 0.001)&lt;br /&gt;9539&lt;br /&gt;&gt;&gt;&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;I wrote a simple C program to play directly with the underlying types.  Here are two variants that illustrate the problem clearly:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;stdio.h&gt;&lt;stdio.h&gt;&lt;br /&gt;&lt;br /&gt;int&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;  double f = 9.54 / 0.001;&lt;br /&gt;&lt;br /&gt;  printf("%f %i\n", f, (int)f);&lt;br /&gt;&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$ ./test&lt;br /&gt;9540.000000 9539&lt;br /&gt;$&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;stdio.h&gt;&lt;stdio.h&gt;&lt;br /&gt;&lt;br /&gt;int&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;  double f = 9.54 / 0.001;&lt;br /&gt;&lt;br /&gt;  printf("%f %i\n", f, (int)(float)f);&lt;br /&gt;&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$ ./test&lt;br /&gt;9540.000000 9540&lt;br /&gt;$&lt;br /&gt;&lt;/stdio.h&gt;&lt;/stdio.h&gt;&lt;/stdio.h&gt;&lt;/stdio.h&gt;&lt;/stdio.h&gt;&lt;/stdio.h&gt;&lt;/code&gt;&lt;br /&gt;So, I filed a &lt;a href="http://rubyforge.org/tracker/?func=detail&amp;amp;atid=1698&amp;amp;aid=19090&amp;amp;group_id=426"&gt;bug&lt;/a&gt; against Ruby.  Turns out someone else filed a similar bug a few weeks ago.  Both of our bugs were rejected on the grounds that things were working as they were supposed to.  I continued to argue that, regardless of what the underlying data types are doing, Ruby could and should do better.  We went back and forth a bit, and the Ruby gent finally noticed I filed the bug against 1.9.&lt;br /&gt;&lt;br /&gt;Why does that matter?  Well, it seems that, even though it totally, definitely, under no circumstances is a bug, they've added functionality to Float#round that, among other things, means it is possible to mostly work around the problem.  You can now pass it an argument giving the rounding precision desired.  So now we can do this (Ruby 1.9 on OS X 10.5):&lt;br /&gt;&lt;code&gt;&lt;br /&gt;irb(main):002:0&gt; (9.54 / 0.001).round(2).to_i&lt;br /&gt;=&gt; 9540&lt;br /&gt;irb(main):003:0&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Our grumpy Ruby Core gent was even kind enough to provide a monkey patch to Float to provide a truncate method that actually worked reliably:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class Float&lt;br /&gt;  def truncate_rounding(figs)&lt;br /&gt;    if figs &gt; 0&lt;br /&gt;      n = 10 ** figs&lt;br /&gt;      (self * n).round / n&lt;br /&gt;    else&lt;br /&gt;      n = 10 ** -figs&lt;br /&gt;      (self / n).round / 10 * (n * 10)&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Since this is absolutely not a bug, the workaround (I can't call it a fix since it introduces problems with overflow) will no doubt remain a hack.  A hack to make Float behave correctly.  That's a darned shame, Ruby folks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-539554363748915527?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/539554363748915527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=539554363748915527' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/539554363748915527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/539554363748915527'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2008/03/floating-point-arithmetic-bug-reports.html' title='Floating point arithmetic, bug reports, and monkey patching'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-1230504300105093394</id><published>2007-06-23T07:52:00.001-07:00</published><updated>2007-06-23T09:31:09.625-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='genetic code'/><category scheme='http://www.blogger.com/atom/ns#' term='fixation'/><category scheme='http://www.blogger.com/atom/ns#' term='evodevo'/><category scheme='http://www.blogger.com/atom/ns#' term='infrastructure'/><title type='text'>The developmental biology of infrastructure</title><content type='html'>Biologically-inspired technologies have been a research topic for years, &lt;a href="http://www.research.ibm.com/autonomic/"&gt;autonomic computing&lt;/a&gt; and &lt;a href="http://www.cs.cornell.edu/home/rvr/presentations/gossip/index.htm"&gt;epidemic protocols&lt;/a&gt; being a couple of examples.  These techniques often have very attractive properties to go with their fun names: scaling, self-healing, resilience, blah, blah, blah.  I think about infrastructure and have taken some different things from biology.&lt;br /&gt;&lt;br /&gt;The unfortunately named Universal Genetic Code (&lt;a href="http://www.icp.ucl.ac.be/%7Eopperd/private/ug_code.html"&gt;UGC&lt;/a&gt;) and the other, extremely similar variants found in mitochondrial DNA and other small organisms, evolved.  We're used to DNA being the stuff of evolution (RNA fans save your flame mails), so the code itself evolving is a bit of a brain bender.  Think of it as meta-evolution.&lt;br /&gt;&lt;br /&gt;The end of evolution for the UGC happened billions of years ago.  Experts call this "&lt;a href="http://bayes.colorado.edu/Papers/MBE00.pdf"&gt;early fixation&lt;/a&gt;.".  The code itself is a marvel of efficiency.  It resists exactly the sort of errors to which the transcription machinery is prone.  When a transcription error gets through, chances are the erroneous amino acid will have properties similar enough to the correct one that there is little functional difference in the geometry of the final protein.  We can appreciate just how spectacular it is because we can almost completely quantify its environment, something simply out of the question with complete organisms.  Physics, chemistry, geometry.&lt;br /&gt;&lt;br /&gt;The high school biology textbook version of how genes evolve goes something like this: mutation and crossover.  Mostly crossover.  Read chapters 5 through 7 for Monday.&lt;br /&gt;&lt;br /&gt;Reality, as expected, is far richer.  Enter &lt;a href="http://www.amazon.com/Introduction-Systems-Biology-Mathematical-Computational/dp/1584886420"&gt;Systems Biology&lt;/a&gt; and Evolutionary Developmental Biology (&lt;a href="http://www.amazon.com/DNA-Diversity-Molecular-Genetics-Evolution/dp/1405119500"&gt;evodevo&lt;/a&gt;).  I can't do justice to the topics in a blog post, but the important idea is this: genes change very slowly, while the gene regulation networks that control their expression are incredibly complex and evolve rapidly.&lt;br /&gt;&lt;br /&gt;The bottom of the stack is ridiculously efficient, defined almost entirely by physical constraints, and completely static.  Up a level we see simple, modular structures that can be assembled in a variety of ways, and that change very slowly.  Finally, at the top, we see the incredible complexity and the roiling expression of evolutionary change.&lt;br /&gt;&lt;br /&gt;UGC -&gt; genes -&gt; regulation networks&lt;br /&gt;hardware infrastructure -&gt; software infrastructure -&gt; applications&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-1230504300105093394?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/1230504300105093394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=1230504300105093394' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/1230504300105093394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/1230504300105093394'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2007/06/developmental-biology-of-infrastructure.html' title='The developmental biology of infrastructure'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-2920520662829746346</id><published>2007-06-03T17:40:00.000-07:00</published><updated>2007-06-23T07:53:09.555-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='demand locality'/><category scheme='http://www.blogger.com/atom/ns#' term='infrastructure'/><category scheme='http://www.blogger.com/atom/ns#' term='peering'/><title type='text'>A bit more about demand locality</title><content type='html'>In my last post I focused on geography and culture/language as critical factors for demand locality.  However, there are many other ways that demand locality manifests.  One of the more subtle is organizational demand locality.&lt;br /&gt;&lt;br /&gt;Organizational demand locality is the relative efficiency of carrying traffic entirely within the infrastructure of a single organization versus having to hand-off traffic to other organizations.  Wireless carriers offering unlimited "on-net" airtime are exploiting organizational demand locality.  Internet service providers spend a surprising amount of resources worrying about peering with each other (or refusing to).&lt;br /&gt;&lt;br /&gt;Once again, the geographic/cultural demand locality plays a key role.  In places with very high demand locality (Korea, Japan, etc.), the need for numerous, large links between organizations is minimized or avoided entirely.  In places with low demand locality (again, I mean the US), peering becomes a constant source of friction with tier-1 ISPs requiring peering at multiple points across the country or not at all.  Merging ISPs to raise organizational demand locality only gets you so far.&lt;br /&gt;&lt;br /&gt;The applications have to change, not the infrastructure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-2920520662829746346?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/2920520662829746346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=2920520662829746346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/2920520662829746346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/2920520662829746346'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2007/06/bit-more-about-demand-locality.html' title='A bit more about demand locality'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-5685396061862524709</id><published>2007-05-20T14:11:00.000-07:00</published><updated>2009-03-16T18:06:10.133-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='demand locality'/><category scheme='http://www.blogger.com/atom/ns#' term='infrastructure'/><category scheme='http://www.blogger.com/atom/ns#' term='peering'/><title type='text'>Global broadband</title><content type='html'>I received an email this morning with a link to &lt;a href="http://pressesc.com/01179677598_us_internet_slow"&gt;this article&lt;/a&gt;.   There's nothing new or especially interesting in it, but it happened to intersect with some other, related ideas I've been pondering.  There is a very wide gap between reality and perception of broadband penetration (the handful of comments under the linked article gives some flavor).&lt;br /&gt;&lt;br /&gt;The reason for the disparity is, in part, found in &lt;a href="http://upload.wikimedia.org/wikipedia/commons/b/bc/Population_density.png"&gt;this map&lt;/a&gt;.  More evidence is &lt;a href="http://upload.wikimedia.org/wikipedia/commons/4/4d/World_population_density_map.PNG"&gt;here&lt;/a&gt;.  The story these maps tell is of the business challenges to broadband in the US that are far less severe in other countries, if they exist at all: the physical geography, population distribution, and national or language barriers.  The central concept here is demand locality, or how closely geographic locality matches traffic locality.  More demand locality means easier deployment of faster and faster services.&lt;br /&gt;&lt;br /&gt;Most countries with similar uniformity of language and culture are much smaller than the US and have many fewer population centers.  Physical proximity and language/geographic barriers in such countries drive demand locality up and drive infrastructure costs down.&lt;br /&gt;&lt;br /&gt;In the US we have dozens of high-density population centers spread across thousands of miles.  Despite its wide variety of cultures and languages, the US is dominated by native English speakers who speak no other languages.  This implies very high connectivity demands between widely dispersed points in the country.  Demand locality is low, so infrastructure costs are high.  Not surprisingly, the US has an average broadband speed of 1.9Mb/s.&lt;br /&gt;&lt;br /&gt;South Korea is a great example of the rest of the world because it is geographically small, has one major population center, and there are no other Korean speaking countries with network infrastructure.  Most sites of interest to South Koreans are inside South Korea, so most traffic in South Korea stays in South Korea.  Delivering broadband to most of the population of South Korea means delivering it to Seoul and not worrying much about intra-country long-haul or inter-country connectivity.  The result: average broadband speed in South Korea of 45Mb/s.  Japan has similar advantages and averages 61Mb/s.&lt;br /&gt;&lt;br /&gt;This seems to leave the US stuck in the broadband doldrums.  Returning to the article at the top, no broadband initiative is going to change the demand locality.  Changing the demand locality requires getting data and applications closer to users.  That means building a lot of data centers and properly architecting applications to run in a lot of data centers spread far apart from each other.  At that point, individual metro areas can be upgraded with extremely high-speed broadband without needing nearly as much long-haul capacity or worries about transcontinental latency.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-5685396061862524709?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/5685396061862524709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=5685396061862524709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/5685396061862524709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/5685396061862524709'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2007/05/global-broadband.html' title='Global broadband'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29731912.post-115758052086441448</id><published>2006-09-06T15:07:00.000-07:00</published><updated>2007-07-22T11:26:58.605-07:00</updated><title type='text'>Yevgeny Zamyatin</title><content type='html'>"It is an error to divide people into the living and the dead: there are people who are dead-alive, and people who are alive-alive.  The dead-alive also write, walk, speak, act.  But they make no mistakes; only machines make no mistakes, and they produce only dead things.  The alive-alive are constantly in error, in search, in questions, in torment."&lt;br /&gt;&lt;br /&gt; -- &lt;a href="http://www.amazon.com/Modern-Library-Classics-Yevgeny-Zamyatin/dp/081297462X"&gt;We&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29731912-115758052086441448?l=infinitesecond.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infinitesecond.blogspot.com/feeds/115758052086441448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29731912&amp;postID=115758052086441448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/115758052086441448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29731912/posts/default/115758052086441448'/><link rel='alternate' type='text/html' href='http://infinitesecond.blogspot.com/2006/09/yevgeny-zamyatin.html' title='Yevgeny Zamyatin'/><author><name>Benjamin Black</name><uri>http://www.blogger.com/profile/17474203646250995072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_LsoZGb_JnNk/STRPNFzM3mI/AAAAAAAAAXA/bZ84Gg75Nz4/S220/DSC_0988_tiny.jpg'/></author><thr:total>0</thr:total></entry></feed>
