- From: Melvin Carvalho <melvincarvalho@gmail.com>
- Date: Sun, 17 Jan 2016 23:54:11 +0100
- To: Henry Story <henry.story@bblfish.net>
- Cc: Web Payments <public-webpayments@w3.org>
- Message-ID: <CAKaEYhL1fYi24jgL6-bhCM7h1HqOWCs4dOa9kJMN+RSQkm6mkg@mail.gmail.com>
On 17 January 2016 at 23:47, Henry Story <henry.story@bblfish.net> wrote:
>
> On 17 Jan 2016, at 22:27, Melvin Carvalho <melvincarvalho@gmail.com>
> wrote:
>
>
>
> On 17 January 2016 at 22:44, Henry Story <henry.story@bblfish.net> wrote:
>
>>
>> On 17 Jan 2016, at 20:38, Melvin Carvalho <melvincarvalho@gmail.com>
>> wrote:
>>
>>
>>
>> On 17 January 2016 at 13:55, Henry Story <henry.story@bblfish.net> wrote:
>>
>>> I was looking at the Linked Data Signatures document
>>>
>>> https://web-payments.org/specs/source/ld-signatures/
>>>
>>> I am not sure if this is the right list to discuss this.
>>>
>>> I am really keen to have something like this to work, and I like
>>> most of it off the bat. But looking a bit closer I noticed what
>>> I think is a serious error that has an easy fix though.
>>>
>>> The mistake is to put the signature *inside* the graph.
>>> Take example 1:
>>>
>>> {
>>> "@context": "https://w3id.org/identity/v1",
>>> "title": "Hello World!",
>>> "signature": {
>>> "type": "LinkedDataSignature2015",
>>> "creator": "http://example.com/i/pat/keys/5",
>>> "created": "2011-09-23T20:21:34Z",
>>> "domain": "example.org",
>>> "nonce": "2bbgh3dgjg2302d-d2b3gi423d42",
>>> "signatureValue":
>>> "OGQzNGVkMzVm4NTIyZTkZDYMmMzQzNmExMgoYzI43Q3ODIyOWM32NjI="
>>> }
>>> }
>>>
>>> In short: Signatures should be external to the graph, since that is the
>>> object
>>> of the signature. By placing it inside the graph as above the problem is
>>>
>>> 1. the algorithm needs to remove elements from the signed graph
>>> 2. The algorithm won't be able to cope with alignement of ontologies
>>> such as
>>> a different relation being discovered to be owl:sameAs the :signature
>>> relation above. If another such widely used vocabulary is found, or
>>> perhaps even
>>> if the current vocabulary is extended then the signature verification
>>> systems won't
>>> necessarily be able to understand to remove those relations too.
>>>
>>> It is much better to put the signature outside of the graph. Then
>>>
>>> 1. The algorithm won't need to contain any condition about removing any
>>> relation
>>> which will be a lot better for large graphs, and speed up verification.
>>> 2. New relations could be found or the vocabulary could be extended
>>> without changing
>>> the signature verification algorithm.
>>>
>>> Another way to think of this is that a named graph can always be mapped
>>> to a literal.
>>> ( This is why one can think of named graphs as already implicitly
>>> contained in RDF/XML )
>>> Signing documents is always external to the document in those
>>> circumstances.
>>>
>>
>> I think it depends on the use case.
>>
>> For LinkedDataSignature2015 the use case is so sign a canonical form of a
>> graph pointed to by a subject.
>>
>> You could also imagine another algorithm that signed named graphs, I dont
>> think the two are mutually exclusive.
>>
>>
>> There should be no difference in the use cases.
>>
>> Each system has pros and cons, but if you canonicalize things well, the
>> problem goes away, I think. I think the way things are done currently
>> reduces complexity, which in turn, increases adoption.
>>
>> For example, looking at your webid, you have a key in there, but it is
>> unnamed ie a blank node. This makes it impossible to do signing. That is
>> one of the reasons that work on WebID and work on web signatures diverged.
>>
>>
>> You mean you can't refer to the key from outside the graph with a URI
>> because it is a blank node? True, but that's not a problem for
>> signatures. You can for example add the public key in the signature.
>>
>> {
>> "@context": "https://w3id.org/identity/v1",
>> "title": "Hello World!",
>> "signature": {
>> "type": "LinkedDataSignature2015",
>> "creator": { "cert:modulus": "DAB9D1E941F6F8...",
>> "cert:exponent": 65537 }
>> "created": "2011-09-23T20:21:34Z",
>> "domain": "example.org",
>> "nonce": "2bbgh3dgjg2302d-d2b3gi423d42",
>> "signatureValue":
>> "OGQzNGVkMzVm4NTIyZTkZDYMmMzQzNmExMgoYzI43Q3ODIyOWM32NjI="
>> }
>> }
>>
>
> Well that wouldnt work, as you dont know what kind of key it is. But I
> guess going off topic.
>
>
> you actually do as it is implied by cert:exponent that the blank node is a
> cert:RSAPublicKey.
> See the online documentation https://www.w3.org/ns/auth/cert#exponent
>
> But even if that had not been specified, I am sure you can see that would
> just be a minimal step to
> add the type.
>
>
>
>>
>> Anyway, that's neither here nor there. The question was one of where
>> signatures should go: inside the graph or outside. One can
>> put the signature outside the graph with keys too, just as one can if one
>> uses URIs to identify the key.
>>
>> This is not something that affects any use cases. It's a question of
>> simplicity of algorithms.
>> It was pointed out in private conversation that the reason that this
>> decision may have been made is because the other
>> way around is less easy for beginner coders to get right for some reason.
>>
>
> Makes sense. I do think the current formulation works, and is not in
> error. There's just different ways of doing things.
>
>
>>
>> My Json-LD is not so good. In N3 ( https://www.w3.org/2000/10/swap/Primer
>> )
>> What would it look like with the signature outside of the graph?
>>
>>
>> The convenience of using (which actually you argued for, and manu and
>> others argued against) bnodes comes at a cost. The cost in this case was
>> to have two different communities working on liked data PKI solutions,
>> neither with really a lot of resources. So bear in mind there's always a
>> trade off between convenience, utility and generalization.
>>
>>
>> WebID does not disallow URIs for keys, as should be clear from reading
>> the spec, and just from basic RDF principles. That point
>> was made a few times on the webid mailing list.
>>
>
> Not really, using bnodes here is a serious anti pattern. This is axiom 0
> of the web. Anything of significance should be given a URI. This mistake
> was one reason signatures have been developed independently.
>
>
> That's what some folks say. Many who have been working in the LinkedData
> space for a very long time don't agree.
> BNodes are part of RDF, available in JSON-LD, Turtle, Trig, RDF/XML,
> etc... all of which are used in the LinkedData space,
> and there are many use cases where they are very useful.
> But yes, this is completely off topic.
>
Axiom 0a: Universality 2
Any resource of significance should be given a URI.
https://www.w3.org/DesignIssues/Axioms.html
>
>
>
>>
>>
>> Not sure it would be correct to argue this is an error, simply a design
>> decision.
>>
>> Work on signing other structures I think is also welcome, but maybe
>> there's not (yet) enough use cases?
>>
>>
>>>
>>> Henry Story
>>>
>>>
>>>
>>>
>>
>>
>
>
Received on Sunday, 17 January 2016 22:54:43 UTC