De reden dat de meeste locatiegebonden crypto-ideeën uit 2020 stilletjes doodgingen, is dat ze GPS vertrouwden. GPS is een uitgezonden signaal waar elke ontvanger naar kan luisteren, en een ontvanger kun je laten liegen over wat hij hoorde. Tools daarvoor kosten zo'n dertig dollar op Amazon, en dat al sinds 2015. Elk protocol dat een wallet betaalt voor het staan op een coördinaat, en dat staan alleen met GPS verifieert, verliest geld aan nepwallets die op de bank zitten. Het is geen moeilijke aanval en ook geen slimme.

Proof of location is de laag die dat oplost. De term wordt vaker gebruikt dan gedefinieerd, dus laten we met een definitie beginnen. Proof of location is een bewering, controleerbaar door een partij die er niet bij was, dat een specifiek toestel binnen een specifiek tijdvenster op een specifieke coördinaat was. Het is een bewering over aanwezigheid, niet over de coördinaat. In dat onderscheid zit het meeste technische werk.

Het dreigingsmodel. We verdedigen ons niet tegen een staat; dat uiterste geval komt aan het eind. We verdedigen ons tegen de gemiddelde aanvaller met een telefoon, een laptop en een middag de tijd. Die aanvaller kan GPS vervalsen met een kant-en-klare tool, de app in een emulator draaien en met één regel code een wallet aanmaken. Elke afzonderlijke controle kan die aanvaller omzeilen. Het technische doel is om het omzeilen van alle controles samen duurder te maken dan de beloning bij de drop.

Dit stuk beschrijft wat Seek vandaag doet, in gewone taal, en wat eraan komt. Het is bewust korter over de marketing en langer over de mechaniek.

Laag één, bij het vangen: apparaatattestatie. Elk vangverzoek bevat een ondertekende verklaring van het besturingssysteem. Op iOS is dat Apple App Attest, op Android Google Play Integrity. Seek verifieert beide aan de serverkant. Attestatie zegt drie dingen in één handtekening: dit is een echt toestel, de app is niet aangepast, en de aanroeper heeft een sleutel die op dit toestel voor onze bundle is aangemaakt. Een geroote telefoon valt af. Een emulator valt af. Een opnieuw verpakte app die de locatiecheck overslaat, valt af. Attestatie bewijst niet waar de telefoon is; het bewijst dat de telefoon niet liegt over het feit dat hij een telefoon is. Daardoor zijn de andere signalen het lezen waard.

Laag twee, bij het vangen: afstand met een marge. De app laat je pas op de vangknop tikken als je binnen de verzamelstraal van de spawn bent. De server controleert zelfstandig de coördinaten die je stuurde tegen die van de spawn en accepteert tot vijfenzeventig meter verschil. Het gat tussen de straal van de knop en die van de server is bewust. GPS kan op een telefoon die tegen een muur staat een paar meter verspringen zonder dat jij daar iets aan kunt doen, en vangsten binnen die schommeling weigeren voelt willekeurig. Boven de vijfenzeventig meter wordt het verzoek direct geweigerd, zonder score en zonder beroep op die laag.

Laag twee, vervolg: limieten en maxima per spawn. Twee verzamelverzoeken binnen vijf seconden krijgen een 429 van een poort in Postgres die over serverless-instanties heen blijft werken. Eén spawn accepteert maximaal twee pogingen van hetzelfde account, en de tweede is 65 procent waard van de eerste. Deze limieten zijn er niet om fraude op te sporen; ze zijn er zodat een bot die de andere lagen al voorbij is, het endpoint niet sneller kan leegtrekken dan een mens kan spelen.

Laag drie, bij het vangen: omgevingssignalen, vastgelegd maar niet afgedwongen. Elke vangst bevat ook vlaggen: of het verzoek van een simulator kwam, of Android meldde dat de positie van een nep-locatieprovider kwam, en de gemelde GPS-nauwkeurigheid in meters. Die worden vastgelegd en nooit gebruikt om de vangst zelf te weigeren. Een app die erover liegt, is precies de app die je de beslissing niet wilt laten nemen, dus de beslissing valt ergens anders. Ze tellen mee in laag vier.

Laag vier, bij de uitbetaling: de fraudepoort. Opnames lopen via een serverfunctie die de vangsten van de laatste negentig dagen van het account leest. Kwam een van die vangsten van een simulator, meldde Android een nep-provider, deed het account twee geslaagde vangsten binnen tien seconden, verplaatste het account zich tussen twee vangcoördinaten sneller dan een mens kan reizen, of heeft een ander account al opgenomen vanaf dezelfde apparaatvingerafdruk, dan gaat de opname naar een menselijke beoordeling in plaats van automatisch te worden goedgekeurd. De gebruiker hoort niet welk alarm afging, en zijn account speelt gewoon door. Detectie is een zakelijke beslissing over uitbetalingen, geen straf.

We splitsen vangen en uitbetalen omdat ze verschillende dingen beschermen. De vanglaag beschermt het spel. Was een vangst frauduleus, dan wordt het spelvaluta die de app nooit verlaat, en dat kost niets. De uitbetalingslaag beschermt echt geld. Elke dollar die het systeem verlaat, gaat door de beoordeling van negentig dagen van alles wat tot het saldo leidde, en één verdacht signaal in dat venster is genoeg om de beslissing aan een mens te geven. Samen zorgen de twee lagen ervoor dat een eerlijke speler op het moment van vangen nooit wrijving merkt, en dat een aanvaller die een foute vangst door wist te krijgen het geld nooit ziet.

