Thanks Bourg for these questions.

>> Sorry if it sounds naive, but why not accessing the OpenSSL functions 
>> through a JCE provider instead of building an abstraction layer on top of 
>> another abstraction layer (JCE). The Apache JuiCE project was an attempt to 
>> implement this idea a few years ago [1]. With an OpenSSL based JCE provider 
>> the CryptoInput/OutputStream could probably be replaced by 
>> javax.crypto.CipherInput/OutputStream. As for the secure random part the 
>> standard java.security.SecureRandomSpi mechanism could be used to provide an 
>> OpenSSL based implementation.
>> What do you think?
This is not naïve and very valid questions. We actually struggled a long time 
on these points from Bourg. We in Intel was driving the community to get the 
full use of hardware acceleration in encryption for a long time. We tried that 
way before. Diceros (https://github.com/intel-hadoop/diceros) project is 
exactly like what you mentioned. It provides OpenSSL based JCE provider as well 
as Secure Random SPI.

Technically and architecturally, this approach is nicely fit what the JCE 
architecture targets to do. But a JCE Provider needs to be officially 
certificated and signed, which can only be built and distributed by the 
specific organization such as Intel. This will prevent its adoption in the open 
source community who put much their trust on Apache open source. The developer 
cannot build their own version unless they have Oracle certificated private 
key. Another issue of this approach is the need for user to configure their JRE 
environment with the new JCE provider through java.security file (Although this 
can be overcome technically by dynamic register).

While Chimera approach is similar to JCE approach technically but instead as a 
JCD provider, it acts as a "reference it and use" library. 

This second value proposition for Chimera is for its stream layer and its 
abstraction of Input and Output interface. Bourg mentioned javax CipherInput 
and CipherOutputStream. The layer will support Stream, Channel input out of box 
and can be easily extended with new Input and Output sources. We also see the 
importance of CTR mode which provides advanced characteristics such as random 
seek features on crypto streams. This is very important for big data encryption 
such HDFS which needs to read at the random positions. In this layer, other 
valuable things can be added when needed. The utility library is needed in 
these area in Apache Commons whose development, enhancement and release will be 
much agile than JDK improve its classes.

>> Another dumb question, isn't AES-NI enabled by default in Java 8 nowadays 
>> [2]? Do you still get a significant speed up with Chimera in this case? If 
>> so I think contributing the improvements to OpenJDK would be a good idea 
>> too, this will benefit everyone in the next Java releases.
This is a very good question. JDK 6 is not optimized. JDK 7 and JDK 8 is 
partial optimized for some modes. We can see 17x throughput improvement for 
AES/CTR mode. 5x - 6x speedup for GCM mode. 

>> If so I think contributing the improvements to OpenJDK would be a good idea 
>> too, this will benefit everyone in the next Java releases.
Exactly, we have been working with Oracle team to bring these optimizations in 
latest JDK development. In Jan 2016, we committed the optimization on CTR to 
OpenJDK. (https://bugs.openjdk.java.net/browse/JDK-8143925)


Hope this information helps. Thanks Bourg for these insightful questions.

Thanks,
Haifeng

-----Original Message-----
From: Emmanuel Bourg [mailto:emmanuel.bo...@gmail.com] On Behalf Of Emmanuel 
Bourg
Sent: Tuesday, February 23, 2016 6:53 PM
To: Commons Developers List <dev@commons.apache.org>
Cc: common-...@hadoop.apache.org
Subject: Re: [crypto][chimera] Next steps

Hi all,

I got a quick look at the Chimera code. If I understand well it consists in:
- a native interface to the OpenSSL AES & secure random functions
- an abstraction layer to use the JCE or OpenSSL AES implementation
- an abstraction layer to use the JCE or OpenSSL secure random
- encrypting/decrypting input/output streams

Sorry if it sounds naive, but why not accessing the OpenSSL functions through a 
JCE provider instead of building an abstraction layer on top of another 
abstraction layer (JCE). The Apache JuiCE project was an attempt to implement 
this idea a few years ago [1]. With an OpenSSL based JCE provider the 
CryptoInput/OutputStream could probably be replaced by 
javax.crypto.CipherInput/OutputStream. As for the secure random part the 
standard java.security.SecureRandomSpi mechanism could be used to provide an 
OpenSSL based implementation.

What do you think?

Another dumb question, isn't AES-NI enabled by default in Java 8 nowadays [2]? 
Do you still get a significant speed up with Chimera in this case? If so I 
think contributing the improvements to OpenJDK would be a good idea too, this 
will benefit everyone in the next Java releases.

Emmanuel Bourg

[1] http://incubator.apache.org/projects/juice.html
[2] http://openjdk.java.net/jeps/164


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to