Im building a backend for webapp(s), so that we can sell tickets for our events. The events ranges from 100-700 guests.
We sell tickets online and we would like to be able to scan the tickets at the entrance. This is done via a Barcode-128. But in the case it is not possible to scan the code, one should be able to type in the code and check it this way. So the code should not be longer than circa 12 digits.
Since on some location we have no internet it should be possible to download something like a public key before the festival.
I researched a little bit and found this. Which seemed like a fine solution. Simply take tow identifiers like the event- and order-id (maybe hash them), sign them and only take the first or last 5 digits of the signature and append them to the string. The verifier then can check the signature. But this mean that the verify either has to hold the privat key. To generate the whole signature and compare only a part of it or that the signature is very long. Am I right? I don't like this because the verifier should be independent from the seller.
Then I thought: okay let's do the same thing, take two identifiers and asymmetrically encrypt them. So I could share the private key and only if the second part can be decrypted with the public key and matches the first part the ticket is valid. The methods of async encryption that I know produce alway very long messages. So same problem as before.
Then I found this which seems fine. But im wondering if FPE is too easy to break since the checksum is only like 5 to 8 digits and that's not a lot of entropy.
Do I have to worry about this? Or does someone have a different, better idea? My knowledge of cryptography is ver limited. Maybe I understood something wrong.