| CPC H04L 9/30 (2013.01) [H04L 9/008 (2013.01)] | 14 Claims | 

| 
               1. A method for executing a secure algorithm for computing on a plurality of machines in a cluster, the method comprising: 
            establishing a public key infrastructure, the public key infrastructure further comprising a public key and a plurality of secret keys for a homomorphic encryption scheme, each of the secret keys associated with one of the plurality of machines, wherein the machines each comprise at least one computer processor unit and memory storage unit; 
                transmitting the secret keys to the machines with which they are associated; 
                receiving a large input message for operation in the plurality of machines and dividing the large input message into a plurality of initial input messages capable of being stored within the memory storage unit of each of the machines; 
                transmitting the initial input messages to each machine; 
                computing an encryption of an initial state at each machine and the initial input message using the public key; 
                evaluating a cluster computing circuit using the homomorphic encryption scheme; 
                in a decryption phase, at each machine: 
                receiving the ciphertext output from another one of the machines in the cluster as a ciphertext input; 
                computing a partial homomorphic decryption of the ciphertext output using the secret key associated with the machine; 
                at each machine except for a selected first machine, transmitting the partial decryption to the selected first machine in a tree-like fashion to combine the partial decryptions; 
                at the first machine receiving the combined partial decryption; and 
                decrypting the combined partial decryptions and storing the combined output on a storage media; 
                wherein the cluster computing circuit further comprises a protocol for execution on a plurality of machines and the protocol is configured for computing a pre-defined functionality, and 
                wherein the pre-defined functionality is an output having a size that fits within the memory storage unit of the machine. 
               |