See http://tools.ietf.org/html/draft-balfanz-tls-channelid-01. I am interested in hearing from others on whether we should implement this or something like it in Firefox. Please read the draft carefully as there are subtle privacy and security considerations that have been addressed in it already.
Channel ID allows a server and a client to agree to a key pair with TOFU-style trust. The client generates a random key pair and then proves possession of the private key as part of the TLS handshake it makes to that server, using the same key pair for every future connection to that same server. The server keeps track of whether or not each request that bears a cookie came from a TLS connection that had such a proof of possession. If the cookie was set on a connection with a proof of possession, but the connection that is using the cookie in a request does not have a proof of possession of the same keypair, then the server will take this as evidence that the cookie has been stolen and should no longer be trusted. Presumably, the server would then ask the user to log in with their username/password and/or the server may require two-factor authentication for these cases. Note that some limitations of key pinning mean that this mechanism is still useful even on sites with pinned keys. In particular, because of the need for browsers to work with anti-virus software and security gateways like Microsoft Threat Management Gateway, key pinning implementations generally need to, by default, accept user-added root CAs from being blocked by pinned keys, as our friends on the Chromium team found out already. (Please start a new thread to discuss this, if you want to discuss this.) Our Googler friends have already implemented and shipped this mechanism as part of Google Chrome and on Google's servers. They have patches to NSS, the crypto library that Firefox uses, that they are happy to share with us. Just accepting the patches is not sufficient, because there are privacy concerns that would need to be mitigated in other parts of Firefox. One thing that is up for debate is what the security/privacy tradeoff should be. In particular, the channel ID keypair itself acts like a cryptographically strong cookie and could be used for tracking. The Chromium team has implemented some measures to make it so that channel ID is treated like cookies in terms of the browser's cookie management policy. We should investigate whether we could improve the privacy protections for this mechanism to make sure it doesn't become a new/better way to track people. Ideally, we would know which cookies were associated with a login event (username/password submission, Persona/BrowserID login, etc), and then only generate and use a Channel ID keypair in those situations. However, this would require us to be able to classify cookies into "authentication" and "tracking" buckets, which is something that we probably cannot do perfectly and automatically. Because this mechanism would require changes to both clients and servers for it to be effective, it seems reasonable that we could require servers that want to use Channel ID to do something special when the user logs in, if needed. And/or, we may be able to repurpose some of the password manager login detection logic to detect when to start using ChannelID for a server. Thoughts? Cheers, Brian -- Mozilla Networking/Crypto/Security (Necko/NSS/PSM) _______________________________________________ dev-security mailing list dev-security@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-security