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