Profil de PeterPeter's ruminationsPhotosBlogListesPlus ![]() | Aide |
|
30 septembre Copy of http://darq.sourceforge.net/ - Federated Queries with SPARQLDARQ - |
| <base href="http://videntity.org"/> <link rel="openid.server" href="http://videntity.org/server"/> <link rel="vcard" href="http://homepw.videntity.org/vcard.vcf"/> <title>Videntity.org : OpenID Identity: homepw.videntity.org</title> |
The videntity site provides users with a generator for HTML markup, allowing me to add the markup to my blog entry as follows
<iframe
style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; overflow: hidden; border-right-width: 0px"
marginwidth="0" marginheight="0"
src="http://homepw.videntity.org/card?v=s"
frameborder="0" width="430" scrolling="no" height="200">
</iframe>
In the blog entry editor, this iframe appears thus:
Below, is the result of embedding that markup in this very page. Its not impressive, as Microsoft strips out the tags during publication (from what I can tell). I guess the firm won't allow iframes pointing to third party sites it does not control. Thus, iframe mashups to HTML sites supporting FOAF didnt work.
Card displayed between here...
...and here. (Or not).
Comments solicited in any inappropriateness on the material that follows - which attempts to organize how I will (hopefully) participate on an DIDW panel discussion touching on OpenID topics, Monday at 2:30.
I will amend my project description to 6 minutes. (There are 3 _optional_ picture slides to go with it.). It will highlight how 15k San Francisco Realtors all got (SAML2) SSO in February of this very year - which seems appropriate case study -- since San Francisco is our host city. This is all very concrete. If its helpful, Id be happy to go first and help warm up a cold audience.
To tune that story for an open panel forum, the last 2 minutes will be on the topic of how consumers and realtors might interact using web2.0. This will introduce how we are thinking of using OpenID on the so called "client portal" - a per-Realtor hosted collaboration site where potential homeowners work with the realtor one on one - to find the right homes for their tastes. Either we can require homeowners to go get a Microsoft passport/hotmail/LiveID account to logon to the portal , which means we must rely on WS-Federation SSO from LiveID, or they do the same with an OpenID Provider - where we relying on OpenID SSO from the likes of Vidoop. Which would be better, given these 2 federation options could equally apply to any one of potentially 2 million people in N California who will interact with a Realtor, in the next Year? Which option could we actually see becoming a reality in a 3 month timeframe?
The opening piece would leave open the question: Why ...would one take longer than the other to make happen? Does this therefore bias the selection of SSO technology?
updates
Ok. I have 15 minute talk for you on Quattro - an actual, live deployment of WebSSO that occurred in the last 9 months - for almost 100k Realtors across N California, operating out of about 5000 brokerage offices where the state licensing regulations are enforced. I will describe why the connecting parties opted to use websso to enable all realtors to access all sources of property listing data in all 9 counties. The economic facts tell a fascinating story (monthly fees per realtor went down in most cases, the security program paid for itself, no user resentment was detected despite issuing one-time-password security tokens as the same time.)
If I can get authority to discuss certain matters that reflect backroom concerns, I will publicly state why these parties opted to address certain regionalization trends going on in N California market with this "federated" approach, rather than use alternative schemes. Additionally I can summarize the impact in general terms: who won out and who lost out by this combination of business/technology tactics.
Parallels with equivalent rollout programs on the E coast can be stated, with some discussion of how the scheme uses websso services to solve mostly state-level problems while also addressing national-scoped websso problems. For example, whilst locally focused, any one of 1.3M realtors will also need from their local portal site to get SSO access a certain service provider vendor (in CA, perhaps), who happen to operate nationally-syndicated services related to backroom management (workflow, records management, compliance,...).
This can finish by stating how critical it was that there existed a mature technology standard, a multi-vendor climate, commodity security and pricing structures, and ...proof that other industries were moving in the same direction so that the Realtor will one day have within their webSSO network access to the (mortgage banking brokers, title insurers, fiduciary escrow agents, county recorder) offices - all of which are of course necessary to close the conveyance of your real property.
As almost everyone in the room will have personally touched this process, as a buyer/seller, it usually easy to put yourself in the shoes of the Realtor and see just why such folk need such networking capabilities - to get your transaction closed by 1pm and recorded, during the window when the loan is both funded and the recorder's office is open.
From: Story Henry [mailto:henry.story@bblfish.net]
Sent: Fri 9/21/2007 3:12 AM
To: Peter Williams
Cc: OpenID General
Subject: Re: [OpenID] cryptographics web of trust
On 15 Sep 2007, at 05:16, Peter Williams wrote:
> I played more with your foaf file, its wot, its implied recommendation
> to certain public keys.
>
> http://yorkporc.spaces.live.com/blog/cns!5061D4609325B60!167.entry
By the way, one thing to remember about writing blogs is that people may be arriving at your blog from anywhere. So they don't have context. It is important therefore to decontextualise as far as possible what you are writing.
The query in the original reference used a java-script-like server-side scripting language, extended with a proprietary RDF query language. Its easy to learn, as its very similar to that underlying a million older Microsoft websites using Active Server Pages (ASP). A lot of programmers would relate to it (if indeed I contextualized, properly in an ezine-grade blogsite, seeking recommendations).
What matters most for now is the query design, not the language of its expression. Perhaps, continued discussion should aim to help OpenID community (a) focus on the appropriateness of its end-used identifier rules (https/http/no-fragments), (b) review how proposed wot:SigEvents documenting KeySign-ings may support OpenID Auth by adding assurance to the distribution of keying material, (c) allow optional FOAF discovery to add assurance to OpenID HTML Discovery of URIs, (d) let FOAF optionally be used as a basis of fulfilling AX queries, (e) let FOAF be a source of security policy controlling the release of attributes via AX, and (f) let FOAF/RDF document and/or define OpenID namespaces and protocol extensions.
In that vein, I can then note that FOAF cards are one of the earliest of SemWeb experiments - one that "captures its major design tenets". (I don't want to "abuse" SemWeb, as some claim SOAP abuses the "intended role" of XML.) I note that FOAF vocabulary is used most of the examples in the SPARQL Query Recommendation. I note than foaf:openid is now an experimental term. I note that versions of FOAF's own ontology have been signed using the WOT vocabulary. I note how your own FOAF card shows how one might similarly sign some byte form of a unique PersonalProfileDocument, bearing your openid assertions and a list of URI references to various friend assertions. I note that some of those friends have openids and publickeys. I note you have certified some of the openid/cardURI/pubkey bindings, essentially.
So lets perform another thought experiment - with just those elements.
Rather than experiment further with that javascript language, lets only use the SPARQL use case models shown in and around http://www.w3.org/TR/rdf-sparql-query/#specDataset .
Lets say henry's new friends include:-
<http://example.org/foaf/aliceFoaf>
<http://example.org/foaf/bobFoaf>
Can we imagine that each graph indicated the n FROM NAMED elements in the query is one of the URLs henry's card file points out - each pointing to the card of each of henry's friends?
PREFIX foaf: http://xmlns.com/foaf/0.1/
SELECT ?src ?friendopenid ?friendpka
FROM NAMED http://example.org/foaf/aliceFoaf
FROM NAMED http://example.org/foaf/bobFoaf
WHERE
{
GRAPH ?src
{
?x wot:pubKeyAddress ?friendpka .
?x foaf:openid ?friendopenid
}
}
Can we now imagine that henry's card also has a "foaf:queryme" term. Its value might the conventions of the SPARQL protocol binding for HTTP URL. The query above would presumably be encoded as the queryme object, citing a relative-URL to be resolved against the locally-scoped name #me
[ foaf:queryme #me?query=PREFIX+foaf%3a+%3chttp%3a%2f%2fxmlns.com%2ffoaf%2f0.1%2f%3e%0d%0aSELECT+%3fsrc+%3ffriendopenid+%3ffriendpka%0d%0aFROM+NAMED+%3chttp%3a%2f%2fexample.org%2ffoaf%2faliceFoaf%3e%0d%0aFROM+NAMED+%3chttp%3a%2f%2fexample.org%2ffoaf%2fbobFoaf%3e%0d%0aWHERE%0d%0a++%7b%0d%0a++++GRAPH+%3fsrc%0d%0a++++%7b+%3fx+wot%3apubKeyAddress+%3ffriendpka+.%0d%0a++++++%3fx+foaf%3aopenid+%3ffriendopenid%0d%0a++++%7d%0d%0a++%7d . ]
Can we imagine that an address book tool used to maintain Henry's friend list also rewrites the foaf:queryme?
Can we imagine the query might reference an inference rulebase, that allows the query to prefer to pickup henry's copy/endorsement of Alice's pubkey from henry's website (rather rather than the copy from Alice's own website?)
Is there an existing "standard" SPARQL query that takes a PersonalProfileDocument card, and reduces the list of knows relations to a set of named graphs in a "template" SPARQL query - one that gets specialized by some kind of internal GRAPH "join" to then lookup the friends' current openids, or pubkeys, or other "X" terms that a particular FOAF applications focuses on?
Just a few ideas, to play with.
From:
Peter Williams
Sent:
Thu 9/20/2007 12:18 PM
To:
Cc:
foaf-dev
Subject:
FOAF, property listings, updating shows relations, subProperty (pun) searches, federate data, friend datameshes, openid CCA
Attachments:
If we store the stream as a file on my computer's Desktop file folder, rather than explore the rdf+xml media used as a wire-transfer syntax for the RDF model, we can explore it more usefully using the highly readable N3 notation.
@prefix desktop: <file://C:/Users/pwilliams/Desktop/>.
@prefix peter: <file://C:/Users/pwilliams/Desktop/foaf.rdf#>.
@prefix ns10: <http://>.
@prefix ns11: <http://bblfish.net/>.
@prefix ns12: <http://bblfish.net/blog/>.
@prefix ns4: <http://bblfish.net/people/henry/card#>.
@prefix ns13: <http://blogs.sun.com/bblfish/>.
@prefix ns14: <http://del.icio.us/>.
@prefix dcterms: <http://purl.org/dc/terms/>.
@prefix rel: <http://purl.org/vocab/relationship/>.
@prefix admin: <http://webns.net/mvcb/>.
@prefix ns9: <http://www.ldodds.com/foaf/>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.desktop:foaf.rdf a foaf:PersonalProfileDocument;
dcterms:modified "2007-08-28T05:59:11Z";
admin:errorReportsTo <mailto:leigh@ldodds.com>;
admin:generatorAgent ns9:foaf-a-matic;
foaf:maker peter:me;
foaf:primaryTopic peter:me.<file://C:/Users/pwilliams/Desktop/foaf.rdf#> owl:imports
<http://xmlns.com/foaf/0.1/>, <file://C:/Users/pwilliams/Desktop/>,
<http://purl.org/dc/terms/>, <http://purl.org/vocab/relationship/>,
<http://webns.net/mvcb/>, <file://C:/Users/pwilliams/Desktop/foaf.rdf#>.peter:me a foaf:Person;
rel:acquaintanceOf [ a foaf:Person;
rdfs:seeAlso <http://bblfish.net/people/henry/card#>;
foaf:aimChatID "unbabelfish";
foaf:homepage <http://bblfish.net/>;
foaf:mbox <mailto:henry.story@bblfish.net>,<mailto:henry.story@gmail.com>, <mailto:henry.story@sun.com>;
foaf:name "Henry J. Story"; foaf:nick "bblfish";
foaf:weblog <http://bblfish.net/blog/>, <http://blogs.sun.com/bblfish/>, ns14:bblfish
];
foaf:family_name "Williams";
foaf:givenname "Peter";
foaf:mbox <mailto:pwilliams@rapattoni.com>;
foaf:name "Peter Williams";
foaf:nick "pe";
foaf:openid <http://openid.sun.com/peter>;
foaf:title "Mr";
foaf:workplaceHomepage ns10:www.rapattoni.com.
A number of interesting identity "deep" semantics of the FOAF file become apparent. They appear to take into consideration the location of the file and the just who is doing the (possibly self) documentation.
In the statements given above, we see that the FOAF file knows itself to be located at a file: URI reference, showing how this documentation makes FOAF no longer quite so http-centric. Clearly, in the general case the space of identity semantics must go beyond the HTTP Protocol, and http-specific security schemes such as https. For example, if we look at ns10:www.rapattoni.com one sees from @prefix ns10: <http://>. that the "http" URI scheme is just another namespace.
From the fact we as readers now know that the RDF statements refer to a document tied to a particular location, we also know that it is a third party issuing this document. The FOAF file is a historical document set at a point in time and at a particular location, rather than an active document being made here and issued as a set of assertions.
This FOAF file contrasts with self-documenting FOAF statements that are assertions (such as that in the resource representing Henry Story's card). As the nature of such assertions requires the notion of realtime references, we can only refer to them via an act of linking, here. To display them in this post would be to convert the assertion that Henry's agent makes here and now into a mere document, made in the past.
This post updates "Tying FOAF identity with the identity semantics of OpenID".
Draft 2.7 addresses core organizational issues, most stylistic comments, uses correct RDF terminology and relationships, and has removed large pictures (which Live Spaces decided to sample to save file space). Typo removal is ongoing. Phrasing polishing continues. RDF+XML in Appendices has been augmented with N3 notation.
One of the features of OpenID Auth 2.0 is its reliance on discovery schemes to validate identity. One of the features of FOAF is its reliance on the RDF's formalism of the notions of identity, assertions (of identity) and claims (about identity). In this article we discuss how these 2 features might be combined to harmonize the intuitive notion of identity used in OpenID with the formalized concept of identity used in FOAF.
The aim of our discussion is put OpenID Auth 2.0 on a more solid formal footing -- one that is grounded in RDF Semantics. Once formalized, the security properties of OpenID Auth protocol will be amenable to formal, reasoning-based security analysis. As a valuable side-effect, we would hope to characterize how what we call a "FOAF-aware" Relying Party Agent may exploit a FOAF file during discovery.
Though the end user typing a "User-Supplied Identifier" into a website's login page may be either a URI or an XRI, we simplify the discussion by eliminating the case of the user supplying an XRI -- unless it takes the form of an HXRI (see wiki). To further simplify, we eliminate the need for considering normalization by requiring the user to supply an Absolute URI. We shall assume that simple form-filling browser modules will populate OpenID login fields, automatically.
An absolute URI contains the name of the scheme being used (<scheme>) followed by a colon (":") and then a string (the <scheme-specific- part>) whose interpretation depends on the scheme. [See section 3, URI]
OpenID Auth 2.0 defines several discovery methods involving what the authors' refer to as an "Identifier". This URI reference is used to discover "identity" (amongst other names such as the OpenID Provider Agent endpoint, and the "OP Identifier" name of the Agent itself).
Discovery is the process where the Relying Party uses the Identifier to look up ("discover") the necessary information for initiating requests.[OpenID Auth 2.0]
We concern ourselves only with the first method: HTML-based discovery. By imposing this restriction we stay close to the web. Staying close to the web will allow us to more consistently apply the notions of identity that FOAF inherits from RDF. Thus, we opt to eliminate those methods of discovery that rely on XML documents that are not a concrete representation of RDF resources, such as XRDS documents (see YADIS Protocol). Discovery shall involve only relying on the HTTP protocol, HTML documents and resources denoted by an RDF document.
While performing the OpenID Auth 2.0 protocol, we will require a Relying Party Agent that is "FOAF-aware" to "validate" -- via "FOAF-enhanced HTML-based discovery" -- that the Absolute URI supplied by an end user must be a person's legitimately-asserted OpenID. This validation is characterized as a "test" that there are adequate "assurances" that the identity assertions and associated claims are true, before OpenID Auth 2.0 attempts to perform its basic service of authenticating the user citing the identity -- using passwords, smartcards, biometrics, etc.
We define two tests of legitimacy. The test of "Basic legitimacy" is determined by confirming that the openid Property is present in the instance of Person class of an authentic FOAF file that contains a single PersonalProfileDocument. The test for "WOT legitimacy" is similar, but confirms that the same PersonalProfileDocument asserts an authentic public-key based identity of the FOAF file's author.
Having determined Basic legitimacy, a FOAF-aware Relying Party Agent need not determine WOT legitimacy. The Agent will normally opt to determine WOT legitimacy only when (i) there is no "foaf:openid" property, or (ii) when specifically seeking to rely on WOT-based assurances to the exclusion of other assurances. In contrast to WOT-based assurances, Basic legitimacy derives its assurances from either the security of the Association obtained when using the openid Property in OpenID Auth 2.0 or when using the Record Layer of the SSL protocol leveraged in some OpenID Auth 2.0 exchanges.
In an article posted to the foaf-dev discussion group, the author proposes adding a "foaf:openid" Property to the FOAF vocabulary and explains its objectives:
The foaf:openid property is "inverse functional", meaning that anything that is the foaf:openid of something, is the foaf:openid of no more than one thing. FOAF is agnostic as to whether there are (according to the relevant OpenID specifications) OpenID URIs that are equally associated with multiple Agents. FOAF offers sub-classes of Agent, ie. foaf:Organization and foaf:Group, that allow for such scenarios to be consistent with the notion that any foaf:openid is the foaf:openid of just one foaf:Agent. [article]
It is the "inverse functional" nature of the definition that particularly interests us. That a given Agent may refer to itself using multiple OpenIDs (and that the vocabulary is designed for this scenario) is currently of secondary interest. The inverse functional property of any one of these OpenIDs is what is most important and its nature confirms what the author describes as its potential to address the much wider problem of trust management:
In this way, FOAF and OpenID complement each other; neither provides a stand-alone approach to online "trust", but combined they can address interesting parts of this larger problem space. [article]
OWL discusses the meaning of an InverseFunctionalProperty in highly abstract way:
![]()
4.3.2 owl:InverseFunctionalProperty
If a property is declared to be inverse-functional, then the object of a property statement uniquely determines the subject (some individual). More formally, if we state that P is an
owl:InverseFunctionalProperty, then this asserts that a value y can only be the value of P for a single instance x, i.e. there cannot be two distinct instances x1 and x2 such that both pairs (x1,y) and (x2,y) are instances of P. [OWL]
This abstract definition does not explain how the uniqueness property of the relation is actually maintained. Though clearly needing refinement in a domain-specific vocabulary addressing the missing assurances, the specification already clearly helps formalize the objective of distinguishing a particular Person (or more generally any subclass of Agent) declared in a PersonalProfileDocument located at a particular URL by the assertion of an openid Property.
The author of a proposed web of trust ontology describes the problem that neither RDF nor RDF Semantics solves the problem of determining who is making RDF statements, such as the foaf:openid statement discussed above.
RDF documents can make any number of statements. Without some kind of signature or other similar verification mechanism, there is no way to understand who made these statements. One way to document who made a set of statements is via the use of Digital Signatures: signing a document using Public Key Cryptography. The WOT, or Web Of Trust, schema is designed to facilitate the use of Public Key Cryptography tools such as PGP or GPG to sign RDF documents and document these signatures.[WOT ontology]
Two terms stand out: "identity" and "User". As the following table shows, identity is a Property, whereas User is a class.
Property: wot:identity
Identity - A property linking a public key to the user of the key.Status:
testingDomain:
wot:PubKeyRange:
wot:UserA term identifying the wot:User of a wot:PubKey - the inverse of wot:hasKey. Useful for providing identifying information about the owner of a Key.
Class: wot:User
Key User - A user (agent, person, group or organization) of a PGP/GPG public key.Status:
stablein-range-of:
wot:identityin-domain-of:
wot:hasKeyNo detailed documentation for this term.
In the context of the WOT, identity is a relationship notion that is tied to public keys and the user of the associated public key pair - known normally as the "owner". What is critical about the definition is its use of a linking (as in "binding") concept between a public key and some owning user.
The term for user contrasts with that for identity. It conceives a non-naming notion of user. It seems to attempt to capture the usage and utility of a public key, once placed in the hands of an end-user. The User markup is not itself a name and is not an identifier of a user - that role is reserved for the identity term discussed above. Rather, user is a bag of user/usage related facts, bearing some relationship to a public key.
The distinctions being drawn can be seen using an example, shown in the figure below (an amended excerpt from the WOT vocabulary). Here, the public key has been signed as represented by a key signing event statement. The concept of the key owner is conveyed by citing properties of the User/usage of the public key - rather than by introducing a URI reference for that user. In this case, expressed as user properties the identity of the public key takes the arbitrary form of two distinguished properties : a foaf:name and a foaf:mbox. Presumably, a domain-specific vocabulary will further refine User.
<?xml version="1.0" encoding="UTF-8"?>
<PubKey rdf:nodeID="KeyA">
<hex_id>3756EA0B</hex_id>
<length>1024</length>
<fingerprint>04FFF3AC57DF217C6D383DBC0110FB923756EA0B</fingerprint>
<pubkeyAddress rdf:resource="http://foaf.dk/key.asc"/>
<identity>
<User>
<foaf:name>Web Service (foaf.dk)</foaf:name>
<foaf:mbox_sha1sum>a714a83db77c6ce85211beb56599adf2c4eaa62f
</foaf:mbox_sha1sum>
</User>
</identity>
<signed>
<SigEvent>
<signer rdf:nodeID="KeyB"/>
<sigdate>2004-02-18</sigdate>
</SigEvent>
</signed>
</PubKey>
Though above we focused on identity and user statements, the example also documents a SigEvent - the RDF statement documenting a realworld act of counter-signing a public key. As shown below, this class is an involved element of the WOT ontology :
A signed public key is of course fundamental to the theory of PKI as used in when binding HTTP Protocol to SSL to form https. Prevailing theory on PKI teaches that the assurance of secure communications protocols inevitably relies on a more basic assurance - produced by some identity protocol that addresses the uniqueness of public keys and their "authoritative" binding to a given User. Prevailing wisdom holds that once bound to the name(s) of an owner user who uniquely controls the private key, a signed public key is regarded as a "certified key" (or "Certificate"). The certificate has all required properties necessary for assuring inverse functional properties, such as those attached to foaf:openid (see above).
An interesting question then arises. If a certified public key has a foaf:openid in its User relation, does testing for the authenticity of the certificate becomes the assurance required to test for the WOT legitimacy of that OpenID?
Testing for WOT legitimacy may be able to build upon the procedures for testing Basic legitimacy. As shown below, SPARQL queries can be used as a request/response protocol. (These queries were crafted by Henry Story, referring originally to an emulation of the SAML Attribute Request/Response protocol.)
| PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX wot: <http://xmlns.com/wot/0.1/> SELECT * WHERE {
| In this query, a Relying Party Agent does not send a classical checkid immediate message to an OP Provider endpoint. Rather, it makes a SPARQL request of the OP Provider -- listening on an SPARQL Protocol endpoint -- attempting to obtain a resultset establishing Basic legitimacy. Confirmation takes the form of the query responding with the foaf:openid value). |
|
PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT * WHERE { |
In this query, the SPARQL Protocol Agent receiving the previous query is then asked by the Relying Party Agent to return a set of claims about the cardholder. The query selects a graph satisfying the requested claim set, and also "signs" this result by affixing a trust level "t". Presumably the form of this query could be enhanced so that a dynamically generated digital signature is also affixed. |
No conclusions have yet been drawn, in what is a "study in progress".
In the course of researching the issues underlying this post, we considered actual FOAF files live in the wild. In this first appendix, we look at a FOAF file produced by the foaf-a-matic web-service.
We requested and obtained a FOAF file as described below:-
HTTP/1.0 200 OK
Content-Disposition: attachment; filename="foaf.rdf"
Content-Type: application/octet-stream
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:admin="http://webns.net/mvcb/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<foaf:PersonalProfileDocument rdf:about="">
<foaf:maker rdf:resource="#me"/>
<foaf:primaryTopic rdf:resource="#me"/>
<admin:generatorAgent rdf:resource="http://www.ldodds.com/foaf/foaf-a-matic"/>
<admin:errorReportsTo rdf:resource="mailto:leigh@ldodds.com"/>
<dcterms:modified xmlns:dcterms=http://purl.org/dc/terms/
xmlns:rel="http://purl.org/vocab/relationship/">2007-08-28T05:59:11Z</dcterms:modified>
</foaf:PersonalProfileDocument>
<foaf:Person rdf:ID="me">
<foaf:name>Peter Williams</foaf:name>
<foaf:title>Mr</foaf:title>
<foaf:openid>http://openid.sun.com/peter</foaf:openid>
<foaf:givenname>Peter</foaf:givenname>
<foaf:family_name>Williams</foaf:family_name>
<foaf:nick>pe</foaf:nick>
<foaf:mbox rdf:resource="mailto:pwilliams@rapattoni.com"/>
<foaf:workplaceHomepage rdf:resource="http://www.rapattoni.com"/>
<rel:acquaintanceOf xmlns:dcterms=http://purl.org/dc/terms/
xmlns:rel="http://purl.org/vocab/relationship/">
<foaf:Person>
<foaf:nick>bblfish</foaf:nick>
<foaf:name>Henry J. Story</foaf:name>
<foaf:aimChatID>unbabelfish</foaf:aimChatID>
<foaf:homepage rdf:resource="http://bblfish.net/"/>
<foaf:mbox rdf:resource="mailto:henry.story@bblfish.net"/>
<foaf:mbox rdf:resource="mailto:henry.story@gmail.com"/>
<foaf:mbox rdf:resource="mailto:henry.story@sun.com"/>
<foaf:weblog rdf:resource="http://bblfish.net/blog/"/>
<foaf:weblog rdf:resource="http://blogs.sun.com/bblfish/"/>
<foaf:weblog rdf:resource="http://del.icio.us/bblfish"/>
<rdfs:seeAlso rdf:resource="http://bblfish.net/people/henry/card#"/>
</foaf:Person>
</rel:acquaintanceOf>
</foaf:Person>
</rdf:RDF>
The FOAF file has a PersonalProfileDocument element. The rdf:about attribute value ("") ties the document to the URL from which the document is retrieved via the HTTP protocol. It is thus describing itself, assuming one can believe HTTP when it indicates the URL from where it recovered the web page. To address doubts, one can determine the authenticity of the FOAF file by infering that one "relies on" the properties of either (i) the https security mode of the HTTP protocol or, (ii) other means such as a WOT assurance Property.
The document also contains a single Person class instance. The rdf:ID of the Person corresponds to the foaf:maker Property of the PersonalProfileDocument.
The Person resource has an openid Property whose value is unrelated to the URL from which the document may be retrieved. However, by the inverse functional definition of this property, the value is very specifically related to the document itself
The openid Property value is of course an arbitrary URI: http://openid.sun.com/peter. As I am the author of the file, I control the content of the FOAF file and I am able to edit the file to have any value I choose for my openid. I may also store the FOAF file at any URL. These facts contrast with the next FOAF file show in the following appendix.
If we store the stream as a file on my computer's Desktop file folder, rather than explore the rdf+xml media used as a wire-transfer syntax for the RDF model, we can explore it more usefully using the highly readable N3 notation.
@prefix desktop: <file://C:/Users/pwilliams/Desktop/>.
@prefix peter: <file://C:/Users/pwilliams/Desktop/foaf.rdf#>.
@prefix ns10: <http://>.
@prefix ns11: <http://bblfish.net/>.
@prefix ns12: <http://bblfish.net/blog/>.
@prefix ns4: <http://bblfish.net/people/henry/card#>.
@prefix ns13: <http://blogs.sun.com/bblfish/>.
@prefix ns14: <http://del.icio.us/>.
@prefix dcterms: <http://purl.org/dc/terms/>.
@prefix rel: <http://purl.org/vocab/relationship/>.
@prefix admin: <http://webns.net/mvcb/>.
@prefix ns9: <http://www.ldodds.com/foaf/>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.desktop:foaf.rdf a foaf:PersonalProfileDocument;
dcterms:modified "2007-08-28T05:59:11Z";
admin:errorReportsTo <mailto:leigh@ldodds.com>;
admin:generatorAgent ns9:foaf-a-matic;
foaf:maker peter:me;
foaf:primaryTopic peter:me.<file://C:/Users/pwilliams/Desktop/foaf.rdf#> owl:imports
<http://xmlns.com/foaf/0.1/>, <file://C:/Users/pwilliams/Desktop/>,
<http://purl.org/dc/terms/>, <http://purl.org/vocab/relationship/>,
<http://webns.net/mvcb/>, <file://C:/Users/pwilliams/Desktop/foaf.rdf#>.peter:me a foaf:Person;
rel:acquaintanceOf [ a foaf:Person;
rdfs:seeAlso <http://bblfish.net/people/henry/card#>;
foaf:aimChatID "unbabelfish";
foaf:homepage <http://bblfish.net/>;
foaf:mbox <mailto:henry.story@bblfish.net>,
<mailto:henry.story@gmail.com>, <mailto:henry.story@sun.com>;
foaf:name "Henry J. Story";
foaf:nick "bblfish";
foaf:weblog <http://bblfish.net/blog/>, <http://blogs.sun.com/bblfish/>, ns14:bblfish
];foaf:family_name "Williams";
foaf:givenname "Peter";
foaf:mbox <mailto:pwilliams@rapattoni.com>;
foaf:name "Peter Williams";
foaf:nick "pe";
foaf:openid <http://openid.sun.com/peter>;
foaf:title "Mr";
foaf:workplaceHomepage ns10:www.rapattoni.com.
A number of interesting identity "deep" semantics of the FOAF file become apparent. They appear to take into consideration the location of the file and the just who is doing the (possibly self) documentation.
In the statements given above, we see that the FOAF file knows itself to be located at a "file://" URI reference, showing how this documentation makes FOAF no longer quite so http-centric. Clearly, in the general case the space of identity semantics must go beyond the HTTP Protocol, and http-specific security schemes such as https. For example, if we look at "ns10:www.rapattoni.com" one sees from "@prefix ns10: <http://>." that the "http" URI scheme is just another namespace.
From the fact we as readers now know that the RDF statements refer to a document tied to a particular location, we also know that it is a third party issuing this document. The FOAF file is a historical document set at a point in time and at a particular location, rather than an active document being made here and issued as a set of assertions.
This FOAF file contrasts with self-documenting FOAF statements that are assertions (such as that in the resource representing Henry Story's card). As the nature of such assertions requires the notion of realtime references, we can only refer to them via an act of linking, here. To display them in this post would be to convert the assertion that Henry's agent makes here and now into a mere document, made in the past.
We requested and obtained a FOAF file generated by LiveJournal (an OpenID-enabled website), for which the PersonalProfileDocument element is absent.
GET http://homepw.livejournal.com/data/foaf.rdf
HTTP/1.0 200 OK
Content-Type: application/rdf+xml; charset=utf-8<?xml version='1.0'?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ -->
<rdf:RDF
xml:lang="en"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:ya="http://blogs.yandex.ru/schema/foaf/"
xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<foaf:Person>
<foaf:nick>homepw</foaf:nick>
<foaf:name>homepw</foaf:name>
<foaf:openid rdf:resource="http://homepw.livejournal.com/" />
<foaf:dateOfBirth>1965-02-01</foaf:dateOfBirth>
<foaf:page>
<foaf:Document rdf:about="http://homepw.livejournal.com/profile">
<dc:title>LiveJournal.com Profile</dc:title>
<dc:description>Full LiveJournal.com profile, including information such as interests and bio.</dc:description>
</foaf:Document>
</foaf:page>
<ya:blogActivity>
<ya:Posts>
<ya:feed rdf:resource="http://homepw.livejournal.com/data/foaf" dc:type="application/rss+xml" />
<ya:posted>1</ya:posted>
</ya:Posts>
</ya:blogActivity>
<foaf:weblog rdf:resource="http://homepw.livejournal.com/"/>
</foaf:Person>
</rdf:RDF>
The Person resource has an openid Property whose value is obviously highly related to the URL from which the document must be retrieved. The property is similarly no fully related to the ID of the Person instance, which has no local ID.
As far as we can tell, someone simply invented an XML format that foaf files will be obtained from a URL with pattern: */data/foaf. The main purpose in making these FOAF files available is suggested by the ya:feed markup, which denotes the FOAF URL as a resource associated with a blogging feed. Unlike the use of a Person class in the context of a PersonalProfileDocument, the Person instance in this example is merely some ready-specified markup that helps indicate some information about a blog feed (the number of posted items). This FOAF file would not seem suitable for use in an identity protocol of the type discussed in the paper. It uses the FOAF vocabulary, but it is not a "FOAF file".
updated by Tying FOAF identity with the identity semantics of OpenID - v2.4
One of the features of OpenID Auth 2.0 is its reliance on discovery schemes to validate identity. One of the features of FOAF is its reliance on the RDF's formalism of the notions of identity, assertions (of identity) and claims (about identity). In this article we discuss how these 2 features might be combined to harmonize the intuitive notion of identity used in OpenID with the formalized concept of identity used in FOAF.
The aim of our discussion is put OpenID Auth 2.0 on a more solid formal footing -- one that is grounded in RDF Semantics. Once formalized, the security properties of OpenID Auth protocol will be amenable to formal, reasoning-based security analysis. As a valuable side-effect, we would hope to characterize how what we call a "FOAF-aware" Relying Party Agent may exploit a FOAF file during discovery.
Though the end user typing a "User-Supplied Identifier" into a website's login page may be either a URI or an XRI, we simplify the discussion by eliminating the case of the user supplying an XRI -- unless it takes the form of an HXRI (see wiki). To further simplify, we eliminate the need for considering normalization by requiring the user to supply an Absolute URI. We shall assume that simple form-filling browser modules will populate OpenID login fields, automatically.
An absolute URI contains the name of the scheme being used (<scheme>) followed by a colon (":") and then a string (the <scheme-specific- part>) whose interpretation depends on the scheme. [See section 3, URI]
OpenID Auth 2.0 defines several discovery methods involving what the authors' refer to as an "Identifier". This URI reference is is used to discover "identity" (amongst other names such as the OpenID Provider Agent endpoint, and the "OP Identifier" name of the Agent itself).
Discovery is the process where the Relying Party uses the Identifier to look up ("discover") the necessary information for initiating requests.[OpenID Auth 2.0]
We concern ourselves only with the first method: HTML-based discovery. By imposing this restriction we stay close to the web. Staying close to the web will allow us to more consistently apply the notions of identity that FOAF inherits from RDF. Thus, we opt to eliminate those methods of discovery that rely on XML documents that are not a concrete representation of RDF resources, such as XRDS documents (see YADIS Protocol). Discovery shall involve only relying on the HTTP protocol, HTML documents and resources denoted by an RDF document.
While performing the OpenID Auth 2.0 protocol, we will require a Relying Party Agent that is "FOAF-aware" to "validate" -- via "FOAF-enhanced HTML-based discovery" -- that the Absolute URI supplied by an end user must be a person's legitimately-asserted OpenID. This validation is characterized as a "test" that there are adequate "assurances" that the identity assertions and associated claims are true, before the OpenID Auth 2.0 attempts to perform it basic services of authenticating the user of the identity.
We define two types of legitimacy test. "Basic legitimacy" is determined by confirming that the openid Property is present in the Person class of an authentic FOAF file that contains a single PersonalProfileDocument. "WOT legitimacy" is similar, but confirms that the personal profile document asserts an authentic public-based identity of the FOAF file's author.
Having determined Basic legitimacy, a FOAF-aware Relying Party Agent need not determine WOT legitimacy. The Agent will normally opt to determine WOT legitimacy when there is no "foaf:openid" property or when specifically seeking to rely on wot assurances to the exclusion of other assurances. Basic legitimacy will derive its assurance from either the security of the Association obtained when using the openid Property in [OpenID Auth 2.0] or the Record Layer of the SSL protocol used in some [OpenID Auth 2.0].
In an article posted to the foaf-dev discussion group, the author proposes adding a "foaf:openid" Property to the FOAF vocabulary and explains its objectives:
The foaf:openid property is "inverse functional", meaning that anything that is the foaf:openid of something, is the foaf:openid of no more than one thing. FOAF is agnostic as to whether there are (according to the relevant OpenID specifications) OpenID URIs that are equally associated with multiple Agents. FOAF offers sub-classes of Agent, ie. foaf:Organization and foaf:Group, that allow for such scenarios to be consistent with the notion that any foaf:openid is the foaf:openid of just one foaf:Agent. [article]
It is the "inverse functional" nature of the definition that particularly interests us. That a given Agent may refer to itself using multiple OpenIDs (and that the vocabulary is designed for this scenario) is currently of secondary interest. The inverse functional property of any one of these OpenIDs is what is most important and its nature confirms what the the author describes as its potential to address the much wider problem of trust management:
In this way, FOAF and OpenID complement each other; neither provides a stand-alone approach to online "trust", but combined they can address interesting parts of this larger problem space. [article]
OWL discusses the meaning of an InverseFunctionalProperty in highly abstract way:
4.3.2 owl:InverseFunctionalProperty
If a property is declared to be inverse-functional, then the object of a property statement uniquely determines the subject (some individual). More formally, if we state that P is an
owl:InverseFunctionalProperty, then this asserts that a value y can only be the value of P for a single instance x, i.e. there cannot be two distinct instances x1 and x2 such that both pairs (x1,y) and (x2,y) are instances of P. [OWL]
This abstract definition does not explain how the uniqueness property of the relation is actually maintained. Though clearly needing refinement in a domain-specific vocabulary addressing the missing assurances, the specification already clearly helps formalize the objective of distinguishing a particular Person (or more generally any subclass of Agent) declared in a Personal Profile Document located at a particular URL by the assertion of an openid Property.
The author of a proposed web of trust ontology describes the problem that neither RDF nor RDF Semantics solves the problem of determining who is making RDF statements, such as the foaf:openid statement discussed above.
RDF documents can make any number of statements. Without some kind of signature or other similar verification mechanism, there is no way to understand who made these statements. One way to document who made a set of statements is via the use of Digital Signatures: signing a document using Public Key Cryptography. The WOT, or Web Of Trust, schema is designed to facilitate the use of Public Key Cryptography tools such as PGP or GPG to sign RDF documents and document these signatures.[WOT ontology]
Two terms stand out: "identity" and "User". As the following table shows, the terms have internal meaning.
Property: wot:identity
Identity - A property linking a public key to the user of the key.Status:
testingDomain:
wot:PubKeyRange:
wot:UserA term identifying the wot:User of a wot:PubKey - the inverse of wot:hasKey. Useful for providing identifying information about the owner of a Key.
Class: wot:User
Key User - A user (agent, person, group or organization) of a PGP/GPG public key.Status:
stablein-range-of:
wot:identityin-domain-of:
wot:hasKeyNo detailed documentation for this term.
In the context of the wot, identity is a relationship notion that is tied to public keys and the user of that the associated public key pair - known normally as the "owner". What is critical about the definition is its use of a linking (as in "binding") concept between a public key and some owning user.
The vocabulary for user contrasts with that for identity. It conceives non-naming notion of user. It seems to attempt to capture the usage and utility of a public key, once placed in the hands of an end-user. The User markup is not itself an name or identifier of a user - that role is reserved for the identity term discussed above. Rather user is a bag of user/usage related facts, bearing some relationship to a public key relationship between such a key owner and is a relationship.
The distinctions being drawn can be seen using an example, show in the figure below. Here, public key has been signed as represented by a key signing event statement. the identity of the owner is conveyed by citing properties of the User/usage of the public key - rather than by introducing an URI reference for that user. In this case, expressed as user properties the identity of the public key takes the arbitrary form of two distinguished properties : a foaf:name and a foaf:mbox. Presumably, a domain-specific vocabulary will further refine User.
Though above we focused on identity and user statements, the example also documents a SigEvent- the RDF statement documenting realworld act of counter-signing a public key. As shown below, this class is an involved element of the wot vocabulary:
A signed public key is of course fundamental to the theory of PKI as used in when binding HTTP Protocol to SSL to form https. Prevailing theory on PKI teaches that the assurance of secure communications protocols inevitably relies on a more basic assurance - produced by some identity protocol that addresses the uniqueness of public keys and their "authoritative" binding to a given User. Prevailing wisdom holds that once bound to the name(s) of an owner user who uniquely controls the private key, a signed public key is regarded as a "certified key" (or "Certificate"). The certificate has all required properties necessary for assuring inverse functional properties, such as those attached to foaf:openid (see above).
An interesting question then arises. If a certified public key has a foaf:openid in its User relation, does testing for the authenticity of the certificate becomes the assurance required to test for the WOT legitimacy of that openid?
Testing for Wot legitimacy may be able to build upon the procedures for testing Basic legitimacy. As show below, SPARQL queries can refer to either certified or uncertified public keys, stored in the PersonalProfileDocument at a particular endpoint. Could there be here a basis for testing the willingness of an online Agent to make realtime assertions on demand - drawn from a FOAF file and represented in XML/RDF rather than (or as an higher security alternative to ) as OpenID Auth messages?
In this query, one is testing for the presence of the openid. This is similar in function to the HTML-based discovery act specified in OpenID Auth 2.0
In this query, one invites the SPARQL agent, acting as an OpenID Provider, to make an (unsigned) assertion - that it wishes to attest to the some fact such as the trust-level it attaches to the openid. Additional Work is required to allow the request to seek that the query agent on producing the graph dynamically uses the users private key to signs the resultset, using the WOT vocabulary, whilst signaling to public key that one may use to verify that digital signature. Implicitly, the agent in communicating the public key is vouching for its own authenticity and binding to the identity of the user - in this case that user defined in the PersonalProfileDocument at some URL
IN the course of researching the issues underlying this post, we considered actual FOAF files live in the wild, as documented below.
The first graphic below shows a FOAF file with a PersonalProfileDocument. The rdf:about attribute value ("") ties the document to the URL from which the document is retrieved via the HTTP protocol. The authenticity of the FOAF file can be determined by relying on the https mode of the HTTP protocol or by others means such as WOT assurance Property. The document also contains a Person class. The rdf:ID of the Person instance corresponds to the foaf:maker Property of the PersonalProfileDocument.
The Person resource has an openid Property whose value is unrelated to the URL from which the document may be retrieved:
HTTP/1.0 200 OK
Content-Disposition: attachment; filename="foaf.rdf"
Content-Type: application/octet-stream
The property is similarly unrelated to the name of the Person instance, which would be
The openid Property value is of course an arbitrary URI: http://openid.sun.com/peter. As I am the author of the file, I control the content of the FOAF file and I am able to edit the file to have any value I choose for my openid. I may also store the FOAF resource itself at any URL. These facts contrast with the next example FOAF file.
The second graphic below shows a FOAF generated by LiveJournal (an OpenID-enabled website), for which the PersonalProfileDocument is absent.
The Person resource has an openid Property whose value is -- unlike the previous example -- very much related to the URL from which the document may be retrieved:
http://homepw.livejournal.com/data/foaf.rdf
HTTP/1.0 200 OK
Content-Type: application/rdf+xml; charset=utf-8
The property is similarly unrelated to the name of the Person instance, which has no local ID.
The openid Property value is of course an arbitrary URI: http://homepw.livejournal.com/ As I am the author of the LiveJournal profile for account homepw, I indirectly control the content of the FOAF file. However, I am unable to edit the file to have any value I choose for my openid.
|
Build a query on henry's foaf file, querying the foaf files of those of his friends whose public keys he has trusted/endorsed .
import "/std/http.rql"; DROP TABLE henry; DROP TABLE friendkeys var Ienum = ( SELECT ?identity ?pka USING #rsfriendkeys WHERE {?predicate ?identity ?pka} );
| |
|
Have query output the beginnings of an extended check_id openid (request) message, indicating the If the friend's foaffile has an foaf:openid , use it as the identity value in the message; otherwise use Assume a new Openid Auth extension namespace openid.ns.peter, of which the pka extension is comsec Query produces:- openid.ns.peter.pka=http://danbri.org/danbri-pubkey.txt&openid.identity=http://danbri.org/ |
> In version 1.1 of OpenID, which is what is widely deployed today, the
> OP
> wasn't actually ever sent the claimed_id. The thinking behind this was
> that OPs would then be unable to "tell" that they are being delegated
> to, and thus can't make delegation a premium service or whatever.
This comment from a related thread strongly suggests that there was an explicit design intent to create a bias against certain commercialization practices.
Meritocracy also obviously lies at the heart of the OpenID community. And, meritocracy is of course a well established means for executing a political agenda (e.g. a praxis of "anti commercialization" aimed at certain forms of identity management).
Perhaps this kind of intent needs -- and these underlying agendas need -- to be much more obvious in the marketing of the OpenID Foundation. The meaning of the OpenID Trademark may need to more clearly associated with such goals, in the mind of the average user. If the OpenID Auth 2.0 design cell decided, for example, to liberalize inherited proscriptions against certain commercializations, we the plebs need to know clearly this shift of intent occurred, for example. We cannot be expected to infer it from an engineering spec.
Once again, Peter the pleb finds no flaw in pursuing a social agenda by meritocracy politics, so long as it's mostly overt. But, the engineering specs today bear little rationale material - material that succinctly characterizes why the mechanisms are constructed so as to realize the particular set of (social/political) goals. This makes it hard to perform an analysis of the strength of the security services and hard to outline their impact.
----------
Now, playing devil's advocate:-
Would it be appropriate to characterize "OpenID" -- the movement -- in the same terms as the early-phase PGP movement? That is, its anti-RSA, anti-USG, freedom from Russian apparatchiks..., long live crypto anarchism, liberty for the web, Richard Stallman is only ever left?
If the overriding goal is to use counter-culture adoption dynamics (from the blogworld) to "let crypto be free", or "be free from CALEA spying by VOIP companies (outsourced to VeriSign)", "ensure no one can make money from offering id mgt services" ....then can we please make this more clear - in the marketing material issue by the OpenID Foundation?
If I was supposed to immediately associate the OpenID Foundation and the term OpenID with crypto-anarchism, then I didn’t get it! The clear association with blogging did raise my suspicions, early on, tho.
If it is anarchistic in spirit, then the anarchist community would need counter-assurance, given corporations like Microsoft and VeriSign are now highly lauded for their involvement in OpenID. Partly by my design, VeriSign is a company that commercially exploits a TTP brand that sells assurance of trust. Without my involvement, the business of trust marketing later evolved to mean that your certificate fee subsidizes the operation of the infrastructure for spying on your secure communications (as and when necessary, as decided by in secret by folks selected using much the same kind of meritocracy criteria that probably orchestrate the OpenID design cell).
I'd be a bit surprised if a fundamentally crypto-anarchist OpenID brand (if it is indeed crypto-anarchist in nature) would countenance associating with the particular political balance built into the modern VeriSign brand - a crafted balance between privacy and spying that allows strong consumer crypto to be determined as a "trustworthy" and "responsible" use of what was only 10 years ago a proscribed (military) munition
|
|