Adam and I have discussed a proposal which should address everyone's use cases. 
I will post shortly. Just FYI so people don't invest too much time in this 
thread...

EHL

> -----Original Message-----
> From: [email protected] [mailto:[email protected]] On Behalf
> Of Phil Hunt
> Sent: Tuesday, May 31, 2011 3:35 PM
> To: Adam Barth
> Cc: OAuth WG
> Subject: Re: [OAUTH-WG] Fwd: issues with token age element - MAC token
>
> There seems to be a demonstrated need for both age and timestamp
> tokens.
>
> The list has 2 separate cases with 2 separate proposals that do not solve all
> cases.
>
> Can we at least agree that neither proposal works in all cases?
>
> Phil
>
> @independentid
> www.independentid.com
> [email protected]
>
>
>
>
>
> On 2011-05-31, at 2:41 PM, Adam Barth wrote:
>
> > You haven't described a problem.
> >
> > On Tue, May 31, 2011 at 1:46 AM, Skylar Woodward <[email protected]>
> wrote:
> >> First we should agree on a common understanding of the spec. The
> reason why age works with unsynchronized clocks is that the client
> determines issue_date based on the time when it receives the token over
> the wire. This depends on the server and client both recording time this way
> and for the transmission of the token to be be not longer than the margin of
> error for validating age. Are we agreed on this understanding?
> >
> > That's not correct.
> >
> > The age allows the server to protect against replay attacks in bounded
> > memory.  With unbounded memory, the server can just remember every
> > nonce it has ever seen associated with a given key and reject replays.
> > With bounded memory, the server eventually needs to evict some of
> > these nonces due to memory pressure.  The age value lets the server
> > reject the nonces with the smallest age values first.  The server then
> > rejects any messages with age values smaller than (or equal to) the
> > largest age value it has ever evicted for the given key.
> >
> > Notice that neither clock synchronization nor transmission time plays
> > a role in that implementation.
> >
> >> The easiest case for me to explain here is client credentials because I 
> >> have
> to assume you've built and registered a Twitter app at some point (or similar
> OAuth 1.0a app). You registered your app on the site and were issued a
> client_id and client_secret (called consumer_key and consumer_secret in
> 1.0). You then embedded these values in your client (they were not issued
> programmatically to your app). Assuming the MAC token algorithm is used
> then for establishing client identity (originally one of the uses we, the
> working group, hoped MAC would cover) how then will your client
> determine issue date?
> >
> > I recommend the date at which the developer obtained the credential
> > from Twitter because that is the date when the credential was issued.
> >
> >> After we can establish where you're at on the two above points I'll
> continue with the explanation. But as a preview, the next points would be:
> >>
> >> - If issue_date comes form the server, how is it translated to the client?
> >
> > The issue_date does not come from the server.
> >
> >> - If you use a server provided issue_date, how do you then translate that
> a value relative to the local unsyncronized clock?
> >
> > The server does not provide the issue_date.
> >
> >> - If your answer to that is to also provide the current server time to the
> client so the offset on the server provided issue_date can be calculated what
> is the difference between all of these values and just using timestamp?
> >
> > My answer is not to provide the current server time to the client.
> >
> > Kind regards,
> > Adam
> >
> >
> >> So don't get wrapped up in those 3 questions until we establish your
> contextual understanding of the first two paragraphs. Feel free to also
> respond to me off the list so we don't trouble everyone else with us getting
> on the same page (the reason, I thought, why a Skype call would be more
> efficient and painless). I do think my explanations all have been very clear
> thus far. There must be a contextual confusion that is keeping us from a
> common understanding of the terminology or the use cases.
> >>
> >> skylar
> >>
> >>
> >> On May 31, 2011, at 10:30 AM, Adam Barth wrote:
> >>
> >>> I'm not sure we need a Skype call.  Can you explain the trouble
> >>> caused by age clearly?  I didn't understand your previous
> >>> explanation.  The more concrete you can be, the better.
> >>>
> >>> Thanks,
> >>> Adam
> >>>
> >>>
> >>> On Tue, May 31, 2011 at 1:04 AM, Skylar Woodward <[email protected]>
> wrote:
> >>>> It seems we're failing to communicate. Or you're not understanding my
> use cases. Age doesn't "just" work. It only works for a limited number of uses
> cases that must include all of yours - and it is brittle at that. It doesn't 
> work
> for any of our uses cases (where the client can't know issue_date w/o the
> server telling it - in which case we have the equivalent problem as
> timestamp).
> >>>>
> >>>> If you'd like to talk this out over Skype I'm happy to do that, so I can
> help you understand why age doesn't work.
> >>>>
> >>>>
> >>>>
> >>>> On May 31, 2011, at 9:47 AM, Adam Barth wrote:
> >>>>
> >>>>> Timestamps don't work when the client doesn't have a synchronized
> >>>>> clock.  It's true that a client could synchronize its clock with
> >>>>> the network, but our implementation experience is that many
> >>>>> clients don't for a variety of reasons.  That means that age
> >>>>> better because, you know, it works.
> >>>>>
> >>>>> Adam
> >>>>>
> >>>>>
> >>>>> On Mon, May 30, 2011 at 11:19 PM, Skylar Woodward
> <[email protected]> wrote:
> >>>>>> I don't think you read my first message on the topic (or I wrote too
> much).
> >>>>>>
> >>>>>> Age is fragile because if the clock changes between issue_date and
> the time of submission, it will fail. We know many people don't have
> synchronized clocks, but using age only solves this problem if two
> assumptions hold true:
> >>>>>>
> >>>>>> 1) the client is able to guess the issue_date the server is using
> >>>>>> based on the time the credential was issued
> >>>>>> 2) the client system clock doesn't change between issue date and
> submission time.
> >>>>>>
> >>>>>> Timestamp has neither of these issues because the client can always
> inquire about network time and can effectively correct for inaccuracies in the
> device timekeeping system.
> >>>>>>
> >>>>>> Regarding the first assumption, this fails when a token might be re-
> issued between devices. An example is that we use MAC token for the client
> credentials, which are issued when a developer registers an application. The
> client has no way of determining on its own when the value was actually
> issued (unless we communicate that on the developer website and force
> users to embed that with client_id, which adds usability issues of users
> copying and entering string date values correctly). The same is actually true
> for all of our OAuth access tokens because we reissue tokens to the same
> client_id if they were previously issued and are still valid. (The client 
> would
> thus think the issue_date was now() when if fact it was the time of the first
> issue for client_id+scope+grantor_id). Thus, age is really just a convoluted
> way of trying to communicate the device system offset:
> >>>>>>
> >>>>>>        local_offset = current_server_time - current_device_time
> >>>>>>        age = current_device_time -
> >>>>>> (server_issue_date-local_offset)
> >>>>>>
> >>>>>> Since the protocol doesn't currently allow for server_issue_date to
> be given with tokens, thus age currently can't have the resilience that
> timestamp does. It also forces servers to issue new tokens on demand just
> to make the convoluted age system work (rather than reuse existing valid
> tokens). Or, you have to modify the protocol to add server_issue_date and
> current_server_time into the token-issue exchange - eg, more complexity.
> >>>>>>
> >>>>>> Timestamp is simpler, proven, it and it has a solution for your use
> case of unsyncronized clocks.
> >>>>>>
> >>>>>> skylar
> >>>>>>
> >>>>>>
> >>>>>> On May 30, 2011, at 9:08 AM, Adam Barth wrote:
> >>>>>>
> >>>>>>> I can't speak for Mozilla, but I can tell you that many folks
> >>>>>>> don't have synchronized clocks, for a wide variety of reasons.
> >>>>>>> I guess I don't really understand why you view age as
> >>>>>>> problematic.  You reference "fragility of using
> >>>>>>> time-since-credentials-issued" but you don't say what exactly is
> >>>>>>> fragile about it.  There's nothing particularly complex about
> >>>>>>> age, especially when using the monotonic clock provided by all
> modern operating systems.
> >>>>>>>
> >>>>>>> Adam
> >>>>>>>
> >>>>>>>
> >>>>>>> On Mon, May 30, 2011 at 12:03 AM, Skylar Woodward
> <[email protected]> wrote:
> >>>>>>>> But see, now you are specializing the use of MAC token even
> more - now it's becoming a service mainly for user-agents on home
> desktops? This is further for the original goal of making MAC as flexible is
> possible. In this case you should change the spec name to
> MAC_TOKEN_FOR_BROWSER_COOKIE_REPLACEMENT_IN_AGENTS_LIKE_FI
> REFOX - or MTBCRLF for short.
> >>>>>>>>
> >>>>>>>> Sarcasm aside, my point is that timestamp is just as good as your
> offset technique and is more: reliable, straightforward, flexible.
> >>>>>>>>
> >>>>>>>> User agents that care about creating robust behavior for home
> desktops or mobiles (presumably of users and OS not yet sophisticated
> enough to check network time on their own) should be advised to do clock
> correction on their own (by pinging a time service) and trusting the device
> clock alone.
> >>>>>>>>
> >>>>>>>> Please change the spec back to using timestamp rather than age.
> >>>>>>>>
> >>>>>>>> I'd also like to hear a convincing argument from the Mozilla co-
> authors about why they think that age is more resilient than the above (I
> believe it is not) and further more why they would find the above
> unattractive or difficult to implement in a modern user-agent.
> >>>>>>>>
> >>>>>>>> Thanks,
> >>>>>>>> skylar
> >>>>>>>>
> >>>>>>>> ... -.- -.-- .-.. .- .-. - .-- --- --- -.. .-- .- .-. -.. - ... -.- 
> >>>>>>>> -.-- .-.. .- .-. - .--
> --- --- -.. .-- .- .-. -..
> >>>>>>>> skylar woodward
> >>>>>>>> Kiva Developer Program  /  build.kiva.org  /  @buildkiva
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On May 30, 2011, at 7:54 AM, Eran Hammer-Lahav wrote:
> >>>>>>>>
> >>>>>>>>> Any kind of clock sync requirement for user-agents (basically,
> home desktops) it completely impractical. The added complexity pales in
> comparison to the difficulty of trying to use timestamps and any kind of clock
> sync. No window will be big enough as experience shows some users have
> closes that are off by more than an hour and a half.
> >>>>>>>>>
> >>>>>>>>> The issue here is who is this being optimized for. Server-to-
> server communication should simply use TLS for privacy and MITM protection
> on top of MAC instead of using nonces to prevent replay. The whole point of
> this kind of replay protection is when TLS is not available.
> >>>>>>>>>
> >>>>>>>>> I think a better approach is to simply make checking the nonce
> optional when TLS is used.
> >>>>>>>>>
> >>>>>>>>> EHL
> >>>>>>>>>
> >>>>>>>>>> -----Original Message-----
> >>>>>>>>>> From: [email protected] [mailto:oauth-
> [email protected]]
> >>>>>>>>>> On Behalf Of Peter Wolanin
> >>>>>>>>>> Sent: Sunday, May 29, 2011 6:53 PM
> >>>>>>>>>> To: Skylar Woodward
> >>>>>>>>>> Cc: OAuth WG
> >>>>>>>>>> Subject: Re: [OAUTH-WG] Fwd: issues with token age element
> -
> >>>>>>>>>> MAC token
> >>>>>>>>>>
> >>>>>>>>>> I am also concerned by the fragility of using
> >>>>>>>>>> time-since-credentials-issued, and also the added complexity
> of specifying this construction.
> >>>>>>>>>>
> >>>>>>>>>> I think it would be preferable to always require a timestamp
> >>>>>>>>>> as part of the authorization header, and maybe even include
> >>>>>>>>>> in the spec a maximum time difference between client and
> >>>>>>>>>> server (e.g. 900 seconds) that can be tolerated.  This makes
> >>>>>>>>>> generating the nonce easier also, since the value need to
> longer be unique over all time.
> >>>>>>>>>>
> >>>>>>>>>> We have such rules in place for an HMAC-based authentication
> >>>>>>>>>> system we use.  Once in a while a client has a local clock so
> >>>>>>>>>> far out of sync that there is an issue, but it's rare.
> >>>>>>>>>>
> >>>>>>>>>> -Peter
> >>>>>>>>>>
> >>>>>>>>>> On Mon, May 23, 2011 at 9:16 PM, Skylar Woodward
> >>>>>>>>>> <[email protected]>
> >>>>>>>>>> wrote:
> >>>>>>>>>>> Resending to the list from my subscribed account...
> >>>>>>>>>>>
> >>>>>>>>>>> Begin forwarded message:
> >>>>>>>>>>>
> >>>>>>>>>>>> From: Skylar Woodward <[email protected]>
> >>>>>>>>>>>> Date: May 23, 2011 6:14:00 PM PDT
> >>>>>>>>>>>> To: Skylar Woodward <[email protected]>
> >>>>>>>>>>>> Cc: Eran Hammer-Lahav <[email protected]>, OAuth
> WG
> >>>>>>>>>>>> <[email protected]>
> >>>>>>>>>>>> Subject: Re: [OAUTH-WG] issues with token age element -
> MAC
> >>>>>>>>>>>> token
> >>>>>>>>>>>>
> >>>>>>>>>>>> So after discussing this today and reflecting on it a bit,
> >>>>>>>>>>>> I would suggest that
> >>>>>>>>>> nonce simply be the "unique value" (as it is so named)
> >>>>>>>>>> without further requirements. It might be suggested that this
> >>>>>>>>>> be composed of an
> >>>>>>>>>> random+timestamp (not age) value, but that seems more of a
> >>>>>>>>>> random+MAY or
> >>>>>>>>>> "recommended" practice. If the expectation is that very few
> >>>>>>>>>> if any providers would actually check the timestamp (or
> >>>>>>>>>> moreover, the nonce itself), why add terminology in the draft
> >>>>>>>>>> that requires it? Developers are doing extra housekeeping
> >>>>>>>>>> (and perhaps for a perceived benefit) but with no payoff or
> added security.
> >>>>>>>>>>>>
> >>>>>>>>>>>> I'm sending this feedback based on having implemented the
> >>>>>>>>>>>> v3-5 changes
> >>>>>>>>>> last night (for both client credentials and requests w/
> >>>>>>>>>> access tokens). After the changes, the nonce creation is now
> >>>>>>>>>> the most complicated part of the normalized request string and
> yet these changes offer the least benefit.
> >>>>>>>>>> What's most important is that nonces are unique on each
> request for an ID.
> >>>>>>>>>>>>
> >>>>>>>>>>>> There are issues with age as well:
> >>>>>>>>>>>>
> >>>>>>>>>>>> - As Bill mentioned, if the client stores the issue time
> >>>>>>>>>>>> based on receipt, then the internal clock changes
> >>>>>>>>>>>> (presumably w/o knowledge of the software storing the
> >>>>>>>>>>>> dates) then time will also fail. Assuming that a user with
> >>>>>>>>>>>> a bad clock (of by hours or more) will never fix it and
> >>>>>>>>>>>> actually encourages bad user behavior (don't fix your clock
> >>>>>>>>>>>> or Twitterbot will stop working!). Though we say that
> >>>>>>>>>>>> timezones won't bring about the situation of changed clock,
> >>>>>>>>>>>> I'd be to differ. Many users aren't savvy enough to change
> >>>>>>>>>>>> time zone, but just adjust the time to local time anyway.
> >>>>>>>>>>>> Users who are more likely to get it right already have auto
> >>>>>>>>>>>> clock sync enabled (via web, mobile, etc.)
> >>>>>>>>>>>>
> >>>>>>>>>>>> - What if the token wasn't originally issued
> >>>>>>>>>>>> programmatically? In this case,
> >>>>>>>>>> the issue time has to be obtained from the server and stored
> >>>>>>>>>> on the client then you have the same problem as with a
> >>>>>>>>>> timestamp - the client clock is not sync'd to the server
> >>>>>>>>>> clock and there is no adjustment. You want this to apply to
> >>>>>>>>>> uses outside of just OAuth, but now requiring the client to
> >>>>>>>>>> be able to determine an issue time based on when it receives
> an HTTP request necessarily limits the types of token flows for which this can
> be used.
> >>>>>>>>>>>>
> >>>>>>>>>>>> - It's one more detail to store. Hardly an issue for a
> >>>>>>>>>>>> developer, but it is
> >>>>>>>>>> inelegant. It's like having a double ID. Yet it's not an ID,
> >>>>>>>>>> it is actually more of a recording of "my personal clock
> >>>>>>>>>> offset value" but obfuscated several times over (one for each
> token) as issue_date.
> >>>>>>>>>>>>
> >>>>>>>>>>>> - This implementation assumes software programs use the
> >>>>>>>>>>>> computer
> >>>>>>>>>> internal clock exclusively for timestamp. A robust program
> >>>>>>>>>> that is dependent on accurate timestamps would ping the
> >>>>>>>>>> origin server (or similar trusted time
> >>>>>>>>>> authority) to ask it the current time. Then it could store a
> >>>>>>>>>> "my device clock offset" value for the lifetime of the
> >>>>>>>>>> program execution. All requests needing timestamp would be
> >>>>>>>>>> adjusted accordingly. For age, if the clock is changed since the
> stored issue_date, the problem can't be corrected in this manner.
> >>>>>>>>>> Thus, a significant advantage for timestamp.
> >>>>>>>>>>>>
> >>>>>>>>>>>> All in all, this seems like a misguided but
> >>>>>>>>>>>> well-intentioned attempt to get
> >>>>>>>>>> around end-user issues of mis-set clocks. It feels like a
> >>>>>>>>>> hack and it certainly isn't a foolproof solution. The more I
> >>>>>>>>>> think about the implications of the age parameter, the less I
> >>>>>>>>>> like it. Timestamp has been used for many years in the
> >>>>>>>>>> industry and with reasonable success in relevant
> >>>>>>>>>> applications. If we change to a new way of trying to sync on
> time I think we run a greater risk of stumbling upon unforeseen issues, such
> as those outlined above.
> >>>>>>>>>>>>
> >>>>>>>>>>>> I recommend the requirement of an age (or timestamp for
> >>>>>>>>>>>> that matter)
> >>>>>>>>>> be dropped from the nonce construction. For providers that
> >>>>>>>>>> deem it valuable, timestamp can be an optional value (either
> >>>>>>>>>> as part of the nonce or the overall header, as before).
> >>>>>>>>>>>>
> >>>>>>>>>>>> skylar
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> On May 23, 2011, at 2:11 AM, Skylar Woodward wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>> You may have noticed, on page 8 the host is listed as
> "example.net"
> >>>>>>>>>>>>> - should be example.com, I believe.  (draft v5)
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> All in all, I'm in support of the changes in v2. Certainly
> >>>>>>>>>>>>> addresses my
> >>>>>>>>>> hesitations from v2.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> skylar
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On May 9, 2011, at 12:36 PM, Eran Hammer-Lahav wrote:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> (Please discuss this draft on the Apps-Discuss
> >>>>>>>>>>>>>> <[email protected]> mailing list)
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> http://tools.ietf.org/html/draft-hammer-oauth-v2-mac-
> toke
> >>>>>>>>>>>>>> n
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> While this document has moved to the Apps-Discuss
> mailing
> >>>>>>>>>>>>>> list for the
> >>>>>>>>>> time being, I wanted to give a quick update to those who have
> >>>>>>>>>> been following this draft which originated on this list.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> The major changes since -02 are:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> * Removed OAuth terminology and association. The draft
> is
> >>>>>>>>>>>>>> now a
> >>>>>>>>>> general purpose HTTP authentication scheme. It does include
> >>>>>>>>>> an OAuth 2.0 binding which is described in less than a page.
> >>>>>>>>>> One suggestion would be to move section 5.1 into the OAuth
> >>>>>>>>>> specification and drop all the OAuth 2.0 text from the MAC
> draft.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> * Added 'Set-Cookie' extension for using MAC with
> session cookies.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> * Removed request URI query normalization. The new
> draft
> >>>>>>>>>>>>>> uses the
> >>>>>>>>>> raw request URI unchanged.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> * Replaced timestamps with credentials age to remove
> the
> >>>>>>>>>>>>>> need for
> >>>>>>>>>> clock sync.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> * Added a placeholder for extension, allowing random
> text
> >>>>>>>>>>>>>> to be
> >>>>>>>>>> included in the request and MAC.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> * Added issuer attribute for identifying the source of
> >>>>>>>>>>>>>> the credentials as
> >>>>>>>>>> an additional protection.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Draft -04 is not compatible with previous drafts.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> EHL
> >>>>>>>>>>>>>>
> _______________________________________________
> >>>>>>>>>>>>>> OAuth mailing list
> >>>>>>>>>>>>>> [email protected]
> >>>>>>>>>>>>>> https://www.ietf.org/mailman/listinfo/oauth
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> _______________________________________________
> >>>>>>>>>>> OAuth mailing list
> >>>>>>>>>>> [email protected]
> >>>>>>>>>>> https://www.ietf.org/mailman/listinfo/oauth
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> --
> >>>>>>>>>> Peter M. Wolanin, Ph.D.      : Momentum Specialist,  Acquia. Inc.
> >>>>>>>>>> [email protected] : 978-296-5247
> >>>>>>>>>>
> >>>>>>>>>> "Get a free, hosted Drupal 7 site:
> http://www.drupalgardens.com";
> >>>>>>>>>> _______________________________________________
> >>>>>>>>>> OAuth mailing list
> >>>>>>>>>> [email protected]
> >>>>>>>>>> https://www.ietf.org/mailman/listinfo/oauth
> >>>>>>>>
> >>>>>>>> _______________________________________________
> >>>>>>>> OAuth mailing list
> >>>>>>>> [email protected]
> >>>>>>>> https://www.ietf.org/mailman/listinfo/oauth
> >>>>>>>>
> >>>>>>
> >>>>>>
> >>>>
> >>>>
> >>
> >>
> > _______________________________________________
> > OAuth mailing list
> > [email protected]
> > https://www.ietf.org/mailman/listinfo/oauth
>
> _______________________________________________
> OAuth mailing list
> [email protected]
> https://www.ietf.org/mailman/listinfo/oauth
_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to