Razlog zašto je većina kripto ideja temeljenih na lokaciji iz 2020. tiho umrla je taj što su vjerovale GPS-u. GPS je emitirani signal koji može slušati bilo koji prijemnik, a prijemniku se može reći da laže o onome što je čuo. Alat za to na Amazonu košta tridesetak dolara, i tako je od 2015. Svaki protokol koji novčaniku plaća stajanje na koordinati, a stajanje provjerava samo GPS-om, gubi novac na lažne novčanike koji stoje na kaučima. To nije ni težak ni pametan napad.
Proof of location je sloj koji to popravlja. Izraz se češće koristi nego definira, pa krenimo od definicije. Proof of location je tvrdnja, koju može provjeriti strana koja nije bila prisutna, da je određeni uređaj bio na određenoj koordinati unutar određenog vremenskog okvira. To je tvrdnja o prisutnosti, a ne o koordinati. U toj razlici živi većina inženjerskog posla.
Model prijetnji. Ne branimo se od države; taj krajnji slučaj dolazi na kraju. Branimo se od prosječnog napadača s mobitelom, laptopom i jednim poslijepodnevom. Taj napadač može lažirati GPS gotovim alatom, pokrenuti aplikaciju u emulatoru i izraditi novčanik jednim retkom koda. Svaku pojedinačnu kontrolu taj napadač može zaobići. Inženjerski cilj je da trošak zaobilaženja svih njih zajedno bude veći od nagrade u dropu.
Ovaj tekst jednostavnim riječima pokriva što Seek radi danas i što dolazi. Namjerno je kraći na marketinškoj strani, a dulji na mehanici.
Prvi sloj, u trenutku hvatanja: atestacija uređaja. Svaki zahtjev za hvatanje nosi potpisanu izjavu operativnog sustava. Na iOS-u je to Apple App Attest, na Androidu Google Play Integrity. Seek oboje provjerava na serveru. Atestacija jednim potpisom kaže tri stvari: ovo je stvaran uređaj, binarna datoteka aplikacije nije mijenjana i pozivatelj drži ključ koji je izrađen na ovom uređaju za naš paket. Rootani mobitel pada. Emulator pada. Prepakirana aplikacija koja je preskočila provjeru lokacije pada. Atestacija ne dokazuje gdje je mobitel; dokazuje da mobitel ne laže da je mobitel. To je ono zbog čega druge signale vrijedi čitati.
Drugi sloj, u trenutku hvatanja: udaljenost s tolerancijom. Klijent ti dopušta dodir gumba za hvatanje samo kad si unutar radijusa skupljanja spawna. Server neovisno provjerava koordinate koje si poslao prema koordinatama spawna i prihvaća do sedamdeset pet metara razlike. Razlika između radijusa gumba i radijusa servera je namjerna. GPS odstupanje na mobitelu naslonjenom na zid može odlutati nekoliko metara iz razloga za koje nisi kriv, a odbijanje hvatanja unutar tog odstupanja djeluje proizvoljno. Iznad sedamdeset pet metara zahtjev se odmah odbija, bez ocjenjivanja i bez žalbe na toj razini.
Drugi sloj, nastavak: ograničenja brzine i gornje granice po spawnu. Dva zahtjeva za skupljanje s razmakom manjim od pet sekundi dobivaju 429 od vrata temeljenih na Postgresu koja opstaju između serverless instanci. Jedan spawn prihvaća najviše dva pokušaja s istog računa, a drugi pokušaj vrijedi 65 posto prvog. Te granice nisu tu za otkrivanje prijevara; tu su da bot koji je već svladao ostale slojeve ne može rudariti endpoint brže nego što čovjek može igrati.
Treći sloj, u trenutku hvatanja: signali okruženja, bilježe se, ali ne provode. Svako hvatanje nosi i oznake: je li zahtjev došao iz simulatora, je li Android prijavio da položaj dolazi od pružatelja lažne lokacije te prijavljenu točnost GPS-a u metrima. One se bilježe i nikad se ne koriste za odbijanje samog hvatanja. Klijent koji o njima laže upravo je klijent kojem ne želiš prepustiti odluku, pa se odluka donosi drugdje. Važne su u četvrtom sloju.
Četvrti sloj, u trenutku isplate: vrata za prijevare. Isplate prolaze kroz serversku funkciju koja čita hvatanja računa u posljednjih devedeset dana. Ako je ijedno od tih hvatanja došlo iz simulatora, ili je Android prijavio pružatelja lažne lokacije, ili je račun napravio dva uspješna hvatanja s razmakom manjim od deset sekundi, ili se račun kretao između dviju koordinata hvatanja brže nego što čovjek može putovati, ili je drugi račun isplaćivao s istim otiskom uređaja, isplata se usmjerava na ljudsku provjeru umjesto da se automatski odobri. Korisniku se ne kaže koja je žica okinula, a njegov račun normalno nastavlja igrati. Otkrivanje je poslovna odluka o isplatama, a ne kazna.
Razlog za razdvajanje hvatanja i isplate je taj što brane različite stvari. Sloj hvatanja brani igru. Ako je hvatanje bilo lažno, pretvara se u valutu igre koja nikad ne napušta aplikaciju, što ne košta ništa. Sloj isplate brani stvaran novac. Svaki dolar koji napušta sustav prolazi kroz devedesetodnevni pregled onoga što je dovelo do salda, a jedan sumnjiv signal u tom razdoblju dovoljan je da se odluka preda čovjeku. Dva sloja zajedno znače da legitimni igrač nikad ne osjeti trenje u trenutku hvatanja, a napadač kojem je prošlo loše hvatanje nikad ne vidi novac.
Peti sloj, u trenutku hvatanja: trag kretanja. Svaki mobitel ima akcelerometar i žiroskop na istom čipu koji komunicira s GPS-om. Seek sada bilježi kratak prozor kretanja u sekundama prije hvatanja, izračunava mali skup statistika (varijancu jakosti, rotacijsku aktivnost, broj mirnih okvira) i taj sažetak šalje sa zahtjevom za skupljanje. Mobitel koji je hodao do spawna ima drukčiji potpis kretanja od mobitela koji leži na stolu s pokrenutim GPS simulatorom. Potpis se danas ne provodi u sloju hvatanja, iz istog razloga kao i oznake okruženja: izmijenjeni klijent može lagati. Ide u devedesetodnevna vrata za prijevare, uz signale simulatora i lažne lokacije, a ravan trag kretanja u zapisu još je jedna žica koja isplatu predaje ljudskoj provjeri.
Razrađen primjer. Tester pokrene GPS lažnjak, postavi koordinatu na Seek drop na drugom kraju grada i dodirne hvatanje. Provjera udaljenosti prolazi jer se lažna koordinata podudara. Atestacija prolazi jer aplikacija nije mijenjana. Hvatanje se bilježi. Dva sata kasnije isti tester napravi još tri hvatanja, jedno s druge koordinate deset kilometara dalje. Trag kretanja na sva četiri je ravan (mobitel se nikad nije pomaknuo), a provjera nemogućeg kretanja okida na dvije koordinate do kojih se u dva sata nije moglo doći pješice. Račun nastavlja igrati, skupljati i ne zna da nešto nije u redu. Kad tester zatraži isplatu, ona završi na stolu za ljudsku provjeru s priloženom oznakom nemogućeg kretanja i ravnim tragom kretanja. Provjeravatelj je odbija. Testerov skupljeni saldo od četrdeset dolara nikad ništa ne vrijedi izvan aplikacije.
Ekonomski okvir. Nije važno da je lažiranje samog hvatanja nemoguće; važno je da vrata isplate čitaju unatrag sve što je račun napravio da dođe do salda. Drop vrijedan dva eura zaštićen atestacijom i udaljenošću jeftino je napasti jednom, a besmisleno napadati opetovano, jer provjera isplate uhvati obrazac prije nego obrazac postane novac. Drop vrijedan deset tisuća eura treba jači okvir u sloju hvatanja, i o tome govori plan razvoja u nastavku.
Što je u planu razvoja. Sljedeća kontrola koja stiže je beacon zamjena za dropove u zatvorenom. Za spawn postavljen unutar zgrade, gdje je GPS besmislen, mali Bluetooth beacon registriran za drop omogućuje aplikaciji da dokaže prisutnost bez ikakvog oslanjanja na satelitski položaj. Provođenje atestacije drugi je smjer rada: danas se zahtjevi bez atestacije bilježe, ali i dalje prihvaćaju, kako bismo mogli izmjeriti stopu pogrešnih odbijanja na legitimnim uređajima prije nego prebacimo prekidač i počnemo ih izravno odbijati. Oboje stiže kao mali, dosadni, provjerljivi dodaci istom obrascu hvatanja i isplate koji se već koristi.
Što još ne radi dobro. GPS u zatvorenom u trgovačkom centru griješi deset do petnaest metara i nikakva pamet na serveru to ne popravlja; beacon je pravi odgovor, zato je u planu. Kašnjenja ispod sekunde nema i vjerojatno ga neće biti, jer vrata za prijevare čitaju povijest, a ne jedan zahtjev. Nosivi uređaji imaju manji skup senzora od mobitela, pa se dizajn proof of locationa prilagođen mobitelima ne prenosi čisto na naočale. I država s kamionom radio opreme danas može svladati bilo koji provjeravatelj na mobitelu; svaki protokol koji tvrdi suprotno nije iskren prema tebi. Naš neće tvrditi.
Načelo dizajna koje vrijedi izreći naglas. Provjeravatelj treba biti iskren o tome što može, a što ne može dokazati. Predstavljati probabilističku ocjenu kao apsolutno da ili ne gore je nego predstavljati apsolutno da ili ne iz strogih pravila, jer ocjena stvara klizač, a svaki se klizač gura prema prihvaćanju više tvrdnji kad ciljevi angažmana kasne. Naš sloj hvatanja nema klizač. Ili prolazi provjere ili ne. Sloj prijevara ima klizač, a taj je klizač kod čovjeka, ne u kodu.
Ovo je dio ispod Seeka zbog kojeg se usidrena imovina i airdropovi s potvrđenom lokacijom isplate. Izdavač postavlja token stvarne vrijednosti na koordinatu jer je osoba koja ga na kraju dobije bila na toj koordinati s uređajem koji je prošao atestaciju i jer će vrata isplate pročitati povijest računa prije nego novac krene. Whitepaper sadrži potpunu specifikaciju. Ovaj tekst je verzija jednostavnim jezikom onoga što se događa unutar aplikacije.
Ukratko. Prisutnost nije koordinata. Jedan signal ne dokazuje prisutnost. Seek potvrđuje prisutnost u dva sloja: atestacija, udaljenost i trag kretanja u trenutku hvatanja te devedesetodnevna vrata za prijevare u trenutku isplate. Ono jedno što je još otvoreno, beacon zamjena za dropove u zatvorenom, zatvara posljednji slučaj koordinate koji sam GPS ne može. To je ono što proof of location danas stvarno jest unutar Seeka i zato je taj sloj važniji od bilo koje blještavije stvari koju omogućuje.


