Researchers and practitioners for decades assumed that encrypted data cannot be processed. Most recently, Craig Gentry work shown to be theoretically possible to build cryptosystems that allow the evaluation of any computable function on encrypted data. In parallel, the explosion of cloud computing has made these systems even more desirable. Unfortunately, despite remarkable advances, fully homomorphic encryption systems, i.e., systems that allow the evaluation of any function on encrypted data, did not reach acceptable levels of performance enabling practical applications. For that reason, important research has been made on partially homomorphic encryption systems, ie, systems that have homomorphic properties for speciﬁc functions. This work aims to facilitate the adoption of partially homomomorphic encryption. For that, a multiple scheme library of functions, needed to implement partially homomorphic cryptography, was developed. This library is unique in its kind. The language chosen for its implementation was Java, the most popular language for developing applications, both for server side, on the cloud, as for terminal devices, such as personal computers and smart phones. The library contains functions for encryption, decryption, key generation, and execution of homomorphic functions. In order to assess the practical use of the library, we designed two services with it:
• The HomomorphicSpace coordination service that is a tuple space that stores encrypted tuples but still supports operations like returning tuples with values within a certain range, and the result of sum and multiplication operations. The document presents an experimental evaluation of the coordination service. We observed a negligible overhead when homomorphic operations like comparisons were used.
• A remote ﬁle system for a Linux machine, that keeps cloud data and metadata encrypted with cryptographic schemes with homomorphic properties. Thanks to these properties it is possible to perform a set of ﬁle search operations, without any prior decoding. An experimental evaluation was made in order to show that the ﬁnal result have acceptable execution times.