Hi Jason,

I'll take a closer look this week and move the process forward.

Thanks,

Robert

On Tue, 2017-12-05 at 14:28 +0000, Jason Bailey wrote:
> Thanks Antonio, I appreciate the feedback and  I empathize with the
> time constraints.
> 
> 
> Current JIRA for donating
> https://issues.apache.org/jira/browse/SLING-7255
> 
> Source Code for donation
> https://github.com/JEBailey/sling-encrypt
> 
> 
> -----Original Message-----
> From: Antonio Sanso [mailto:asa...@adobe.com.INVALID] 
> Sent: Tuesday, December 05, 2017 5:41 AM
> To: dev@sling.apache.org
> Subject: Re: value level encryption - Donating?
> 
> EXTERNAL
> 
> hi Jason,
> firstly I really want to thank you for this great effort.
> I was more than happy to give a quick look at this solution and
> provide some feedback.
> Unluckily though I do not have at this moment any free cycle to give
> the attention this donation deserves.
> If any of the other committers would like to standup is more than
> welcome to continue with the donation process.
> Another option would be to keep this code in github (as you already
> noticed Sling migrated to git and is highly modularized in any case)
> 
> regards
> 
> antonio
> 
> On Dec 4, 2017, at 3:55 PM, Jason Bailey <jason.bai...@sas.com>
> wrote:
> 
> > Hi Antonio,
> > 
> > I added a couple of things to the repository based on your
> > feedback. The primary change was the addition of a key provider
> > that would allow you to separate the management and the storage of
> > secret keys away from the encryption provider. I also added two
> > implementations of that service as well. One which utilizes the
> > java keystore and the other which provides you the ability to
> > define keys in the OSGi Configuration. The secondary one being
> > useful for testing and for environments where you don't have access
> > to the filesystem. I will most likely be implementing another
> > variant to integrate with the thycotic secret server.
> > 
> > To support Key rotation, I added additional identifying bytes after
> > the IV that is used by the KeyProvider to provide the correct key
> > for decryption. While all encryption processes are done with the
> > KeyProvider's primary key.
> > 
> > Example of how this would work: I am using a KeyProvider with a
> > primary key for 6 months. As part of a Security Policy this needs
> > to be changed. I then take the existing primary key and add it to
> > the secondary list and provide a new key as primary. At this point
> > all new encryptions will occur with the primary key, however I will
> > still be able to access the older encrypted messages as well. To
> > update the older keys with the new key, it's a matter of iterating
> > over the stored encrypted resources with the EncryptableValueMap
> > and using the encrypt(propertyName) method.  Which will re-encrypt
> > the property with the new primary.
> > 
> > I'm running with the AES/GCM because it provides the best overall
> > security and fits my use cases and the key rotation support should
> > alleviate some concerns as well.
> > 
> > -Jason
> > 
> > -----Original Message-----
> > From: Antonio Sanso [mailto:asa...@adobe.com.INVALID]
> > Sent: Tuesday, November 21, 2017 5:37 AM
> > To: dev@sling.apache.org
> > Subject: Re: value level encryption - Donating?
> > 
> > EXTERNAL
> > 
> > hi Jason,
> > 
> > I basically see 3 options:
> > 
> > * ship with AES/CBC that is ok but suboptimal
> > - ship with AES-GCM that is good but has the problem of the nonce
> > highlighted before. The key rotation would help but than what do
> > you do on rotation? Decrypt all the encrypted value and re-encrypt
> > with the new key... ?
> > - Encrypt-than-MAC
> > 
> > I have also noted that the key is stored as OSGi configuration...
> > This might also be part of a bigger discussion....
> > 
> > regards
> > 
> > antonio
> > 
> > On Nov 20, 2017, at 10:03 PM, Jason Bailey <jason.bai...@sas.com>
> > wrote:
> > 
> > > It's all good. I  have less meetings today then I normally would
> > > and the exercise was beneficial as it got me thinking about other
> > > potential vectors.
> > > 
> > > Since the key for this is configurable via the OSGi console I
> > > would have taken key rotation as being a business process
> > > exercise rather than a technical one. But I don't mind changing
> > > it, I'm having a lot of fun with this.
> > > 
> > > To make sure I'm on the same page. The direction right now is
> > > AES/CBC/PKCS5Padding but with encrypt and MAC?
> > > 
> > > -----Original Message-----
> > > From: Antonio Sanso [mailto:asa...@adobe.com.INVALID]
> > > Sent: Monday, November 20, 2017 3:07 PM
> > > To: dev@sling.apache.org
> > > Subject: Re: value level encryption - Donating?
> > > 
> > > EXTERNAL
> > > 
> > > hi Jason,
> > > 
> > > I get your point
> > > On Nov 20, 2017, at 4:57 PM, Jason Bailey <jason.bai...@sas.com>
> > > wrote:
> > > 
> > > > Thanks Antonio. I had considered doing GCM, but I hesitated
> > > > since it's not listed as a standard transformation that a Java
> > > > platform must support. As I couldn't know what platform it
> > > > would be running on I tried to be as much OOTB as possible.
> > > > That desire to be OOTB is also why it's 128bit. My idea was to
> > > > provide a generic level of encryption with the assumption that
> > > > a downstream implementer would/should implement the
> > > > EncryptionProvider service to the level of security their
> > > > company requires.
> > > > 
> > > > Saying that, if the desire is to have it GCM I will get that
> > > > implemented.
> > > 
> > > Thanks a lot taking this consideration and speed the
> > > implementation. You are right about AES GCM. On top there is also
> > > another problem with it.
> > > AES GCM uses a nonce of 96 bits. It is vital important to never
> > > reuse the same nonce with the same key otherwise the result is a
> > > real catastrophe (cryptographically wise).
> > > This implies, given the birthday paradox, that we need to rotate
> > > the key after 2^48 encryptions. This is a pretty big number but
> > > you know the life of the key can be also long.
> > > Hence, without key rotation, it wouldn't probably good to ship
> > > with this (now I am sorry you already jumped on it and
> > > implemented but I did not think you were so fast).
> > > 
> > > Another more conservative approach would be encrypt-than-mac (or
> > > we can simply keep AES/CBC as default).
> > > 
> > > An overall observation would be also that given the sensitive
> > > topic it would be good to have a more extensive test suite for
> > > this feature...
> > > 
> > > my 2 cents
> > > 
> > > regards
> > > 
> > > antonio
> > > 
> > > > 
> > > > -----Original Message-----
> > > > From: Antonio Sanso [mailto:asa...@adobe.com.INVALID]
> > > > Sent: Monday, November 20, 2017 10:29 AM
> > > > To: dev@sling.apache.org
> > > > Subject: Re: value level encryption - Donating?
> > > > 
> > > > EXTERNAL
> > > > 
> > > > hi Jason,
> > > > 
> > > > thanks a lot for the donation.
> > > > I already commented on the issue, just pasting inline part of
> > > > the 
> > > > comment though
> > > > 
> > > > On Nov 20, 2017, at 2:50 PM, Jason Bailey <jason.bai...@sas.com
> > > > > wrote:
> > > > 
> > > > > So I'm just about done implementing this.
> > > > > 
> > > > > https://github.com/JEBailey/sling-encrypt
> > > > > 
> > > > > Value level encryption. IV is stored inline so there's no
> > > > > repetition. Accessing encrypted data via the
> > > > > EncryptionValueMap will decode it automatically on access and
> > > > > will handle automatically encrypting values if an encrypted
> > > > > value is updated.
> > > > > 
> > > > > Only problem I had besides catching up on the last 15 years
> > > > > of 
> > > > > cryptography
> > > > 
> > > > I have seen you have used AES/CBC that is not  (extremely) bad.
> > > > Said that if we really want to put this in Sling we'd better do
> > > > things as the state of art requires.
> > > > As rule of thumbs you never (only) encrypt . You'd better add
> > > > some integrity check mechanism (eg AES GCM or encrypt-then-
> > > > mac).
> > > > 
> > > > regards
> > > > 
> > > > antonio
> > > > 
> > > > > was that the downstream application I use has a non
> > > > > configurable whitelist filter for post processors that
> > > > > contain an '@' So I had to make the post processor
> > > > > configurable.
> > > > > 
> > > > > As mentioned earlier I wrote this with the intention of
> > > > > donating. I tried to make it as easy as possible for it to be
> > > > > pulled into where it needs to go.
> > > > > 
> > > > > However I don't know the process for Donating. Can someone
> > > > > point me the way or to some documentation?
> > > > > 
> > > > > Thanks.
> > > > > -Jason
> > > > > 
> > > > > -----Original Message-----
> > > > > From: Justin Edelson [mailto:jus...@justinedelson.com]
> > > > > Sent: Friday, November 03, 2017 3:37 PM
> > > > > To: dev@sling.apache.org
> > > > > Subject: Re: value level encryption
> > > > > 
> > > > > EXTERNAL
> > > > > 
> > > > > In AEM, posting encrypted properties to /etc/cloudservices is
> > > > > historically the primary use case for @Encrypted, but the
> > > > > PostProcessor applies to all post requests.
> > > > > 
> > > > > I think this would be a useful addition to Sling. We may want
> > > > > to have some kind of SPI to support different encryption
> > > > > schemes, but that's an implementation detail.
> > > > > 
> > > > > Regards,
> > > > > Justin
> > > > > 
> > > > > 
> > > > > On Fri, Nov 3, 2017 at 2:48 PM Jason Bailey <Jason.Bailey@sas
> > > > > .com> wrote:
> > > > > 
> > > > > > They only docs I can find on that, assuming we're talking
> > > > > > AEM, 
> > > > > > mentions it only works for posting things into
> > > > > > /etc/cloudservices. So that's out.
> > > > > > It's been a while, but I'm under the impression that all 
> > > > > > implementations of the java platform now come with a
> > > > > > certain level 
> > > > > > of crypto
> > > > > > 
> > > > > > https://docs.oracle.com/javase/8/docs/api/javax/crypto/Ciph
> > > > > > er.html
> > > > > > 
> > > > > > I'd probably add a configuration so you could define the
> > > > > > level of 
> > > > > > cryptography, and then that would allow people who needed a
> > > > > > higher 
> > > > > > level to install their own providers. Is this something
> > > > > > that Sling 
> > > > > > would be interested in? Since I'm going to be writing this,
> > > > > > if 
> > > > > > you're interested, I'd rather write it with the intent of
> > > > > > directly donating it.
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > -----Original Message-----
> > > > > > From: Justin Edelson [mailto:jus...@justinedelson.com]
> > > > > > Sent: Friday, November 03, 2017 1:35 PM
> > > > > > To: dev@sling.apache.org
> > > > > > Subject: Re: value level encryption
> > > > > > 
> > > > > > EXTERNAL
> > > > > > 
> > > > > > We have this in our commercial product. At a high level,
> > > > > > the way 
> > > > > > it works is that there is a PostProcessor which looks for
> > > > > > an 
> > > > > > @Encrypted postfixed property and, if that is present, the 
> > > > > > corresponding property is stored in an encrypted fashion.
> > > > > > Decryption is all done manually, although personally the
> > > > > > idea of an EncryptionValueMap seems really cool to me.
> > > > > > 
> > > > > > I believe the challenge in bringing this into Sling relates
> > > > > > to the 
> > > > > > encryption libraries.
> > > > > > 
> > > > > > On Fri, Nov 3, 2017 at 8:45 AM Jason Bailey <Jason.Bailey@s
> > > > > > as.com> wrote:
> > > > > > 
> > > > > > > Here's the use case
> > > > > > > 
> > > > > > > My organization has decided that to conform to the GDPR,
> > > > > > > any 
> > > > > > > sensitive data should be encrypted while at rest. From a
> > > > > > > Sling 
> > > > > > > perspective that is a challenge since we've empowered the
> > > > > > > authors 
> > > > > > > to create forms the way they want. So to be on the safe
> > > > > > > side, 
> > > > > > > we're looking at encrypting all form fields as they are 
> > > > > > > persisted, and then decrypting the values from the
> > > > > > > resource  when we need to processes them.
> > > > > > > 
> > > > > > > Now I'm thinking of an EncryptionValueMap that will
> > > > > > > simplify this 
> > > > > > > process and encapsulate the functionality. You guys are
> > > > > > > usually 
> > > > > > > ahead of me when I come up with this stuff and I don't
> > > > > > > like 
> > > > > > > replicating effort. So is there any functionality
> > > > > > > currently or 
> > > > > > > planned to handle encryption of resource values?
> > > > > > > 
> > > > > > > Thanks
> > > > > > > Jason
> > > > > > > 
> 
> 

Reply via email to