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 <sky...@kiva.org> 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 <sky...@kiva.org> 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: oauth-boun...@ietf.org [mailto:oauth-boun...@ietf.org] 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 <sky...@kiva.org>
>>>>> wrote:
>>>>>> Resending to the list from my subscribed account...
>>>>>>
>>>>>> Begin forwarded message:
>>>>>>
>>>>>>> From: Skylar Woodward <sky...@larw.com>
>>>>>>> Date: May 23, 2011 6:14:00 PM PDT
>>>>>>> To: Skylar Woodward <sky...@kiva.org>
>>>>>>> Cc: Eran Hammer-Lahav <e...@hueniverse.com>, OAuth WG
>>>>>>> <oauth@ietf.org>
>>>>>>> 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
>>>>>>>>> <apps-disc...@ietf.org> 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
>>>>>>>>> OAuth@ietf.org
>>>>>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> OAuth mailing list
>>>>>> OAuth@ietf.org
>>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Peter M. Wolanin, Ph.D.      : Momentum Specialist,  Acquia. Inc.
>>>>> peter.wola...@acquia.com : 978-296-5247
>>>>>
>>>>> "Get a free, hosted Drupal 7 site: http://www.drupalgardens.com";
>>>>> _______________________________________________
>>>>> 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
>>>
>
>
_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to