# Tag Info

Yes. The easiest way is if $K$ is an RSA private key, and Bob has the public key. Then, here's how it works; we'll call the ciphertext that Bob has $C$: Bob selects a random number $r$, and computes both $C \cdot r^e \bmod N$ and $r^{-1} \bmod N$ (where $e$ and $N$ are the public exponent and the modulus from the public key) Bob sends $C \cdot r^e \bmod ... 5 What you are seeking for is a special case of secure multiparty computation, namely secure function evaluation or also called secure 2 party computation. However, general solutions to this problem require interaction, meaning that the parties performing the computation need to exchange more than two messages. You write: To compute some arbitrary ... 3 More generally, any encryption that is commutative can be used because then: $$(D_k \circ D_K \circ E_k \circ E_K)(m) = m$$ I.e. Bob can encrypt the ciphertext$E_K(m)$with a new key$k$, then gives that to Alice for decoding with$K$and finally decodes it himself with$k$. Stream ciphers are commutative, as is exponentiation modulo$n$(used in RSA) ... 3 The simplest way to do this would be to have the sender randomly shuffle the elements. The receiver chooses a random element to request. That way the receiver has no idea which of the original (before the shuffle) elements he got. 1 How about hashes?$P_i$choose random numbers$R_i$that they exchange through$S$. They calculate$H_i = H(R_1|R_2|m_i)$that they give$S$. If$H_1 = H_2$, then$S$can be reasonably sure$m_1=m_2$. Assuming$H$is a strong cryptographic hash function and$R_i\$ are long enough to avoid collisions (e.g. 256 bits), the worst the server can do is a brute ...