Re: Google Docs as capabilities as data
Domenico Rotondi <[email protected]>
| Newsgroups | gmane.comp.capabilities.general |
|---|---|
| Message-ID | <[email protected]> |
On 28 Jan 2014 at 20:22, Marc Stiegler wrote:
Hi all,
within the EU FP7 IoT@Work project (http://www.iot-at-work.eu/) we used
capabilities to manage access to a publish/subscribe service tailored for shop floor
events collection and dispatching.
In our system the both the generation of the access tokens (what you call webkeys)
and capability tokens revocation was completely distributed and managed using
standalaone applications anyone can install and use.
The logic in our system was to have a root capability token for each service/resource
created by the administrator of the service/resource and the existence of a trsut
relationship between the service and its administrator.
Starting from this root capability, the administrator (using the stand alone
application) can generates new capability tokens for other subjects, he/she trusts,
granting all or part of his/her rights (including the right to further delegate the 1+ of
the granted rights).
The generated tokens can be distributed to their owners using any means (even via a
public FPT service, being each token digitally signed and boud to a specific identity).
Each owner of a capability token can further frealy create additional tokens for other
subjects he/she trust granting a subset of the rights he/she owns (of course if his/her
token grants him/her the right to delegate).
There is no need, in our system, to centrally store all capability tokens, even if we are
forced to report in each token its whole authorization chain (i.e. the capability of the
delegator that contains its ancestor capability token, ...).
At the end the application service needs to be aware of a capability only when its is
used to access the service/resource!
For the revocation we used a similar distributed approach by using what we call
revocation requests that are submitted to a specific revocation service (which is
identified within the capability tokens). Each subject can create a revocation request
identifying which capabilities he/she wants to revoke (a revocation can ask to revoke
only capabilities that have as ancestor the capability of the subject signing the
revocation request). Even for the revocations the process is completely distributed
and, apparently uncontrolled, with the only constraint that the revocation must be
submitted to the duly revocation service. This service process the requests and
actually revokes the identified capabilities only if it has all the information to
ascertain the requestor is actually authorize to do so (i.e., the capabilities to be
revoked have the requestor's capability as ancestor).
This approch in our system simplifies the amount of things to be stored on the
service/resource manager side and requires only, or essentially, the ability to check
the correctness of the capability submitted with the service access request (and of its
delegation chain) + asking to the revocation service if the submitted capability is still
valid.
Further details are providing in this paper (on others mentioned in it):
* D. Rotondi, S. Gusmeroli, S. Piccione, “A capability-based security approach to
manage access control in the Internet of Things”, Mathematical and Computer
Modelling Journal, ISSN 0895-7177, 10.1016/j.mcm.2013.02.006
The advantage for us is that we take advantage of the trust relationships among the
subjects, we don't have to explicitly manage trust relationships, we don't need to
have things like federated id management contexts, and that, at the end, we have full
auditability of each access request (thanks to the explicit authorization chain in the
capability token presented with the access reuqest) and we always know who is
accountable for a delegation.
This approach, we know, cannot be useful in every context, but seems to us suitable
in many situations.
BTW the SW is provide as opne source
(http://code.google.com/p/txt-iot-technologies).
Sorry for the length email. Hoping this helps for the discussion.
Ciao
Domenico
I send the below info from my hp email address, and apparently that email address is blocked from
the list. So here it is again:
The UI would be indistinguishable for the recipients of delegation: in the current system, the
general way people receive access is to get a clickable webkey in an email. In the upgraded
system, people would get a clickable webkey in an email. No change.
For the senders of a delegation, the sending would also be similar: in PubShare, you type in
the email address for a recipient (or pick from a list) and click Send. This is one of the
choices in the Docs UI today (though not presented as well as I think it could be). The real
noticeable difference would be in the revocation. Currently there is a button for “revoke
everyone”. This would be replaced with a list of names, each of whom had a separate revoke
button. I think this UI would be more pleasant because it would be less scary: from personal
experience, when you “revoke everyone”, you are left with a nagging suspicion that there is
someone you wish you could leave alone, if only you could remember who you sent it to.
Very scary. Presenting the list of users eliminates the uncertainty, which is a big payoff for
using a little more screen real estate. Again, you can see this in the PubShare video on
YouTube.
--marcs
On Mon, Jan 27, 2014 at 4:09 PM, Dirk Pranke <[email protected]> wrote:
On Mon, Jan 27, 2014 at 3:11 PM, Stiegler, Marc < [email protected]>
wrote:
Jed,
First, I am delighted that you found the Docs ocaps links useful. It’s nice when
occasionally the tech one talks about actually demonstrates its worth J
Kenton has laid out the issues at great length with Docs ocaps, the reasons they
disappoint me. I will just call out one highlight. The thing that most amazes me
about the Docs ocaps, and the ocaps in the other products floating around (and
there are a bunch of them now) is that you have no way of remembering who all
you sent the link to, much less a way of revoking one person without revoking
everyone. Such an ability to see the list of authorized people and to revoke them
individually is recognized as so fundamental, no one would consider shipping an
ACL system without it. Upgrading the ocaps in Docs so that everyone gets their
own webkey and they can be revoked separately should not be very difficult; I
did a very fancy version for PubShare (you can watch the video on YouTube),
and even the fancy version was not very difficult.
Perhaps this is because once you actually have to add the UI to manage
revocation (and the UI to manage individuals, groups, and all that other fun
stuff), the advantages of webkeys (and other easily transferable caps) don't
seem to great (at least from a user experience point of view)?
-- Dirk
--marcs
From: [email protected] [mailto:[email protected]]
On Behalf Of Kenton Varda
Sent: Monday, January 27, 2014 1:25 PM
To: General discussions concerning capability systems.
Subject: Re: [cap-talk] Google Docs as capabilities as data
Google Docs has supported "share-by-link" basically since its inception. I
spent some time on the "sharing team" that owned this, although this
functionality existed before I joined. AFAIK, the people who devised it
didn't know anything about capabilities and essentially re-invented a weak
variant of them by accident.
The approach works reasonably well and is popular. However, compared
to a "real" capability-based sharing model, Docs is hamstrung by the fact
that there is no way to have multiple URLs pointing to the same
underlying document. At the owner's choice, knowing the URL grants
edit, comment, or view rights. You can't create one URL for edit rights
and another that is read-only. In fact, once you've assigned edit rights to
the URL, it is impossible to share the document read-only with anyone,
even explicitly by identity, because in order to open the document they
must visit the URL, and they therefore get whatever access the URL
grants. You also can't change the URL if it leaks (although you can
always create a new copy of the document).
Of course, this also means you cannot create different URLs for different
recipients. So, you have no way to distinguish the people you share with.
In fact, Google login doesn't even save you here. Even if the users who
access your link are logged in, you don't get to see their identities in
Google Docs unless you have explicitly added them to the ACL (or, for
enterprise users, if they are part of your organization). The reason is that
otherwise it would be too easy to harvest someone's Google identity by
tricking them into clicking on a link back to your doc.
The consequence of this is that share-by-link is seen as "somewhat
insecure", only suitable for medium-sensitivity documents. Some Google
security people (or engineers who fancy themselves as security people)
would like to see this mode eliminated. Fortunately, it is far too popular
among users for that to happen. (Although from what I hear, the usage is
bi-modal -- some users "get it" and use share-by-link for everything,
others don't get it and avoid it.)
There is a general assumption that this is just the way things are -- that
there's no way to make share-by-link more accountable. I spent a few
years trying to convince people that we could do better, but people
generally aren't that interested in listening because this isn't perceived as a
pressing issue. To be honest, given that they had already developed a
fairly convoluted identity-based security model that could cover most use
cases, it's hard to make an argument that developing a stronger
capability-based sharing model would be worth the investment for Docs.
Interestingly, there is a second form of accidental capabilities in the Docs
sharing model that most people (even at Google) don't know about: if you
go into the sharing dialog and enter an e-mail address that is not
connected to any Google account, an e-mail will be sent to that address
containing a secret URL known as an "invite token". Each address you
enter receives a different token. When the recipient uses the token, they
are prompted to log in with their Google account and to reveal their
identity to the sender. If they choose to do so, then their Google identity
is added to the ACL and annotated to indicate the e-mail address to which
the original invite was sent. In order to support mailing lists, a single
invite token can be exercised multiple times to add multiple identities to
the ACL.
Sadly, the only way to create an invite token is by having it sent to
someone. You can't generate an invite token with an arbitrary petname
and then copy/paste the URL into an IRC session. I suppose you could set
up a non-Google e-mail address to represent the person, have an invite
sent to that address, then go retrieve the e-mail yourself and copy/paste
the URL... but that's convoluted, and they still have to log in with a real
Google account before they can access your doc.
Google is not the only company to implement capabilities as data. The
approach is popular among startups trying to be "viral" because it makes
sharing so easy. Etherpad -- and derivatives like Hackpad -- use
share-by-link as the only access control mechanism. But generally they
have the same problems as the Google approach -- there is only one secret
URL per document.
In any case, yes, capabilities-as-data are widely used and popular on the
net today. However, the implementation is not usually strong enough to
replace identity-based sharing, and there is resistance to making it any
stronger as most developers still don't "get" capabilities.
-Kenton
On Sun, Jan 26, 2014 at 7:41 PM, Jed Donnelley
<capability-iCFHVraI1K1Wk0Htik3J/[email protected]> wrote:
Cap-talk,
Isn't:
https://docs.google.com/document/d/10-qbHlInBNtlK3S9awzSTUbKyIk
DZxEEr3sgD2VIgaY/edit?usp=sharing
effectively a capability as data? The above is shared using the Google
Docs mechanism that allows anybody with access to the above string to
access the document.
I looked back through the cap-talk discussion to try to find relevant
references for such sharing. Here's what I found
On 1/8/2012 9:41 AM, Stiegler, Marc D wrote:
> Google Docs demonstrates that security geeks can screw up the ui just
as effectively with ocaps.
What did you mean by the above Marc?
To me it seems that this capability as data sharing via Google Docs is
to OCAPs something like the Web is to Xanadu. Namely, it is about as
much as one can do technically to effectively get the functionality of
capabilities on an Internet scale.
I had a delightful experience this evening with my daughter (who's at
Yale working on a proposal for work next year), her college roommate,
my
wife and myself where we were all simultaneously editing a proposal that
was a Google Doc shared as above. We had a Skype voice line also open
for high level communication and task assignment, but most of the work
was accomplished silently. We were all able to see what the others were
doing on our shared document.
On 1/4/2012 9:53 AM, Marc Stiegler wrote:
> Google also offers unguessable urls as an access control choice for
> Google Docs.
Right. It seems to me to work well. Where are the problems?
Also from the above:
> Anyway, using unguessable urls of the type used by Google and CACM
and
> IEEE, you could rest easy knowing that you were not using modern
> waterken-style webkeys, which have the public key fingerprint in the
> domain name. That would be a nonstandard and radical leap toward a
> better future. Don't do that.
Is that practical at this time? Does it add sufficient value to be
worthwhile?
On 1/5/2012 11:30 AM, Stiegler, Marc D wrote:
> The Google Docs implementation of unguessable urls is comically
> primitive. It is a good example of how to do 80% of the work and get
> 10% of the value.
I'm not bothered by this. It seems to me the user interface (sharing
strings of URL .data as capabilities) and the essential value don't need
to change. If there are technical improvements that can happen behind
the scenes, go for it. Perhaps they will happen in response to security
breeches?
I'd be happy to see additional features for documents that can be
revoked and/or otherwise attenuated, but I'm not sure that such would
provide sufficient value to justify the additional complexity to the
user interface. After all, one can always create a copy of the object
and re share it to a smaller community - for objects that are
documents. More general types of objects may require more serious
protection.
Has there been more discussion of such URLs as capabilities that I've
missed? I saw Waterken mentioned at some points in this discussion, but
I'm not clear what it contributes at this point. Can someone enlighten me?
I'm delighted to see the progress that's been made in this space. To me
it looks like capabilities as data is now an effective Internet
reality. To me this beats the hell out of having all sorts of separate
environments for logins with separate sharing via ACLs, etc.
Maybe a next step (perhaps already implemented?) would be to use
something like an svn back end for any such files, with a "blame"
mechanism for every identity, etc.? Horton for responsibility tracking?
There is of course much work to be done and improvements to be made,
but
to me this appears to be serious progress.
Woo hoo!
--Jed
_______________________________________________
cap-talk mailing list
[email protected]
http://www.eros-os.org/mailman/listinfo/cap-talk
_______________________________________________
cap-talk mailing list
[email protected]
http://www.eros-os.org/mailman/listinfo/cap-talk
_______________________________________________
cap-talk mailing list
[email protected]
http://www.eros-os.org/mailman/listinfo/cap-talk
_______________________________________________
cap-talk mailing list
[email protected]
http://www.eros-os.org/mailman/listinfo/cap-talk