| 1 | = __Identity__ = |
| 2 | |
| 3 | == Why keep the identity and authorization systems separate? == |
| 4 | |
| 5 | ''Ted Faber, 28 Jan 2008'' |
| 6 | |
| 7 | It's less flexible and makes anonymity difficult. |
| 8 | |
| 9 | An identity, to my mind, has 2 simple properties: |
| 10 | |
| 11 | If a principal asserts an identity, anyone in the system can |
| 12 | confirm that directly with the principal. That is, I can prove |
| 13 | that I am who I say I am. |
| 14 | |
| 15 | Each identity maps to one principal, so two elements in the |
| 16 | system with information tied to the same identity are sure it's |
| 17 | information about the same principal. That is, identities are |
| 18 | impossible to forge. (Or impossible to forge with very high |
| 19 | probability). |
| 20 | |
| 21 | That's pretty easy to implement: if a PGP key is an identity we're |
| 22 | already done; set the bit count high enough that collisions are unlikely |
| 23 | to as many nines as you'd like. |
| 24 | |
| 25 | Authorization is built up from statements about those identities that |
| 26 | trusted principals are willing to certify. For example, ISI is willing |
| 27 | to assert that I'm an employee. NSF GENI components may be willing to |
| 28 | grant some resources to any ISI employee. One might be tempted to make |
| 29 | that property (being an employee at ISI) part of my identity, either |
| 30 | explicitly by putting a field into my ID (that is properly signed) or |
| 31 | implicitly by having ISI certify or issue my identity. That binding |
| 32 | creates a typed ID. |
| 33 | |
| 34 | Don't do that. Separate the assertion from the ID. The cost is small - |
| 35 | two pieces of data presented at authorization time rather than one - and |
| 36 | the benefits are enhanced flexibility, not to mention cleanness of |
| 37 | design. |
| 38 | |
| 39 | Separating them can be done by the trusted principal (ISI) signing a |
| 40 | statement asserting a property (this ID represents an employee of ISI) |
| 41 | about my ID. When I come to NSF GENI to get resources I assert my ID |
| 42 | (which I can prove) and present a ISI's declaration, which can be |
| 43 | checked. The validation of these two authorization representations |
| 44 | (typed or untyped ID) is essentially the same - the same players are |
| 45 | contacted and the same trust connections are represented. |
| 46 | |
| 47 | In the simple case the separation and benefits are hard to see; in the |
| 48 | complex cases the separation makes life easier. I'm also (lets say) an |
| 49 | IETF working group chair, which allows me to allocate resources on IETF |
| 50 | GENI (savor that scary combination). If authentication information is |
| 51 | tied to my ID directly, I've either got to get a new ID for my |
| 52 | incarnation as an IETF principal or I've got to decide which of my ID's |
| 53 | is primary and encode the second as a signed assertion. |
| 54 | |
| 55 | These are both bad choices. |
| 56 | |
| 57 | While there's nothing in my formulation of identity that prevents |
| 58 | multiple IDs for the same principal, an authentication/authorization |
| 59 | system that requires it seems ugly. More objectively, it also means |
| 60 | that I need a new ID whenever another principal wants to assert |
| 61 | something about me. More confusingly, component managers may need to |
| 62 | make statements about multiple IDs to state their authorization |
| 63 | requirements even when one principal is involved. (e.g., IETF chairs |
| 64 | who are ISI employees can allocate DETER resources). And when |
| 65 | assertions about an ID change, the ID must be reissued or revoked. |
| 66 | |
| 67 | If I allow signed assertions about identity I have to do all the work of |
| 68 | the untyped IDs and all the problems of needing a new typed ID if my |
| 69 | primary circumstances change. Since all the hard work is done, just |
| 70 | remove the disadvantage. |
| 71 | |
| 72 | If identity and authorization data are kept separate, authorization |
| 73 | information about my ID can change independently of any changes to my ID |
| 74 | and my ID can be long lived and lightweight. |
| 75 | |
| 76 | Should one want to "revoke my ID" (a sign that they're thinking of ID as |
| 77 | a credential (ID card) rather than an intrinsic property (the fellow |
| 78 | with this retina scan)), one simply revokes the relevant authorization |
| 79 | statements. These are roughly the same amount of work (see FN if you |
| 80 | care). |
| 81 | |
| 82 | |
| 83 | I'm arguing that the untyped ID design is more flexible, not more |
| 84 | efficient in terms of checking a given authorization. But the |
| 85 | efficiency loss is pretty minimal. The same trust chains are traversed |
| 86 | and the same proof of ID accomplished. The encoding is just marginally |
| 87 | less optimized. |
| 88 | |
| 89 | Finally, and importantly, keeping ID and authorizarion separate leaves |
| 90 | the door open to real anonymity. As I pointed out, if there's no |
| 91 | assertion of authorization rights tied to the ID, there's no need to |
| 92 | involve another entity in the ID's creation - PGP keys work and can be |
| 93 | generated at will. It's easy to imagine a world in which an ID without |
| 94 | any authorization statements is worthless, but it leaves a door open |
| 95 | that costs little (a door that in fact that improves overall |
| 96 | flexibility) and allows another area of research into GENI. |
| 97 | |
| 98 | (FN: It's exactly the same if you've gone the multiple typed ID route |
| 99 | and either a little easier or a little harder depending on if you're the |
| 100 | primary certifier in the one typed ID case. Each certifier in the |
| 101 | multiple ID route must revoke the ID; the primary certifier can break |
| 102 | the single ID chain, but another certifier can only revoke their |
| 103 | statements until they convince the primary to revoke it all. ) |