<?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>It Is A Mystery...</title>
	<atom:link href="http://www.pipian.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pipian.com</link>
	<description>A weblog about the mysteries and musings found in everyday life.</description>
	<lastBuildDate>Fri, 30 Jan 2009 16:10:37 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>TAAC Update</title>
		<link>http://www.pipian.com/blog/2009/01/30/taac-update/</link>
		<comments>http://www.pipian.com/blog/2009/01/30/taac-update/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 16:08:19 +0000</pubDate>
		<dc:creator>Pipian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.pipian.com/?p=57</guid>
		<description><![CDATA[TAAC should now, with the latest update, support Apache 2 much more nicely (apparently, mod_python with it no longer nicely forwards SSL variables as environment variables, so you have to access them in a different manner).  There are still some issues with Apache 2&#8217;s handling of SSL renegotiation and use of the SSLVerifyClient directive [...]]]></description>
			<content:encoded><![CDATA[<p>TAAC should now, with the latest update, support Apache 2 much more nicely (apparently, mod_python with it no longer nicely forwards SSL variables as environment variables, so you have to access them in a different manner).  There are still some issues with Apache 2&#8217;s handling of SSL renegotiation and use of the SSLVerifyClient directive that need to be resolved, but the bottom line is that the demos should now be working again on this server (updated to Apache 2 in the past month.)</p>
<p>In addition, public SVN access to checkout the TAAC code should now be available using the username and password &#8216;dig&#8217;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pipian.com/blog/2009/01/30/taac-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quantifying cwm Variables&#8230;</title>
		<link>http://www.pipian.com/blog/2008/12/18/quantifying-cwm-variables/</link>
		<comments>http://www.pipian.com/blog/2008/12/18/quantifying-cwm-variables/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 18:04:38 +0000</pubDate>
		<dc:creator>Pipian</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[cwm]]></category>
		<category><![CDATA[logic]]></category>
		<category><![CDATA[n3]]></category>
		<category><![CDATA[quantification]]></category>

		<guid isPermaLink="false">http://www.pipian.com/blog/2008/12/18/quantifying-cwm-variables/</guid>
		<description><![CDATA[Mostly for my benefit, but here are a few examples of how cwm&#8217;s N3Rules translate into formal logic:


Global universal quantification:

@prefix : &#60;#&#62; .
@forAll   .

{   :a :b . } =&#62; {   :c :d . } .

:someValue :a :b .

∀x (a(x, b) → c(x, d))
Therefore the above entails the additional statement [...]]]></description>
			<content:encoded><![CDATA[<p>Mostly for my benefit, but here are a few examples of how cwm&#8217;s N3Rules translate into formal logic:</p>
<ul>
<li>
<p>Global universal quantification:</p>
<pre>
@prefix : &lt;#&gt; .
@forAll <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  .

{ <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  :a :b . } =&gt; { <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  :c :d . } .

:someValue :a :b .
</pre>
<p>∀x (a(x, b) → c(x, d))</p>
<p>Therefore the above entails the additional statement <code>:someValue :c :d .</code> as <code> <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' /> </code> is bound to <code>:someValue</code> on the RHS.</p>
</li>
<li>
<p>Global existential quantification:</p>
<pre>
@prefix : &lt;#&gt; .
@forSome <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  .

{ <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  :a :b . } =&gt; { <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  :c :d . } .

:someValue :a :b .
</pre>
<p>∃x (a(x, b) → c(x, d))</p>
<p>Therefore the above entails no additional statements.</p>
</li>
<li>
<p>LHS universal quantification:</p>
<pre>
@prefix : &lt;#&gt; .

{ @forAll <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  . <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  :a :b . } =&gt; { <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  :c :d . } .

:someValue :a :b .
</pre>
<p>(∀x a(x, b)) → c(x, d)</p>
<p>Therefore the above entails no additional statements.</p>
</li>
<li>
<p>LHS existential quantification:</p>
<pre>
@prefix : &lt;#&gt; .

{ @forSome <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  . <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  :a :b . } =&gt; { <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  :c :d . } .

:someValue :a :b .
</pre>
<p>(∃x a(x, b)) → c(x, d)</p>
<p>Therefore the above entails the additional statement <code> <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  :c :d .</code> as <code> <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' /> </code> is unbound on the RHS.</p>
</li>
<li>
<p>RHS universal quantification:</p>
<pre>
@prefix : &lt;#&gt; .

{ :someValue :a :b . } =&gt; { @forAll <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  . <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  :c :d . } .

:someValue :a :b .
</pre>
<p>a(someValue, b) → (∀x c(x, d))</p>
<p>Therefore the above entails (generally) <code>@forAll :z . :z :c :d .</code></p>
</li>
<li>
<p>RHS existential quantification:</p>
<pre>
@prefix : &lt;#&gt; .

{ :someValue :a :b . } =&gt; { @forSome <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  . <img src='http://www.pipian.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  :c :d . } .

:someValue :a :b .
</pre>
<p>a(someValue, b) → (∃x c(x, d))</p>
<p>Therefore the above entails the additional statement <code>[ :c :d ] .</code></p>
</li>
</ul>
<p>Finally, two trickier specific examples: &#8220;If there exists a <code>foaf:Person</code> that all (known) <code>foaf:Person</code>s <code>foaf:know</code>, then there exists a <code> <img src='http://www.pipian.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> opularPerson</code>&#8221; and, &#8220;any <code>foaf:Person</code> that is <code>foaf:knows</code> of all (known) <code>foaf:Person</code>s in a <code> <img src='http://www.pipian.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> opularPerson</code>&#8221; can&#8217;t be done properly without completely closing the world.  cwm cannot do this without artificially closing the world through built-ins.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pipian.com/blog/2008/12/18/quantifying-cwm-variables/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TAAC in Action</title>
		<link>http://www.pipian.com/blog/2008/12/12/taac-in-action/</link>
		<comments>http://www.pipian.com/blog/2008/12/12/taac-in-action/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 20:38:10 +0000</pubDate>
		<dc:creator>Pipian</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[authorization]]></category>
		<category><![CDATA[taac]]></category>

		<guid isPermaLink="false">http://www.pipian.com/blog/2008/12/12/taac-in-action/</guid>
		<description><![CDATA[TAAC Examples
I&#8217;ve posted three examples that utilize TAAC in some manner.

https://www.pipian.com/rdf/tami/juliette-protected-location.n3 requires you to merely access it with a properly encoded certificate.
https://www.pipian.com/rdf/tami/foaf-only.n3 limits access to only those who are friends, or friends of friends of http://www.pipian.com/rdf/tami/juliette.n3#juliette (via foaf:knows).  Unfortunately, this rule is a bit slow, and may take upwards of 30-60 seconds to process. [...]]]></description>
			<content:encoded><![CDATA[<h3>TAAC Examples</h3>
<p>I&#8217;ve posted three examples that utilize TAAC in some manner.</p>
<ul>
<li><a href="https://www.pipian.com/rdf/tami/juliette-protected-location.n3">https://www.pipian.com/rdf/tami/juliette-protected-location.n3</a> requires you to merely access it with a properly encoded certificate.</li>
<li><a href="https://www.pipian.com/rdf/tami/foaf-only.n3">https://www.pipian.com/rdf/tami/foaf-only.n3</a> limits access to only those who are friends, or friends of friends of <a href="http://www.pipian.com/rdf/tami/juliette.n3#juliette">http://www.pipian.com/rdf/tami/juliette.n3#juliette</a> (via foaf:knows).  Unfortunately, this rule is a bit slow, and may take upwards of 30-60 seconds to process.  I&#8217;m looking into why this is the case.</li>
<li><a href="https://www.pipian.com/rdf/tami/friending-me.n3">https://www.pipian.com/rdf/tami/friending-me.n3</a> limits access to only those who have listed <a href="http://www.pipian.com/rdf/tami/juliette.n3#juliette">http://www.pipian.com/rdf/tami/juliette.n3#juliette</a> as a friend (via foaf:knows).</li>
</ul>
<p>You can test any of these yourself if you present the proper client certificate linked to your FOAF file (otherwise, without a client certificate, you won&#8217;t be able to authenticate with FOAF+SSL.)  If you don&#8217;t have a properly configured certificate or FOAF file, Henry Story has <a href="http://blogs.sun.com/bblfish/entry/foaf_ssl_a_first_implementation">a short description of how you can set this up in Firefox 3 with some utilities in the sommer repository</a>.  In addition, this server requires you to explicitly provide a certificate (as client certificates are optional).</p>
<h3>So How Does TAAC Work?</h3>
<p>As mentioned previously, Henry Story has some excellent descriptions of how the FOAF+SSL protocol works in general.  TAAC is merely an implementation of this, but goes further to implement an authorization framework.  How does this work though?  The following diagram goes a ways toward explaining TAAC&#8217;s design (especially with regard to authorization) in general.</p>
<p><img src="http://www.pipian.com/rdf/tami/taac-overview.png" alt="(A diagram of TAAC)"/></p>
<p>TAAC acts as a proxy for any URI access within the directory it&#8217;s set up in (thanks to mod_python).  On every access, it will check the requested URI against the list of URIs having an rein:access-policy (as populated from the file specified in the POLICY_FILE variable).  If no access policy exists, TAAC gladly permits normal access without any needed authentication.</p>
<p>If an access policy exists, however, TAAC will immediately attempt to properly reach a successful completion of the FOAF+SSL authentication protocol.  I won&#8217;t go into significant details here, as Henry Story gives an excellent overview of the protocol (in a somewhat earlier state, though the same principles still apply) <a href="http://blogs.sun.com/bblfish/entry/foaf_ssl_creating_a_global">on his blog</a>.</p>
<p>Following this, TAAC takes the successfully authenticated URI-token and logs the attempted access to a log file (specified by LOG_FILE).  Taking this generated resource describing the access, and the AIR policy attached with the rein:access-policy triple, TAAC then proceeds to run an AIR reasoner over the policy with the given log resource.  If the resource describing the access is concluded to be air:compliant-with the associated access-policy, the fact that access was granted according to the policy is logged, and access is granted.  Otherwise, the fact that access was denied is logged, and access is denied with a 403 response.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pipian.com/blog/2008/12/12/taac-in-action/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Authentication and Authorization on the Open Social Web with TAAC</title>
		<link>http://www.pipian.com/blog/2008/12/11/authentication-and-authorization-on-the-open-social-web-with-taac/</link>
		<comments>http://www.pipian.com/blog/2008/12/11/authentication-and-authorization-on-the-open-social-web-with-taac/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 17:36:23 +0000</pubDate>
		<dc:creator>Pipian</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[authorization]]></category>
		<category><![CDATA[foaf+ssl]]></category>
		<category><![CDATA[taac]]></category>

		<guid isPermaLink="false">http://www.pipian.com/blog/2008/12/11/authentication-and-authorization-on-the-open-social-web-with-taac/</guid>
		<description><![CDATA[Update 2: The subversion repository should now have public checkouts enabled with the username and password &#8216;dig&#8217;.
Update: The subversion repository is currently not set up for external access.  I probably won&#8217;t be able to get this resolved until Monday at the earliest.  For the time being, you can extract this tarball into the [...]]]></description>
			<content:encoded><![CDATA[<p><b>Update 2:</b> The subversion repository should now have public checkouts enabled with the username and password &#8216;dig&#8217;.</p>
<p><strike><b>Update:</b> The subversion repository is currently not set up for external access.  I probably won&#8217;t be able to get this resolved until Monday at the earliest.  For the time being, you can extract <a href="http://www.pipian.com/rdf/tami/taac.tar.gz">this tarball</a> into the directory you wish to protect, and skip the first two steps.</strike></p>
<p>Recent discussions on the <a href="http://lists.foaf-project.org/mailman/listinfo/foaf-protocols">foaf-protocols</a> mailing list have been pushing the <a href="http://blogs.sun.com/bblfish/entry/foaf_ssl_adding_security_to">FOAF+SSL</a> protocol (discussed earlier on both Henry Story&#8217;s and my blogs) towards a more finalized state, pending some clarification of issues with generating the self-signed certificates that serve as the key to the protocol.  As has been mentioned on the list and the blog several times, I have been maintaining an independent Python implementation of the FOAF+SSL implementation, and I now feel that the implementation is at a stable enough state to officially offer up instructions for installing TAAC.</p>
<p>Before I give instructions on how to do so, however, let me digress onto an important subtopic, that being the subtle difference of authentication and authorization, as the dichotomy is critical to understanding how TAAC works.  FOAF+SSL is fundamentally an authentication mechanism.  It provides a method to confirm that the individual presenting the SSL certificate is, in fact, the persons who is also in control of the FOAF resource specified in the certificate.  It does not, however, specify any criteria for how access should actually be granted.  It only establishes an identity.</p>
<p>TAAC implements FOAF+SSL as one of several authentication mechanisms tested, including a sample implementation of the RDFAuth mechanism, as well as an OpenID-based mechanism.  TAAC, however, only implements these authentication mechanisms as a means to the goal of achieving a flexible Semantic-Web-friendly authorization framework.  While the language and reasoning is still very much in flux, the idea of TAAC is to permit the creation of distributed access control lists and complex access control policies on top of semantic web data.  Indeed, the current implementation (slowly) permits such authorization rules as &#8220;Only friends of people I specify as friends or the friends I specify can access this page&#8221; or &#8220;MIT students who are sophomores or juniors currently taking 6.805 can access this page&#8221; without having to maintain cumbersome access control lists, instead deferring to collections of data compiled by others.  In effect, we can rely on MIT to maintain the list of current students, and accurately state their class year and the classes they are taking, such that we can merely reason over that data without having to compile an access control list from it.</p>
<h3>Installing TAAC</h3>
<p><em>Before You Install:</em> Make sure you have installed the <a href="http://openidenabled.com/python-openid/">python-openid</a> and <a href="http://www.amk.ca/python/code/crypto.html">pyCrypto >= 2.0.1</a> frameworks and are running mod_python on your server.  While python-openid is not absolutely necessary for FOAF+SSL, TAAC is implemented with an additional vestigial OpenID mechanism that may or may not be integrated as an alternative mechanism to FOAF+SSL for FOAF-based authentication schemes, and hence requires the library</p>
<ol>
<li><strong>Get the TAAC source code and copy the files and directories enclosed in the directory in which you want to protect some files.</strong> The source code is available in an SVN repository at <a href="https://svn.csail.mit.edu/dig/TAMI/2008/taac/proxy">https://svn.csail.mit.edu/dig/TAMI/2008/taac/proxy</a>.</li>
<li><strong>Get the tmswap directory needed for TAAC to properly operate and copy it into the directory containing the TAAC code.</strong>  The source code is available in an SVN repository at <a href="https://svn.csail.mit.edu/dig/TAMI/2007/cwmrete/tmswap">https://svn.csail.mit.edu/dig/TAMI/2007/cwmrete/tmswap</a>.</li>
<li><strong>Configure TAAC.</strong>  The primary configuration for TAAC is in taac/config.py.  You most probably don&#8217;t need to change any of the settings, but you should be aware of their setting, as it impacts the remainder of this installation process.  POLICY_FILE is the relative path from proxy.py to the file that links your protected files to the corresponding policy files governing access.  POLICY_TYPE is the MIME type of POLICY_FILE (&#8217;text/rdf+n3&#8242; or &#8216;application/rdf+xml&#8217; most likely).  LOG_FILE is the relative path from proxy.py to the file to log access information to.  The other settings are not terribly relevant to FOAF+SSL and can be left alone.</li>
<li><strong>Setup your policy file.</strong>  Your policy file (at the path specified by POLICY_FILE, defaulting to &#8216;./policies.n3&#8242;) is the key to protecting your URIs with FOAF+SSL.  The policy file is an RDF file that links resources representing the protected URIs to their corresponding policy files.  This is most easily done with the rein:access-policy (http://dig.csail.mit.edu/2005/09/rein/network#access-policy) property (subject to change in future TAAC releases).  Here&#8217;s a very simple policies.n3 that protects my_file.html:
<pre>
@prefix rein: &lt;http://dig.csail.mit.edu/2005/09/rein/network#&gt; .

&lt;./my_file.html&gt; rein:access-policy &lt;./my_file.policy.n3&gt; .
</pre>
</li>
<li><strong>Create a policy</strong> The policy is the access-policy attached by policies.n3.  This policy is written in the <a href="http://dig.csail.mit.edu/2008/Papers/IEEE%20Policy/air-overview.pdf">AIR language</a>, may be somewhat daunting for someone trying to write their first policy.  A couple of sample policies include <a href="http://www.pipian.com/rdf/tami/juliette.policy.n3#JulietteLocationDissemPolicy">http://www.pipian.com/rdf/tami/juliette.policy.n3#JulietteLocationDissemPolicy</a>, which permits any valid authentication via FOAF+SSL, and <a href="http://www.pipian.com/rdf/tami/juliette.policy.n3#JulietteFOAFDissemPolicy">http://www.pipian.com/rdf/tami/juliette.policy.n3#JulietteFOAFDissemPolicy</a>, which allows only friends and friends of friends of Juliette access.</li>
<li><strong>Create your log file with mode 0666.</strong>  This is usually &#8216;log.n3&#8242;.</li>
<li><strong>Edit your .htaccess file.</strong>  In order to actually enable the protection, you need to create a .htaccess file that actually adds proxy.py as a mod_python proxy and explicitly enables SSL client certificates to be passed to proxy.py.  <a href="http://www.pipian.com/rdf/tami/htaccess">http://www.pipian.com/rdf/tami/htaccess</a> is a good example for Apache 1.3 SSL servers.  Apache 2.0&#8217;s mod_ssl requires somewhat different flags to enable passing SSL client certificates (melvin carvalho says that <code>SSLOptions</code> should be set to <code>+StdEnvVars</code> and <code>+ExportCertData</code>).</li>
<li><strong>TAAC should now be set up and running</strong></li>
</ol>
<p>The above instructions should work, but I have not officially tested them on a clean server.</p>
<p>It is worth noting that TAAC is still very much in flux and is alpha-quality software, and tends to follow the discussions on the foaf-protocols list rather closely, so the above instructions and configuration options may change without warning.  Furthermore, there are some caveats with TAAC.  In particular, it only currently allows for static policies and static protected URIs.  It&#8217;s my hope to extend TAAC such that it will have hooks to allow for custom policies dependent on script arguments in the URL, no longer requiring static lists of all possible URIs (so protecting scripts is currently not likely to work well, especially if they take free-form arguments like session variables).</p>
<p>So that hopefully wraps it up a bit, and will get you started on getting a FOAF+SSL implementation set up of your own.  TAAC may be clunky now, but the hope is to streamline it such that it&#8217;s easily integrated into any Python web application.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pipian.com/blog/2008/12/11/authentication-and-authorization-on-the-open-social-web-with-taac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Issues with a FOAF-based Authentication System</title>
		<link>http://www.pipian.com/blog/2008/09/05/issues-with-foaf-authentication/</link>
		<comments>http://www.pipian.com/blog/2008/09/05/issues-with-foaf-authentication/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 16:14:09 +0000</pubDate>
		<dc:creator>Pipian</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.pipian.com/?p=51</guid>
		<description><![CDATA[As I&#8217;ve been working on TAAC, I&#8217;ve started to become concerned about potential weaknesses with any FOAF-based identity authentication system (be it RDFAuth, OpenID, or FOAF+SSL) and that&#8217;s that ALL systems, with the possible exception of RDFAuth (due to its reliance on PKI), have their weakest link as the integrity of the server hosting the [...]]]></description>
			<content:encoded><![CDATA[<p>As I&#8217;ve been working on TAAC, I&#8217;ve started to become concerned about potential weaknesses with any FOAF-based identity authentication system (be it <a href="http://blogs.sun.com/bblfish/entry/rdfauth_sketch_of_a_buzzword">RDFAuth</a>, <a href="http://blogs.sun.com/bblfish/entry/the_openid_sequence_diagram">OpenID</a>, or <a href="http://blogs.sun.com/bblfish/entry/foaf_ssl_creating_a_global">FOAF+SSL</a>) and that&#8217;s that ALL systems, with the possible exception of RDFAuth (due to its reliance on PKI), have their weakest link as the integrity of the server hosting the FOAF file. All three systems rely on data in the FOAF file to &#8216;authenticate&#8217; against, but this poses problems.  Take, for example, the following scenario:</p>
<p>Alice runs a website that accepts an OpenID+FOAF system (it works easily well with FOAF+SSL).  Bob is a client of Alice, and regularly uses the authentication scheme Alice has implemented.  When authenticating, he traditionally authenticates against his FOAF URI, http://www.example.com/bob.rdf#bob.  The file bob.rdf has information that links to Bob&#8217;s OpenID, http://www.example.com/bob, permitting him to authenticate with his (self-run) OpenID provider.</p>
<p>Eve wants to see the information that Bob gets to see on Alice&#8217;s website, and thanks to some shoddy system administration, finds a security hole that allows her to get access to the filesystem.  Ignoring the other private information acquired in this way, Alice silently replaces bob.rdf with her own FOAF file that has one simple change: the OpenID associated with http://www.example.com/bob.rdf#bob is now http://www.example.com/eve, which is Eve&#8217;s OpenID provider.  Eve authenticates agains her own OpenID provider and gets access as Bob to Alice&#8217;s website, does her dirty work, and then quietly returns the original FOAF file so that Bob is none the wiser.  There&#8217;s precious little evidence that Eve intruded, and only an alert sysadmin might note the erroneous login.  Meanwhile, Alice is barely aware of any difference other than that the OpenID changed for one particular login.</p>
<p>In summary, as Henry Story admitted (<a href="http://blogs.sun.com/bblfish/entry/foaf_ssl_creating_a_global">Point 5 in the FOAF+SSL description</a>), these methods only assert that the person accessing any protected resource has &#8216;write access&#8217; to their FOAF file&#8230;  But that doesn&#8217;t assert that they&#8217;re the same person.</p>
<p>With the common weakness of many self-hosted domains having poor security protocols, a FOAF-based Authentication System could be disastrous.  The only plausible &#8217;stopgap measure&#8217; might be requiring the system as a whole to cache the authentication credentials (e.g. OpenID, public key URL, or X.509 hash) and refuse access to people who present credentials that have changed.  This adds a layer of complication to the mix as well, as it would require out-of-band communication to ensure that the &#8216;cached&#8217; credentials are removed or replaced with new credentials manually&#8230;  And even so, there is still the risk of incorrect authentication credentials being presented absent any evidence they are incorrect (e.g. Eve logs in before Bob ever does, or does so in the period where Bob&#8217;s cached credentials have been deleted, establishing her credentials in place of his own).  There are ways around this, but they seem a bit kludgy to me (e.g. using the old OpenID/X.509 cert, which may not exist due to security risks, to authenticate the new one; checking against a public key server to see if there&#8217;s any indication that a public key has been revoked/replaced).</p>
<p>Are we sure that a FOAF-based Authentication System is secure enough?  At the very least, it seems like we need proactive sysadmins maintaining the system to ensure it remains secure&#8230; <a href="http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2008/07/23/BANU11TS7I.DTL">And can we afford that?</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pipian.com/blog/2008/09/05/issues-with-foaf-authentication/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Back to TAAC</title>
		<link>http://www.pipian.com/blog/2008/09/03/back-to-taac/</link>
		<comments>http://www.pipian.com/blog/2008/09/03/back-to-taac/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 16:05:39 +0000</pubDate>
		<dc:creator>Pipian</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.pipian.com/?p=50</guid>
		<description><![CDATA[So I&#8217;ve finally got a chance to return to working on TAAC, an access control mechanism for the web that integrates FOAF-based identification with access control rules.  I&#8217;ve been doing some more thorough testing on the slow-down issues explained two posts back, and found that the slowdown, while significant, appears to be about 13 [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve finally got a chance to return to working on TAAC, an access control mechanism for the web that integrates FOAF-based identification with access control rules.  I&#8217;ve been doing some more thorough testing on the slow-down issues explained two posts back, and found that the slowdown, while significant, appears to be about 13 seconds or so, on average, on this server, a <a href="http://www.linode.com/">Linode</a> virtual private server which I expect typifies an average web host (if not better than average).</p>
<p>Several attempts at profiling (aside from creating significantly increased processing times, up to 10x longer) led to the conclusion that, in fact, most of that time is spent in the second phase (post-authentication, during reasoning), which is where I&#8217;d EXPECT the slowdown to be.  Granted, this now becomes a problem that can be solved in part by Moore&#8217;s Law, but even so, some speedups would be nice to allow it to be implemented today.  I plan on running the same code on a relatively modern test server that&#8217;s dedicated to doing more or less supporting these tests, so it will likely run faster on there.</p>
<p>It&#8217;s worth considering that this is running on a variant of the cwm reasoner on top of a re-implemented Rete reasoner, and, seeing how it&#8217;s all in interpreted Python, rewriting it in compiled C code (or even Java) would probably see a significant speed-boost, but that&#8217;s not a terribly productive line of work (except where trying to actually push out a commercial product).  It might also be worth exploring other reasoning approaches to improve the speed.</p>
<p>Even so, I&#8217;m going to try looking at the other authentication approaches to see what the benefits and costs of them are&#8230;  I think the more RESTful approach without OpenID may have some arguments in favor of it, but I doubt they&#8217;re going to be based solely on speed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pipian.com/blog/2008/09/03/back-to-taac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Musings from the Apple Store</title>
		<link>http://www.pipian.com/blog/2008/05/12/musings-from-the-apple-store/</link>
		<comments>http://www.pipian.com/blog/2008/05/12/musings-from-the-apple-store/#comments</comments>
		<pubDate>Mon, 12 May 2008 21:07:52 +0000</pubDate>
		<dc:creator>Pipian</dc:creator>
				<category><![CDATA[Computers]]></category>

		<guid isPermaLink="false">http://www.pipian.com/?p=49</guid>
		<description><![CDATA[It&#8217;s 2008.  Why the heck doesn&#8217;t my computer know what I&#8217;m probably going to be doing when I download a file?  My computer should be able to learn that I transcode video files with English hardsubs to MP4 and put them in my iTunes share, or that PDFs that I read may tend to be [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s 2008.  Why the heck doesn&#8217;t my computer know what I&#8217;m probably going to be doing when I download a file?  My computer should be able to learn that I transcode video files with English hardsubs to MP4 and put them in my iTunes share, or that PDFs that I read may tend to be related to research and should be saved&#8230;  So why doesn&#8217;t it?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pipian.com/blog/2008/05/12/musings-from-the-apple-store/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OpenID and Other Musings</title>
		<link>http://www.pipian.com/blog/2008/05/10/openid-and-other-musings/</link>
		<comments>http://www.pipian.com/blog/2008/05/10/openid-and-other-musings/#comments</comments>
		<pubDate>Sat, 10 May 2008 16:15:24 +0000</pubDate>
		<dc:creator>Pipian</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.pipian.com/?p=48</guid>
		<description><![CDATA[So I&#8217;ve returned after some time at MIT where I was getting a bearing on where I&#8217;m going next with my part in the TAMI project, and I&#8217;ve come out with a few goals:

Finish tinkering and profiling the current TAAC setup.  This has already resulted in some interesting results, namely, that the planned OpenID setup is [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve returned after some time at MIT where I was getting a bearing on where I&#8217;m going next with my part in the <a href="http://dig.csail.mit.edu/TAMI/">TAMI project</a>, and I&#8217;ve come out with a few goals:</p>
<ul>
<li><strong>Finish tinkering and profiling the current TAAC setup.</strong>  This has already resulted in some interesting results, namely, that the planned OpenID setup is really slow.  To be fair, I&#8217;ve also only tested it with one physical setup, so I need to test a couple other servers, and so on. Unfortunately, it seems that the number of round-trips needed to get the FOAF file, get the OpenID identifier, and then establish a shared secret with the OpenID provider takes way too long. We can cache some of this (especially the former two), and can even avoid it all with a cookie established at the end of the first authentication, but the first sign-on takes entirely too long to process on this VPS.</li>
<li><strong>Examine other authentication methods.</strong>  Since the key right now is shortening the time needed to authenticate against one&#8217;s FOAF URI, there are several other methods out there that may cut out the authentication issues, including <a href="http://blogs.sun.com/bblfish/entry/rdfauth_sketch_of_a_buzzword">RDFAuth</a> and <a href="http://tobyinkster.co.uk/">Toby Inkster&#8217;s</a> <a href="http://blogs.sun.com/bblfish/entry/foaf_ssl_creating_a_global">FOAF+SSL</a>.  The former has less round-trips (as there isn&#8217;t the cost of setting up the SSL connection), but the latter doesn&#8217;t require the maintenance of a PKI, and can be done with self-signed certs.  I hope to be talking with Toby and <a href="http://bblfish.net/">Henry Story</a>, among others, to see what&#8217;s been done with FOAF+SSL, and to see how we can work that authentication method in.</li>
<li><strong>Get a better idea how the reasoner engines work for the AIR reasoner.</strong> Seeing as my understanding is not terribly good at their reasoning methods, I&#8217;m going to be trying my hand at reimplementing a <a href="http://en.wikipedia.org/wiki/Rete_algorithm">Rete system</a>, a <a href="http://portal.acm.org/citation.cfm?id=899610&amp;dl=GUIDE&amp;coll=">TREAT system</a>, and a <a href="http://citeseer.ist.psu.edu/chen96tabled.html">backwards chainer</a>&#8230;  <a href="http://www.erlang.org/">In Erlang</a> (or at least do such for a Rete).  Why Erlang?  I think it will give me a good idea about not only how the system&#8217;s productions are called (as a network of alpha and beta nodes is rather nicely done in a functional framework), but it will give me a better understanding of the problems with trying to make a Rete concurrent (and why TREAT is ostensibly better at concurrency).  With Erlang&#8217;s BUILT-IN concurrency and light-weight threads, rather than a lock-based concurrent framework like in the Python we&#8217;re currently using, there&#8217;s no additional cost to making the functions concurrent if I take the time to do it in Erlang.  Luckily for me, I&#8217;ve worked with the <a href="http://www.mozart-oz.org/">Mozart Programming System</a> in my programming languages class, and Erlang isn&#8217;t too different from that&#8230;  Plus, it&#8217;s another programming paradigm/language under my belt.</li>
<li><strong>Implement cwm built-ins into the AIR reasoner.</strong>  Yosi and I have already discussed some of the issues with doing so, so it&#8217;s just a matter of my understanding the code that&#8217;s standing in the way of my adding such.  Thus the reason for the above, and studying the existing code.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.pipian.com/blog/2008/05/10/openid-and-other-musings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#8217;s Up&#8230;</title>
		<link>http://www.pipian.com/blog/2008/04/15/whats-up/</link>
		<comments>http://www.pipian.com/blog/2008/04/15/whats-up/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 04:37:24 +0000</pubDate>
		<dc:creator>Pipian</dc:creator>
				<category><![CDATA[Anime]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Todos]]></category>

		<guid isPermaLink="false">http://www.pipian.com/blog/2008/04/15/whats-up/</guid>
		<description><![CDATA[I suppose it&#8217;s about time for me to announce a status report of what I&#8217;m up to lately&#8230;
First: I&#8217;ve picked up my Pixonomy project again, and while I&#8217;ve JUST put it on hold again, I&#8217;ve progressed the library with a refactoring and I just need to do some cross-platform hacking (to get it to compile nicely on OS X [...]]]></description>
			<content:encoded><![CDATA[<p>I suppose it&#8217;s about time for me to announce a status report of what I&#8217;m up to lately&#8230;</p>
<p>First: I&#8217;ve picked up my <a href="http://sourceforge.net/projects/pixonomy/">Pixonomy project</a> again, and while I&#8217;ve JUST put it on hold again, I&#8217;ve progressed the library with a refactoring and I just need to do some cross-platform hacking (to get it to compile nicely on OS X as a universal binary), and implement a couple of search functions to actually get it to a state where I can actually start programming client software in GTK+ or wxWidgets (I haven&#8217;t decided which) to demo the library.</p>
<p>Second: I&#8217;m currently taking a break from Pixonomy to work on a nifty font for OpenTTD.  Since I noted that they finally implemented TrueType support and Unicode support in 0.5.0 (which I&#8217;d tried to implement before, but never really got around to), I figured I&#8217;d try my hand at <a href="http://www.pipian.com/stuffforchat/openttd_1.png">something fun</a>.  After I get all the lower case characters done preliminarily, I&#8217;ll start adjusting the bounds and kerning by testing in game&#8230;</p>
<p>Third: Been watching some of the subs for this season, and I think Allison &amp; Lillia does seem to have some promise, but we&#8217;ll see where it goes.  Zettai Karen Children, though, is not so much up my alley.  We&#8217;ll see where the other series I want to check out go (namely, Library War)&#8230;  There&#8217;s a few others that might be good, too.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pipian.com/blog/2008/04/15/whats-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>And It&#8217;s Done&#8230;</title>
		<link>http://www.pipian.com/blog/2008/01/27/and-its-done/</link>
		<comments>http://www.pipian.com/blog/2008/01/27/and-its-done/#comments</comments>
		<pubDate>Mon, 28 Jan 2008 05:55:15 +0000</pubDate>
		<dc:creator>Pipian</dc:creator>
				<category><![CDATA[Real Life]]></category>
		<category><![CDATA[genericon]]></category>

		<guid isPermaLink="false">http://www.pipian.com/blog/2008/01/27/and-its-done/</guid>
		<description><![CDATA[My final year of Genericon as Chief of Operations is over.  Kinda surprising that I&#8217;ve been such for three years!  Oh well, I think my replacement will do a good job.  I did my best to train him, but even so, I&#8217;ll probably end up as auxiliary help for Genericon XXII if grad school doesn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>My final year of Genericon as Chief of Operations is over.  Kinda surprising that I&#8217;ve been such for three years!  Oh well, I think my replacement will do a good job.  I did my best to train him, but even so, I&#8217;ll probably end up as auxiliary help for Genericon XXII if grad school doesn&#8217;t interfere, just to make his and the new chair&#8217;s lives easier.</p>
<p>There were a couple of fun things we had, but I think Scott&#8217;s Horrible Video Game panel was one of the coolest things I got to do all con.  I recorded it on my camera, and even though it&#8217;s crappy quality, I&#8217;m gonna see if I can&#8217;t stitch together a Youtube post featuring it in the next week or so.  Standard work for a lot of the rest of the con, but even so, it was pretty fun.</p>
<p>It&#8217;s been fun, but it&#8217;s time for the new-old-guard to start moving on&#8230;  And time for me to actually get to work on the work that needs to be done for this semester.</p>
<p>P.S. djpretzel, Liontamer, and zircon were all awesome guests.  I didn&#8217;t see the others as much, but I think this years&#8217; guests were all great and courteous guests and generally cool to hang out with!  Even though&#8230;  I kinda stayed in the ops room for half the con again.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pipian.com/blog/2008/01/27/and-its-done/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
