Also some early performance data. In my tests with a local DB and a mix of 
select/insert operations using AES with 128-bit key wasn’t noticeably slower 
than using no encryption at all. Using 256-bit key resulted in 10% overhead. 
While these are great results, take it with a grain of salt for now until we 
get more use cases and start using it in production.

Andrus


On Apr 4, 2014, at 3:21 PM, Andrus Adamchik <and...@objectstyle.org> wrote:

> So the crypto module is done and available on trunk. Here is a minimal 
> configuration that will do AES/CBC encryption:
> 
> 1. Create a keystore and generate a secret key in it:
> 
>  keytool -genseckey -keystore /tmp/ks1.jceks -storetype JCEKS -alias mykey
> 
> 2. Start Cayenne with crypto:
> 
>  // this can also be a URL or a String representing URL
>  File keyStore = new File("/tmp/ks1.jceks”); 
> 
>  // obtain this somehow
>  char[] keyPassword = .. 
> 
>  // “mykey” is the key alias in #1
>  Module crypto = new CryptoModuleBuilder().keyStore(keyStore, keyPassword, 
> “mykey").build();
> 
>  // this will enable encryption/decryption for all columns matching ^CRYPTO_ 
> regex
>  // those must be either character or binary columns
>  ServerRuntime  runtime = new ServerRuntime(“cayenne-myproject.xml", crypto);
> 
> 
> So just 3 lines of code give you the encryption. Of course it is fully 
> customizable. See ‘CryptoModuleBuilder’ for what can be extended. Also the 
> code is pretty raw, so it may break or may be refactored as we find bugs. I 
> still need to study the performance and tweak as needed. Also there are 
> certain strategies are not yet available. E.g. we only support block ciphers 
> in CBC mode (as this is what I am planning to use in my apps). We will add 
> support for ECB and also streaming ciphers eventually.
> 
> But … everyone is free to give it a try ;) 
> 
> Andrus
> 
> 

Reply via email to