Põhjus, miks enamik 2020. aasta asukohapõhiseid krüptoideid vaikselt suri, on see, et nad usaldasid GPS-i. GPS on levisignaal, mida iga vastuvõtja kuulata saab, ja vastuvõtjale saab öelda, et ta valetaks selle kohta, mida ta kuulis. Selleks vajalikud tööriistad maksavad Amazonis umbes kolmkümmend dollarit ja on seda maksnud alates 2015. aastast. Iga protokoll, mis maksab rahakotile koordinaadil seismise eest ja kontrollib seda seismist ainult GPS-iga, kaotab raha võltsrahakottidele, mis seisavad diivanitel. See pole ei raske ega nutikas rünnak.
Asukoha tõend on kiht, mis selle parandab. Väljendit kasutatakse rohkem, kui seda defineeritakse, nii et alustame definitsioonist. Asukoha tõend on väide, mida saab kontrollida osapool, kes kohal ei olnud, et konkreetne seade oli konkreetses ajaaknas konkreetsel koordinaadil. See on väide kohaloleku, mitte koordinaadi kohta. Selles eristuses peitub suurem osa inseneritööst.
Ohumudel. Me ei kaitse end riigi vastu; see äärmuslik juhtum tuleb lõpus. Me kaitseme end keskmise ründaja vastu, kellel on telefon, sülearvuti ja üks pärastlõuna. See ründaja saab GPS-i võltsida valmis tööriistaga, käivitada äpi emulaatoris ja luua rahakoti ühe koodireaga. Iga üksiku kontrolli saab see ründaja ületada. Inseneri eesmärk on, et nende kõigi koos ületamise hind oleks kõrgem kui auhind dropis.
See lugu räägib lihtsate sõnadega, mida Seek täna teeb, ja sellest, mis on tulemas. See on meelega turunduse osas lühem ja mehaanika osas pikem.
Esimene kiht, püügi hetkel: seadme atesteerimine. Iga püügitaotlus kannab operatsioonisüsteemi allkirjastatud kinnitust. iOS-is on see Apple App Attest, Androidis Google Play Integrity. Seek kontrollib mõlemat serveris. Atesteerimine ütleb ühes allkirjas kolme asja: see on päris seade, äpi binaarfaili pole rikutud ja kutsuja omab võtit, mis loodi selles seadmes meie bundle'i jaoks. Rooditud telefon kukub läbi. Emulaator kukub läbi. Ümber pakendatud äpp, mis asukohakontrollist mööda läks, kukub läbi. Atesteerimine ei tõesta, kus telefon on; see tõestab, et telefon ei valeta telefon olemise kohta. See teebki teised signaalid lugemist väärt.
Teine kiht, püügi hetkel: vahemaa koos tolerantsiga. Klient laseb sul püüginuppu vajutada ainult siis, kui oled spawni korjeraadiuse sees. Server kontrollib sõltumatult sinu saadetud koordinaate spawni koordinaatide suhtes ja aktsepteerib kuni seitsmekümne viie meetri suurust vahet. Nupu raadiuse ja serveri raadiuse vahe on tahtlik. Seina vastu toetuva telefoni GPS-i kõikumine võib nihkuda paar meetrit põhjustel, milles sa süüdi pole, ja selle kõikumise piires püükide tagasilükkamine tundub meelevaldne. Üle seitsmekümne viie meetri lükatakse taotlus kohe tagasi, ilma hindamise ja ilma edasikaebamiseta selles kihis.
Teine kiht, jätkub: sageduspiirangud ja spawnipõhised ülempiirid. Kaks korjetaotlust, mille vahe on alla viie sekundi, saavad vastuseks 429 Postgresi toel töötavalt väravalt, mis püsib serverivabade isolaatide vahel. Üks spawn võtab samalt kontolt vastu kõige rohkem kaks katset ja teine katse on väärt 65 protsenti esimesest. Need piirangud pole pettuste tuvastamiseks; need on selleks, et bot, mis on juba teised kihid ületanud, ei saaks endpointi kiiremini kaevandada, kui inimene mängida suudab.
Kolmas kiht, püügi hetkel: keskkonnasignaalid, salvestatud, aga jõustamata. Iga püük kannab ka lippe: kas taotlus tuli simulaatorist, kas Android teatas, et asukoht tuli võltsasukoha pakkujalt, ja teatatud GPS-i täpsus meetrites. Need salvestatakse ja neid ei kasutata kunagi püügi enda tagasilükkamiseks. Klient, kes nende kohta valetab, on täpselt see klient, kes ei tohiks otsust langetada, seega langetatakse otsus mujal. Need on olulised neljandas kihis.
Neljas kiht, väljamakse hetkel: pettusevärav. Väljavõtted läbivad serverifunktsiooni, mis loeb konto viimase üheksakümne päeva püüke. Kui mõni neist tuli simulaatorist või Android teatas võltsasukoha pakkujast või konto tegi kaks edukat püüki alla kümnesekundilise vahega või konto liikus kahe püügikoordinaadi vahel kiiremini, kui inimene reisida suudab, või teine konto on teinud väljavõtte samalt seadme sõrmejäljelt, suunatakse väljavõte automaatse kinnitamise asemel inimesele ülevaatamiseks. Kasutajale ei öelda, milline traat rakendus, ja tema konto mängib tavapäraselt edasi. Tuvastamine on äriotsus väljamaksete kohta, mitte karistus.
Püügi ja väljamakse lahutamise põhjus on see, et need kaitsevad eri asju. Püügikiht kaitseb mängu. Kui püük oli petturlik, muutub see mänguvaluutaks, mis ei lahku kunagi äpist, ja see ei maksa midagi. Väljamaksekiht kaitseb päris raha. Iga süsteemist lahkuv dollar läbib üheksakümne päeva ülevaate sellest, mis saldoni viis, ja üksainus kahtlane signaal selles aknas piisab, et otsus inimesele anda. Kaks kihti koos tähendavad, et seaduslik mängija ei näe püügi hetkel kunagi takistusi ja ründaja, kes halva püügi läbi libistas, ei näe kunagi raha.
Viies kiht, püügi hetkel: liikumisjälg. Igal telefonil on kiirendusandur ja güroskoop samal kiibil, mis GPS-iga suhtleb. Seek salvestab nüüd püügile eelnevate sekundite kohta lühikese liikumisakna, arvutab väikese hulga statistikat (suuruse dispersioon, pöörlemisaktiivsus, liikumatute kaadrite arv) ja saadab selle kokkuvõtte korjetaotlusega kaasa. Telefonil, mis kõndis spawni juurde, on teistsugune liikumissignatuur kui laual lebaval telefonil, milles töötab GPS-simulaator. Signatuuri ei jõustata täna püügikihis samal põhjusel kui keskkonnalippe: paigatud klient võib valetada. See läheb üheksakümne päeva pettuseväravasse simulaatori ja võltsasukoha signaalide kõrvale ning lame liikumisjälg kirjes on veel üks traat, mis annab väljavõtte inimesele ülevaatamiseks.
Läbitöötatud näide. Testija käivitab GPS-i võltsija, seab koordinaadi teisel pool linna asuvale Seeki dropile ja vajutab püüa. Vahemaa kontroll läheb läbi, sest võltsitud koordinaat klapib. Atesteerimine läheb läbi, sest äpp on muutmata. Püük registreeritakse. Kaks tundi hiljem teeb sama testija veel kolm püüki, neist ühe kümne kilomeetri kaugusel teiselt koordinaadilt. Liikumisjälg on kõigil neljal lame (telefon ei liikunud kunagi) ja võimatu liikumise kontroll rakendub kahele koordinaadile, milleni ei saanud kahe tunniga jalgsi jõuda. Konto mängib edasi, korjab edasi ega tea, et midagi on valesti. Kui testija taotleb väljamakset, jõuab see inimliku ülevaatuse lauale koos võimatu liikumise lipu ja lameda liikumisjäljega. Ülevaataja lükkab selle tagasi. Testija neljakümne dollari suurune korjatud saldo ei ole väljaspool äppi kunagi midagi väärt.
Majanduslik raamistik. Oluline pole see, et püügi enda võltsimine oleks võimatu; oluline on see, et väljamaksevärav loeb tagasi läbi kõige, mida konto saldoni jõudmiseks tegi. Kaheeurost dropi, mida kaitsevad atesteerimine ja vahemaa, on odav üks kord rünnata ja mõttetu korduvalt rünnata, sest väljavõtte kontroll tabab mustri enne, kui mustrist saab raha. Kümne tuhande euro väärtune drop vajab püügikihis tugevamat raamistikku ja just sellest räägib allolev teekaart.
Mis on teekaardil. Järgmine kontroll on majakavaruvariant siseruumide droppide jaoks. Hoonesse paigutatud spawni jaoks, kus GPS on mõttetu, laseb dropi külge registreeritud väike Bluetoothi majakas äpil kohalolekut tõestada üldse satelliidi asukohast sõltumata. Atesteerimise jõustamine on teine suund: täna logitakse atesteerimata taotlused, aga võetakse endiselt vastu, et saaksime mõõta ekslike tagasilükkamiste määra seaduslike seadmete puhul enne, kui lüliti keerame ja need otse tagasi lükkame. Mõlemad tulevad väikeste, igavate, kontrollitavate lisandustena samale juba kasutatavale püügi ja väljamakse mustrile.
Mis ikka veel hästi ei tööta. Siseruumide GPS eksib kaubanduskeskuses kümme kuni viisteist meetrit ja mingi serveripoolne nutikus seda ei paranda; päris vastus on majakas, seepärast ongi see teekaardil. Alla sekundi latentsust pole ja ilmselt ei tule, sest pettusevärav loeb ajalugu, mitte ühte taotlust. Kantavatel seadmetel on telefonidest väiksem andurite komplekt, nii et telefonidele häälestatud asukoha tõendi disain ei kandu prillidele puhtalt üle. Ja riik, kellel on veoautotäis raadiosagedusseadmeid, suudab täna ületada iga mobiiltelefoni kontrollija; iga protokoll, mis väidab teisiti, ei ole sinuga aus. Meie oma ei väida.
Disainipõhimõte, mida tasub valjult välja öelda. Kontrollija peaks olema aus selle suhtes, mida ta suudab ja mida ei suuda tõestada. Tõenäosusliku skoori esitamine absoluutse jah või ei-na on halvem kui rangetest reeglitest tuleneva absoluutse jah või ei esitamine, sest skoor loob liuguri ja iga liugurit lükatakse rohkemate lunastuste aktsepteerimise poole, kui kaasatuse eesmärgid maha jäävad. Meie püügikihil pole liugurit. See kas läbib kontrollid või mitte. Pettusekihil on liugur ja see liugur on inimese, mitte koodi käes.
See on Seeki all olev osa, mis teeb ankurdatud varad ja asukohaga kinnitatud airdropid tegemist väärt. Avaldaja paigutab päris raha väärt tokeni koordinaadile, sest see, kelle kätte see lõpuks jõuab, oli sellel koordinaadil atesteeritud seadmega, ja sest väljamaksevärav loeb enne raha liikumist konto ajaloo tagasi läbi. Whitepaperis on täielik spetsifikatsioon. See lugu on lihtsas keeles versioon sellest, mis äpi sees toimub.
Lühidalt. Kohalolek pole koordinaat. Üks signaal ei tõesta kohalolekut. Seek kontrollib kohalolekut kahes kihis: atesteerimine, vahemaa ja liikumisjälg püügi hetkel ning üheksakümne päeva pettusevärav väljamakse hetkel. See, mis veel lahti on, majakavaruvariant siseruumide droppide jaoks, sulgeb viimase koordinaadijuhtumi, millega GPS üksi hakkama ei saa. See ongi asukoha tõend Seekis täna ja just seepärast on see kiht olulisem kui ükski neist uhkematest asjadest, mida see võimaldab.


