<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>bcrypt Wiki Rss Feed</title><link>http://bcrypt.codeplex.com/</link><description>bcrypt Wiki Rss Description</description><item><title>Updated Wiki: Home</title><link>http://bcrypt.codeplex.com/wikipage?version=4</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Project Description&lt;/strong&gt;&lt;br&gt;
A .Net port of jBCrypt implemented in C#. It uses a variant of the Blowfish encryption algorithm&amp;rsquo;s keying schedule, and introduces a work factor, which allows you to determine how expensive the hash function will be, allowing the algorithm to be &amp;quot;future-proof&amp;quot;.&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Details&lt;/strong&gt;&lt;br&gt;
This is, for all intents and purposes, a direct port of &lt;a href="http://www.mindrot.org/projects/jBCrypt/" target="_blank"&gt;
jBCrypt&lt;/a&gt; written by Damien Miller.&amp;nbsp;&amp;nbsp;The main differences are the addition of some convenience methods and some mild refactoring. &amp;nbsp;The easiest way to verify BCrypt.Net's parity with jBCrypt is to compare the unit tests.&lt;/p&gt;
&lt;p&gt;For an overview of why BCrypt is important see &lt;a href="http://codahale.com/how-to-safely-store-a-password/" target="_blank"&gt;
How to Safely Store a Password&lt;/a&gt;. &amp;nbsp;In general it's a hashing algorithm that can be adjusted over time to require more CPU power to generate the hashes. &amp;nbsp;This, in essence, provides some protection against
&lt;a title="Moore's Law - Wikipedia" href="http://en.wikipedia.org/wiki/Moore's_law" target="_blank"&gt;
Moore's Law&lt;/a&gt;. &amp;nbsp;That is, as computers get faster, this algorithm can be adjusted to require more CPU power. &amp;nbsp;The more CPU power that's required to hash a given password, the more time a &amp;quot;hacker&amp;quot; must invest, per password. &amp;nbsp;Since the &amp;quot;work factor&amp;quot;
 is embedded in the resultant hash, the hashes generated by this algorithm are forward/backward-compatible.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why BCrypt&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;From &lt;a href="http://codahale.com/how-to-safely-store-a-password/" target="_blank"&gt;
How to Safely Store a Password&lt;/a&gt;:&lt;/p&gt;
&lt;p style="padding-left:30px"&gt;[..] It uses a variant of the Blowfish encryption algorithm&amp;rsquo;s keying schedule, and introduces a&amp;nbsp;&lt;em&gt;work factor&lt;/em&gt;, which allows you to determine how expensive the hash function will be. Because of this,&amp;nbsp;&lt;code&gt;bcrypt&lt;/code&gt;&amp;nbsp;can
 keep up with Moore&amp;rsquo;s law. As computers get faster you can increase the work factor and the hash will get slower.&lt;/p&gt;
&lt;p&gt;From &lt;a href="http://en.wikipedia.org/wiki/Crypt_(Unix)#Blowfish-based_scheme" target="_blank"&gt;
Wikipedia&lt;/a&gt;:&lt;/p&gt;
&lt;p style="padding-left:30px"&gt;Niels Provos&amp;nbsp;and&amp;nbsp;David Mazieres&amp;nbsp;designed a crypt() scheme called&amp;nbsp;&lt;a title="Bcrypt" href="http://en.wikipedia.org/wiki/Bcrypt" target="_blank"&gt;bcrypt&lt;/a&gt;&amp;nbsp;based on&amp;nbsp;&lt;a title="Blowfish (cipher)" href="http://en.wikipedia.org/wiki/Blowfish_(cipher)" target="_blank"&gt;Blowfish&lt;/a&gt;,
 and presented it at&amp;nbsp;&lt;a title="USENIX" href="http://en.wikipedia.org/wiki/USENIX" target="_blank"&gt;USENIX&lt;/a&gt;&amp;nbsp;in 1999.&amp;nbsp;The printable form of these hashes starts with&amp;nbsp;&lt;strong&gt;$2$&lt;/strong&gt;&amp;nbsp;or&amp;nbsp;&lt;strong&gt;$2a$&lt;/strong&gt;, depending on which
 variant of the algorithm is used.&lt;/p&gt;
&lt;p style="padding-left:30px"&gt;Blowfish is notable among block ciphers for its expensive key setup phase. It starts off with subkeys in a standard state, then uses this state to perform a block encryption using part of the key, and uses the result of that encryption
 (really, a hashing) to replace some of the subkeys. Then it uses this modified state to encrypt another part of the key, and uses the result to replace more of the subkeys. It proceeds in this fashion, using a progressively modified state to hash the key and
 replace bits of state, until all subkeys have been set.&lt;/p&gt;
&lt;p style="padding-left:30px"&gt;Provos and Mazieres took advantage of this, and actually took it further. They developed a new key setup algorithm for Blowfish, dubbing the resulting cipher &amp;quot;Eksblowfish&amp;quot; (&amp;quot;expensive key schedule Blowfish&amp;quot;). The key setup begins
 with a modified form of the standard Blowfish key setup, in which both the salt and password are used to set all subkeys. Then there is a configurable number of rounds in which the standard Blowfish keying algorithm is applied, using alternately the salt and
 the password as the key, each round starting with the subkey state from the previous round. This is not cryptographically significantly stronger than the standard Blowfish key schedule; it's just very slow.&lt;/p&gt;
