I am attempting to implement probabilistic fair exchange described in Probabilistic Non-Repudiation without Trusted Third Party.

A secures a message using AES with 512 bit keys (in my implementation). A then generates N random 512 bit sequences. The cyphertext is then transmitted to B who signs it to provide proof of receipt. N is kept secret from B and a timeout t is agreed upon. A then sends the N random bit sequences one by one to B who signs each sequence and returns it to A. The signing must happen before the timeout (and the timeout is assumed to be significantly shorter than the time taken to decrypt the message) otherwise protocol execution ends. At the end the key is then transmitted and B would sign it as normal (not knowing if it is a fake key or the real key, but must continue to participate in case it is not the real key). A would then indicate to B that it is the real key and the fair exchange is completed.

This gives us an approximate 1/n probability that B can correctly guess the number of the real key (and potentially unfairly deprive A of a receipt).

For performance reasons n has to be limited to a sensible amount but for UX reasons, n is generated using a secure RNG between 500-1500 as a default value (which can be changed). This is public to both parties using the standard client implementation. If a user was to attack the protocol and attempt to guess the key without providing receipt, would it not make sense to guess n+1 to be approaching 1500? For instance it would nearly always make sense to an attacker to not provide a receipt for round 1500?

Should the source of the random number be the user (and risk severe performance penalties if they were to choose a random number too high) and only prompt the user if they provide a number outside a sensible range (and not give them a guideline) or is using the Secure-RNG sufficient to achieve probabilistic fair exchange



Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.