<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Noa&#039;s blog &#187; Cryptography</title>
	<atom:link href="http://noa.resare.com/category/cryptography/feed/" rel="self" type="application/rss+xml" />
	<link>http://noa.resare.com</link>
	<description>moderately interesting words about things going through my mind</description>
	<lastBuildDate>Fri, 29 Jan 2010 23:56:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>My password generator</title>
		<link>http://noa.resare.com/2010/01/password-generator/</link>
		<comments>http://noa.resare.com/2010/01/password-generator/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 23:55:08 +0000</pubDate>
		<dc:creator>noa</dc:creator>
				<category><![CDATA[Cryptography]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[passwords]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://noa.resare.com/?p=288</guid>
		<description><![CDATA[How do you create a really good password that you don't need to remember but that you might occasionally need to write on paper or type into a keyboard? These days modern operating system provide really good sources of randomness, and one method that is often used is to read some randomness from the operating [...]]]></description>
			<content:encoded><![CDATA[<p>How do you create a really good password that you don't need to remember but that you might occasionally need to write on paper or type into a keyboard? These days modern operating system provide really good sources of randomness, and one method that is often used is to read some randomness from the operating system <a href="http://en.wikipedia.org/wiki/PRNG">PRNG</a> located at /dev/random and run the data through the base64 encoding to get letters, numbers, + (plus) and / (slash). However, those passwords are not that conveinent and sometimes when I write them down people mistake my zeroes for capital o and things like that.</p>
<p>What I wanted was a password generator that could output a configurable length password using only easily distinguishable letters and numbers, so I wrote one. As usual I place this code in the public domain, feel free to use it any way you want.</p>
<p>Features:</p>
<ol>
<li>The entropy of the password is as good as the underlying operating system. If you use a recent Linux or OSX version, the data returned from /dev/random is quite good.</li>
<li>The code is simple and it is easy to verify that the program actually uses the entropy that it reads.</li>
<li>The resulting passwords are easy to type on keyboards and write on paper without confusing the reader with similar characters such as 1 (one) and l (lower case l).</li>
<li>The length of the password is configurable.</li>
</ol>
<pre class="python"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># alphanumeric chars minus l, I, O, 0, 1</span>
alphabet = <span style="color: #483d8b;">&quot;abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789&quot;</span>
<span style="color: #808080; font-style: italic;"># Some expeimentation told me that 2 ** 5.8 = 55.7</span>
BITS_PER_CHAR = <span style="color: #ff4500;">5.8</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># The default password length has the capacity of a bit more</span>
<span style="color: #808080; font-style: italic;"># than 64 bits of entropy.</span>
DEFAULT_LEN = <span style="color: #ff4500;">12</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span>args<span style="color: black;">&#41;</span>:
	count = DEFAULT_LEN
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>args<span style="color: black;">&#41;</span> &amp;gt; <span style="color: #ff4500;">1</span>:
		<span style="color: #ff7700;font-weight:bold;">if</span> args<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> == <span style="color: #483d8b;">'-h'</span>:
			usage<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
			<span style="color: #ff7700;font-weight:bold;">return</span>
		<span style="color: #ff7700;font-weight:bold;">elif</span> args<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> == <span style="color: #483d8b;">'-c'</span> <span style="color: #ff7700;font-weight:bold;">and</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>args<span style="color: black;">&#41;</span> &amp;gt; <span style="color: #ff4500;">2</span>:
			count = <span style="color: #008000;">int</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">else</span>:
			usage<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
			<span style="color: #ff7700;font-weight:bold;">return</span>
	<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span>create_password<span style="color: black;">&#40;</span>count<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> string_to_bignum<span style="color: black;">&#40;</span>s<span style="color: black;">&#41;</span>:
	num = <span style="color: #ff4500;">0</span>
	<span style="color: #ff7700;font-weight:bold;">for</span> c <span style="color: #ff7700;font-weight:bold;">in</span> s:
		num = <span style="color: #008000;">ord</span><span style="color: black;">&#40;</span>c<span style="color: black;">&#41;</span> + <span style="color: black;">&#40;</span>num &amp;lt;&amp;lt; <span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span>;
	<span style="color: #ff7700;font-weight:bold;">return</span> num
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> create_password<span style="color: black;">&#40;</span>length<span style="color: black;">&#41;</span>:
	<span style="color: #dc143c;">random</span> = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;/dev/random&quot;</span>, <span style="color: #483d8b;">&quot;r&quot;</span><span style="color: black;">&#41;</span>
	needed_bytes = <span style="color: black;">&#40;</span><span style="color: #008000;">int</span><span style="color: black;">&#41;</span><span style="color: black;">&#40;</span>length * BITS_PER_CHAR<span style="color: black;">&#41;</span> / <span style="color: #ff4500;">8</span> + <span style="color: #ff4500;">1</span>
	n = string_to_bignum<span style="color: black;">&#40;</span><span style="color: #dc143c;">random</span>.<span style="color: black;">read</span><span style="color: black;">&#40;</span>needed_bytes<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
	<span style="color: #dc143c;">random</span>.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
	s = <span style="color: #483d8b;">&quot;&quot;</span>
	<span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">xrange</span><span style="color: black;">&#40;</span>length<span style="color: black;">&#41;</span>:
		s = s + alphabet<span style="color: black;">&#91;</span>n % <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>alphabet<span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
		n = n / <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>alphabet<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">return</span> s
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> usage<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;&quot;</span><span style="color: #483d8b;">&quot;mkpasswd [-h] [-c COUNT]
Create a random password using the operating system's entropy pool
using a 57 character alphabet of letters and numbers. The characters
in the alphabet excludes characters and letters easily confusable such
as I and 1. 
&nbsp;
Each password character holds about 5.8 bits of entropy, so the
standard 12 character password can hold a theroretical maximum of
69 bits of entropy.
&nbsp;
The actual entropy present in any generated password is a function
of the entropy gathering algortihm present in the kernel of your
operating system.
&nbsp;
  -h        display this help text
  -c COUNT  create a password with COUNT characters.&quot;</span><span style="color: #483d8b;">&quot;&quot;</span>  
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>:
	main<span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#41;</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://noa.resare.com/2010/01/password-generator/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My DNSSEC validator</title>
		<link>http://noa.resare.com/2009/11/dnssec/</link>
		<comments>http://noa.resare.com/2009/11/dnssec/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 19:14:08 +0000</pubDate>
		<dc:creator>noa</dc:creator>
				<category><![CDATA[Cryptography]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[System administration]]></category>
		<category><![CDATA[DNSSEC]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://noa.resare.com/?p=267</guid>
		<description><![CDATA[As readers of this blog might have noticed I started to experiment with DNSSEC a few months ago. DNSSEC is basically a way of adding cryptographic keys and signatures to your DNS data that gives resolvers the ability to cryptographically verify the correctness of your DNS records using a series of cryptographic operations.
DNSSEC protects the [...]]]></description>
			<content:encoded><![CDATA[<p>As readers of this blog might have noticed I started to experiment with <a href="http://dnssec.net/">DNSSEC</a> a few months ago. DNSSEC is basically a way of adding cryptographic keys and signatures to your DNS data that gives resolvers the ability to cryptographically verify the correctness of your DNS records using a series of cryptographic operations.</p>
<p>DNSSEC protects the DNS system against a certain group of security problems such as the <a href="http://kaminskybug.se">kaminskybug</a>, where an attacker tricks a DNS server to return the wrong data to end users. If an attack against the DNS system is successful that means serious trouble, since we depend on it to work reliably in a vast number of online activities. An attacker that controls the DNS system can trick people to for example supply their account information to their online bank and use that to steal money. Whenever there is the potential for large scale fraud you can pretty much be sure that someone will try to break it, and that is why DNSSEC is important.</p>
<p>So, we need DNSSEC. What's stopping us from using it? A few things, but the most important obstacle in my opinion is that it is a complex set of standards and that it is difficult to understand. There are some <a href="http://alan.clegg.com/files/DNSSEC_in_6_minutes.pdf">presentations</a> and <a href="http://www.nlnetlabs.nl/publications/dnssec_howto/">HOWTO documents</a> online that attempts to explain and help people get started, but the learning curve is steep. One thing that I ran into when experimenting with my own zones was that somehow I managed to corrupt the signatures of one zone and I couldn't easily pinpoint what the problem was.</p>
<p>When confronted with this I got the idea to build an online service that tries to answer a simple question.<em> What data was used and what cryptographic operations was performed to actually verify one specific DNS record?</em> The answer to that question can be thought of as a chain of operations and records where one link connects to the other from all the way from the record being verified down to the <a href="https://dlv.isc.org/">DLV</a> root key.</p>
<p>I decided to write the service in Python and it was one of the most fun programming projects that I have worked on in years. In a way it was basic research but with a clear application and an end result that I think could be a useful contribution. I even wrote my own <a href="http://en.wikipedia.org/wiki/RSA">RSA</a> signature verification functionality, with a lots of help from Python's excellent large integer support.</p>
<p>The service can be found at <a href="http://dnssec.resare.com">http://dnssec.resare.com</a> Feel free to give it a spin. There are no doubt bugs and errors that will be fixed and other modifications that will be made, but the basic functionality is in place.</p>
<p>Thanks to Alex for the beautiful HTML design,  to the python dns library <a href="http://www.dnspython.org/">dnspython</a> that I use extensively and the <a href="http://dev.sanityinc.com/airspeed/">airspeed</a> templating library.</p>
]]></content:encoded>
			<wfw:commentRss>http://noa.resare.com/2009/11/dnssec/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>pwhash in Ruby</title>
		<link>http://noa.resare.com/2009/03/pwhash-in-ruby/</link>
		<comments>http://noa.resare.com/2009/03/pwhash-in-ruby/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 14:46:57 +0000</pubDate>
		<dc:creator>noa</dc:creator>
				<category><![CDATA[Cryptography]]></category>
		<category><![CDATA[Geeky]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[password hashing]]></category>
		<category><![CDATA[pwhash]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://noa.resare.com/?p=191</guid>
		<description><![CDATA[I spent some time this weekend re-implementing my pwhash functionality in ruby. I don't have much experience with ruby. I got some exposure to it when doing some work for johnlook a while back, but when writing this code it became apparent that I had some gaps in my knowledge.
Learning new programming languages is an [...]]]></description>
			<content:encoded><![CDATA[<p>I spent some time this weekend re-implementing my pwhash functionality in <a href="http://ruby-lang.org/">ruby</a>. I don't have much experience with ruby. I got some exposure to it when doing some work for <a href="http://johnlook.com/">johnlook</a> a while back, but when writing this code it became apparent that I had some gaps in my knowledge.</p>
<p>Learning new programming languages is an interesting thing to do. I've done it a few times now and if the language is good it gives you a few new perspectives and new ideas on how to be a better programmer. I must say that ruby is a nice acquaintance. The learning curve is a bit steeper than with languages like python (or maybe I'm just getting old) but many things are elegant and I hope to get to work more with it in the future.</p>
<p>Anyway, without any further ado I give you <a href="http://fs.voxbiblia.com/pwhash/dist/pwhash.rb">pwhash.rb</a>. Feel free to use it in any way that is compatible with GPL3. I'm fully aware that I have yet to master the style and details of ruby, so if you have any criticisms or ideas on how to improve upon it, feel free to drop me a line.</p>
]]></content:encoded>
			<wfw:commentRss>http://noa.resare.com/2009/03/pwhash-in-ruby/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to best protect your users&#8217; passwords</title>
		<link>http://noa.resare.com/2009/03/protect-passwords/</link>
		<comments>http://noa.resare.com/2009/03/protect-passwords/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 21:32:18 +0000</pubDate>
		<dc:creator>noa</dc:creator>
				<category><![CDATA[Cryptography]]></category>
		<category><![CDATA[Geeky]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[SHA-1]]></category>

		<guid isPermaLink="false">http://noa.resare.com/?p=182</guid>
		<description><![CDATA[It seems like this blog has turned into more and more of a programming blog, and here is yet another step in that direction. Perhaps somewhat boring to many, but hopefully useful to some.
Online services generally use usernames and passwords to identify their users. The simplest way of doing that is to save the information [...]]]></description>
			<content:encoded><![CDATA[<p>It seems like this blog has turned into more and more of a programming blog, and here is yet another step in that direction. Perhaps somewhat boring to many, but hopefully useful to some.</p>
<p>Online services generally use usernames and passwords to identify their users. The simplest way of doing that is to save the information in clear text, perhaps in a database or in a text file. When a user logs in, look up the stored password and compare it with the one supplied by the user. If they match, authentication is successful. A simple solution, but a problematic one. If the username and password information gets in the hands of the wrong people. Since many user the same password over and over again it is likely that the username-email-password combinations can be used to log into other services.</p>
<p>This is a real problem. Writing secure web applications is difficult, and security problems that gives an attacker access to login data can be introduced not only by your own code but also by third party libraries and frameworks.</p>
<p>Because of this it is a good idea to make it somewhat more difficult to use the password information for an attacker using some sort of scrambling method. Many people call such methods password encryption, but encryption implies that its possible to decrypt  the information with the right key, and keys can be lost so it is better to make the process one way. The basic idea is to take a plaintext password and change it into something called a hash that can not be reversed back into the plaintext. However, the scrambling process needs to be repeatable so that a plaintext password can be verified to match the password that was once used to create the hash.</p>
<p>To help in this process there is a family of cryptographic functions that called cryptographic hash functions. They work in a way that a variable length input is turned into a fixed length output in a way that it's very difficult to a) find two inputs that generate the same output and b) find the input given a specific output. Assuming that the cryptographic hash function works as advertised, shouldn't this should solve all our password storing problems? If we store a cryptographic hash of the user supplied password using for example the SHA-1 algorithm, an attacker that gets hold of our login data can't run SHA-1 backwards to get the passwords. All he has is a list of hash values, but at the same time we can repeat the SHA-1 function when a user needs to authenticate and compare the hashes of the new and old password. If they match they must be the same.</p>
<p>This would be an efficient method if it were not for one little detail: <strong>Users choose bad passwords</strong>. Some use <em>password</em>, some use their first name some <em>a1</em>. There are lists available with common passwords, and once an attacker puts a computer to the task of trying out passwords many of them gets broken. Worse yet, since the SHA-1 algorithm is such a common one, there is almost certainly hard drives out there filled with pre-calculated SHA-1 values for all common passords and even the ones for all possible password combinations shorter than for example 8 characters. With such pre-calculated values any short or simple password can be found in seconds.</p>
<p>To solve the second problem, the one with pre-calculated hash values, something called a salt value is used. A salt is a random number that is added to the plaintext password before it is encrypted. If the salt can have say a billion possible values, someone doing pre-calculated hash values need to do a billion times more pre-calculations and have a billion times more storage to store the hashes. The salt value can be stored in an unaltered form together with the hash value, and be used when verifying a password by simply doing the same hash operation with the same salt a second time. Another benefit of adding salt to the password is that if you have a large number of users, the attacker can't reuse each password guess with all the users, since their salt values differ.</p>
<p>The problem with easy to guess passwords is much more difficult to solve. The only thing that helps a bit, besides educating users in methods for choosing better passwords, is to make it more time consuming to do one hash calculation. That way it takes longer to try out millions of common passwords and password combination and guessing right will take longer, hopefully too long to be worth it. To make it take a bit longer to calculate the hash you can simply repeat the cryptographic hash function over and over again. Doing it once on my dual core desktop computer takes less than a millisecond. Doing it a thousand times increases the time spent calculating one hash value to about 200 milliseconds.</p>
<p>So, to take good care of your users' login information you should:</p>
<ol>
<li>pay attention to security on your servers. That includes operating system security, backup management as well as avoiding misstakes in your own code.</li>
<li>encourage them to use good passwords.</li>
<li>store hash values of the passwords instead of plaintext versions</li>
<li>use a good cryptographic hash function to hash them</li>
<li>use a large enough and random enough salt value when hashing</li>
<li>repeat the hash function until you reach a reasonable tradeoff between efficiency and difficulty of repeating it by an attacker.</li>
</ol>
<p>Soon, I'll publish some java code I've written that implements recommendations 3-6. But that's for another day, now I need to put this computer to sleep.</p>
<p>Update 090330: Since I wrote this post I have published the code for two implementations of these recommendations, in <a href="http://noa.resare.com/2009/03/pwhash/">Java</a> and <a href="http://noa.resare.com/2009/03/pwhash-in-ruby/">Ruby</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://noa.resare.com/2009/03/protect-passwords/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Perfect Forward Secrecy</title>
		<link>http://noa.resare.com/2008/07/perfect-forward-secrecy/</link>
		<comments>http://noa.resare.com/2008/07/perfect-forward-secrecy/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 18:28:46 +0000</pubDate>
		<dc:creator>noa</dc:creator>
				<category><![CDATA[Cryptography]]></category>
		<category><![CDATA[TLS]]></category>

		<guid isPermaLink="false">http://noa.resare.com/?p=33</guid>
		<description><![CDATA[When thinking about the possibilities and problems with cryptography when it comes to protecting from a large and resourceful eavesdropping organization such as FRA i found myself asking this question: If someone passively snoops encrypted web communication, is it possible to decrypt the information at a later date, if the secret key of the website [...]]]></description>
			<content:encoded><![CDATA[<p>When thinking about the possibilities and problems with cryptography when it comes to protecting from a large and resourceful eavesdropping organization such as <a href="http://frapedia.se/wiki/Information_in_English">FRA</a> i found myself asking this question: <em>If someone passively snoops encrypted web communication, is it possible to decrypt the information at a later date, if the secret key of the website somehow gets in the hands of the eavesdropper? </em></p>
<p>Why is this important? Well, if you have a scenario when for example a government agency has the ability to eavesdrop on and store vast amounts of data it might come to a situation when said agency gets really interested in decoding some of the encrypted information that is has snooped. If you are a government agency it might be enough to send a nasty letter to for example a webmail or social networking service demanding the key, or even break into the hosting facility that holds the secret key and obtain it, legally or illegally.</p>
<p>Anyway, back to my question. After some research I have found the somewhat dissatisfying answer is <em>most of the time, stored encrypted traffic can be decrypted if the key is obtained</em>. There is however a technique that effectively prevents such a scenario called <a href="http://en.wikipedia.org/wiki/Perfect_forward_secrecy">Perfect Forward Secrecy.</a> It is available when using the the DHE key exchange protocol, which is part of some of the cipher suites that can be used with TLS, the protocol used when connecting to a website with an address starting with https.</p>
<p>DHE stands for Diffie-Hellman key exchange with Ephemeral parameters, a method for a server and a client (in this case a web browser) to find a common session key that is used to encrypt the actual data without ever sending the actual session key in clear text. The key, as well as the Diffie-Hellman parameters used by the client and server to calculate the key is (hopefully) never stored on disk, but created for each connection (or, in the case of session caching, each couple of connections between the same server and client) and then discarded. The long term secret key used to authenticate the server and hopefully prevent man-in-the-middle attacks can not be used to re-create the session key even if it is known by an attacker.</p>
<p>To be able to use DHE to set up the encrypted connection, both web server and web browser need to support it. All modern web browsers that I have tested supports it, but for some reason many web servers doesn't. Why? I'm not really sure, but I think that it might have to do with several factors. It it requires a bit more server resources to set up a DHE key exchange than it does to set up a straight RSA one. Also, I think that many people making decisions about which cryptos to provide has too much confidence that a secret key will remain secret. </p>
<p>Anyway, if you want to test if your web browser supports Ephemeral Diffie-Hellman key exchange, feel free to visit my cryptography <a href="https://resare.com/noa/check_encryption">test page</a> that I set up to try this out. If you want to avoid certificate warnings you might want to install the <a href="http://www.cacert.org/index.php?id=3">CACert root key</a> in your web browser. It is as least as secure and well maintained as the other root certificates that are already bundled with your web browser or operating system.</p>
]]></content:encoded>
			<wfw:commentRss>http://noa.resare.com/2008/07/perfect-forward-secrecy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why cryptography matters</title>
		<link>http://noa.resare.com/2008/07/why-cryptography-matters/</link>
		<comments>http://noa.resare.com/2008/07/why-cryptography-matters/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 17:02:37 +0000</pubDate>
		<dc:creator>noa</dc:creator>
				<category><![CDATA[Cryptography]]></category>
		<category><![CDATA[FRA]]></category>
		<category><![CDATA[Politics]]></category>

		<guid isPermaLink="false">http://noa.resare.com/?p=15</guid>
		<description><![CDATA[Ever since the the discussion began about the FRA legislation I have thought about the implications of a large, secret organization eavesdropping on Internet communication. After the law was decided upon by our parliament here in Sweden I have researched more and more about encryption systems and techniques as a means to divert the feelings of hopelessness and [...]]]></description>
			<content:encoded><![CDATA[<p>Ever since the the discussion began about the <a href="http://frapedia.se/wiki/Information_in_English">FRA legislation</a> I have thought about the implications of a large, secret organization eavesdropping on Internet communication. After the law was decided upon by our parliament here in Sweden I have researched more and more about encryption systems and techniques as a means to divert the feelings of hopelessness and sadness about the political system and the process that lead to the awful law.</p>
<p>I sometimes say, half jokingly, that my motto is <em>There is no problem that doesn't have a technical solution.</em> This is of course false, but when it comes to privacy on the internet, technology can be helpful.</p>
<p>For those of you that doesn't know about FRA and the new law, it is the Swedish equivalent of the NSA and they have traditionally provided the swedish government with military intelligence gathered from intercepted radio traffic. Since the airwaves has become kind of boring to listen to over the years with people using new means of communication, our politicians has come up with a new law that grants the FRA access to all Internet and telephone communication that crosses Sweden's borders.</p>
<p>Many people has seen the problems with this new situation. FRA is an organization that is impossible to subject to efficient regulatory oversight, and with vast amounts of personal data being collected it is obvious that invasion of privacy can happen and probably will happen on on a massive scale. Why? Because FRA works in secret and their continued existence is conditioned on their ability produce interesting information. So, my theory is that you can pretty much assume that FRA will do the things that are most efficient to get information about criminal or suspicious activity, regardless of wether it invades someone's privacy or not, and regardless of what the official FRA rhetoric says about the right to privacy.</p>
<p>What is the most efficient information gathering techniques you can use with massive amounts of internet traffic? I believe the answer is by profiling individuals. Find out what websites you visit, find out who you send emails to. Who are your friends on Facebook? If we assume that FRA does not have any limits internally as to what it does with the information it collects, my guess is that all political activity that is considered somewhat extreme will be investigated, and not only the people actually members of suspect policial parties but also their friends, neighbours and relatives. Also, it would lessen the efficiency of the system to discard user profiles that the organization finds no use for, so everything even remotely interesting will be saved and can be revisited if a suspicion arises sometime in the future.</p>
<p>Does this sound scary? Well, I think it is, and that is why I advocate the use of cryptography for all types of communication, as often as possible. The history is full of examples of governments that has gone from good to somewhat abusive to totalitarian and evil. The internet activity that seems innocent now might not be seen as innocent in the future. Done right, the use of cryptography can bring a great deal of protection from eavesdropping to internet users. So, please do.</p>
]]></content:encoded>
			<wfw:commentRss>http://noa.resare.com/2008/07/why-cryptography-matters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