&lt;p style="padding-left:30px"&gt;The number of rounds of keying is a power of two, which is an input to the algorithm. The number is encoded in the textual hash.&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rdez6173</author><pubDate>Mon, 17 Jan 2011 14:38:06 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110117023806P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://bcrypt.codeplex.com/documentation?version=1</link><description>&lt;div class="wikidoc"&gt;Documentation is available in the &lt;a href="http://bcrypt.codeplex.com/releases/view/57687"&gt;CurrentRelease&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rdez6173</author><pubDate>Sun, 19 Dec 2010 13:54:18 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20101219015418P</guid></item><item><title>Updated Wiki: Home</title><link>http://bcrypt.codeplex.com/wikipage?version=3</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Project Description&lt;/strong&gt;&lt;br&gt;
A .Net port of jBCrypt implemented in C#. It uses a variant of the Blowfish encryption algorithm&amp;rsquo;s keying schedule, and introduces a work factor, which allows you to determine how expensive the hash function will be, allowing the algorithm to be &amp;quot;future-proof&amp;quot;.&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Details&lt;/strong&gt;&lt;br&gt;
This is a direct port of &lt;a href="http://www.mindrot.org/projects/jBCrypt/" target="_blank"&gt;
jBCrypt&lt;/a&gt; written by Damien Miller. The easiest way to verify BCrypt.Net's parity with jBCrypt is to compare the unit tests.&lt;br&gt;
&lt;br&gt;
For an overview of why BCrypt is important see &lt;a href="http://codahale.com/how-to-safely-store-a-password/" target="_blank"&gt;
How to Safely Store a Password&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Why BCrypt&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;From &lt;a href="http://codahale.com/how-to-safely-store-a-password/" target="_blank"&gt;
How to Safely Store a Password&lt;/a&gt;:&lt;/p&gt;
&lt;p style="padding-left:30px"&gt;[..] It uses a variant of the Blowfish encryption algorithm&amp;rsquo;s keying schedule, and introduces a&amp;nbsp;&lt;em&gt;work factor&lt;/em&gt;, which allows you to determine how expensive the hash function will be. Because of this,&amp;nbsp;&lt;code&gt;bcrypt&lt;/code&gt;&amp;nbsp;can
 keep up with Moore&amp;rsquo;s law. As computers get faster you can increase the work factor and the hash will get slower.&lt;/p&gt;
&lt;p&gt;From &lt;a href="http://en.wikipedia.org/wiki/Crypt_(Unix)#Blowfish-based_scheme" target="_blank"&gt;
Wikipedia&lt;/a&gt;:&lt;/p&gt;
&lt;p style="padding-left:30px"&gt;Niels Provos&amp;nbsp;and&amp;nbsp;David Mazieres&amp;nbsp;designed a crypt() scheme called&amp;nbsp;&lt;a title="Bcrypt" href="http://en.wikipedia.org/wiki/Bcrypt" target="_blank"&gt;bcrypt&lt;/a&gt;&amp;nbsp;based on&amp;nbsp;&lt;a title="Blowfish (cipher)" href="http://en.wikipedia.org/wiki/Blowfish_(cipher)" target="_blank"&gt;Blowfish&lt;/a&gt;,
 and presented it at&amp;nbsp;&lt;a title="USENIX" href="http://en.wikipedia.org/wiki/USENIX" target="_blank"&gt;USENIX&lt;/a&gt;&amp;nbsp;in 1999.&amp;nbsp;The printable form of these hashes starts with&amp;nbsp;&lt;strong&gt;$2$&lt;/strong&gt;&amp;nbsp;or&amp;nbsp;&lt;strong&gt;$2a$&lt;/strong&gt;, depending on which
 variant of the algorithm is used.&lt;/p&gt;
&lt;p style="padding-left:30px"&gt;Blowfish is notable among block ciphers for its expensive key setup phase. It starts off with subkeys in a standard state, then uses this state to perform a block encryption using part of the key, and uses the result of that encryption
 (really, a hashing) to replace some of the subkeys. Then it uses this modified state to encrypt another part of the key, and uses the result to replace more of the subkeys. It proceeds in this fashion, using a progressively modified state to hash the key and
 replace bits of state, until all subkeys have been set.&lt;/p&gt;
&lt;p style="padding-left:30px"&gt;Provos and Mazieres took advantage of this, and actually took it further. They developed a new key setup algorithm for Blowfish, dubbing the resulting cipher &amp;quot;Eksblowfish&amp;quot; (&amp;quot;expensive key schedule Blowfish&amp;quot;). The key setup begins
 with a modified form of the standard Blowfish key setup, in which both the salt and password are used to set all subkeys. Then there is a configurable number of rounds in which the standard Blowfish keying algorithm is applied, using alternately the salt and
 the password as the key, each round starting with the subkey state from the previous round. This is not cryptographically significantly stronger than the standard Blowfish key schedule; it's just very slow.&lt;/p&gt;
&lt;p style="padding-left:30px"&gt;The number of rounds of keying is a power of two, which is an input to the algorithm. The number is encoded in the textual hash.&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rdez6173</author><pubDate>Wed, 15 Dec 2010 22:58:53 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20101215105853P</guid></item></channel></rss>