[ 
https://issues.apache.org/jira/browse/CLEREZZA-490?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13018151#comment-13018151
 ] 

Henry Story commented on CLEREZZA-490:
--------------------------------------

I have been working this through on the WebID mailing list. Here is what I 
wrote up in the thread
http://lists.w3.org/Archives/Public/public-xg-webid/2011Apr/0119.html

Here it is in detail.

----------


I have been  working on  Clerezza (zz) which can now host very basic and 
uninteresting profiles and allow users to create WebIDs. I started to work on 
the ability for the server to fetch remote resources *for* its users, ie. 
possibly protected ones. Perhaps I started this a bit too early. But here is an 
outline of what I discovered while working on this.

The most obvious way to proceed is for a zz server to create an additional 
Public/Private key pair for each of its users and build SSL client connections 
with that when it fetches information that may be under access control. Any 
server zz connects to can return representations just by considering the WebID 
in the request and if they should or should not have access.

But, it is more complex for Clerezza (and so for any such agent) because it may 
get completely different representations back depending on which agent it is 
serving.  To make this more vivid, let me develop an example. Let us assume 
she.net is hosting Alice and Anna's content and he.org is hosting Bob content. 
she.net and he.org are new types of agents, call them robots, as opposed to 
clients or servers, because they can be both.

Perhaps we can defined that new class of Agents as

:Robot owl:subClassOf foaf:Agent .

Robots have admins, and they are usually instances of something related to a 
doap:Project . I won't bother defining those relation here right now.

Let's just name our two robots in n3

@prefix he: <https://she.net/>
@prefix she: <https://he.org/>

he:r1 a :Robot .
 :admin Bob .

she:d1 a :Robot;
  :admin :jane .

We can also name a few humans

she:alice a foaf:Person.
she:anna a foaf:Person.

he:bob a foaf:Person.

So when she:d1 connects to he:r1 as she:alice requesting resource he:agda, 
he:r1 will return graph g1;
                                   she:anna  requesting resource he:agda, he:r1 
will return graph g2 .

(somehow I can see this being very useful in Italy)

If he:r1 places those graphs at the same named location she:agda, he will 
overwrite the previous graph, and this could lead to quite a lot of problems 
for Bob (the human). So ZZ will need to keep the graphs formed from the 
representations seen by each of its users separate.

This issue does not arise of course if the server only hosts the content of one 
agent, which is why building a FreedomBox with one user per box  would be so 
much simpler. (note: the same goes for cell phones)

If one did not want to immediately deal with this issue of keeping different 
views separate one could have the server she:d1 connect as herself. She would 
then just need to add a foaf:knows relation to each the accounts she was 
serving.  Well foaf:knows would not work because it is defined as relating two 
people, and neither she:d1 nor he:r1 are people. So perhaps a :employes 
relation could be coined

she:alice :employs she:d1 .
she:anna :employs she:d1 .
he:bob :employs he:r1 .

Now when she:d1 fetches information for :anna she will at least be granted more 
access than an anonymous agent ( because she:d1 will be known by he:r1 as being 
related to anna and alice in the :employs relation ). But he:r1 won't know of 
course if at that point she is serving alice or anna. So he:r1 will have to 
send only information that both would want to know. He won't be able to treat 
she:r1 as equivalent to either anna or alice, which is good, but of course 
would be problematic for very large servers with millions of people on it, 
since  share information with everyone in such a large entity is equivalent to 
making it public. Such an entity would in effect if it identified itself as one 
of the robots, always be treated as anonymous by everybody else. The larger the 
number of people that robot served the more anonymous it would be treated as.

So there is really not much of a way around this. Any service hosting multiple 
users will when fetching information for a user need to authenticate as that 
user and keep graphs destined for each user separated. 

At the same time it is clear that these large services are themselves able to 
see into each of the graphs, even if they keep these separate. This has come up 
a lot on this list: it is not inconsequential who the server one is placing 
one's information on is owned by. Is it a large company? Then individuals 
speaking there are speaking as employees. Is it a university? Then you may have 
trust in some of what is being said. Is it a government id? Don't make jokes 
about blowing up airports. Is it a Freedom box? Then the owner of the box is 
the only one to see what appears there - and he could say anything at all.

It would seem like a good idea if one could tie in the serving agent into the 
loop, so that agents on which requests were made could take these facts into 
account. Luckily X509 comes with an Issuer Alternative Name field in which one 
can also place a WebID. And this WebID can describe the owner of the service. 
Of course DNS also give some information as to who the owner of the service is, 
but a WebID allows for a lot more complete information to be served. 

If we are to put a IAN in the cert, then we can not have the certificates 
served to end users by the site be self signed, or there will be an immediate 
owl:sameAs relation between all agents on the site. They will have to be signed 
by a certificate representing the service itself. 

(Here there is an interesting option that comes to mind and mentioned by Peter 
Williams a year or so ago, that one could use the public key published by that 
TLS service to create a new signing certificate. Of course these won't be 
verifiable using usual public key crypto from the root CA on down, since those 
CA's  put restrictions in the EE certs as to how far their responsibility for 
certification goes: they will certify the service, not what the service decides 
to certify. We should try to work out the details of the pros and cons of this)

But with such a service certificate available, perhaps the relation of 
authority becomes clearer too. The service profile could publish a POWDER 
document specifying what resources on the server it certifies directly, and 
perhaps which ones, it just guarantees bit by bit to serve as the owner of that 
subset of resources asked it to do. In any case it can also describe the 
ownership of the service: is it a university, a government, a bank, a church, a 
freedombox....

There may be some interesting inferences one can draw too here: namely that if 
the person connecting to a service uses the exact same public key as the one in 
the certificte served by that service then he is the owner of that service. A 
way to distinguish Freedom Box owners form others cryptographically perhaps.

        Henry

Ps. Butlers are agents that know how to keep complex information between the 
members of the household seperate. But anyone talking to a butler should know 
who he works for.

> WebProxy agent should identify itself with admin WebID
> ------------------------------------------------------
>
>                 Key: CLEREZZA-490
>                 URL: https://issues.apache.org/jira/browse/CLEREZZA-490
>             Project: Clerezza
>          Issue Type: Improvement
>            Reporter: Henry Story
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> The WebProxy makes requests to other servers which may be other WebID enabled 
> servers that may request the identity of the user. What identity should the 
> server use if it needs to identity itself?
> Initially at least, and for sake of simplicity,  I think that agent should be 
> the administrator - ie /user/admin/profile#me . The public key should be the 
> one with which the SSL session is started.  That key will be CA signed 
> usually. It will be easy to use that certificate+private key to build a self 
> signed certificate for WebID authentication, on WebProxy startup. The public 
> key should then be added to the admin user's profile, (and removed when that 
> profile is changed).
>  
> This should also reduce certain number of exceptions being thrown when the 
> server connects to itself via ssl. In fact when it does connect to itself, 
> the connection should be a non encrypted ssl connection.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to