Laag vijf, bij het vangen: bewegingsspoor. Elke telefoon heeft een versnellingsmeter en een gyroscoop op dezelfde chip die met GPS praat. Seek legt nu een kort venster aan beweging vast in de seconden voor een vangst, berekent een kleine set statistieken (variantie van de grootte, rotatieactiviteit, aantal stilstaande frames) en stuurt die samenvatting mee met het verzamelverzoek. Een telefoon die naar een spawn is gelopen, heeft een ander bewegingspatroon dan een telefoon die op een bureau ligt met een GPS-simulator aan. Het patroon wordt vandaag niet afgedwongen in de vanglaag, om dezelfde reden als de omgevingsvlaggen: een aangepaste app kan liegen. Het gaat naar de fraudepoort van negentig dagen, naast de signalen over simulators en nep-providers, en een vlak bewegingsspoor in het dossier is nog een alarm dat een opname naar menselijke beoordeling stuurt.

Een uitgewerkt voorbeeld. Een tester draait een GPS-spoofer, zet de coördinaat op een Seek-drop aan de andere kant van de stad en tikt op vangen. De afstandscheck slaagt, want de vervalste coördinaat klopt. De attestatie slaagt, want de app is niet aangepast. De vangst wordt geregistreerd. Twee uur later doet dezelfde tester nog drie vangsten, waarvan één vanaf een coördinaat tien kilometer verderop. Het bewegingsspoor is bij alle vier vlak (de telefoon heeft nooit bewogen), en de check op onmogelijke verplaatsing gaat af op de twee coördinaten die in twee uur niet te voet te bereiken waren. Het account speelt door, blijft verzamelen en merkt niet dat er iets mis is. Als de tester een uitbetaling aanvraagt, belandt die bij een menselijke beoordelaar, met de vlag voor onmogelijke verplaatsing en het vlakke bewegingsspoor erbij. De beoordelaar wijst hem af. De veertig dollar aan verzameld saldo van de tester is buiten de app nooit iets waard.

Het economische kader. Het gaat er niet om dat het vervalsen van de vangst zelf onmogelijk is; het gaat erom dat de uitbetalingspoort terugleest door alles wat het account deed om bij het saldo te komen. Een drop van twee euro, beschermd door attestatie en afstand, is goedkoop om één keer aan te vallen en zinloos om herhaaldelijk aan te vallen, omdat de opnamecheck het patroon vangt voordat het patroon geld wordt. Een drop van tienduizend euro heeft een sterker kader in de vanglaag nodig, en daar gaat de roadmap hieronder over.

Wat er op de roadmap staat. Beacons als terugval voor drops binnenshuis zijn de volgende controle die eraan komt. Voor een spawn in een gebouw waar GPS zinloos is, laat een kleine Bluetooth-beacon die aan de drop gekoppeld is de app aanwezigheid bewijzen zonder van de satellietpositie af te hangen. Het afdwingen van attestatie is het tweede spoor: vandaag worden verzoeken zonder attestatie gelogd maar nog geaccepteerd, zodat we het percentage onterechte weigeringen bij echte toestellen kunnen meten voordat we de schakelaar omzetten en ze volledig weigeren. Allebei komen ze als kleine, saaie, controleerbare toevoegingen aan hetzelfde patroon van vangen en uitbetalen dat al in gebruik is.

Wat nog niet goed werkt. GPS binnenshuis zit in een winkelcentrum tien tot vijftien meter naast, en geen enkele slimmigheid op de server lost dat op; een beacon is het echte antwoord, en daarom staat die op de roadmap. Een vertraging van minder dan een seconde is er niet en komt er waarschijnlijk ook niet, omdat de fraudepoort geschiedenis leest in plaats van één verzoek. Wearables hebben minder sensoren dan telefoons, dus een proof of location-ontwerp dat op telefoons is afgestemd, is niet één op één over te zetten naar brillen. En een staat met een vrachtwagen vol radioapparatuur kan vandaag elke verificatie op mobiele telefoons verslaan; elk protocol dat iets anders beweert, is niet eerlijk tegen je. Wij beweren dat niet.

Het ontwerpprincipe dat het hardop zeggen waard is. Een verificateur moet eerlijk zijn over wat hij wel en niet kan bewijzen. Een waarschijnlijkheidsscore presenteren als een absoluut ja of nee is erger dan een absoluut ja of nee op basis van strikte regels, want een score schept een schuifregelaar, en elke schuifregelaar wordt richting meer geaccepteerde claims geduwd zodra de engagementdoelen achterlopen. Onze vanglaag heeft geen schuifregelaar. Een vangst haalt de checks of niet. De fraudelaag heeft wel een schuifregelaar, en die ligt bij een mens, niet in de code.

Dit is het stuk onder Seek dat verankerde assets en locatiegeverifieerde airdrops de moeite waard maakt. Een uitgever legt een token met echte waarde op een coördinaat, omdat wie hem uiteindelijk krijgt op een geattesteerd toestel op die coördinaat was, en omdat de uitbetalingspoort de geschiedenis van het account terugleest voordat het geld beweegt. De whitepaper bevat de volledige specificatie. Dit stuk is de versie in gewone taal van wat er in de app gebeurt.

In het kort. Aanwezigheid is geen coördinaat. Eén signaal bewijst geen aanwezigheid. Seek verifieert aanwezigheid in twee lagen: attestatie, afstand en een bewegingsspoor op het moment van vangen, en een fraudepoort van negentig dagen op het moment van uitbetalen. Het ene open punt, beacons voor drops binnenshuis, dicht het laatste geval dat GPS alleen niet aankan. Dat is wat proof of location vandaag binnen Seek echt is, en daarom doet deze laag er meer toe dan alle flitsendere dingen die hij mogelijk maakt.