I need to verify that two messages, that came over distinct channels, come from the same origin:

  • without knowing anything about the origin beforehand
  • the channels are one-way, only one message may be sent over each
  • the sender can have recipients public key

The sender has a random number that identifies them. Apparently I can send the ID encrypted with two different public keys, one for each channel? Is there some simpler method? I was thinking about something like two commutative functions, f and g so that f(g(x)) == g(f(x))? I don't need to know the ID and it would be a bit safer if I didn't. I just need to know that the messages are from the same sender.

  • Just have the sender encrypt both messages with the recipient's public key. The sender can include anything in the messages to allow the recipient to know they are from the same part. "The other message will say Moose9090934 in it" in one and "Moose909034" in the other will do it. Commented Jun 21, 2013 at 10:54

2 Answers 2


Simplest mechanism I can think of:

  • Client picks a large random value as an ID.
  • Encrypts the data, containing the ID, with the two separate public keys.
  • Sends each message to the two different channels.
  • Server verifies that both IDs are equal and that both signatures are OK.

Your security here relies on a combination of the security of your asymmetric cipher (e.g. RSA) and the difficulty in guessing an ID. If you use an appropriate CSPRNG, 128-bit IDs should be sufficient.


The second message might contain a cryptographic hash of the cleartext of (the cryptographic hash of) (any information contained in) the first message, which has been sent encrypted with the recipient's public key.

To be sure, this only demonstrates that Sender B had access to the message of Sender A, not that they are the same person. If Eve gains access to the message after Bob has received it, she can forge a new message purporting to be from Alice.

If the sender can prepare both messages beforehand, he can include in each the hash of the other, so that the order of arrival is unimportant.

Another possibility would be to include in each message a private or public key from the same ad hoc keypair. This can demonstrate that Sender A and Sender B share the same keypair, but it requires that messages are sent encrypted; otherwise, Eve could e.g. tamper with the first message, replace the private key with one of her own device, and forge a second message with the corresponding public key.


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .