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_FIREFOX - 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:[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 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-token >>>>>>>>>> >>>>>>>>>> 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
