Maybe I've misunderstood the Magic Signatures proposal. I thought that the MagicSig blob actually contained the data that was signed, so that step (3) below would be unnecessary. (Note that the object in Step 2 has only field *names*, not *values*.) Including the data is the part of that scheme that causes some heartburn, since the recipient can choose not to verify the match against the original data (the HTTP request).

Like I said earlier, though, Magic Signatures / JSON token could probably still be useful, as long as the signed data is reconstructed, not provided in the token. The correspondence in my example was deliberate :)

--Richard



On Sep 24, 2010, at 12:11 PM, John Panzer wrote:

Richard,

I'm a bit confused because the made-up example you give below is, essentially, what Magic Signatures does. The algorithm you present is basically the correct one IMHO. Are you assuming that the recipient is _also_ using the HTTP-level method and URL path for some important security decision?

(Note: I'm assuming it's fine to use this unverified host/path data for tentative routing to an intended recipient, because the worst thing a MITM attacker can possibly do is to route it to the wrong recipient. As long as the recipient uses only signed information to decide whether it will actually ACCEPT the data, it will be fine. MITM attackers can always mis-route even signed messages of course, given that firewalls etc. are not aware of signatures, so I don't see this as a distinction.)

--
John Panzer / Google
jpan...@google.com / abstractioneer.org / @jpanzer



On Fri, Sep 24, 2010 at 8:26 AM, Richard L. Barnes <rbar...@bbn.com> wrote: Yes, there is certainly a risk if someone just checks the signature and does not verify the content of the message. This is a bad implementation
of an authorization system, to be sure, and it's an issue that people
need to be aware of. But simply signing metadata doesn't completely
solve the problem, either. In both cases there can be parameters that
are outside of the signed request that need to be checked and treated
appropriately.

Ah, perhaps I was unclear. I didn't mean *signing* metadata, I meant *sending* metadata. Using a completely made-up syntax:

1. Signer computes signature sig_val over data object:
  { user_agent: "Mozilla", method: "GET" }
2. Signer sends { signed_fields: ['user_agent', 'method'], sig: sig_val }
3. Recipient reconstructs data object using signed_fields
4. Recipient verifies sig_val == sign(reconstructed_object)

--Richard

_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth


_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to