<?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: Simple suggestions for implementing passwords correctly	</title>
	<atom:link href="https://programmingzen.com/simple-suggestions-for-implementing-passwords-correctly/feed/" rel="self" type="application/rss+xml" />
	<link>https://programmingzen.com/simple-suggestions-for-implementing-passwords-correctly/</link>
	<description>Meditations on programming, startups, and technology</description>
	<lastBuildDate>Sun, 18 Mar 2012 15:26:43 +0000</lastBuildDate>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>
		By: Stefano		</title>
		<link>https://programmingzen.com/simple-suggestions-for-implementing-passwords-correctly/#comment-27270</link>

		<dc:creator><![CDATA[Stefano]]></dc:creator>
		<pubDate>Sun, 18 Mar 2012 15:26:43 +0000</pubDate>
		<guid isPermaLink="false">http://antoniocangiano.com/?p=1130#comment-27270</guid>

					<description><![CDATA[I would add &quot;Don&#039;t force me to put numbers and symbols to my password - if I want to use a 40 chars password, made up of 4 words and spaces, I want to be free to do that (and no one will ever hack my account)!&quot;.]]></description>
			<content:encoded><![CDATA[<p>I would add &#8220;Don&#8217;t force me to put numbers and symbols to my password &#8211; if I want to use a 40 chars password, made up of 4 words and spaces, I want to be free to do that (and no one will ever hack my account)!&#8221;.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Antonin		</title>
		<link>https://programmingzen.com/simple-suggestions-for-implementing-passwords-correctly/#comment-8907</link>

		<dc:creator><![CDATA[Antonin]]></dc:creator>
		<pubDate>Mon, 19 Apr 2010 08:43:32 +0000</pubDate>
		<guid isPermaLink="false">http://antoniocangiano.com/?p=1130#comment-8907</guid>

					<description><![CDATA[Some time ago I wrote a python library to work with the 1password &quot;agilekeychain&quot; format.
It is a good exemple of a decent secure manner of storing passwords using password deviation algorithm and strong encryption cyphers.

I you want to have a look : http://github.com/gwik/agilekeychain]]></description>
			<content:encoded><![CDATA[<p>Some time ago I wrote a python library to work with the 1password &#8220;agilekeychain&#8221; format.<br />
It is a good exemple of a decent secure manner of storing passwords using password deviation algorithm and strong encryption cyphers.</p>
<p>I you want to have a look : <a href="http://github.com/gwik/agilekeychain" rel="nofollow ugc">http://github.com/gwik/agilekeychain</a></p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Philip Tellis		</title>
		<link>https://programmingzen.com/simple-suggestions-for-implementing-passwords-correctly/#comment-8871</link>

		<dc:creator><![CDATA[Philip Tellis]]></dc:creator>
		<pubDate>Tue, 13 Apr 2010 09:03:45 +0000</pubDate>
		<guid isPermaLink="false">http://antoniocangiano.com/?p=1130#comment-8871</guid>

					<description><![CDATA[@andy: email is not secure]]></description>
			<content:encoded><![CDATA[<p>@andy: email is not secure</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: andy		</title>
		<link>https://programmingzen.com/simple-suggestions-for-implementing-passwords-correctly/#comment-8859</link>

		<dc:creator><![CDATA[andy]]></dc:creator>
		<pubDate>Mon, 12 Apr 2010 07:04:40 +0000</pubDate>
		<guid isPermaLink="false">http://antoniocangiano.com/?p=1130#comment-8859</guid>

					<description><![CDATA[When visitors sign up on one of my site, I email them their login information (username+password) before storing the hashed salt of their passwords in my database. Does that considered bad too? If yes, would you mind explaining why?]]></description>
			<content:encoded><![CDATA[<p>When visitors sign up on one of my site, I email them their login information (username+password) before storing the hashed salt of their passwords in my database. Does that considered bad too? If yes, would you mind explaining why?</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Philip Tellis		</title>
		<link>https://programmingzen.com/simple-suggestions-for-implementing-passwords-correctly/#comment-8858</link>

		<dc:creator><![CDATA[Philip Tellis]]></dc:creator>
		<pubDate>Mon, 12 Apr 2010 06:20:17 +0000</pubDate>
		<guid isPermaLink="false">http://antoniocangiano.com/?p=1130#comment-8858</guid>

					<description><![CDATA[SSL isn&#039;t absolutely necessary.  Let me explain:

Users still don&#039;t understand what SSL is, so if an attacker were to gain control over the user&#039;s ISP&#039;s DNS server, they could redirect DNS to their own server and steal the user&#039;s login credentials.  This means that if you can avoid it, you really don&#039;t want to send the password as it was typed over the wire.

The solution is to implement challenge-response authentication.  This requires changes on the client side though, and this is how you&#039;d do it.

On the server, you store an encrypted password.  You encrypt rather than hash because you want to be able to decrypt it later.  This is your pseudo clear text password (since it can be decrypted by someone who has the key).

Now when a user comes to your login page (or sends an auth request through a non-browser based client), you send along a challenge string.  For the non-browser based client, this could be based on the username, or not.  When the user enters his login credentials into the form, you hash it client-side either using javascript for a browser or whatever language you want for a non-browser client.  You then send the username and the hash to the server.  This can be sent in clear text, since simply having the hash is insufficient for a replay attack.  The hash has to match the challenge that was sent, and that changes on every request.

Once the request gets to the server, you run the same hashing algorithm on the decrypted password using the same challenge string, and if they match, you allow the user through.

This has the added advantage of being harder to brute-force because an attacker has to do the hashing on the client-side for each request, and has to use a different challenge for each hash (so he can&#039;t just pre-compute hashes).

On the server, you still have to manage your assymmetric keys on different boxes (reg uses one way, login uses the other way), but that&#039;s not terribly hard, and it means that if someone were to get login access, they&#039;d need to be able to log in to two boxes.  It goes without saying that boxes that store auth info (or any private info) go into a vault secured with a physical lock to prevent someone (eg: a bad employee) from just making a disk copy.

Oh, and this is not far fetched NSA stuff.  Most internet companies that store user personal data should be doing this.]]></description>
			<content:encoded><![CDATA[<p>SSL isn&#8217;t absolutely necessary.  Let me explain:</p>
<p>Users still don&#8217;t understand what SSL is, so if an attacker were to gain control over the user&#8217;s ISP&#8217;s DNS server, they could redirect DNS to their own server and steal the user&#8217;s login credentials.  This means that if you can avoid it, you really don&#8217;t want to send the password as it was typed over the wire.</p>
<p>The solution is to implement challenge-response authentication.  This requires changes on the client side though, and this is how you&#8217;d do it.</p>
<p>On the server, you store an encrypted password.  You encrypt rather than hash because you want to be able to decrypt it later.  This is your pseudo clear text password (since it can be decrypted by someone who has the key).</p>
<p>Now when a user comes to your login page (or sends an auth request through a non-browser based client), you send along a challenge string.  For the non-browser based client, this could be based on the username, or not.  When the user enters his login credentials into the form, you hash it client-side either using javascript for a browser or whatever language you want for a non-browser client.  You then send the username and the hash to the server.  This can be sent in clear text, since simply having the hash is insufficient for a replay attack.  The hash has to match the challenge that was sent, and that changes on every request.</p>
<p>Once the request gets to the server, you run the same hashing algorithm on the decrypted password using the same challenge string, and if they match, you allow the user through.</p>
<p>This has the added advantage of being harder to brute-force because an attacker has to do the hashing on the client-side for each request, and has to use a different challenge for each hash (so he can&#8217;t just pre-compute hashes).</p>
<p>On the server, you still have to manage your assymmetric keys on different boxes (reg uses one way, login uses the other way), but that&#8217;s not terribly hard, and it means that if someone were to get login access, they&#8217;d need to be able to log in to two boxes.  It goes without saying that boxes that store auth info (or any private info) go into a vault secured with a physical lock to prevent someone (eg: a bad employee) from just making a disk copy.</p>
<p>Oh, and this is not far fetched NSA stuff.  Most internet companies that store user personal data should be doing this.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Antonio Cangiano		</title>
		<link>https://programmingzen.com/simple-suggestions-for-implementing-passwords-correctly/#comment-8782</link>

		<dc:creator><![CDATA[Antonio Cangiano]]></dc:creator>
		<pubDate>Thu, 01 Apr 2010 14:18:26 +0000</pubDate>
		<guid isPermaLink="false">http://antoniocangiano.com/?p=1130#comment-8782</guid>

					<description><![CDATA[Matt, I would consider the open source &lt;a href=&quot;http://en.wikipedia.org/wiki/Keepass&quot; rel=&quot;nofollow&quot;&gt;Keepass&lt;/a&gt;.]]></description>
			<content:encoded><![CDATA[<p>Matt, I would consider the open source <a href="http://en.wikipedia.org/wiki/Keepass" rel="nofollow">Keepass</a>.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Matt		</title>
		<link>https://programmingzen.com/simple-suggestions-for-implementing-passwords-correctly/#comment-8780</link>

		<dc:creator><![CDATA[Matt]]></dc:creator>
		<pubDate>Thu, 01 Apr 2010 13:08:44 +0000</pubDate>
		<guid isPermaLink="false">http://antoniocangiano.com/?p=1130#comment-8780</guid>

					<description><![CDATA[Is there any Windows-based programs you would recommend? This is a brilliant article by the way, thank you.]]></description>
			<content:encoded><![CDATA[<p>Is there any Windows-based programs you would recommend? This is a brilliant article by the way, thank you.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Antonio Cangiano		</title>
		<link>https://programmingzen.com/simple-suggestions-for-implementing-passwords-correctly/#comment-8779</link>

		<dc:creator><![CDATA[Antonio Cangiano]]></dc:creator>
		<pubDate>Thu, 01 Apr 2010 12:52:57 +0000</pubDate>
		<guid isPermaLink="false">http://antoniocangiano.com/?p=1130#comment-8779</guid>

					<description><![CDATA[Matt, this is why I only use a program that has a company I really trust behind it. Otherwise you could extend the same logic to your browser&#039;s company or even your OS&#039; company. It&#039;s also not hard to check for programs phoning home.]]></description>
			<content:encoded><![CDATA[<p>Matt, this is why I only use a program that has a company I really trust behind it. Otherwise you could extend the same logic to your browser&#8217;s company or even your OS&#8217; company. It&#8217;s also not hard to check for programs phoning home.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Matt		</title>
		<link>https://programmingzen.com/simple-suggestions-for-implementing-passwords-correctly/#comment-8778</link>

		<dc:creator><![CDATA[Matt]]></dc:creator>
		<pubDate>Thu, 01 Apr 2010 08:18:23 +0000</pubDate>
		<guid isPermaLink="false">http://antoniocangiano.com/?p=1130#comment-8778</guid>

					<description><![CDATA[The hard part is trusting these programs as well. As a Windows user, how can I trust a downloadable password manager? How do I know it doesn&#039;t have a keylogger or send off my details somewhere?

Trusting one program can be as dangerous as only using a single password.]]></description>
			<content:encoded><![CDATA[<p>The hard part is trusting these programs as well. As a Windows user, how can I trust a downloadable password manager? How do I know it doesn&#8217;t have a keylogger or send off my details somewhere?</p>
<p>Trusting one program can be as dangerous as only using a single password.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Piervincenzo		</title>
		<link>https://programmingzen.com/simple-suggestions-for-implementing-passwords-correctly/#comment-8736</link>

		<dc:creator><![CDATA[Piervincenzo]]></dc:creator>
		<pubDate>Thu, 25 Mar 2010 08:50:32 +0000</pubDate>
		<guid isPermaLink="false">http://antoniocangiano.com/?p=1130#comment-8736</guid>

					<description><![CDATA[This is a very useful post!
As you say a lot of site use a bad policy to manage not only the password but, more in general, the user-site interaction. In often happens that the real control of field is done after having post it and the user must re-write some field (e.g. password). But returning to the topic, of course the use of an application like iPassword make the security issue less stressful... but as you noticed it could be difficult work in a different machine without the passwords of iPassword so... why not use a portable solution?]]></description>
			<content:encoded><![CDATA[<p>This is a very useful post!<br />
As you say a lot of site use a bad policy to manage not only the password but, more in general, the user-site interaction. In often happens that the real control of field is done after having post it and the user must re-write some field (e.g. password). But returning to the topic, of course the use of an application like iPassword make the security issue less stressful&#8230; but as you noticed it could be difficult work in a different machine without the passwords of iPassword so&#8230; why not use a portable solution?</p>
]]></content:encoded>
		
			</item>
	</channel>
</rss>
