appc / spec

App Container Specification and Tooling (archived, see https://github.com/rkt/rkt/issues/4024)
Apache License 2.0
1.26k stars 146 forks source link

SPEC: encrypt all ACIs #171

Open philips opened 9 years ago

philips commented 9 years ago

This is a discussion topic.

It is desirable to let people encrypt ACIs so that they can host the ACI on third party providers and place secrets inside an ACI. There are two paths to go: either make the encryption an optional code path or just make it so all ACIs are encrypted.

This issue is suggesting we consider encrypting by default.

For public ACIs this would mean that there would be a .aci.key file that would sit next to the image and describe the encryption that was used and the symmetric key to unlock it. For private ACIs this key could be distributed out of band or the .aci.key file could be protected behind a transport mechanism that could be discovered via something like ac-encryption-key https://mysecretstore.example.com which you would authenticate to using some sort of HTTP Authorization header.

Open Questions:

polvi commented 9 years ago

Few other design reasons why I'm in support:

If everything is encrypted:

eyakubovich commented 9 years ago

What about performance implications of always encrypting? On a large ACI (say a 200MB), this could add about 1-2 seconds. Still less than typical transport cost but not negligible. Obviously this cost is well worth it for private ones, but questionable for public ones.

While I don't know how it will actually play out, secrets can be brought in via a dependency (or invert the pattern) but either way, I see most bits being public.

jonboulle commented 9 years ago

@eyakubovich I guess one compromise would be to assume that ACIs are encrypted (and hence must always have an accompanying keyfile), but allow people to disable encryption by using a noop encryption type in the .key. But still have it on by default, of course ;-)

eyakubovich commented 9 years ago

@jonboulle I think that's a good compromise.

b commented 9 years ago

Why is that preferable to automating everything around the encryption and key management such that there is no overhead for users to produce properly encrypted images every time? The performance impact is minuscule, but secure defaults are enormously valuable.

jonboulle commented 9 years ago

I think that would be the ideal if we could make the UX absolutely streamlined. But that doesn't mean we have to explicitly preclude people from opting out.

b commented 9 years ago

Certainly, people should be able to opt out. What I am arguing is that the encryption pipeline should be built such that nobody wants to. Otherwise, lots of people will, quite reasonably, disable encryption because it is frustrating and that's a bad outcome.

eyakubovich commented 9 years ago

@b The performance impact is not significant but it's not minuscule. And the benefit is only for cases when there's something to hide :) But you're absolutely right that nailing the UX for encrypted case is important.

b commented 9 years ago

Bring performance data.

The "only if you have something to hide" argument about secrecy has a pretty sordid history, so probably not the best way to advocate against default encryption.

chris-rock commented 9 years ago

I think, encryption should not be enforced in a spec. Appc should ship with great options for encryption but leave it open to specific implementations to ship with encryption e.g. rocket may decide to support encrypted images only.

This would allow the runtime to expect the image to be unencrypted (tar + gzip). If an key file is available it tries to decrypt the image.

Is there any reason why the spec should restrict the encryption to symmetric keys?

b commented 9 years ago

The performance of asymmetric systems precludes their use for bulk encryption.

chris-rock commented 9 years ago

@b I thought, that the image is decrypted at startup and stays unencrypted on the local machine. Do you intend to keep the the filesystem encrypted all the time?

b commented 9 years ago

Sorry, I don't follow. You asked why the restriction to symmetric encryption. The answer is performance: use of asymmetric encryption for things the size of images is impractical. This is an orthogonal consideration to whether the image is locally decrypted to disk before execution or whether the encrypted image is used directly.

chris-rock commented 9 years ago

Of course the image itself should be symmetric encrypted. I was only talking about the keys. I was thinking about having one deployment key for my rocket machines. By using pubic key encryption, I encrypt the symmetric key with asymmetric encryption. This approach would allow me to restrict access to images to a specific set of machines. What do you think?

krobertson commented 9 years ago

Was talking about this earlier about doing build validation and knowing which keys are valid to be trusted, it was suggested to use/look at OCSP: http://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol

Thought it might have some relevance to this topic as well.