Re: Secure release and persistence

David,

Regarding "delayed shutdown", whilst I think we are on the same page, I
think it would be good if you could define more precisely the behaviors you
would like to avoid and the architectural principle you would like to see
maintained. I don't want us to miss any differences in understanding now -
either between us or across browsers - that might cause trouble further
down the road.

Thanks,

...Mark



On Thu, Apr 30, 2015 at 3:29 PM, Mark Watson <watsonm@netflix.com> wrote:

> Here is a Pull Request in fulfilment of my Action from the F2F:
> https://github.com/w3c/encrypted-media/pull/54
>
> You can see the updated specification at
> http://mwatson2.github.io/encrypted-media/
>
> I will provide a description of the changes in Issue#45 and update the
> use-case wiki with further information as requested.
>
> ...Mark
>
> On Thu, Apr 30, 2015 at 2:59 PM, Jerry Smith (WINDOWS) <
> jdsmith@microsoft.com> wrote:
>
>>  I think the tone of this email has been relatively civil given some of
>> the strong opposing opinions involved.  One thing seems to be clearly
>> stated now that maybe wasn’t before:  Mark has confirmed that Netflix has
>> no plans to insist on delayed browser close/automatic messaging, and they
>> are open to spec language that states this.
>>
>>
>>
>> There still appears to be significant concern about the feature
>> maintaining its optional status.  I’d be interested in others comments on
>> this.  My own take is that the non-real time aspect of the feature make it
>> poorly suited to binding features to its presence.   I’ve previously said
>> that having it supported on a subset of UAs can still add value, with no
>> feature binding involved.  Broad UA support is preferable, but doesn’t seem
>> a requirement for the feature to be justified.
>>
>>
>>
>> Jerry
>>
>>
>>
>> *From:* Mark Watson [mailto:watsonm@netflix.com]
>> *Sent:* Thursday, April 30, 2015 11:12 AM
>> *To:* David Dorwin
>> *Cc:* public-html-media@w3.org
>> *Subject:* Re: Secure release and persistence
>>
>>
>>
>>
>>
>>
>>
>> On Wed, Apr 29, 2015 at 5:37 PM, David Dorwin <ddorwin@google.com> wrote:
>>
>>  The tone of this thread has turned for the worse. I've addressed some
>> of Mark’s comments below, but I'll wait for #1 and #2 before replying
>> further.
>>
>>
>>
>> On Wed, Apr 29, 2015 at 9:57 AM, Mark Watson <watsonm@netflix.com> wrote:
>>
>>
>>
>>
>>
>> On Wed, Apr 29, 2015 at 9:29 AM, David Dorwin <ddorwin@google.com> wrote:
>>
>>  While I welcome further clarification on Netflix's feature, I object to
>> further specifying it in the spec for the reasons described in issue 45
>> [1], specifically [2].
>>
>>
>>
>> ​Well, the F2F agreed to give me an action to provide the remaining
>> specification details [4] and I in turn object to the removal of much of
>> the existing specification of this feature, which you did last week under
>> the guise of a "name change".
>>
>>
>>
>> I believe #1 and #2 are consistent with [4]. It doesn't make sense to
>> “provide... technical recommendations” for a problem that isn't fully
>> defined.
>>
>>
>>
>> I’m not sure why you think I removed “much of the existing specification
>> of this feature.” Perhaps because there wasn't much actually specified,
>> minor deletions appear to be “much” of the specification. I assume you are
>> referring to the change to remove() (see below) or [5]. The main changes in
>> [5] other than the name were the removal of a) “generate a persistable
>> proof of license release”, which was incorrect, and b) specification of
>> what the license passed to update() must contain, which depends on further
>> definition of the feature. Both were replaced with "*TBD*."
>>
>>
>>
>> ​Yes. The feature doesn't need much in the spec and those things
>> constituted a major part of it.​
>>
>>
>>
>> ​I restored the material in the wiki:
>> https://www.w3.org/wiki/HTML/Media_Task_Force/EME_Use_Cases#Limited_Concurrent_Streams_via_Key_Release
>>
>>
>>
>> I also made a few updates ​to align with what was in the spec before the
>> recent changes.
>>
>>
>>
>> Honestly, the level of detail for this feature in the Use-Cases wiki is
>> not different from all the other "supported" features. I'd encourage all
>> task force members to look at it and tell me if I am going blind somehow.
>> I'll happily expand it, but perhaps we should do the same for all the
>> features, not just this one ? (see below on this).
>>
>>
>>
>> I really don't think it's acceptable for a task force member (editor or
>> not) to change a use-case from "Supported" to "Not supported" (or vice
>> versa) when that has *not been agreed by the group* and indeed is an
>> active topic of discussion. This wiki of use-cases has been stable for a
>> while and additions / removals should be by agreement.
>>
>>
>>
>>
>>
>>
>>
>>  There is still no data justifying the need to add this new requirement
>> to all implementations
>>
>>
>>
>> ​It's optional.​
>>
>>
>>
>> I disagree with this justification. As discussed at the f2f, optional
>> features are considered an anti-pattern because they either become required
>> to remain competitive or are never implemented. In this case, “optional” is
>> de facto required because Netflix (may) require it.
>>
>>
>>
>> ​I was just pointing out that "​new requirement to all implementations"
>> was not accurate.
>>
>>
>>
>> The whole issue of optional features deserves more consideration. This is
>> not the only one. It is not obvious, and it's feature-dependent, that an
>> optional feature becomes *de facto* required or nowhere implemented. One
>> can easily imagine features that enhance user experience where UAs disagree
>> on the competitive value vs other things they might implement. Pre-fetching
>> of licenses without a <video> element is a good example. So, that it is
>> always an "anti-pattern" is your opinion, not something we all agree on.
>>
>>
>>
>> Since this issue applies to multiple features, can we leave it here for
>> the moment, until we have addressed the other issues ?
>>
>>
>>
>>
>>
>> Regardless, there is no data justifying even the “optional” feature and
>> the resulting fragmentation.
>>
>>
>>
>>  nor has there been consideration of available alternatives.
>>
>>
>>
>> ​License renewal is an alternative which has been extensively discussed,
>> has significant dis-advantages and also remains underspecified ​
>>
>>
>>
>> I said consideration, not discussion. Specifically, there has been no
>> experimentation with the already available feature set. Only your
>> assertions that they will not work and Netflix will not consider them.
>>
>>
>>
>> ​Secure release is part of the ​"already available feature set" as far as
>> I am concerned and we have done more than experiment. It is deployed at
>> scale with Safari and IE and it is working well.
>>
>>
>>
>> Is license renewal in use on desktop browsers by any service providers ?
>> By whom ? Perhaps we can compare notes ?
>>
>>
>>
>>
>>
>>  Both are important prerequisites for adding features to the web
>> platform. Furthermore, Netflix's stated use case - whether mentioned in the
>> spec or not - requires a fundamental violation of the web platform
>> architecture: the CDM/media stack delaying application shutdown.
>>
>>
>>
>> ​No, this is not required by our use-case and the more detailed
>> specification I will provide this week will make that even clearer, as
>> detailed at the top of this thread.​
>>
>>
>>
>> Are you saying that with this new solution, Netflix will not require
>> *any* user agents to delay shutdown and ensure that messages reach the
>> server?
>>
>>
>>
>> ​It's not a "new solution" - it's just more detail on how everyone
>> implemented what was there before.
>>
>>
>>
>> Delaying shutdown is not mentioned in the use-case wiki, it's not
>> mentioned in the specification, we don't require it for our use-case and
>> responsive to your concerns I'm *trying* to find ways to make this clearer
>> in the spec. If you can find a way for the specification to *prohibit* it,
>> that would be fine by me. We don't require any user agents to delay
>> shutdown. What else can I do to address your concern ?
>>
>>
>>
>>
>>
>>
>>
>> Based on these important concerns, clear lack of consensus, continuing
>> confusion about this feature even among the editors [3], and lack of data
>> or experimentation, it is still too early to include this in the spec and
>> require it of all implementations.
>>
>>
>>
>> Even with Mark’s description below, there is still confusion about this
>> feature [3]. I propose the following next steps for Mark’s feature request:
>>
>> 1. Mark clearly defines (all) use case(s) for this feature (perhaps in
>> the wiki or a doc).
>>
>> 2. Mark clearly defines the feature he is requesting (perhaps in the wiki
>> or a doc).
>>
>>
>>
>> ​The use-case and feature definition have been present, first in the
>> original specification and later in the wiki, since the beginning of the
>> work (i.e. several years). I'm happy to refresh this as I understand you
>> may have removed some of this from the wiki recently.
>>
>>
>>
>> The use case has been unclear and there has never been a complete feature
>> definition. As an example, see the text from “the beginning of the work”:
>> [6]. Also, as far as I am aware, this thread is the first time that saving
>> decrypt times has been discussed publicly.
>>
>>
>>
>> ​The use-case is no less clear than all the others (see below).​
>>
>>
>>
>> ​Yes, I'm proposing an additional level of detail based on how everyone
>> has implemented this which, since it is common, can be described in the
>> specification. It's good for implementation experience to inform the spec.
>> I thought it would help with your concerns, since it makes it clear there
>> is nothing to be done / persisted / sent etc. at page close.​
>>
>>
>>
>>
>>
>> Yes, I removed the text from the wiki and added a note that the model has
>> not been explicitly defined. The text, much of which I had written, was out
>> of date, and I did not want it to add confusion to the ongoing discussion.
>>
>>
>>
>>  3. Mark provides justification for adding this feature, including data
>> on alternatives considered and experimented with as well as user benefit of
>> this feature over alternatives.
>>
>>
>>
>> ​As I have already explained several times, the user benefit of this
>> feature over license renewal is that streams-in-progress do not fail when
>> there is a loss of connectivity to the application server or an application
>> server outage.​ Put another way, this feature enables detection of
>> concurrent stream limit fraud without imposing real-time requirements on
>> the application servers. This is both an architectural advantage
>> (non-real-time systems always being simpler than real-time ones, on many
>> axes) and a user experience benefit.
>>
>>
>>
>> It's hard to quantify the benefit and unnecessary to the justification,
>> but nevertheless I am working on this.
>>
>>
>>
>> So, I agree with steps 1-3 and they have been completed (modulo
>> restoration of material you have deleted from the wiki).
>>
>>
>>
>> I disagree that steps 1-3 have been completed. Specifically, this thread
>> has raised new information. As I said above, I think steps 1-2 are are
>> prerequisites for [4].
>>
>>
>>
>> The old wiki text is all there in the history. However, I highly doubt
>> simply reverting the deletion addresses these steps. We need sufficient
>> detail to understand the use cases, implementation requirements,
>> algorithms, and whether delayed shutdown might reappear as a requirement on
>> some platforms.
>>
>>
>>
>> ​I added the following here:
>> https://www.w3.org/wiki/HTML/Media_Task_Force/EME_Use_Cases#Failed_Handshake
>>
>>
>>
>> "It is not required to attempt the handshake except by the explicit
>> procedure described above (for example if the web application is closed or
>> crashes)."​
>>
>>
>>
>>
>>
>>  4. The group discusses and attempts to reach consensus on a solution
>> for #1.
>>
>>
>>
>> ​You are treating this as a brand new feature request wheras I consider
>> it a feature that has been present since day one. It is already supported
>> by two User Agents. Whilst concerns have been expressed previously, the
>> outright opposition is ver​y new. I had expected those earlier concerns to
>> be addressed through the interaction between implementation experience and
>> specification development. Given the implementation status we are ready to
>> complete the specification work. Just because your position changes from
>> concerns (which I am addressing in this very thread as well as before) to
>> opposition does not set back the feature to a square one requirements
>> discussion.
>>
>>
>>
>> The definition you appear to be proposing is brand new
>>
>> ​.​
>>
>>  Earlier this month, you were arguing for a different solution. If some
>> of this information is new to me and the public discussion, I find it hard
>> to believe “It is already supported by two User Agents.”
>>
>>
>>
>> ​Well, it is indeed supported and deployed. You can look at the API
>> interactions between our JS on netflix.com and the browsers in question
>> if you find it hard to believe.
>>
>>
>>
>> As noted above, I'm just proposing additional detail about how the
>> feature is implemented under the covers. Whilst previous text talks about
>> persisting the license release message, it is always the case that ​you can
>> implement however you like so long as the API behavior is the same. So,
>> it's just a different way of describing the same thing - actually with a
>> bit more detail. We can go back to the previous way if you like, but I do
>> think this way is better.
>>
>>
>>
>>   Not to mention, there is no clear definition of what “it” is. The spec
>> process is more than just documenting existing implementations. Features
>> aren’t typically dictated by a single site, either. Perhaps there are
>> others that would like similar functionality, but they would be excluded by
>> the rubber-stamping of such privately-developed definitions.
>>
>>
>>
>> ​Well, sites are restricted to using the DRMs supported by the User
>> Agents​. Where these DRMs already support a feature in a common way, I
>> think it makes sense for us to support that in our specification.
>>
>>
>>
>>
>>
>> The spec started as a proposal for some simple APIs to perform license
>> exchanges. Through the spec process, including input from WG members and
>> the TAG, the importance of interoperability, fragmentation,
>> implementability, privacy, security, etc. have all become clearer. We've
>> also learned of additional use cases and discussed various user agent
>> implementations. Through this process, the bar for features and
>> functionality has been raised (to be consistent with the general spec
>> process). Having never been concretely defined and posing a number of
>> concerns, it seems reasonable for this feature to be expected to reach this
>> bar.
>>
>>
>>
>> ​I'm glad you bring up this evolution in our process which has largely
>> been driven in this group by you. I agree with the direction and I think it
>> would help if we could expand that to explicit agreement of the whole
>> group. We should discuss in more detail what this means for our work,
>> because I think you are making assumptions that are not shared by the group
>> (at least, not yet).
>>
>>
>>
>> I'm more than happy to expand the use-case, definition and specification
>> of the feature to meet a higher bar. We should do the same for other
>> features. I think we should just get to work collaborating on that, rather
>> than ripping (certain) things out and starting from scratch. I think that
>> was the conclusion of the F2F.
>>
>>
>>
>>
>>
>> We have opposed this feature “since the beginning of the work.” At one
>> point, it was "allowed" due to underspecification. Five months ago, a
>> session type was added because we needed to specify behavior for a
>> different use case ("persistent-license"). A month ago, I accidentally
>> specified the remove() behavior was the same for both session types.
>>
>>
>>
>> ​I have seen this problem many times in standardization: you add
>> something to the specification "by mistake" which others think was
>> deliberate and agree with. People read it, even implement based on that.
>> Later you realize your mistake but at this point it is too late. You need
>> to discuss the reversion, why it was a mistake, consider that perhaps even
>> if it was unintentional, it was not *actually* a mistake for the
>> specification, since it passed group review etc.
>>
>>
>>
>>
>>
>> We have always strongly objected to any scenario that involved delaying
>> shutdown. There was a period of time where we were led to believe various
>> things were no longer required, at which time our opposition was lessened.
>> However, that turned out to be false and/or subject to change, and our
>> opposition returned. You'll have to forgive me if I'm cautious about any
>> new claims that delaying shutdown is off the table.
>>
>>
>>
>> ​Fair enough. See above.​
>>
>>
>>
>>
>>
>> ​...Mark​
>>
>>
>>
>>
>>
>>
>>
>> It’s worth noting that without such evolution to the group's approach to
>> the spec and our consistent pushback, delayed shutdown might well be a de
>> facto requirement for all implementations, including desktop browsers. If
>> we are now at a point (different from even earlier this month) where that
>> is no longer being considered, then I would call that a success for the web
>> platform.
>>
>>
>>
>>
>>
>> ...Mark
>>
>>
>>
>>
>>
>> [1] https://github.com/w3c/encrypted-media/issues/45
>>
>> [2]
>> https://github.com/w3c/encrypted-media/issues/45#issuecomment-91743387
>>
>> [3]
>> https://lists.w3.org/Archives/Public/public-html-media/2015Apr/0067.html
>>
>>
>>
>> ​[4] http://www.w3.org/2015/04/16-html-media-minutes.html#action01]​
>>
>>
>>
>>
>>
>> David
>>
>>
>>
>> P.S.
>>
>> "Record of license destruction" was only intended for
>> “persistent-license”,
>>
>>
>>
>> ​Whatever your intention, what was actually in the specification until
>> your recent changes applied this to both ​“persistent-license” and
>> “persistent-release”.
>>
>>
>>
>> There was one inadvertent case where this was the case. It was added a
>> month ago in the commit to ‘Define the behavior for "persistent-license"
>> sessions’ [7]. In your original email, you said it was incorrect for your
>> use case. Fixing this mistake and separating the session types still seems
>> like the appropriate action.
>>
>>
>>
>>  but it is similarly restrictive for implementations. I’ll change it to
>> something like "persist an invalidation of the license." Other wording
>> suggestions welcome.
>>
>>
>>
>>  [5]
>> https://github.com/w3c/encrypted-media/commit/71e4352d4a737f3cdba879217dc9daf74020751d
>>
>> [6]
>> https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html#key-release
>>
>> [7]
>> https://github.com/w3c/encrypted-media/commit/76c48b4f0a171af89ed93c21745900ecbb75f7a2
>>
>>
>>
>>
>>
>>
>>
>>
>> On Tue, Apr 28, 2015 at 8:02 AM, Mark Watson <watsonm@netflix.com> wrote:
>>
>>  All,
>>
>>
>>
>> Hopefully this will catch you in your newly-freed "EME hour" :-)
>>
>>
>>
>> As promised at the F2F I will draft spec updates this week to fill in the
>> missing details of this feature. However, I would like to make one
>> significant change in response to comments at the F2F and previously
>> regarding exactly what is persisted.
>>
>>
>>
>> The spec describes persistence of a "record of license destruction".
>> Aside from the fact that we have no concept in our spec of "license", this
>> is not typically how this feature is implemented in DRMs and suggests a
>> need to persist data at close / shutdown / crash or other events that cause
>> license destruction.
>>
>>
>>
>> In practice, what is persisted  is a record of available keys at a point
>> in time. This is updated regularly *during streaming*. There is no update
>> on close / shutdown / crash. In a later browsing session, this record is
>> compared with the actually available keys and a discrepancy is taken as
>> evidence that keys were destroyed.
>>
>>
>>
>> I propose that we describe this persisted data explicitly as "for each
>> key in the session, the *first decrypt time* and the *latest decrypt
>> time*".*
>>
>>
>>
>> Are there any comments on that before I implement it ?
>>
>>
>>
>> Based on this change in description, I suggest we call this session type "
>> *tracked*" - or something similar - since really we are 'tracking' the
>> usage of keys. This name will also invite appropriate scrutiny of the
>> persisted data properties.
>>
>>
>>
>> ...Mark
>>
>>
>>
>> * there may of course be other CDM-specific information persisted and
>> included in the release message. For example if the CDM has a concept of
>> licenses, then license correlation identifiers may be present. Also, how
>> the CDM communicates time in its messages may be CDM-specific.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>
>

Received on Friday, 1 May 2015 14:38:51 UTC