INTRODUCTION
First of all, I'm a beginner in RSA mechanisms and similar but I'm really interested in knowing if this is possible.
In this scenario, I organized a party where certain people receive a special invitation voucher I made with my private key. They will later use it to enter and I will check if it is valid with a public key.
On the begining let's suppose the voucher has someone's ID and the voucher ID "signed" below by a private key. By this mean, I can ensure THIS person will enter with THAT entrance ID.
MAIN PART
But now I want this vouchers to be transferable in OFFLINE mode with some sort of program. So now it would consist of two blocks; the second one ensures the ticket IS the one. And the first block, would contain the actual holder of the voucher:
.............................................. BLOCK 1
ACTUAL HOLDER DATA
SIGNATURE OF THIS BLOCK
.............................................. BLOCK 2
ORIGINAL HOLDER
VOUCHER ID
SIGNATURE OF THIS BLOCK
..............................................
I provide the first invitee with his own private key, so he can modify the first block to change the ACTUAL HOLDER DATA in virtue of the new person he transfered the voucher to. When he/she does this, he also provides the private key to the new person.
THE FLAW
If (let's call him) Mallory makes a copy of his voucher before he transfers it to Alice correctly, he would be ALSO able to enter to my party although Alice should be the only one capable of entering. And so, the number of invitees could be infinite.
My question is simple, how can I disable Mallory's voucher?
Option 1 would be to make the transaction online and add to a server which acknowledges that Alice is the new owner of THAT voucher. Otherwise I need a mechanism to make the old voucher obsolete, unless anyone proposes something better.