What use case isn't addressed by age? No one has actually articulated it. Adam
On Tue, May 31, 2011 at 3:35 PM, Phil Hunt <phil.h...@oracle.com> wrote: > 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