# Interactive Homomorphic Encryption

Let's say that I have a plain computational process that consists of several divisions and I do not want to do it with non-interactive homomorphic encryption.

I would like to ask how can I call this process: Until a division, I do the computations non-interactively. When I face with division operation, here comes interactivity. I should send encrypted numerator and denominator to a party and get the division result back. This second party should not learn the contents of numerator and denominator.

Since I cannot call the process, I cannot find papers to read. I want to use this kind of solution, but I am new to homomorphic encryption. I have experience with non-interactive homomorphic encryption. But I would like to get experience on this interactive one.

I have no idea which scheme I can use and how to implement this. Do I need garbled circuits for this?

• How is what you want different from Secure multi-party computation? – abacabadabacaba Nov 17 '18 at 22:09
• In my case, both parties do not have input. Party A, when it gets stuck with a computation just sends it to Party B. And, Party B sends the result of this particular computation to Party A. – dilot Nov 18 '18 at 15:03
• Why can't Party A perform the computation by itself? If this is because Party B knows something that Party A doesn't, why can't Party B share this information with Party A? – abacabadabacaba Nov 18 '18 at 16:00
• I think the term you're looking for is "reactive functionality". Multiparty computation is often framed as parties having decided the function in advance and with all of their inputs ready at the start of the protocol... but some MPC protocols are reactive, meaning parties may choose step-by-step which inputs to share and which functions to perform. – kiwidrew Nov 18 '18 at 16:32
• No no. Let's say that Party A has c1 and c2 and wants to compute (c1+c2)/(c1*c2). Addition and multiplication are easy with homomorphic encryption schemes. But for division, I would use approximation function and this means lots of multiplications. So, requires lots of time. For this reason, I want to send (c1+c2) and (c1*c2) to Party B. I may use blinding. Then, Party B decrypts these two inputs, performs the division and sends the result back after encrypting. Party B learns anything, Party A gets the division result pretty fast. – dilot Nov 18 '18 at 16:33

Alice has input $$E(a),E(b)$$, where $$E$$ is some encryption scheme (I guess that in the scenario you have in mind, it's an FHE), and Bob has the decryption key of this FHE scheme. You want to realize the functionality that returns $$E(a/b)$$ to Alice, and nothing to Bob.
(note that even a perfectly secure realization of this functionality will at least leak whether $$b = 0$$, so you have to make sure this is not an issue for you in the larger protocol you want to use this subprotocol in).
As for how to implement it: if you're using an FHE scheme and just want to avoid doing the expensive division, it's super easy. Just let Alice homomorphically multiply $$b$$ by some $$r$$, and randomize the ciphertext: she gets $$E(rb)$$ and sends that to Bob. Bob decrypts, gets $$rb$$, computes $$(rb)^{-1}$$, encrypts, sends back. Alice gets $$E((rb)^{-1})$$, and homomorphically multiplies with $$r$$ and $$E(a)$$ to get $$E(a\cdot b^{-1})$$.
I suspect from your comments, however, that you are interested in approximate division of floats, and not just computation of $$E(a\cdot b^{-1})$$. Is it the case? If so, you will likely need a much more complex and interactive protocol.