Provisioning keys and provenance
This one’s been bugging me for a while.
One of the issues which has caused issues for the adoption of standardised PKI in serious applications (such as banking) has been that of provisioning: you don’t want your customers storing the keys to your particular castle in a software keystore because the risk of compromise is too great.
The traditional approaches to this have either been to provision the keys on behalf of the customer and then send them out, or to use non-standard PKI setups which talk specifically to certain types of hardware token.
I’m wondering if there’s merit to another approach, permitting remote provisioning in an open fashion.
The issue with remote provisioning is knowing where the key is being stored, so why not just have the hardware token capable of signing a blob with its own key? That is:
- Provisioning causes a new key to be generated and stored by the token
- The token then signs the newly-generated public key with its own key, which is itself part of a normal certificate chain rooted at a CA managed by the token manufacturer.
- Thus, you have a “certificate of provenance” attesting to the fact that the new key was provisioned on the token and the private portion cannot be extracted, with a chain leading back to the manufacturer (possibly through an intermediate “device class” CA to allow differentiation between different types of token from the same manufacturer).
Given this, and the modest protocol changes required to support it, you would be able to provision keys remotely, having a whitelist of acceptable token models which you have tested. Indeed, this list could conceivably be maintained by some industry sector body to ensure some consistency.
As an — entirely hypothetical example — example, you could end up with a chain which looked like:
[new key] → [per-card certificate] → Gemalto .NET Card → Gemalto Smartcards → Gemalto NV
As an institution, you have a list which either includes one of the entries in the chain (Gemalto .NET Card, all Gemalto Smartcards, or everything from Gemalto NV), or it doesn’t. Straightforward.
Now, what are the great big gotchas that I’ve missed here (besides the difficulty in bringing about change to TLS, and bits of the PKCS family…)?