Alasan sebagian besar ide kripto berbasis lokasi dari 2020 mati diam-diam adalah karena mereka memercayai GPS. GPS adalah sinyal siaran yang bisa didengar penerima mana pun, dan penerima bisa disuruh berbohong tentang apa yang didengarnya. Alat untuk melakukannya berharga sekitar tiga puluh dolar di Amazon dan sudah begitu sejak 2015. Protokol apa pun yang membayar dompet karena berdiri di sebuah koordinat, dan memverifikasinya hanya dengan GPS, akan rugi oleh dompet palsu yang "berdiri" di sofa. Serangan ini tidak sulit dan tidak cerdik.

Bukti lokasi adalah lapisan yang memperbaikinya. Istilah ini lebih sering dipakai daripada didefinisikan, jadi mari mulai dengan definisi. Bukti lokasi adalah klaim, yang bisa diverifikasi oleh pihak yang tidak hadir, bahwa sebuah perangkat tertentu berada di koordinat tertentu dalam jendela waktu tertentu. Ini klaim tentang kehadiran, bukan tentang koordinat. Di perbedaan itulah sebagian besar pekerjaan teknisnya berada.

Model ancamannya. Kami tidak bertahan melawan negara; kasus ekstrem itu dibahas di akhir. Kami bertahan melawan penyerang rata-rata dengan ponsel, laptop, dan satu sore luang. Penyerang itu bisa memalsukan GPS dengan alat siap pakai, menjalankan aplikasi di emulator, dan membuat dompet dengan satu baris kode. Setiap kontrol tunggal bisa dikalahkan penyerang itu. Tujuan teknisnya adalah membuat biaya mengalahkan semuanya sekaligus lebih tinggi daripada hadiah di drop.

Tulisan ini membahas apa yang dilakukan Seek hari ini, dengan bahasa sederhana, dan apa yang akan datang. Sengaja dibuat lebih pendek di sisi pemasaran dan lebih panjang di sisi mekanisme.

Lapisan satu, saat tangkapan: atestasi perangkat. Setiap permintaan tangkap membawa pernyataan bertanda tangan dari sistem operasi. Di iOS itu Apple App Attest, di Android itu Google Play Integrity. Seek memverifikasi keduanya di sisi server. Atestasi menyatakan tiga hal dalam satu tanda tangan: ini perangkat sungguhan, binary aplikasinya tidak dimodifikasi, dan pemanggilnya memegang kunci yang dibuat di perangkat ini untuk bundle kami. Ponsel yang di-root gagal. Emulator gagal. Aplikasi yang dikemas ulang dan melewati pengecekan lokasi gagal. Atestasi tidak membuktikan di mana ponselnya; atestasi membuktikan ponsel itu tidak berbohong soal dirinya sebagai ponsel. Itulah yang membuat sinyal lain layak dibaca.

Lapisan dua, saat tangkapan: jarak dengan jendela toleransi. Klien hanya mengizinkanmu mengetuk tombol tangkap saat kamu berada di dalam radius pengambilan spawn. Server secara independen memeriksa koordinat yang kamu kirim terhadap koordinat spawn, dan menerima selisih hingga tujuh puluh lima meter. Celah antara radius tombol dan radius server itu disengaja. GPS di ponsel yang bersandar di dinding bisa bergeser beberapa meter karena alasan yang bukan salahmu, dan menolak tangkapan di dalam pergeseran itu terasa sewenang-wenang. Di luar tujuh puluh lima meter, permintaan langsung ditolak, tanpa penilaian dan tanpa banding di lapisan itu.

Lapisan dua, lanjutan: batas laju dan batas per spawn. Dua permintaan pengambilan yang berjarak kurang dari lima detik mendapat 429 dari gerbang berbasis Postgres yang bertahan di antara isolat serverless. Satu spawn menerima paling banyak dua percobaan dari akun yang sama, dengan percobaan kedua bernilai 65 persen dari yang pertama. Batas ini bukan untuk mendeteksi penipuan; batas ini ada agar bot yang sudah mengalahkan lapisan lain tidak bisa menambang endpoint lebih cepat daripada kecepatan orang bermain.

