Mám pocit, že je tu trochu zmatek v tom podepisování. Aby podepisování dávalo smysl, musí data (pro koho je jízdenka vydaná, na jakou trasu a na kdy) samozřejmě podepsat server. Pokud by je podepisovala až aplikace v mobilu, může pomocí reverzního inženýrství (o které se tu snažíte) kdokoli vydávat jakékoli jízdenky. Ale tahle data server podepíše jednou při nákupu jízdenky a pošle vám je do aplikace. Aplikace si ta podepsaná data uloží a dále s nimi už může pracovat offline. Tahle podepsaná data posílaná ze serveru by tazatel musel vždy získat i pro svou aplikaci.
Druhá věc je zobrazení QR kódu. Tam už podepisování není potřeba, může tam být leda pro efekt. Tam už se řeší jen to, aby se zobrazený QR kód každou sekundu změnil, což je ochrana proti jeho ofocení. Pravděpodobně se to řeší tak, že se vezmou ta výše uvedená data ze serveru, k nim se připojí časová značka a to celé se prožene nějakou transformační funkcí, aby se změna časové značky rozprostřela do celého zakódovaného řetězce (a neměnil se tak jen kus QR kódu, ale celý kód). Ta transformační funkce může být nějaká šifra, ale stačilo by třeba i XORovat celý vstup tou časovou značkou. Do toho pak ale moc nesedí informace o tom, že jste v tom kódu viděl nějaký kus dat – snad jedině že by ta data byla rozsekaná na bloky a podle času se jen bloky různě zamíchaly – jiný způsob, jak měnit v čase celý QR kód a zároveň v něm zachovat viditelné části mne nenapadá.