Let's say Alice has three secrets: SecretA, SecretB, SecretC

Alice shows these three secrets to Bob and gets a single signature from him that signs all three secrets together. Something like

Signature = Sign(Hash(SecretA, SecretB, SecretC))

Of course some care needs to be taken here with the hash function to avoid second preimage attacks.

Now Alice would like to prove to Carol that Bob has seen/signed SecretA, without revealing SecretB and SecretC to her (Bob is not around anymore to ask, but Carol trusts Bob's certificate).

Is there some form of hashing & signatue that would allow this? So that she can generate some proof using all three secrets plus the signature, but that will require to reveal only SecretA to Carol (plus maybe some data derived from SecretB and SecretC, which does not allow to recreate these secrets however)


Yes, if Bob creates his signature over hash(SecretA) || hash(SecretB) || hash(SecretC), like so:

Signature = Sign( hash(SecretA) || hash(SecretB) || hash(SecretC) )

and hash(SecretA), hash(SecretB), and hash(SecretC) are made public.

Then, Alice can prove to Carol that Bob signed SecretA by taking a hash of SecretA, and concatenating it with hash(SecretB) and hash(SecretC) [remember hash(SecretB) and hash(SecretC) are public, so Alice and Carol do not need to know SecretB and SecretC] , then verifying the signature over the above using Bob's public key.

  • Makes sense, thank you! Do they need to be made public at the time bob creates the signature or is it enough if Alice provides the hashes to Carol (I would believe that this should suffice)? – matthias_buehlmann Feb 22 at 1:11
  • 1
    @matthias_buehlmann YW. 'public' was probably not the best word to use. Yes, you are correct that Alice and Carol knowing hash(SecretB) and hash(SecretC) is sufficient. – mti2935 Feb 22 at 1:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.