Lapisan tiga, saat tangkapan: sinyal lingkungan, dicatat tapi tidak ditegakkan. Setiap tangkapan juga membawa penanda: apakah permintaan berasal dari simulator, apakah Android melaporkan posisinya berasal dari penyedia lokasi palsu, dan akurasi GPS yang dilaporkan dalam meter. Semua ini dicatat dan tidak pernah dipakai untuk menolak tangkapannya sendiri. Klien yang berbohong soal ini justru klien yang tidak ingin kamu serahi keputusan, jadi keputusannya dibuat di tempat lain. Semua ini penting di lapisan empat.

Lapisan empat, saat pencairan: gerbang penipuan. Penarikan melewati fungsi server yang membaca tangkapan akun selama sembilan puluh hari terakhir. Jika ada tangkapan yang berasal dari simulator, atau Android melaporkan penyedia palsu, atau akun melakukan dua tangkapan berhasil dalam selang kurang dari sepuluh detik, atau akun berpindah di antara dua koordinat tangkapan lebih cepat daripada kemampuan manusia bepergian, atau akun lain sudah melakukan penarikan dari sidik jari perangkat yang sama, penarikan dialihkan ke peninjauan manusia alih-alih disetujui otomatis. Pengguna tidak diberi tahu kawat mana yang tersentuh, dan akunnya tetap bisa bermain seperti biasa. Deteksi adalah keputusan bisnis tentang pencairan, bukan hukuman.

Alasan memisahkan tangkapan dan pencairan adalah karena keduanya melindungi hal yang berbeda. Lapisan tangkapan melindungi game. Jika tangkapannya curang, hasilnya menjadi mata uang game yang tidak pernah keluar dari aplikasi, dan itu tidak ada biayanya. Lapisan pencairan melindungi uang sungguhan. Setiap dolar yang keluar dari sistem melewati peninjauan sembilan puluh hari atas apa yang menghasilkan saldo itu, dan satu sinyal mencurigakan dalam jendela itu sudah cukup untuk menyerahkan keputusan ke manusia. Kedua lapisan bersama-sama berarti pemain jujur tidak pernah menemui hambatan saat menangkap, dan penyerang yang berhasil menyelipkan tangkapan buruk tidak pernah melihat uangnya.

Lapisan lima, saat tangkapan: jejak gerak. Setiap ponsel punya akselerometer dan giroskop di chip yang sama yang berkomunikasi dengan GPS. Seek kini merekam jendela gerak singkat selama detik-detik menjelang tangkapan, menghitung sejumlah kecil statistik (variansi besaran, aktivitas rotasi, jumlah frame diam), dan mengirim ringkasan itu bersama permintaan pengambilan. Ponsel yang dibawa berjalan ke spawn punya tanda gerak yang berbeda dari ponsel yang tergeletak di meja dengan simulator GPS berjalan. Tanda ini tidak ditegakkan di lapisan tangkapan saat ini, dengan alasan yang sama seperti penanda lingkungan: klien yang dimodifikasi bisa berbohong. Tanda ini masuk ke gerbang penipuan sembilan puluh hari, bersama sinyal simulator dan penyedia palsu, dan jejak gerak yang datar dalam catatan adalah satu kawat lagi yang menyerahkan penarikan ke peninjauan manusia.

Contoh nyata. Seorang penguji menjalankan pemalsu GPS, mengatur koordinat ke drop Seek di seberang kota, lalu mengetuk tangkap. Pengecekan jarak lolos karena koordinat palsunya cocok. Atestasi lolos karena aplikasinya tidak dimodifikasi. Tangkapan tercatat. Dua jam kemudian penguji yang sama melakukan tiga tangkapan lagi, salah satunya dari koordinat yang berjarak sepuluh kilometer. Jejak gerak di keempatnya datar (ponselnya tidak pernah bergerak), dan pengecekan pergerakan mustahil menyala pada dua koordinat yang tidak mungkin dicapai dengan berjalan kaki dalam dua jam. Akunnya tetap bermain, tetap mengumpulkan, dan tidak tahu ada yang salah. Saat penguji meminta pencairan, permintaan itu masuk ke meja peninjauan manusia dengan penanda pergerakan mustahil dan jejak gerak datar terlampir. Peninjau menolaknya. Saldo empat puluh dolar yang dikumpulkan penguji tidak pernah bernilai apa pun di luar aplikasi.

