- From: Jeffrey Yasskin <jyasskin@google.com>
- Date: Wed, 31 Jan 2018 21:45:02 +0000
- To: Eric Rescorla <ekr@rtfm.com>
- Cc: Jana Iyengar <jri@google.com>, HTTP Working Group <ietf-http-wg@w3.org>
- Message-ID: <CANh-dXkraDRvd_bLqZiFsF1Ev_cox_ezWgd_=fCCb31_8CdyRw@mail.gmail.com>
On Tue, Jan 30, 2018 at 3:46 PM Jeffrey Yasskin <jyasskin@google.com> wrote: > On Tue, Jan 30, 2018 at 2:50 PM Eric Rescorla <ekr@rtfm.com> wrote: > >> >> >> On Tue, Jan 30, 2018 at 2:00 PM, Jeffrey Yasskin <jyasskin@google.com> >> wrote: >> >>> On Tue, Jan 30, 2018 at 1:42 PM Eric Rescorla <ekr@rtfm.com> wrote: >>> >>>> >>>> >>>> On Tue, Jan 30, 2018 at 1:26 PM, Jeffrey Yasskin <jyasskin@google.com> >>>> wrote: >>>> >>>>> On Tue, Jan 30, 2018 at 1:13 PM Eric Rescorla <ekr@rtfm.com> wrote: >>>>> >>>>>> >>>>>> >>>>>> On Tue, Jan 30, 2018 at 12:35 PM, Jeffrey Yasskin < >>>>>> jyasskin@google.com> wrote: >>>>>> >>>>>>> On Tue, Jan 30, 2018 at 12:18 PM Eric Rescorla <ekr@rtfm.com> wrote: >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Tue, Jan 30, 2018 at 11:50 AM, Jana Iyengar <jri@google.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> I'm watching from the sidelines, but a clarification question: >>>>>>>>> >>>>>>>>> Thanks for taking a look at this. However, I don't think it really >>>>>>>>>> addresses the concern that I raised, which is not solely about talking to >>>>>>>>>> the origin but about having a digital signature from the origin server >>>>>>>>>> substitute for an HTTPS connection to the origin. >>>>>>>>>> >>>>>>>>> >>>>>>>>> In the current world, client does DNS lookup, establishes a TCP >>>>>>>>> connection, creates a secure channel to an authenticated origin, and gets >>>>>>>>> content from it over this channel. >>>>>>>>> >>>>>>>> >>>>>>>> Yes. >>>>>>>> >>>>>>>> >>>>>>>> Per my understanding, the proposal here basically removes the DNS >>>>>>>>> lookup + TCP connection to the origin, but creates a secure channel to an >>>>>>>>> authenticated proxy, and separately authenticates content that it gets from >>>>>>>>> it. >>>>>>>>> >>>>>>>> >>>>>>>> Well, the proxy is largely irrelevant here, as the client has no >>>>>>>> particular relationship with it. From a security perspective, the client >>>>>>>> gets some content from a random location and trusts it because it's >>>>>>>> digitally signed by the origin server. >>>>>>>> >>>>>>>> >>>>>>>> The client would previously have authenticated the channel to the >>>>>>>>> origin and gotten any content from it. In this proposal, a client does a >>>>>>>>> TLS handshake to secure the channel to the proxy, and then authenticates >>>>>>>>> content that comes over it. Is this understanding correct? If so, it >>>>>>>>> *seems* equivalent security to HTTPS. >>>>>>>>> >>>>>>>> >>>>>>>> I don't think that's true. At *most* it provided data origin >>>>>>>> authentication/integrity (feel free to argue non-repudiation, but that's >>>>>>>> not really relevant here). It doesn't provide confidentiality to the origin >>>>>>>> server at all. >>>>>>>> >>>>>>> >>>>>>> Exactly, it's confidentiality to the physical server (given the >>>>>>> recently-added privacy guidance to restrict package fetches to TLS) but not >>>>>>> to the origin server. >>>>>>> https://tools.ietf.org/html/draft-yasskin-http-origin-signed-responses-02#section-7 >>>>>>> explains why that's not quite as bad as for a "random" location, but it's >>>>>>> still a different guarantee than the lock icon usually claims. >>>>>>> >>>>>> >>>>>> Rather then nitpicking "random location".... It seems like the >>>>>> situation is that if o2.com has produced a signed package than >>>>>> anyone with a TLS certificate who can get you to connect to them can >>>>>> present you content with origin o2.com, no? >>>>>> >>>>> >>>>> Yes, if you follow a link, whoever presented the link can know you >>>>> followed it (either via javascript or via a 302 redirect), and the link can >>>>> result in content from o2.com. signed-exchanges change whether >>>>> there's a physical connection to o2.com, but that physical connection >>>>> isn't user-visible in any case. >>>>> >>>> >>>> I'm not sure what you mean by "not user-visible". That's the semantic >>>> that we currently have that this proposal breaks. >>>> >>> >>> How does the user know which physical connections were made? If I see >>> o2.com in my URL bar, that might mean that my browser made a connection >>> to o2.com, or that it served something out of the cache without making >>> any connections. >>> >> >> What it definitely knows is that you didn't connect to some other random >> server. >> >> >> More importantly, is it a violation of confidentiality for *fewer* >>> entities to be told that I'm visiting a resource? >>> >> (With the caveat that a certificate could be crafted that leads to the >>> same number of entities being told.) >>> >> >> The confidentiality issue is that the data that was sent to the client >> was protected in transit, not shared with some random third party. >> > > Clearly we're not communicating well, so I'm going to take a night to > sleep on it and try to compose clearer questions. Thanks for taking the > time to reply so far. > So, I start with a presumption that the confidentiality guarantee of TLS is there to ensure some higher-level properties that humans care about. For example, if Asha fetches a bank page, she doesn't want anyone but her bank and her to learn her balance. If Davu fetches a social network page, he doesn't want anyone but the network and himself to know the authentication cookies that prove he's him. If Lupita fetches a page of medical information, she'd prefer that *nobody* know she fetched it, but she'll accept the author of the page finding out. Now, say inter.com offers a collection of signed exchanges that folks can download instead of talking to the exchanges' original authors. inter.com can't offer Asha's or Davu's page because it can't authenticate to the bank or social network to get those pages. inter.com can offer Lupita's page, but how does she wind up fetching the https://inter.com/lupitas-page URL instead of the https://medical.com/lupitas-page that it originally came from? If she clicks a link written as <a href=" https://medical.com/lupitas-page">, she doesn't: she connects to the original origin. Unlike some previous schemes I've heard of, there's no attempt to auto-discover proxies or caches. If she instead clicks a link written as <a href="https:// inter.com/lupitas-page">, she connects to inter.com. Today, inter.com might record her visit and then use a 302 redirect to send her on to https://medical.com/lupitas-page. She sees https://medical.com/lupitas-page in her URL bar, and doesn't realize that she was forwarded through "some other random server". That's today, with no changes. TLS's confidentiality model did not prevent inter.com from learning about her visit. What if Lupita's browsing https://inter.com/directory and sees a link to <a href="https://medical.com/lupitas-page">? She's being careful and checks her status bar before clicking, but, whoops, inter.com had attached an event listener to the link, which either calls sendBeacon("https:// inter.com/visited-lupitas-page") or sets location.href to https:// inter.com/lupitas-page, and again tells inter.com about the visit. If we implement signed-exchanges, https://inter.com/lupitas-page can host the content directly. Lupita clicks the link to https:// inter.com/lupitas-page, sees her URL bar change to https://medical.com/lupitas-page, and sees the content from medical.com. The same people find out about her click: inter.com and medical.com, except that it's possible medical.com doesn't even find out. So, what practical effect did the change to signed exchanges have? There must be an aspect to the story that I've missed--you have much more experience here and wouldn't be worried over nothing--and I'd greatly appreciate hearing it. Thanks, Jeffrey
Received on Wednesday, 31 January 2018 21:45:40 UTC