Data sharing is one of the Chandler's 'killer' features. Users will be able to share their data with other users worldwide.
While simple to describe, implementation of data sharing is complex. A lot of data sharing's complexity comes from the security requirements. Users want to be sure that their private data remains invisible to the world. At the same time, they do not want to become sysadmins, setting up accounts, passwords, worrying about security. Power users would like features such as delegation/groups that do require some sysadmin-like setup. Sysadmins also worry about implications of their users giving read/write access to their repositories to the world, and need to be assured that Chandlerwill not become the weak link in their security infrastructure.
Before going into details, lets define some termsThe 4 main problems in base sharing architecture are:
There are other minor problems that we need to be aware of, but are not covered in depth for brevity. They are mostly common sense policies:
My favorite problem, it is solved by one word: TLS (aka SSL). TLS will be used to encrypt all data going over the wire: usernames/passwords/repository data. Our repository access protocol, BEEP already supports TLS.
Permissions are stored inside the repository. Each authenticated user has a list of capabilities associated with his account. Users have to be aware of what permissions are they granting and to whom. This is both a user-interface problem, and an database architecture problem. Security group's job will be to mediate the solution. The urrent proposal is for user to share views of the data.
When grantee logs into sharer's repository, how does he prove his identity? We do not assume any pre-existing authentication infrastructure for Canoga. We'd also like to make our design extensible, so that existing authentication infrastructure can be used if exists.
Our authentication requirements are:
No single single solution supports all these requirements. A blend of technologies might. Here are the technologies we will use:
Obfuscated URLs are solution to a single problem:
In Chandler, we'll use obfuscated URLs. When grantee gets notified that he has been given permission, he'll get a URL to use for his first access. This URL is a random string that is imrom possible to guess by an intruder. The first time he accesses the shared repository, the URL will be discarded and fthen on other more sophisticated mechanisms will be used.
Obfuscated URLs are widely used system on the web for subscription confirmation. The web site will often send you a confirmation email with an obfuscated URL that you need to click on before your account is activated.
Obfuscated URL vunerabilities are:
Username/passwords can solve two problems:
The weakness of username/password are well known:
Sharing passwords between accounts is unacceptable in Chandler. This is because if passwords were the same, every sharer grantee has access to would know his password. This problem can be avoided with crypto. Before sending their passwords to the sharer, grantee will encrypt it with unique id belonging to the sharer.
What password encryption id will be is still subject of discussion. The sharer should not be able to spoof another share's id. Some proposals are:
Once deployed, Public Keys solve most authentication problems: they are very secure, and can be used for sharing/delegation. However, the deployment of public keys is their weakness:
To work around these weaknesses, Chandler will perform as much key management as possible automatically, without user's involment. By default, the keys will be exchanged automatically upon connecting to the repository for the first time. If the key is lost or corrupted, the permissions will be reissued.
Data sharing is inherently risky activity. Sharer or grantee could turn malicious, hackers can try to break passwords. We should take reasonable precautions to defend against these attacks:
Other common sense security measures should be implemented:
Every user has a public/private key pair. The key is generated automatically when installing Chandler and stored in the repository. If the key is lost/corrupted, a new key is generated automatically.
For the first time access: Sharer emails grantee an obfuscated URL. Grantee uses the URL to log into sharer's repository. Upon logging in, grantee gives sharer its public key, and picks a password (username is always the email).
For the continuous access: Grantee now has 2 ways to authenticate to sharer's repository: username/pw combo, and the public key. By default, the public key is used. If key is lost, or unavailable, grantee can still use username/pw.
Sharer has the option to disallow username/passwords for security reasons. By doing this, he reduces his risks, but possibly inconveniences the grantee.
Groups is a catch-all name for a set of features relying on groups. What they all have in common is that their foundation is the ability to create groups, and assign people membership in the group. Some userful group features are:
Group is defined by a list of users and groups that belong to it (group members).
Groups will be used for authorization by a sharer. Sharer can give permissions to a group just like he does for users.
For a grantee to be granted access as a member of the group, sharer has to verify that grantee belongs to that group. Establishing grantee's group membership is where things get interesting. Lets start with a walkthrough of a simple case where all information resides in sharer's repository. In a simple case: [insert chart here?]
This simple scenario requires that groups and credentials be stored inside the same repository. This works for simple sharing needs, where sharer both defines the groups, and the permissions.
Sometimes it would be nice to use a group defined by someone else. This feature will be called "public groups". The simple scenario described above will be called "private groups". For example, in a workgroup scenario, we want maintenance of the list of people belonging to a workgroup was centralized. Otherwise, all the members of the workgroup have to maintain their own list of work members, which is error prone and tedious. Just the thing that computers are good at.
Implementing public groups is complicated. The complication stems from the
requirements
How does a sharer verify grantee's group membership?
a) Sharer can maintain a local copy of group membership from the authorative server. This requires solving the mapping of group records to sharer's local records.
b) have grantee present some credentials that authenticate him as a member of the group. Grantee gets these credentials as some crypto magic. 2 ways to do this:
Scheme b) also allows grantee anonymous access. The grantee only presents the ticket, which cannot be traced to him personally, but only identifies him as a member of a group.
For Canoga, we'll implement private groups and public groups. The groups can be nested.
Private groups will be implemented in a simple way described in the technical discussion, just a nested list data structure in a repository.
Public groups authentication will be implemented by presenting permanent group tickets that certify group membership. This will allow us to easily interoperate with systems that grant dynamic tickets. Implementatioin details are:
A group owner creates a group with a public/private key pair.
Group's signature on grantee's key certifies that grantee belongs to a group.
Sharers use group's public key to verify group's signature.
To join a group, grantee gets his key signed by group's private key. Grantee can present a brand new blank key if he would like anonymous membership.
To authenticate to a sharer, grantee presents the key signed by the group.
The group's membership is revoked by publishing revocation lists to all sharers. The publishing and processing of revocation lists should be timely and automatic.s
This approach has some weaknesses:
All sharers are required to timely process revocation lists. Our assumption is that the typical usage case is one where groups are mostly static or growing, with occasional grantee leaving the group.
Grantee needs to have access to his repository to prove group membership. Since Canoga targets users will not have access to central servers, this is a reasonable expectation.
When grantee changes/looses his public/private key, he will have to re-enroll in all groups he belongs to.
Delegation is defined as the ability to give your rights to another person. For example, a professor that was able to change his student's calendars could designate that right to his admin.
Cryptographically, delegation of Chandler's repository can be simply implemented through signatures. In our real-life usage scenarios, the user experience of delegation gets to be complex (deciding what access rights to pass along for calendaring is one example).
For now, we will not be implementing delegation in Canoga.
The certificates issued by Chandler will be anonymous and self-signed. The binding of certificate to a person will be done by the user.
Who is our certificate authority for X509s?
Chandler uses self-signed keys. SDSI/SPKI certificates have authorization information embedded in them. There is no binding to the name. The binding is done by the user. I think we are leaning this way in our usage of 509s.
Ad hoc groups paper: http://research.microsoft.com/users/tuomaura/Publications/maki-aura-hietalahti-nordsec00.pdf