<span style='font-family:Verdana'><span style='font-size:12px'>Hello Malini<br /><br />I'm impatient to read your blueprint and to exchange about it.<br /><br />At a developpement level, the current implementation of V3/credentials seems to be strongly linked with others controllers and everything is stored in a sql database. So I think the key (credentials) storage isolation will not be easy...<br /><br />Regards<br /><br />Paul<br /> <p style="margin:0px; padding:0px;" > </p><blockquote style="border-left: 1px solid rgb(204, 204, 204); padding-left: 5px; margin: 0px 0px 0px 5px;" type="cite"><p style="margin:0px; padding:0px;" ><span style="font-family: Verdana;"><span style="font-size: 12px;">----- Original Message -----</span></span></p><p style="margin:0px; padding:0px;" ><span style="font-family: Verdana;"><span style="font-size: 12px;">From: Bhandaru, Malini K</span></span></p><p style="margin:0px; padding:0px;" ><span style="font-family: Verdana;"><span style="font-size: 12px;">Sent: 03/01/13 08:44 PM</span></span></p><p style="margin:0px; padding:0px;" ><span style="font-family: Verdana;"><span style="font-size: 12px;">To: OpenStack Development Mailing List</span></span></p><p style="margin:0px; padding:0px;" ><span style="font-family: Verdana;"><span style="font-size: 12px;">Subject: Re: [openstack-dev] Volume Encryption</span></span></p> <div link="blue" vlink="purple"><div class="WordSection1"><p class="MsoNormal"><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);">Yes Paul.  Getting closer on a design blueprint, hopefully will publish next week that takes into consideration all the exchanges thus far. Will look forward to your feedback.</span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal"><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);">Regards</span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal"><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);">Malini</span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal"> </p><p style="margin:0px; padding:0px;" ><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);"> </span></p><p class="MsoNormal"><b><span style="font-size: 10pt; font-family: "Tahoma","sans-serif";">From:</span></b><span style="font-size: 10pt; font-family: "Tahoma","sans-serif";"> Paul Sarin-Pollet [mailto:psarpol@gmx.com]<br /><b>Sent:</b> Friday, March 01, 2013 2:25 AM<br /><b>To:</b> OpenStack Development Mailing List<br /><b>Subject:</b> Re: [openstack-dev] Volume Encryption</span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal"> </p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";">Hi Malini,<br /><br />Is your havana design summit (<a href="http://summit.openstack.org/cfp/details/6">http://summit.openstack.org/cfp/details/6</a>) linked with keystone v3/credentials as defined in (<a href="https://github.com/openstack/identity-api/blob/master/openstack-identity-api/src/markdown/identity-api-v3.md">https://github.com/openstack/identity-api/blob/master/openstack-identity-api/src/markdown/identity-api-v3.md</a>) ?<br /><br />Thanks<br /><br /><br /> </span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p><blockquote style="border-width: medium medium medium 1pt; border-style: none none none solid; border-color: -moz-use-text-color -moz-use-text-color -moz-use-text-color rgb(204, 204, 204); padding: 0in 0in 0in 4pt; margin-left: 3.75pt; margin-right: 0in;"><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";">----- Original Message -----</span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";">From: Bhandaru, Malini K</span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";">Sent: 02/27/13 12:53 PM</span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";">To: OpenStack Development Mailing List</span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";">Subject: Re: [openstack-dev] Volume Encryption</span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p><div><div><p class="MsoNormal" style=""><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);">Hello Paul and Caitlin! </span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""> </p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);">I do think a Swift like storage backend is good for key management, it really is a dictionary, nothing fancy, with access controls, replication, horizontal scaling etc. The containers could be “cinder”, “swift”, “ceilometer”, “logs” whatever, to partition the keys and regulate their access.</span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);">This is what I proposed in the original blueprint. I am glad Paul you independently think the same.</span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""> </p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);">But I was thinking of a separate instance of a swift storage cluster to avoid the issue</span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);">of the key and the object ending up  on the same device (which Caitlin also pointed out in her response .. “how to steer them away from each other”). But coming to your point Paul of a swift based storage being complex, this would make it even more complex. The difference here is that</span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);">the storage for keys would be significantly less than regular swift object storage demands. Key strings and their ids would both be random.</span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""> </p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);">Further, to protect the key-strings I was thinking of encrypting the key-strings with the public-key of their “owner” aka service-end-point, that is, Swift/Cinder/Ceilometer etc. This can get expensive.  But with keystone we have PKI and each service end-point has its own public-private key-pairs.</span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""> </p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);">Another idea is once the key has been retrieved from the key manager, it can be saved at the service end-point in a lockbox. The lockbox key would be provided to the service host machine once it has established that it is trust-worthy, using the Trusted-Platform-Module (TPM). Currently OpenStack has support for establishing if compute node hosts are trust worthy. We can extend this to the other hosts. The encryption keys are then distributed to these end-points. </span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""> </p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);">Were we to roll out this feature in phases, phase-1 could use the public-key for encryption, and thus be accessible to only the designated end-point consumer.</span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""> </p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);">Regards</span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);">Malini</span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""> </p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style=""> </p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 11pt; font-family: "Calibri","sans-serif"; color: rgb(31, 73, 125);"> </span></p><p style="margin:0px; padding:0px;" > </p><div><div style="border-width: 1pt medium medium; border-style: solid none none; padding: 3pt 0in 0in; border-color: -moz-use-text-color;"><p class="MsoNormal" style=""><b><span style="font-size: 10pt; font-family: "Tahoma","sans-serif";">From:</span></b><span style="font-size: 10pt; font-family: "Tahoma","sans-serif";"> Caitlin Bestler [<a href="mailto:caitlin.bestler@nexenta.com">mailto:caitlin.bestler@nexenta.com</a>]<br /><b>Sent:</b> Tuesday, February 26, 2013 9:43 AM<br /><b>To:</b> OpenStack Development Mailing List<br /><b>Subject:</b> Re: [openstack-dev] Volume Encryption</span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p></div></div><p class="MsoNormal" style=""> </p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p><div><p class="MsoNormal" style="">On 2/26/2013 9:00 AM, Paul Sarin-Pollet wrote:</p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;"><p class="MsoNormal" style="margin-right: 0.5in; margin-bottom: 12pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";">Hi Malini,<br /><br />Do you think that swift could be a good storage backend for a key manager instead of a database ?</span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p><p class="MsoNormal" style="margin-bottom: 12pt;"><br /><span style="font-size: 9pt; font-family: "Verdana","sans-serif";">It could provide the replication principles and a control over key and key owner.<br />A (big) negative point could be performances... and complexity.</span></p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p></blockquote><p class="MsoNormal" style="margin-bottom: 12pt;"><br />There are three separate issues here:<br /><br />* How the keys are physically stored and indexed.<br />* How the stored keys are secured.<br />* How to steer storage away from the same device.<br /><br />A database is not necessarily better at providing an id-->value mapping than an object storage system.<br />As long as the Key ID is suitable for an Object Name (or a file name for that matter) indexing from an<br />Object Storage (or file) system should perform well. I cannot think of any scenarios where more general<br />queries that a database might support would make sense. Every retrieval is for a single key.<br /><br />If the keys were all placed in a single container, the key needed to decrypt the specific objects could be<br />an attribute of the Container itself. Special logic would be required to handle this Container metadata,<br />an important design goal is for this data *not* to be available if someone steals an entire server.<br /><br />The bigger issue is how to ensure that Swift objects are not stored on the same physical devices that<br />Cinder is trying to encrypt.  Storing the keys in Swift Objects would make it difficult to use the same<br />mechanism to support both Swift and Cinder encryption.<br /><br />My proposal for per-storage-server lockboxes was presuming that they would be stored in a local<br />file system, most typically a *small* file system such as the persistent storage in a TPM. However,<br />the internal sturcture of a specific lockbox would actually be up to the storage server vendor.<br /> </p><p style="margin:0px; padding:0px;" > </p><p style="margin:0px; padding:0px; margin: 0in 0in 0.0001pt;"><span style="font-size: 9pt; font-family: "Verdana","sans-serif";"> </span></p><p style="margin:0px; padding:0px;" > </p></div></div></blockquote></div></div></blockquote></span></span>