Subject: [Unbearable] Developing open-source Token Binding library

From: Bill Cox <[email-masked]>
Date: Fri, 18 Sep 2015 15:59:25 -0700

The whole point, for me, of working on Token Binding is to help secure
cookies and tokens to devices world-wide.  If it winds up only being used
for Chrome -> Google and IE -> Microsoft, and especially if we never secure
the private keys to hardware, then we will have failed, IMO.  To help
promote adoption of Token Binding, I want to publish an Apache 2.0 licensed
open-source Token Binding library, which for now I'll call TokbindLib.

Doing this when working at a small company is easy.  It's more complicated
at Google.  Here's my CYA weasel-wording:

I've only gotten permission to work on creating a Token Binding open source
library, and to announce to this list that I intend to publish it.
However, our open-source IP guys wont look at it until it compiles, has the
license and various disclaimers, and all the various details they like to
see worked out.  I can't publish any code until then, SFAIK.  Also, they
take a couple of weeks to do a careful review, and once it is published, I
have to have every patch reviewed as well.  Also, there is no guarantee
that once the entire effort is ready for launch that Google will allow it
to be published, though I expect approval since at least my first two
levels of managers are in favor of this effort.

I think at least a couple of other developers, including Erica, will help,
so I think we can get this done reasonably quick.  However, it's a short
quarter coming up, and everyone has higher priorities, so it might slip
into Q1 2016.  My goal is to get a first version, which I will likely call
"prototype" quality, pushed to GitHub by the end of 2015.  Here's a diagram
of the various pieces:

We don't know what the example app will be, yet, or what HTTP server will
be used. BoringSSL, and hopefully OpenSSL (it needs a minor tweak to custom
extensions) can be used for TLS transport, since they implement the same
TLS custom extension API, which is how we implemented TLS Token Binding
Negotiation. The actual Token Binding code will be entirely contained in
the TB Server Lib and TB Client Lib. The TB Key Manager API is just a C
header file defining a minimal OS-portable API to various implementations
of OS dependent Token Binding key managers. This manager is not part of
Token Binding, but I want to provide it to encourage securing TB private
keys close to hardware, as the Token Binding specs suggest. Per supported
OS, we'll try to provide high-speed hardware protected TB signing. When the
hardware is too slow (which I consider to be greater than about 500us for a
recent laptop/desktop), we'll fall back to signing in software in user
space. I hope we can use Intel SGX, which appears to be extremely fast, for
Windows, Linux, and Mac OS X. I also hope we will build a library for
Android. For OSes without a custom library for HW backed TB key mangament,
there should be a portable one that only does software based signing.

I suspect this may significantly overlap with another effort, which is why
I wanted to pre-announce this before putting in a lot of time into the
project. If anyone is already pretty far along on a competing effort, let
me know. I can reduce the scope to just the pieces that are unique, and
maybe collaborate on your effort.

Thanks,
Bill

---

From: Bill Cox <[email-masked]>
Date: Fri, 18 Sep 2015 16:06:47 -0700

Here's the image as a PNG.

On Fri, Sep 18, 2015 at 3:59 PM, Bill Cox <[email-masked]> wrote:

> I've only gotten permission to work on creating a Token Binding open
> source library, and to announce to this list that I intend to publish it.