Kerangka ekonominya. Yang penting bukanlah bahwa memalsukan tangkapan itu sendiri mustahil; melainkan bahwa gerbang pencairan membaca kembali semua yang dilakukan akun untuk mencapai saldonya. Drop senilai dua euro yang dilindungi atestasi dan jarak murah untuk diserang sekali dan sia-sia untuk diserang berulang kali, karena pengecekan penarikan menangkap polanya sebelum pola itu menjadi uang. Drop senilai sepuluh ribu euro butuh kerangka yang lebih kuat di lapisan tangkapan, dan itulah yang dibahas roadmap di bawah.

Apa yang ada di roadmap. Cadangan beacon untuk drop dalam ruangan adalah kontrol berikutnya yang akan hadir. Untuk spawn yang ditaruh di dalam gedung tempat GPS tidak berarti, beacon Bluetooth kecil yang terdaftar pada drop memungkinkan aplikasi membuktikan kehadiran tanpa bergantung pada posisi satelit sama sekali. Penegakan atestasi adalah jalur kedua: saat ini permintaan tanpa atestasi dicatat tapi tetap diterima, agar kami bisa mengukur tingkat penolakan keliru terhadap perangkat yang sah sebelum menyalakan sakelar dan langsung menolaknya. Keduanya akan hadir sebagai tambahan kecil, membosankan, dan bisa diverifikasi pada pola tangkapan dan pencairan yang sudah dipakai.

Yang masih belum bekerja dengan baik. GPS dalam ruangan meleset sepuluh sampai lima belas meter di mal, dan tidak ada kecerdikan di sisi server yang bisa memperbaikinya; jawaban sebenarnya adalah beacon, itulah sebabnya beacon ada di roadmap. Latensi di bawah satu detik belum tercapai dan mungkin tidak akan, karena gerbang penipuan membaca riwayat, bukan satu permintaan. Perangkat wearable punya tumpukan sensor yang lebih kecil daripada ponsel, jadi desain bukti lokasi yang disetel untuk ponsel tidak bisa dipindahkan begitu saja ke kacamata. Dan sebuah negara dengan satu truk peralatan RF bisa mengalahkan verifikator ponsel mana pun hari ini; protokol apa pun yang mengklaim sebaliknya tidak jujur kepadamu. Kami tidak akan begitu.

Prinsip desain yang layak diucapkan dengan lantang. Verifikator harus jujur tentang apa yang bisa dan tidak bisa dibuktikannya. Menyajikan skor probabilistik sebagai ya atau tidak yang mutlak lebih buruk daripada menyajikan ya atau tidak yang mutlak dari aturan yang ketat, karena skor menciptakan slider, dan setiap slider akan didorong ke arah menerima lebih banyak klaim saat target keterlibatan tertinggal. Lapisan tangkapan kami tidak punya slider. Klaim lolos pengecekan atau tidak. Lapisan penipuan punya slider, dan slider itu dipegang manusia, bukan kode.

Inilah bagian di bawah Seek yang membuat aset tertambat dan airdrop terverifikasi lokasi layak dilakukan. Penerbit menaruh token bernilai uang sungguhan di sebuah koordinat karena orang yang akhirnya memilikinya berada di koordinat itu dengan perangkat teratestasi, dan karena gerbang pencairan akan membaca kembali riwayat akun sebelum uangnya berpindah. Whitepaper memuat spesifikasi lengkapnya. Tulisan ini adalah versi bahasa sederhana dari apa yang terjadi di dalam aplikasi.

Versi singkatnya. Kehadiran bukanlah koordinat. Satu sinyal tidak membuktikan kehadiran. Seek memverifikasi kehadiran dalam dua lapisan: atestasi, jarak, dan jejak gerak saat tangkapan, serta gerbang penipuan sembilan puluh hari saat pencairan. Satu yang masih terbuka, cadangan beacon untuk drop dalam ruangan, menutup kasus koordinat terakhir yang tidak bisa ditangani GPS sendirian. Itulah bukti lokasi di dalam Seek hari ini, dan itulah mengapa lapisan ini lebih penting daripada hal-hal mencolok mana pun yang dimungkinkannya.