- From: Manu Sporny <msporny@digitalbazaar.com>
- Date: Thu, 14 Dec 2017 01:14:35 -0500
- To: public-credentials@w3.org
On 12/13/2017 11:57 PM, Manu Sporny wrote:
> In the next email I'll try addressing the discussion from the other
> way (bottom up instead of top down). Maybe once we meet in the middle
> we'll figure out a clear path forward.
We have three proposals, as far as I understand it, for doing "key
management" in a DID Document.
Option #1: Keys
This mechanism puts anything that could be considered a "key" into the
"keys" bucket in the document:
Pros:
* One place to put all keys in the document
* Enables interop
Cons:
* Developer may not understand which key is for what purpose and what
application (non-trivial security vulnerability via bad
implementation risk)
* Not broad enough. Are biometrics a key? what about a
username/password hash? two factor sharded secret? All of these
could be used for authentication, do they go in the keys field?
{
"keys": [ ... every key, biometric, etc. goes here ...]
}
Option #2: Authentication Material
Pros:
* Narrowly focuses on data used for authentication use cases
* Application of key material is clear and far more difficult to
mis-implement than Option #1
* Enables interop
Cons:
* Requires further discussions on things like encryption keys and
other use cases.
{
"authenticationMaterial": [ ... every authentication key here ...]
}
Option #3: DID Method Picks
Pros:
* UNSTANDARDIZED is a DID method specific term... some may choose
"keys", others may choose "authenticationMaterial", etc.
Cons:
* No cross-ledger interoperability for anything key related
{
"UNSTANDARDIZED": [ ... keys descriptions are standardized ... ]
}
I think that's fundamentally what we're trying to figure out.
The rest, which is a key's purpose and type are things that we agree on
in principle, but not necessarily on the specifics. I think Drummond
would like to combine key type+purpose+application like so (correct me
if I'm wrong, Drummond):
Option #A: Everything in Type
"type": "VerifiableCredentialsIssuerSigningRsaCryptographicKey"
others think this may be best:
Option #B: Deconstructed Application and Purpose
{
"type": "RsaCryptographicKey",
"application": "VerifiableCredentialsIssuer",
"purpose": "Signing",
"publicKeyPem": "...................."
}
Option #C: Application via Relation
{
"issuerMaterial": {
"type": "RsaCryptographicKey",
"purpose": "Signing",
"publicKeyPem": "...................."
}
}
Hope this helps folks understand the various options under
consideration. Please add/correct if I got something wrong.
-- manu
--
Manu Sporny (skype: msporny, twitter: manusporny, G+: +Manu Sporny)
Founder/CEO - Digital Bazaar, Inc.
blog: The State of W3C Web Payments in 2017
http://manu.sporny.org/2017/w3c-web-payments/
Received on Thursday, 14 December 2017 06:15:06 UTC