CloudStorage.html
23.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Socially aware cloud storage - Design Issues</title>
<link rel="Stylesheet" href="di.css" type="text/css" />
</head>
<body>
<address>
Tim Berners-Lee<br />
Date: 2009-08-17, last change: $Date: 2011/09/27 22:31:21 $<br />
Status: personal view only. Editing status: Rough draft.
</address>
<p><a href="./">Up to Design Issues</a></p>
<hr />
<h1>Socially Aware Cloud Storage</h1>
<p class="abstract">There is an architecture in which a few existing or Web
protocols are gathered together with some glue to make a world wide system in
which applications (desktop or Web Application) can work on top of a layer of
commodity read-write storage. Crucial design issues are that principals
(users) and groups are identifies by URIs, and so are global in scope, and
that elements of storage are access controlled using those global
identifiers. The result is that storage becomes a commodity, independent of
the application running on it.</p>
<h3>Introduction: Current (2009) Web 2.0 AJAX architecture</h3>
<p><img style="width: 25em; padding-left: 1em" align="right"
src="diagrams/social/simondseconoart-small.png"
alt="Silos - people trying to communicate despite them" /></p>
<p>Current Web Applications typically are based on a web site. The web site
stores the state of the system, and javascript programs within web pages.
Users typically have an identity on the site, and the site manages access to
information about them and about others with some flexibility, typically
based on different types of information, and different groups of people.</p>
<p>The applications are made much more usable by the fact that much of the
functionality of the web side runs in client-side javascript: inside the
browser*. To write a new application, therefore, one needs to write
javascript, write a server, and allow the two to communicate. There various
patterns for communication between web page and its back end. However, the
javascript of the web site is is the only thing which accesses the user's
data stored on that site. Indeed, for security purposes, scripts from other
sites are deliberately prevented from accessing it.</p>
<h3>Social Network Site Silos</h3>
<p>A well-documented frustration with Social Network Sites (SNS's) is, in
2009, the fact that each site stores the user's data in a silo.</p>
<p>The user is not in control of his or her data.</p>
<p>There are often APIs, but each SNS typically has different types of data
and therefore different APIs.</p>
<p>Because the functionality of an application (such as looking at photos) is
on a given web site, when the user wants to use that application to access
photos on another site, the first site must get access to the second site on
the user's behalf. This is a more complex form of authentication, and is
subject to "confused deputy" attacks.</p>
<p><img style="width: 30em; padding-right:1em" src="diagrams/social/closed.png"
alt="closed silos" align="left" /></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p>The typical web 2.0 architecture is that the information, typically
user-generated content, is stored and used within the site. There is a
significant loss of functionality from the fact that the data is not easily
reusable outside the site, and that when access to the data is controlled, it
is controlled in terms of the user-names on that site.</p>
<p>Systems such as OAuth[@@] tackle this issue by allowing users to make
individual connections from one social networking site to another,
specifically allowing an application one site to access specific data, such
as a list of friends. This is however a clumsy in some ways, and it does
require that the application web site which gets the data be completely
trusted.</p>
<h3>Separate the Applications from Storage</h3>
<p>Imagine then that users everywhere have bought or been given some of this
storage. Imagine that as students at MIT have for years had access to
<i>Athena</i> services, including disk space and now web space, so some and
maybe all of this web space is controlled under this WebID and group system.
This socially-aware storage then becomes a commodity.</p>
<p>This then allows a market in independently written applications. Free apps
can be freely distributed to the extent they are trusted. Various ways exist
of charging for apps, but the market is decentralized as anyone can write and
sell one.</p>
<p>The application is locally resident on the user's machine: installed on
the phone, the desktop, perhaps managed by the user's web browser. When an
App runs, it runs in the user-controlled environment. It can access the
user's remote data by using the user's credentials. This of course allows as
bad app to do bad things. However, because the data is stored in a storage
the user controls, the risk of information misuse by those that run
unscrupulous web sites is reduced.</p>
<p>Why is it valuable to separate the Apps from the data?</p>
<ol>
<li>It allows the user to control access to their data, whatever
applications they use</li>
<li>It allows the data from various applications to be cross-linked, at
great derived extra value, breaking down the silos described above.</li>
<li>It allows innovation in the market for applications, because the bar
far launching an app is far lower, as the app can run in he open data
cloud.</li>
<li>The persistence of applications and data may be very different. In some
cases a well-established application which people have grown very familiar
with may be used to make an online discussion which is ephemeral, in
another case an application may be developed to solve a short term
problem in an enterprise where the life of the data exceeds that of any
of the applications the enterprise uses. By decoupling the application
and data, these persistences can be managed independently.</li>
</ol>
<p>This note describes a way of re-architecting social web applications so
the application is run by the user, and trusted by the user, and works by
accessing data on many sites on the user's behalf.</p>
<p>A key benefit is that anyone creative can make an app and sell it (like
the 2009 iPhone app market but open), as new apps can create and control
access to data resources in the existing storage cloud. This separates the
market for storage from the market for applications, which one can expect to
be stimulative to both markets. Just as the internet provides connectivity as
a commodity independent of applications, and that allows network applications
to be sold without each one having to build a new network stack or install a
new network for the user.</p>
<h2>Distributed Application Architecture</h2>
<p>This design connects up together a number of existing protocols.</p>
<ol>
<li>URIs are used as names for users, groups, and documents</li>
<li>WebIDs (a.k.a. FOAF+SSL) is the simple single-signon system which binds
a user to a given person URI in the web. Other Single Sign On systems
such as OpenId, etc can also be connected.</li>
<li>A simple RDF ontology allows the URI of a group to be looked up to
return a list of group members.</li>
<li>A new simple ontology of terms allows the access control lists</li>
<li>HTTP is used for data access</li>
<li>WebDav is used for creating and re-writing data files</li>
<li>SPARQL-Update is used to convey small changes to a large resources</li>
</ol>
<p><img style="width: 25em" src="diagrams/social/open.png"
alt="interconnected social network data" /></p>
<p>A requirement then is that the system should be able to produce the same
functionality as the old silos of site-anchored web applications.</p>
<p>Of course the SNS business model in part rests on the ability of the SNS
company, rather than the user, to control the data. The SNS site sells ads,
because it forces the user to use its web site to access her data. It can
also sell her data, index it, generate profiles of her, and so on. However,
there are other business models, and other ways of getting people to come to
your site than hoarding their data.</p>
<h3>Linked Data</h3>
<p>The <a href="Linked%20Data.html">Linked Data article</a> gave simple rules
for putting data on the web so that it is linked. Then, <a
href="ReadWriteLinkedData.html">"Read-Write Linked Data"</a> follows on from
that to discuss allowing applications to write as well as read data. This
note adds decentralized access control of reading and
of writing to linked data.
</p><p>
This can be called "socially-aware" storage, because the access control
within the storage layer is just powerful enough to implement the social
requirements of the social network applications.
(In the current model proves insufficiently powerful to do this,
then it could be enhanced by adding more inference to the ACL
system, and more expressivity to the ACL -- or rather policy language --
used to express the social constraints).
The overall goal is one in which storage with the
necessary functionality is a ubiquitous commodity, and application growth
becomes dramatic as the provision of storage is decoupled from the design and
deployment of applications.</p>
<h2>Example sequence</h2>
<p>In summary, for a simple initial design,</p>
<ol>
<li>Users are given, instead of a username at each SNS, a single URI, or in
fact one for each persona they want to have. (Ideally, this is a WebId,
which cross-links an RDF profile and a local client-side certificate,
but an OpenID could be used and linked in
as OpenIds are already deployed to a certain extent. There is
discussion of various other schemes.
There is [2010] future standardization work
to be done here.</li>
<li>Groups are also given a URI. This is an Linked Data identifier which,
when you look it up returns a list of the WebIds of people in the group.
Group list can be stored anywhere. Group list can be virtual -- generated
as an automated export of another system on demand in the HTP server.
Group lists can be access controlled like other data.</li>
<li>Access control files are files which contain access control information
about one or more resources on the web.
<ul>
<li>Access control files are linked data.</li>
<li>Access to ACFs for a resource is not recursively given by an ACF
for the ACF: instead, one must have "Control" access to the original
resource.</li>
<li>An ontology for access control exists.
<pre> @prefix acl: <<a href="http://www.w3.org/ns/auth/acl">http://www.w3.org/ns/auth/acl</a>>.</pre>
</li>
<li>Access control files can be edited just as other writable linked
data @@link.</li>
<li>Access control files for a resource are discovered by a client
using the HTTP link header.</li>
</ul>
</li>
<li>When a resource is accessed,
<ol>
<li>the server reads the ACF (or consults a cache.) If the ACF gives
public access to the operation required, the server allows the
access.</li>
<li>It puts the client through an foaf+ssl challenge if it is not
already authenticated.</li>
<li>If access is allowed to some but it is not obvious whether the
current requester is allowed, the URIs in the ACL are dereferenced,
if necessary recursively. For example a class mentioned is
dereferenced it will typically return a list of members of the
class.</li>
</ol>
</li>
</ol>
<!-- Note that the image contains text and so must be scaled with text so as to be legible.-->
<p>A design issue is how much inference the ACL system is expected to do.
For example, is it enough to in the file returned for a class, to just
return information that the class is a superset of some other classes,
allowing the ACL system to in turn look those classes up.</p>
<p>(Note that the information returned by looking up the user's webID is
<b>not</b> trusted for access control purposes. Links are only followed
out from the ACL. The server operator can also provide the server with
other trusted information to include in the search for a reason to give
the requester the access. Eventually, something else will be found which
points to <b>it</b>)</p>
<p style="text-align: center"><img style="width:40em"
src="diagrams/cloud/read-write-acl-cloud-data.png"
alt="Clients access data though ACL systems - (SVG diagram)" /></p>
<p>The effect of this design is then a user can run a program to set aside
storage for particular purposes, and control who has what sort of access to
it. The storage can br provided by any organization, but the interface, the
control over its access, and the set of applications which can run on it,
will be the same. The functionality is very similar to that of the filesystem
on multiuser unix machine, but webized, so it becomes a decentralized global
system.</p>
<h3>Analogy: Webizing file systems</h3>
<p>Another article in this series describes the processing of <a
href="Webizing">Webizing</a> a technology. This involves taking the
system-wide identifiers and replacing them in the design with URIs. This
sometimes makes an interesting decentralized system. In this case, the web
storage proposed is quite like the result of webizing the unix file system. A
unix file system controls access to files using the short string user names
(or numbers) and short string group names (or numbers). These identifiers are
system-wide: although there are certain conventions, in general user names
and numbers on one system are not related to those on another system. The
HTTP protocol allows us already to webize the files: now let us see what
happens if we webize the access control lists.</p>
<p>Many interesting and powerful systems have of course already been built in
this space. The AFS system using Kerberos principals is one. Systems such as
OpenId have also been built for single log-on with URIs as user
identifiers.</p>
<p></p>
<h2 id="related">Related Issues</h2>
<p>This new global computing environment answers some simple old questions,
and opens a lot more, some old, some new.
Here I simply flag some of them at a high level.
Some of them may become the subject of future articles.
</p>
<h3>Application conventions</h3>
<p>As in a unix-like file system, in a global access-controlled storage
space, an application must be able to find a place (generate a URI) at which
to store data of various sorts -- secret data, data shared with certain
others, public data. This is the same problem that has been tacked by
operating system designers over that 40 years. One method for this is that a
user's secret data contain a template for any given application to construct
such URIs. Experience suggests that it is valuable:</p>
<ul>
<li>For a user to be able to delete all data written by a given
application</li>
<li>To be able to protect data by one application from data by another
application</li>
<li>For a user to be able to view and control how much resource (storage,
but also possibly CPU) are allocated to a given application.</li>
</ul>
and so on.
<h3 id="reverse">Reverse Links</h3>
<p>In a centralized SNS, when a semantic link is made,
all related parties are easily informed.
When A notes that a picture P taken by B depicts person C,
then B and C can be immediately notified.
Because there can be site-wide indexes,
it is easy to ask "Which pictures did I take",
"Which picture am I in", and "Which pictures did I annotate"
just a easily as "Who took/is in/annotated this picture?".
The links can all run back wards as well as forwards.
(There is a certain analogy with some pre-web hypertext systems)
</p>
<p>In a decentralized system, this is not immediately the case.
On the web, there are two typical solutions.
One is that a central third party crawls the whole web and forms an Index,
just as search engines do of text.
(There is, for example, a reverse index of FOAF built by QDOS.com site).
A second method is that whenever a reader traverses a link, there is
an indication of the source of the link sent t the destination.
This happens with HTTP via the "Referer" field. In this way
an incomplete but useful set of back-links can be built up on the destination side.
A third method, that proposed here, if that when the links is made, the
destination site is notified in real time.
</p>
<h3 id="notification">Notification</h3>
<p>Curiously, there have historically been
many waves of excitement about streamds of
real-time notification, or "push".
In the end after many waves we are left with a situation in which RSS and tom
feeds are generally pulled, not pushed.
General notification systems require some sort of publish/subscribe (pub/sub) system.
Examples of pub/sub protocols are jabber and
<a href="http://code.google.com/p/pubsubhubbub/">pubsubhubbub</a>.
These are protocols added to the generally pull-oriented web of information.
In the case of an application built on a substrate of read-write data,
a notification can be made by writing into a bit of data which
a given agent is sensitive to.
If I want to say that I want to be your friend, for example,
I could write that as a simple one-line statement into a "friend requests"
file which you allow me write access to. In fact, I only need append access,
and not even
read or general write access to that list.
A generalization of that is the "dropbox" system used in shared file systems,
in which you make available at a well known address
(typically, a well-known URI, but better, it is linked from your profile)
the URI of a general drop-box file for incoming requests of any kind.
Protecting a drop-box against spam may become an important part of the design.
There is a value in having a drop-box open for any form of input, as it allows new applications
to be created and implemented with full notification.
There is security in allowing only predefined forms of notification.
A pub/sub system is very constraining in that the receiver has to explicitly sign
up for a given well defined source of notifications.
In a spam-world this may be safe but unexciting to new application developers.
</p>
<h3>Protocol constraint</h3>
<p>
There are several models for the security of the system.
What its it prevens attacks such as, for example,
the disclosure of confidential data, or the filling up of one's
data resources with spam? there are several security models,
and as the socially aware cloud wil be used in many diffent types
of scenario, many different models will be used.
</p><p>
One mode is that only trustd users have acces to files,
and they only use trusted software to manipulate them.
This is is similar to the model for much desktop software.
Another model is that a resource such as a drop-box is
opened for apped by the general public,
but there are only very specific manipulations which can be done.
There is some form of RDF message schema used, maybe in connection
with a workflow system.
When this happens, there is a strong relationship between a
conventional API defiition and the set of operations
which are allowed in the linked data.
A difference is that when constraints are specified
on a linked data operation, the semantics of the operation
are already defined by the semantics ofthe linked data,
wheras that information is not normally available in a conventional API
specification.
The <a href="PaperTrail.html">Paper Trail</a> ideas may apply here.
</p><p>
There are probably many other models, and we can expect them to be
elaborated with time.
</p>
<h3>Third part website access</h3>
<p>A separate issue, not mentioned here, is the question of access to the
data on a user's behalf by a third site. This (which is the design target for
example of OAuth) can be easily fitted into the scheme naively, but perhaps to
be effective it needs a stronger concept of acceptable uses for information.
It is enough to add the identity of a third party web site to the ACL, or it
necessary to add defined classes of use?</p>
<h3 id="provenance">Provenance tracking</h3>
<p>The tracking of provenance of information and its modification history is
a very important feature. Access Control at the resource (data file or graph)
level requires data to be segmented thoughtfully into different resources.
When there write access by many agents,
different bits of data in the same file may have very different
provanance. Many data stores do track this. RDF "Triple stores" are
often in reality Quad stores (Subject, Predicate, Object, Provenance).
Discusion of provenance is
beyond the scope of this article.</p>
<h2>Conclusion</h2>
<p>
This is an exciting infrastructure for deparating the
provision of commodity data storage from a world
of social applications which use it.
It has already (2010) been prototyped on the client side
in both a set of panes for the tabulator generic data browser
and in a widget set
</p>
<hr />
<h3><!--
<h2>To Be Continued...</h2>
<p>Application design. Workspaces</p>
<p>Provenance</p>
<p>Notification and Drop boxes</p>
<p>Protocol constraints</p>
<p>Limitations</p>
<p>- reverse links and central indexes.</p>
-->
</h3>
<h2>Footnotes</h2>
<p>* The client doesn't have to run in Javascript in a web browser. That is a
good initial case to explore, but it could also be a desktop app, phone app,
etc. There are interesting questions about where these different siuations
merge and overlap.</p>
<h2 id="references">References</h2>
<p>Richard MacManus, <a href="http://www.readwriteweb.com/"><em>Read-Write Web</em></a>, a blog</p>
<p>RDFAC: James Hollenbach, Joe Presbrey, Tim Berners-Lee, 2009, <a
href="http://dig.csail.mit.edu/2009/Papers/ISWC/rdf-access-control/paper.pdf">
<em>Using RDF Metadata To Enable Access Control on the Social Semantic Web</em></a>
ISWC 2009</p>
<p>Berners-Lee, T., Hollenbach, J., Lu, K., Presbrey, J., Pru d'ommeaux, E. and schraefel, m. c. , <a href="http://eprints.ecs.soton.ac.uk/14773/1/tabulatorWritingTechRep.pdf">
<em>Tabulator Redux: Writing Into the Semantic Web</em></a>, unpublished, 2007.
<a href="http://eprints.ecs.soton.ac.uk/14773/">[eprints]</a></p>
<p>Berners-Lee et. al., <a href="http://swui.semanticweb.org/swui06/papers/Berners-Lee/Berners-Lee.pdf">
<em>Tabulator: Exploring and Analyzing linked data on the Semantic Web</em></a>,
Procedings of the <a href="http://swui.semanticweb.org/swui06">The 3rd International Semantic Web User Interaction Workshop (SWUI06)</a> Athens, Georgia, 6 Nov 2006.</p>
<p>ESW Wiki, <a href="http://esw.w3.org/WebID"><em>A Web ID</em></a>
A wiki source page for the WebID system which combined RDF IDs for people with
browser-side certificates.
</p>
<p>The Open ID Foundation, 2007-12-05,<a href="http://openid.net/specs/openid-authentication-2_0.html">
<em>OpedID Authentication 2.0-Final</em></a>
</p>
<p>James Hollenbach, 2010-05, "@@", Thesis in Master of Engineering at MIT</p>
<ol>
<li>Linked Data, In this series</li>
<li>RDF Diff, In this series</li>
<li>The economost article the picture was with</li>
<li>openid</li>
<li>webid</li>
</ol>
<h2>Followup</h2>
<p>
<a href="http://www.w3.org/wiki/WebAccessControl"><b>Web Access Control</b></a>
Documentation on the W3C wiki.</p>
<p>On the frustrations of lack of portability:<br />
Vidoes: DataPortability, 2008-01-15, <a
href="http://vimeo.com/610179">Connect, Control, Share,
Remix</a>.<br />
djayers, 2008-03-28, <a href="http://www.youtube.com/watch?v=6eGcsGPgUTw">Get
your Dat Out</a>.<br />
The dataportability.org group are not currently, AFAICT, using linked data
standards.
</p>
<p>
Diaspora Project, 2010, Video:
<a href="http://www.kickstarter.com/projects/196017994/diaspora-the-personally-controlled-do-it-all-distr">
Decentralize the web with Diaspora</a> contains a rant about the current (2010)
situation. The project plans to implement a secure distributed sytem involving
personal servers.
</p>
<h3>Sofware</h3>
<a href="http://en.wikipedia.org/wiki/SWObjects">SWObjects</a>
and <a href="http://sourceforge.net/projects/swobjects/">on sourceforge</a>.
<h2>Related</h2>
<hr />
<p><a href="Overview.html">Up to Design Issues</a></p>
<p><a href="../People/Berners-Lee">Tim BL</a></p>
</body>
</html>