<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Everything You Need To Know About Registration Systems</title>
	<atom:link href="http://www.kalzumeus.com/2006/09/05/everything-you-need-to-know-about-registration-systems/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kalzumeus.com/2006/09/05/everything-you-need-to-know-about-registration-systems/</link>
	<description>B2C stands for "Bingo To Customer"</description>
	<lastBuildDate>Thu, 02 Jul 2009 15:42:14 -0700</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: TD</title>
		<link>http://www.kalzumeus.com/2006/09/05/everything-you-need-to-know-about-registration-systems/comment-page-1/#comment-1960</link>
		<dc:creator>TD</dc:creator>
		<pubDate>Thu, 21 May 2009 22:15:54 +0000</pubDate>
		<guid isPermaLink="false">http://microisvjournal.wordpress.com/2006/09/05/everything-you-need-to-know-about-registration-systems/#comment-1960</guid>
		<description>Need to re-word this part of my last post:

I am thinking I’ll just create a list of product keys and issue one of these keys to the customer when they make a purchase. In the app I&#039;m selling I’ll have code that checks the key to see if it meets some scheme I’ll come up with. I know if it is decompiled that the scheme will be known but it sounds like it’s not worth worrrying about that.</description>
		<content:encoded><![CDATA[<p>Need to re-word this part of my last post:</p>
<p>I am thinking I’ll just create a list of product keys and issue one of these keys to the customer when they make a purchase. In the app I&#8217;m selling I’ll have code that checks the key to see if it meets some scheme I’ll come up with. I know if it is decompiled that the scheme will be known but it sounds like it’s not worth worrrying about that.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: TD</title>
		<link>http://www.kalzumeus.com/2006/09/05/everything-you-need-to-know-about-registration-systems/comment-page-1/#comment-1959</link>
		<dc:creator>TD</dc:creator>
		<pubDate>Thu, 21 May 2009 22:11:39 +0000</pubDate>
		<guid isPermaLink="false">http://microisvjournal.wordpress.com/2006/09/05/everything-you-need-to-know-about-registration-systems/#comment-1959</guid>
		<description>Great article.  I have read and re-read some parts for several weeks now.  I have thoughts/questions on this subject.

First, it appears that it does not matter how you impliment a product key protection scheme for your app as there will always be a group of hackers who will decomplie your app to learn how the product key protection scheme works.

Second, it appears that the next group of hackers may not go to the trouble to decompile but spent time trying to crack the scheme used to create the product key itself.

I read where one way to keep the hackers at bay is to &quot;patch&quot; (whatever that means) the app so that the product key protection scheme is changed regularly in some small way.  Does not doing this break the keys issued for earlier &quot;patched versions&quot; of the app?

I am thinking I&#039;ll just create an app to generate a list of product keys and issue one to the customer when they make a purchase.  In the app I&#039;ll have code that checks the key to see if it meets some scheme I&#039;ll come up with.  I know if it is decompiled that the scheme will be known but it sounds like it&#039;s not worth worrrying about that.

Any thoughts on my thoughs?
TD</description>
		<content:encoded><![CDATA[<p>Great article.  I have read and re-read some parts for several weeks now.  I have thoughts/questions on this subject.</p>
<p>First, it appears that it does not matter how you impliment a product key protection scheme for your app as there will always be a group of hackers who will decomplie your app to learn how the product key protection scheme works.</p>
<p>Second, it appears that the next group of hackers may not go to the trouble to decompile but spent time trying to crack the scheme used to create the product key itself.</p>
<p>I read where one way to keep the hackers at bay is to &#8220;patch&#8221; (whatever that means) the app so that the product key protection scheme is changed regularly in some small way.  Does not doing this break the keys issued for earlier &#8220;patched versions&#8221; of the app?</p>
<p>I am thinking I&#8217;ll just create an app to generate a list of product keys and issue one to the customer when they make a purchase.  In the app I&#8217;ll have code that checks the key to see if it meets some scheme I&#8217;ll come up with.  I know if it is decompiled that the scheme will be known but it sounds like it&#8217;s not worth worrrying about that.</p>
<p>Any thoughts on my thoughs?<br />
TD</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Matt C</title>
		<link>http://www.kalzumeus.com/2006/09/05/everything-you-need-to-know-about-registration-systems/comment-page-1/#comment-316</link>
		<dc:creator>Matt C</dc:creator>
		<pubDate>Wed, 03 Dec 2008 17:55:41 +0000</pubDate>
		<guid isPermaLink="false">http://microisvjournal.wordpress.com/2006/09/05/everything-you-need-to-know-about-registration-systems/#comment-316</guid>
		<description>&gt; I don’t trust myself to implement encryption. Neither should you. Really, trust Bob Schneider, you’ll probably just end up breaking something.

Yeah, I liked the cryptography advice in &quot;Blue Skies for Everyone&quot;, though you kinda have to read between the lines to get it.

Also, I heard Bruce Schneier had his own rock and roll song steganographically embedded into the text of Applied Cryptography.  Who would have thunk it?

:)</description>
		<content:encoded><![CDATA[<p>&gt; I don’t trust myself to implement encryption. Neither should you. Really, trust Bob Schneider, you’ll probably just end up breaking something.</p>
<p>Yeah, I liked the cryptography advice in &#8220;Blue Skies for Everyone&#8221;, though you kinda have to read between the lines to get it.</p>
<p>Also, I heard Bruce Schneier had his own rock and roll song steganographically embedded into the text of Applied Cryptography.  Who would have thunk it?</p>
<p>:)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: attila</title>
		<link>http://www.kalzumeus.com/2006/09/05/everything-you-need-to-know-about-registration-systems/comment-page-1/#comment-315</link>
		<dc:creator>attila</dc:creator>
		<pubDate>Tue, 14 Oct 2008 20:20:24 +0000</pubDate>
		<guid isPermaLink="false">http://microisvjournal.wordpress.com/2006/09/05/everything-you-need-to-know-about-registration-systems/#comment-315</guid>
		<description>I have just one question. Why don&#039;t you create a demo version instead of the trial? It could add watermark to the cards, or something similar. When somebody purchases a legal copy then he will receive the full version.

Best regards</description>
		<content:encoded><![CDATA[<p>I have just one question. Why don&#8217;t you create a demo version instead of the trial? It could add watermark to the cards, or something similar. When somebody purchases a legal copy then he will receive the full version.</p>
<p>Best regards</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: malcolmm</title>
		<link>http://www.kalzumeus.com/2006/09/05/everything-you-need-to-know-about-registration-systems/comment-page-1/#comment-314</link>
		<dc:creator>malcolmm</dc:creator>
		<pubDate>Wed, 08 Oct 2008 08:17:21 +0000</pubDate>
		<guid isPermaLink="false">http://microisvjournal.wordpress.com/2006/09/05/everything-you-need-to-know-about-registration-systems/#comment-314</guid>
		<description>Great article and great links too - thanks. I&#039;ll be revisiting it when I get to this point in the project I&#039;m working on at the moment. I&#039;ve already specified a license server, but I think that I may revisit it when it comes to coding it. When I&#039;ve worked out what I&#039;m going to do I&#039;ll post on my blog and I&#039;ll definitely be referencing your useful content.

I&#039;m particularly concerned about allowing the legitimate user to use the software from more than on location (laptop, home etc), but not allowing duplicate users on the same license - hence license server.</description>
		<content:encoded><![CDATA[<p>Great article and great links too &#8211; thanks. I&#8217;ll be revisiting it when I get to this point in the project I&#8217;m working on at the moment. I&#8217;ve already specified a license server, but I think that I may revisit it when it comes to coding it. When I&#8217;ve worked out what I&#8217;m going to do I&#8217;ll post on my blog and I&#8217;ll definitely be referencing your useful content.</p>
<p>I&#8217;m particularly concerned about allowing the legitimate user to use the software from more than on location (laptop, home etc), but not allowing duplicate users on the same license &#8211; hence license server.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: joske vermeulen</title>
		<link>http://www.kalzumeus.com/2006/09/05/everything-you-need-to-know-about-registration-systems/comment-page-1/#comment-302</link>
		<dc:creator>joske vermeulen</dc:creator>
		<pubDate>Mon, 10 Mar 2008 15:36:23 +0000</pubDate>
		<guid isPermaLink="false">http://microisvjournal.wordpress.com/2006/09/05/everything-you-need-to-know-about-registration-systems/#comment-302</guid>
		<description>Typo police alert: 4th paragraph: &quot;If you will permit be &quot; -&gt; &quot;If you will permit me &quot;.

Anyway, Justin: you are right. What Patrick means (I think :) ) is to use a signature and to check that signature with the public key. I&#039;m also not quite sure why you&#039;d need to use a hash of the identifying data or the relevance of the md5 remark. As far as I can tell (and how I&#039;ve implemented it  :) ) it&#039;s enough to make a signature of the username and any eventual other identifying information. You then check the signature with the public key which you&#039;ve embedded in your application.</description>
		<content:encoded><![CDATA[<p>Typo police alert: 4th paragraph: &#8220;If you will permit be &#8221; -&gt; &#8220;If you will permit me &#8220;.</p>
<p>Anyway, Justin: you are right. What Patrick means (I think :) ) is to use a signature and to check that signature with the public key. I&#8217;m also not quite sure why you&#8217;d need to use a hash of the identifying data or the relevance of the md5 remark. As far as I can tell (and how I&#8217;ve implemented it  :) ) it&#8217;s enough to make a signature of the username and any eventual other identifying information. You then check the signature with the public key which you&#8217;ve embedded in your application.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Justin</title>
		<link>http://www.kalzumeus.com/2006/09/05/everything-you-need-to-know-about-registration-systems/comment-page-1/#comment-304</link>
		<dc:creator>Justin</dc:creator>
		<pubDate>Mon, 03 Dec 2007 20:30:31 +0000</pubDate>
		<guid isPermaLink="false">http://microisvjournal.wordpress.com/2006/09/05/everything-you-need-to-know-about-registration-systems/#comment-304</guid>
		<description>I&#039;m not sure the public key encryption method works. You say to guard the private key with your life but in the next paragraph say that your software &quot;decrypts the serial number&quot; which requires use of the private key. a hacker look in the code to determine the encryption key and generate their own forged product key by encrypting it with the same key used for decryption. it seems that any symmetric encyrption algorithm could work just as well. another simpler approach is using a hash function in the code and making the product key = [unhashedportion]+[hash]. if the user types a product key where the second part is not the hash of the first part you know it is invalid. in other words, the approach described here is security by obscurity, and there are simpler methods than symmetric encryption to accomplish that.

i think only assymetric cryptography SIGNATURES can prevent forged license codes. the license code should be digitally signed (not encrypted) by the software publisher using a private secret key. then the software embeds the public key and verifies the signature. inspecting the code won&#039;t help hackers because they&#039;ll only find the public key there, and that is not enough to generate a signature. in other words, the product key becomes [serialNumCapabilities]+[SignatureOfPrevious]. the problem is that an RSA 512 bit key signature is 103 base32 characters, which is cumbersome for the user to type in.</description>
		<content:encoded><![CDATA[<p>I&#8217;m not sure the public key encryption method works. You say to guard the private key with your life but in the next paragraph say that your software &#8220;decrypts the serial number&#8221; which requires use of the private key. a hacker look in the code to determine the encryption key and generate their own forged product key by encrypting it with the same key used for decryption. it seems that any symmetric encyrption algorithm could work just as well. another simpler approach is using a hash function in the code and making the product key = [unhashedportion]+[hash]. if the user types a product key where the second part is not the hash of the first part you know it is invalid. in other words, the approach described here is security by obscurity, and there are simpler methods than symmetric encryption to accomplish that.</p>
<p>i think only assymetric cryptography SIGNATURES can prevent forged license codes. the license code should be digitally signed (not encrypted) by the software publisher using a private secret key. then the software embeds the public key and verifies the signature. inspecting the code won&#8217;t help hackers because they&#8217;ll only find the public key there, and that is not enough to generate a signature. in other words, the product key becomes [serialNumCapabilities]+[SignatureOfPrevious]. the problem is that an RSA 512 bit key signature is 103 base32 characters, which is cumbersome for the user to type in.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Clay Dowling</title>
		<link>http://www.kalzumeus.com/2006/09/05/everything-you-need-to-know-about-registration-systems/comment-page-1/#comment-300</link>
		<dc:creator>Clay Dowling</dc:creator>
		<pubDate>Fri, 12 Oct 2007 13:51:23 +0000</pubDate>
		<guid isPermaLink="false">http://microisvjournal.wordpress.com/2006/09/05/everything-you-need-to-know-about-registration-systems/#comment-300</guid>
		<description>Patrick,

Just wanted to say that this is a very good article and covers a lot of stuff that people need to know.  It should probably be listed on the BoS wiki.  I wrote my own registration component using a symmetric encryption technique rather than the asymmetric method of public key encryption, which seems sufficient unto my needs.  I wrote the article up here: http://www.lazarusid.com/how-lazarus-registration-works.html</description>
		<content:encoded><![CDATA[<p>Patrick,</p>
<p>Just wanted to say that this is a very good article and covers a lot of stuff that people need to know.  It should probably be listed on the BoS wiki.  I wrote my own registration component using a symmetric encryption technique rather than the asymmetric method of public key encryption, which seems sufficient unto my needs.  I wrote the article up here: <a href="http://www.lazarusid.com/how-lazarus-registration-works.html" rel="nofollow">http://www.lazarusid.com/how-lazarus-registration-works.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tracy</title>
		<link>http://www.kalzumeus.com/2006/09/05/everything-you-need-to-know-about-registration-systems/comment-page-1/#comment-308</link>
		<dc:creator>Tracy</dc:creator>
		<pubDate>Wed, 03 Oct 2007 06:51:07 +0000</pubDate>
		<guid isPermaLink="false">http://microisvjournal.wordpress.com/2006/09/05/everything-you-need-to-know-about-registration-systems/#comment-308</guid>
		<description>Very nice read, something I am thinking about as we are developing a piece of software. Nice to read a blog where the editor has a sense of humour</description>
		<content:encoded><![CDATA[<p>Very nice read, something I am thinking about as we are developing a piece of software. Nice to read a blog where the editor has a sense of humour</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: The Piracy Loss Formula &#124; Flowchart Dude</title>
		<link>http://www.kalzumeus.com/2006/09/05/everything-you-need-to-know-about-registration-systems/comment-page-1/#comment-313</link>
		<dc:creator>The Piracy Loss Formula &#124; Flowchart Dude</dc:creator>
		<pubDate>Thu, 13 Sep 2007 05:07:32 +0000</pubDate>
		<guid isPermaLink="false">http://microisvjournal.wordpress.com/2006/09/05/everything-you-need-to-know-about-registration-systems/#comment-313</guid>
		<description>[...] the correct formula, but also that nascent microISV&#8217;s are better off implementing their own simple licensing system than relying on 3rd party tools with potential side effects.  Give a little link love:These icons [...]</description>
		<content:encoded><![CDATA[<p>[...] the correct formula, but also that nascent microISV&#8217;s are better off implementing their own simple licensing system than relying on 3rd party tools with potential side effects.  Give a little link love:These icons [...]</p>
]]></content:encoded>
	</item>
</channel>
</rss>
