Cryptography Stack Exchange is a question and answer site for software developers, mathematicians and others interested in cryptography. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

What is the state of the art way when implementing a scheme challenging a party to prove they have access to certain data?

What I'm looking for something along the lines of

  1. Give them (id-some-data, random-data, my public-key).
    Request to return the signature of (some-data xor random-data) with my-public-key.
  2. Give them (id-some-data, random-data).
    Request to return hash(random-data + some-data)

So basically I'd like to verify if the other party has access to the requested data and prevent them from precalculating the proof of it.

What is the correct name for such schemes in the crypto world?

What would be the theoretical difference between the two schemes above? (other than probably higher "security" of the PubPriv key scheme compared to the hash functions available).

P.S.: I do know better than to implement own crypto ;) The above are just examples to explain what I'm looking for.

share|improve this question
up vote 5 down vote accepted

I'd go with hash(ProverPublicKey || RandomChallenge || Data) over your idea of hash(RandomChallenge || Data). Your scheme has the problem that the prover might challenge another party to prove that they have the data and forward that prove to the original challenger.

Related keywords are proof-of-retrievability, proof-of-ownership or proof-of-data-possession.

share|improve this answer
Thanks for the keywords. Nice hint reg. prove "farming" from other parties ;) Thanks. – pointernil Jun 9 '13 at 21:13

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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