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
phil.h...@oracle.com





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 <sky...@kiva.org> 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 <sky...@kiva.org> 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 <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

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

Reply via email to