Razlog zašto je većina kripto ideja zasnovanih na lokaciji iz 2020. tiho umrla je to što su verovale GPS-u. GPS je emitovani signal koji svaki prijemnik može da sluša, a prijemniku se može reći da laže o tome šta je čuo. Alat za to košta oko trideset dolara na Amazon-u, i tako je od 2015. Svaki protokol koji novčaniku plaća za stajanje na koordinati, a to stajanje proverava samo GPS-om, gubi novac na lažne novčanike koji stoje na kauču. To nije ni težak ni pametan napad.
Dokaz lokacije je sloj koji to rešava. Izraz se češće koristi nego što se definiše, pa počnimo od definicije. Dokaz lokacije je tvrdnja, koju može da proveri strana koja nije bila prisutna, da je određeni uređaj bio na određenoj koordinati u određenom vremenskom okviru. To je tvrdnja o prisustvu, a ne o koordinati. U toj razlici se krije većina inženjerskog posla.
Model pretnje. Ne branimo se od države, taj krajnji slučaj dolazi na kraju. Branimo se od prosečnog napadača sa telefonom, laptopom i jednim popodnevom. Takav napadač može da lažira GPS gotovim alatom, pokrene aplikaciju u emulatoru i napravi novčanik jednom linijom koda. Svaku pojedinačnu kontrolu taj napadač može da savlada. Inženjerski cilj je da cena savladavanja svih njih zajedno bude viša od nagrade u dropu.
Ovaj tekst jednostavnim jezikom pokriva šta Seek radi danas i šta dolazi. Namerno je kraći na marketinškoj strani, a duži na mehanici.
Prvi sloj, u trenutku ulova: atestacija uređaja. Svaki zahtev za ulov nosi potpisanu izjavu operativnog sistema. Na iOS-u je to Apple App Attest, na Android-u Google Play Integrity. Seek obe proverava na serveru. Atestacija jednim potpisom kaže tri stvari: ovo je pravi uređaj, binarna datoteka aplikacije nije menjana, a pozivalac drži ključ koji je napravljen na ovom uređaju za naš paket. Rutovan telefon pada. Emulator pada. Prepakovana aplikacija koja je preskočila proveru lokacije pada. Atestacija ne dokazuje gde je telefon, već dokazuje da telefon ne laže o tome da je telefon. Zbog toga vredi čitati ostale signale.
Drugi sloj, u trenutku ulova: udaljenost uz toleranciju. Klijent vam dozvoljava da dodirnete dugme za ulov samo kada ste unutar radijusa sakupljanja novčića. Server nezavisno upoređuje koordinate koje ste poslali sa koordinatama novčića i prihvata razdvajanje do sedamdeset pet metara. Razlika između radijusa dugmeta i radijusa servera je namerna. GPS odstupanje kod telefona naslonjenog na zid može da se pomeri nekoliko metara iz razloga za koje niste krivi, a odbijanje ulova unutar tog odstupanja deluje proizvoljno. Iznad sedamdeset pet metara zahtev se odmah odbija, bez ocenjivanja i bez žalbe na tom nivou.
Drugi sloj, nastavak: ograničenja učestalosti i limiti po novčiću. Dva zahteva za sakupljanje u razmaku kraćem od pet sekundi dobijaju 429 od provere zasnovane na Postgres-u, koja opstaje između serverless izolata. Jedan novčić prihvata najviše dva pokušaja sa istog naloga, a drugi pokušaj vredi 65 procenata prvog. Ovi limiti nisu tu radi otkrivanja prevara, već da bot koji je već savladao ostale slojeve ne može da crpi krajnju tačku brže nego što čovek može da igra.
Treći sloj, u trenutku ulova: signali okruženja, beleže se ali ne sprovode. Svaki ulov nosi i oznake: da li je zahtev stigao iz simulatora, da li je Android prijavio da pozicija potiče od lažnog pružaoca lokacije i prijavljenu GPS tačnost u metrima. Ovi podaci se beleže i nikada se ne koriste za odbijanje samog ulova. Klijent koji o njima laže upravo je klijent kome ne želite da prepustite odluku, pa se odluka donosi na drugom mestu. Važni su u četvrtom sloju.
Četvrti sloj, u trenutku isplate: provera prevara. Isplate prolaze kroz serversku funkciju koja čita ulove naloga u poslednjih devedeset dana. Ako je bilo koji od tih ulova stigao iz simulatora, ili je Android prijavio lažnog pružaoca, ili je nalog napravio dva uspešna ulova u razmaku kraćem od deset sekundi, ili se nalog između dve koordinate ulova kretao brže nego što čovek može da putuje, ili je drugi nalog već podigao novac sa istog otiska uređaja, isplata se upućuje na ljudsku proveru umesto da bude automatski odobrena. Korisniku se ne kaže koji je alarm okinuo, a njegov nalog nastavlja normalno da igra. Otkrivanje je poslovna odluka o isplatama, a ne kazna.
Razlog za razdvajanje ulova i isplate je to što brane različite stvari. Sloj ulova brani igru. Ako je ulov bio lažan, pretvara se u valutu igre koja nikada ne napušta aplikaciju, što ništa ne košta. Sloj isplate brani pravi novac. Svaki dolar koji napušta sistem prolazi kroz devedesetodnevnu proveru onoga što je dovelo do stanja, a jedan sumnjiv signal u tom periodu dovoljan je da se odluka prepusti čoveku. Dva sloja zajedno znače da legitiman igrač nikada ne oseti prepreku u trenutku ulova, a napadač koji je provukao loš ulov nikada ne vidi novac.
Peti sloj, u trenutku ulova: zapis kretanja. Svaki telefon ima akcelerometar i žiroskop na istom čipu koji komunicira sa GPS-om. Seek sada beleži kratak prozor kretanja u sekundama pre ulova, računa mali skup statistika (varijansu intenziteta, rotacionu aktivnost, broj mirnih kadrova) i šalje taj sažetak uz zahtev za sakupljanje. Telefon koji je pešačio do novčića ima drugačiji potpis kretanja od telefona koji leži na stolu sa pokrenutim GPS simulatorom. Potpis se danas ne sprovodi u sloju ulova, iz istog razloga kao ni oznake okruženja: izmenjen klijent može da laže. Ide u devedesetodnevnu proveru prevara, pored signala simulatora i lažnog pružaoca, a ravan zapis kretanja u istoriji je još jedan alarm koji isplatu upućuje na ljudsku proveru.
Primer. Tester pokrene GPS lažnjak, postavi koordinatu na Seek drop na drugom kraju grada i dodirne ulov. Provera udaljenosti prolazi jer se lažirana koordinata poklapa. Atestacija prolazi jer aplikacija nije menjana. Ulov se beleži. Dva sata kasnije isti tester napravi još tri ulova, jedan od njih sa druge koordinate udaljene deset kilometara. Zapis kretanja na sva četiri je ravan (telefon se nikada nije pomerio), a provera nemogućeg kretanja se aktivira za dve koordinate do kojih se pešice nije moglo stići za dva sata. Nalog nastavlja da igra, nastavlja da sakuplja i ne zna da nešto nije u redu. Kada tester zatraži isplatu, ona stiže na sto za ljudsku proveru, sa priloženom oznakom nemogućeg kretanja i ravnim zapisom kretanja. Proveravač je odbija. Četrdeset dolara sakupljenog stanja testera nikada ne vrede ništa van aplikacije.
Ekonomski okvir. Nije važno da je lažiranje samog ulova nemoguće, već da provera isplate čita unazad sve što je nalog uradio da bi stigao do stanja. Drop vredan dva evra, zaštićen atestacijom i udaljenošću, jeftino je napasti jednom, a besmisleno ponavljati, jer provera isplate otkriva obrazac pre nego što obrazac postane novac. Dropu vrednom deset hiljada evra potreban je jači okvir u sloju ulova, i o tome govori mapa puta ispod.
Šta je na mapi puta. Bikon kao rezervna opcija za dropove u zatvorenom prostoru je sledeća kontrola koja stiže. Za novčić postavljen unutar zgrade, gde je GPS besmislen, mali Bluetooth bikon registrovan uz drop omogućava aplikaciji da dokaže prisustvo bez oslanjanja na satelitsku poziciju. Sprovođenje atestacije je drugi pravac: danas se zahtevi bez atestacije beleže, ali se i dalje prihvataju, kako bismo izmerili stopu pogrešnih odbijanja na legitimnim uređajima pre nego što uključimo prekidač i počnemo da ih odbijamo. Obe stvari stižu kao mali, dosadni, proverljivi dodaci istom obrascu ulova i isplate koji se već koristi.
Šta još ne radi dobro. GPS u zatvorenom prostoru greši deset do petnaest metara u tržnom centru, i nikakva serverska dosetljivost to ne popravlja. Pravi odgovor je bikon, i zato je na mapi puta. Kašnjenje ispod sekunde nije postignuto i verovatno neće biti, jer provera prevara čita istoriju, a ne jedan zahtev. Nosivi uređaji imaju manji skup senzora od telefona, pa dizajn dokaza lokacije podešen za telefone ne prelazi čisto na naočare. A država sa kamionom radio opreme danas može da savlada svaku proveru na mobilnom telefonu. Svaki protokol koji tvrdi drugačije nije iskren prema vama. Naš neće tvrditi.
Princip dizajna koji vredi izgovoriti naglas. Provera treba da bude iskrena o tome šta može, a šta ne može da dokaže. Predstaviti verovatnosnu ocenu kao apsolutno da ili ne gore je od apsolutnog da ili ne na osnovu strogih pravila, jer ocena stvara klizač, a svaki klizač se pomera ka prihvatanju više preuzimanja kada ciljevi angažovanja zaostaju. Naš sloj ulova nema klizač. Provere ili prolaze ili ne. Sloj prevara ima klizač, a taj klizač je u rukama čoveka, a ne u kodu.
Ovo je deo ispod Seek-a zbog kog usidrena imovina i erdropovi sa potvrđenom lokacijom imaju smisla. Izdavač postavlja token prave vrednosti na koordinatu zato što je osoba koja ga na kraju dobije bila na toj koordinati sa atestiranim uređajem, i zato što će provera isplate pročitati istoriju naloga pre nego što se novac pomeri. Whitepaper sadrži kompletnu specifikaciju. Ovaj tekst je verzija jednostavnim jezikom onoga što se dešava unutar aplikacije.
Ukratko. Prisustvo nije koordinata. Jedan signal ne dokazuje prisustvo. Seek prisustvo potvrđuje u dva sloja: atestacijom, udaljenošću i zapisom kretanja u trenutku ulova i devedesetodnevnom proverom prevara u trenutku isplate. Ono što je još otvoreno, bikon kao rezervna opcija za dropove u zatvorenom prostoru, zatvara poslednji slučaj koordinata koji sam GPS ne može da pokrije. To je ono što dokaz lokacije u Seek-u danas zaista jeste, i zato je taj sloj važniji od svih upadljivijih stvari koje omogućava.


