2020'deki konum tabanlı kripto fikirlerinin çoğunun sessizce ölmesinin sebebi GPS'e güvenmeleriydi. GPS, herhangi bir alıcının dinleyebildiği bir yayın sinyalidir ve bir alıcıya ne duyduğu konusunda yalan söylemesi söylenebilir. Bunu yapacak araçlar Amazon'da otuz dolar civarında ve 2015'ten beri de öyle. Bir koordinatta durduğu için bir cüzdana ödeme yapan ve bu duruşu yalnızca GPS ile doğrulayan her protokol, kanepelerde duran sahte cüzdanlara para kaybeder. Bu ne zor ne de zekice bir saldırı.
Konum kanıtı bunu düzelten katman. Bu ifade tanımlandığından çok kullanılıyor, o yüzden bir tanımla başlayalım. Konum kanıtı, orada bulunmayan bir tarafça doğrulanabilen, belirli bir cihazın belirli bir zaman aralığında belirli bir koordinatta olduğuna dair bir iddiadır. Bu, koordinat hakkında değil varlık hakkında bir iddiadır. Mühendisliğin büyük kısmı bu ayrımda yatıyor.
Tehdit modeli. Bir devlete karşı savunma yapmıyoruz; o uç durum sona kalıyor. Bir telefonu, bir dizüstü bilgisayarı ve bir öğleden sonrası olan ortalama saldırgana karşı savunma yapıyoruz. Bu saldırgan hazır bir araçla GPS'i taklit edebilir, uygulamayı bir emülatörde çalıştırabilir ve tek satır kodla bir cüzdan oluşturabilir. Tek başına her kontrol bu saldırgan tarafından aşılabilir. Mühendislik hedefi, hepsini birlikte aşmanın maliyetini droptaki ödülden yüksek tutmak.
Bu yazı Seek'in bugün ne yaptığını sade bir dille ve yolda neler olduğunu anlatıyor. Bilerek pazarlama tarafında kısa, mekanik tarafında uzun tutuldu.
Birinci katman, yakalama anında: cihaz doğrulaması. Her yakalama isteği işletim sisteminden gelen imzalı bir beyan taşır. iOS'ta bu Apple App Attest, Android'de Google Play Integrity. Seek ikisini de sunucu tarafında doğrular. Doğrulama tek bir imzada üç şey söyler: bu gerçek bir cihaz, uygulamanın ikili dosyası değiştirilmemiş ve çağıran, bu cihazda bizim uygulamamız için oluşturulmuş bir anahtara sahip. Root'lanmış bir telefon geçemez. Bir emülatör geçemez. Konum kontrolünü atlayan yeniden paketlenmiş bir uygulama geçemez. Doğrulama telefonun nerede olduğunu kanıtlamaz; telefonun telefon olduğu konusunda yalan söylemediğini kanıtlar. Diğer sinyalleri okumaya değer kılan şey budur.
İkinci katman, yakalama anında: tolerans payıyla mesafe. İstemci, yakalama düğmesine ancak spawn'ın toplama yarıçapı içindeyken dokunmana izin verir. Sunucu, gönderdiğin koordinatları bağımsız olarak spawn koordinatlarıyla karşılaştırır ve yetmiş beş metreye kadar ayrılığı kabul eder. Düğme yarıçapı ile sunucu yarıçapı arasındaki fark bilinçlidir. Duvara yaslanmış bir telefondaki GPS sapması, senin suçun olmayan sebeplerle birkaç metre kayabilir ve bu sapmanın içindeki yakalamaları reddetmek keyfi hissettirir. Yetmiş beş metrenin ötesinde istek doğrudan reddedilir; o katmanda ne puanlama ne itiraz vardır.
İkinci katman, devamı: hız sınırları ve spawn başına sınırlar. Aralarında beş saniyeden az olan iki toplama isteği, sunucusuz örnekler arasında da geçerli kalan Postgres destekli bir kapıdan 429 alır. Tek bir spawn aynı hesaptan en fazla iki deneme kabul eder ve ikinci deneme ilkinin yüzde 65'i değerindedir. Bu sınırlar dolandırıcılık tespiti için değil; diğer katmanları zaten aşmış bir botun uç noktayı bir insanın oynayabileceğinden daha hızlı sömürememesi için var.
Üçüncü katman, yakalama anında: ortam sinyalleri, kaydedilir ama zorunlu kılınmaz. Her yakalama ayrıca bazı işaretler taşır: isteğin bir simülatörden gelip gelmediği, Android'in konumun sahte konum sağlayıcıdan geldiğini bildirip bildirmediği ve metre cinsinden bildirilen GPS doğruluğu. Bunlar kaydedilir ve yakalamanın kendisini reddetmek için asla kullanılmaz. Bunlar hakkında yalan söyleyen bir istemci, tam da kararı vermesini istemeyeceğin istemcidir; bu yüzden karar başka yerde verilir. Dördüncü katmanda önem kazanırlar.
Dördüncü katman, ödeme anında: dolandırıcılık kapısı. Para çekme işlemleri, hesabın son doksan günlük yakalamalarını okuyan bir sunucu fonksiyonundan geçer. Bu yakalamalardan herhangi biri bir simülatörden geldiyse, ya da Android sahte bir sağlayıcı bildirdiyse, ya da hesap aralarında on saniyeden az olan iki başarılı yakalama yaptıysa, ya da hesap iki yakalama koordinatı arasında bir insanın gidebileceğinden daha hızlı hareket ettiyse, ya da başka bir hesap aynı cihaz parmak izinden para çektiyse, çekim otomatik onaylanmak yerine insan incelemesine yönlendirilir. Kullanıcıya hangi telin tetiklendiği söylenmez ve hesabı normal şekilde oynamaya devam eder. Tespit, ödemelerle ilgili bir iş kararıdır, bir ceza değil.
Yakalama ile ödemeyi ayırmamızın sebebi, farklı şeyleri korumaları. Yakalama katmanı oyunu korur. Yakalama sahteyse, uygulamadan asla çıkmayan bir oyun parasına dönüşür ve bunun hiçbir maliyeti yoktur. Ödeme katmanı gerçek parayı korur. Sistemden çıkan her dolar, bakiyeye yol açan şeylerin doksan günlük incelemesinden geçer ve o aralıktaki tek bir şüpheli sinyal kararı bir insana devretmeye yeter. İki katman birlikte, dürüst bir oyuncunun yakalama anında hiçbir sürtünme görmemesini ve kötü bir yakalamayı içeri sızdıran bir saldırganın parayı asla görmemesini sağlar.
Beşinci katman, yakalama anında: hareket izi. Her telefonda GPS ile konuşan aynı çipte bir ivmeölçer ve bir jiroskop vardır. Seek artık bir yakalamadan önceki saniyeler için kısa bir hareket aralığı kaydediyor, küçük bir istatistik seti hesaplıyor (büyüklük varyansı, dönme aktivitesi, hareketsiz kare sayısı) ve bu özeti toplama isteğiyle birlikte gönderiyor. Bir spawn'a yürümüş bir telefonun hareket imzası, üzerinde GPS simülatörü çalışan bir masada duran telefonunkinden farklıdır. Bu imza bugün yakalama katmanında zorunlu kılınmıyor; sebebi ortam işaretlerininkiyle aynı: yamalanmış bir istemci yalan söyleyebilir. İmza, simülatör ve sahte sağlayıcı sinyalleriyle birlikte doksan günlük dolandırıcılık kapısına giriyor ve kayıttaki düz bir hareket izi, bir çekimi insan incelemesine gönderen bir tel daha oluyor.
Somut bir örnek. Bir testçi bir GPS taklitçisi çalıştırıyor, koordinatı şehrin öbür ucundaki bir Seek dropuna ayarlıyor ve yakala düğmesine dokunuyor. Sahte koordinat eşleştiği için mesafe kontrolü geçiyor. Uygulama değiştirilmediği için doğrulama geçiyor. Yakalama kaydediliyor. İki saat sonra aynı testçi üç yakalama daha yapıyor, biri on kilometre uzaktaki farklı bir koordinattan. Dördünün de hareket izi düz (telefon hiç kıpırdamadı) ve imkânsız hareket kontrolü, iki saatte yürüyerek ulaşılamayacak iki koordinatta tetikleniyor. Hesap oynamaya ve toplamaya devam ediyor, yanlış bir şey olduğundan haberi yok. Testçi ödeme istediğinde, talep imkânsız hareket işareti ve düz hareket izi ekli olarak bir insan inceleme masasına düşüyor. İnceleyen reddediyor. Testçinin toplanmış kırk dolarlık bakiyesi uygulamanın dışında asla bir şey etmiyor.
Ekonomik çerçeve. Önemli olan, yakalamanın kendisini taklit etmenin imkânsız olması değil; ödeme kapısının hesabın bakiyeye ulaşmak için yaptığı her şeyi geriye doğru okuması. Doğrulama ve mesafeyle korunan iki euroluk bir drop, bir kez saldırmak için ucuz, tekrar tekrar saldırmak içinse anlamsız; çünkü çekim kontrolü, kalıp paraya dönüşmeden önce kalıbı yakalıyor. On bin euroluk bir drop ise yakalama katmanında daha güçlü bir çerçeve gerektiriyor; aşağıdaki yol haritası da bununla ilgili.
Yol haritasında neler var. Sıradaki kontrol, kapalı alan dropları için yedek işaretçi. GPS'in anlamsız olduğu bir binanın içine yerleştirilen bir spawn için, droba kayıtlı küçük bir Bluetooth işaretçisi, uygulamanın uydu konumuna hiç bağlı kalmadan varlığı kanıtlamasını sağlıyor. İkinci iş kolu doğrulamanın zorunlu kılınması: bugün doğrulanmamış istekler kaydediliyor ama hâlâ kabul ediliyor; böylece anahtarı çevirip onları doğrudan reddetmeden önce meşru cihazlardaki yanlış ret oranını ölçebiliyoruz. İkisi de hâlihazırda kullanılan yakalama ve ödeme kalıbına küçük, sıkıcı ve doğrulanabilir eklemeler olarak gelecek.
Hâlâ iyi çalışmayanlar. Kapalı alanda GPS bir alışveriş merkezinde on ila on beş metre sapıyor ve sunucu tarafında ne kadar zekice şey yapılırsa yapılsın bu düzelmiyor; gerçek cevap bir işaretçi, yol haritasında olmasının sebebi de bu. Saniyenin altında gecikme yok ve muhtemelen olmayacak, çünkü dolandırıcılık kapısı tek bir isteği değil geçmişi okuyor. Giyilebilir cihazların sensör donanımı telefonlarınkinden küçük, bu yüzden telefonlar için ayarlanmış bir konum kanıtı tasarımı gözlüklere sorunsuz aktarılamıyor. Ve bir kamyon dolusu RF ekipmanı olan bir devlet, bugün herhangi bir cep telefonu doğrulayıcısını alt edebilir; aksini iddia eden her protokol sana karşı dürüst değildir. Bizimki böyle bir iddiada bulunmayacak.
Yüksek sesle söylenmeye değer tasarım ilkesi. Bir doğrulayıcı neyi kanıtlayıp neyi kanıtlayamayacağı konusunda dürüst olmalı. Olasılıksal bir puanı mutlak bir evet ya da hayır gibi sunmak, katı kurallardan çıkan mutlak bir evet ya da hayır sunmaktan daha kötüdür; çünkü bir puan bir kaydırıcı yaratır ve her kaydırıcı, etkileşim hedeflerinin gerisinde kalındığında daha fazla talebi kabul etme yönüne itilir. Yakalama katmanımızda kaydırıcı yok. Ya kontrolleri geçer ya geçmez. Dolandırıcılık katmanında bir kaydırıcı var ve o kaydırıcı kodda değil, bir insanın elinde.
Seek'in altında çapalı varlıkları ve konumla doğrulanmış airdropları yapmaya değer kılan parça bu. Bir yayıncı gerçek para değerinde bir tokenı bir koordinata yerleştiriyor, çünkü onu sonunda alan kişi doğrulanmış bir cihazla o koordinattaydı ve ödeme kapısı para hareket etmeden önce hesabın geçmişini geriye doğru okuyacak. Tam şartname teknik belgede. Bu yazı, uygulamanın içinde olanların sade dildeki versiyonu.
Kısaca. Varlık bir koordinat değildir. Tek bir sinyal varlığı kanıtlamaz. Seek varlığı iki katmanda doğrular: yakalama anında doğrulama, mesafe ve hareket izi; ödeme anında ise doksan günlük bir dolandırıcılık kapısı. Hâlâ açık olan tek konu, kapalı alan dropları için yedek işaretçi, GPS'in tek başına çözemediği son koordinat durumunu da kapatıyor. Bugün Seek'in içinde konum kanıtı gerçekte budur ve bu katmanın, mümkün kıldığı daha gösterişli şeylerin hepsinden daha önemli olmasının sebebi de budur.


