Lý do phần lớn ý tưởng crypto dựa trên vị trí từ năm 2020 lặng lẽ chết đi là vì chúng tin vào GPS. GPS là một tín hiệu phát sóng mà bất kỳ máy thu nào cũng nghe được, và một máy thu có thể bị bảo nói dối về những gì nó nghe thấy. Công cụ để làm việc đó có giá khoảng ba mươi đô la trên Amazon, và đã như vậy từ năm 2015. Bất kỳ giao thức nào trả tiền cho một ví vì đứng tại một tọa độ, và chỉ xác minh việc đứng đó bằng GPS, sẽ mất tiền vào tay những ví giả đang nằm trên sofa. Đây chẳng phải một cuộc tấn công khó, cũng chẳng phải một cuộc tấn công thông minh.

Proof of location là lớp khắc phục điều đó. Cụm từ này được dùng nhiều hơn được định nghĩa, nên hãy bắt đầu bằng một định nghĩa. Proof of location là một khẳng định, có thể được kiểm chứng bởi một bên không có mặt, rằng một thiết bị cụ thể đã ở một tọa độ cụ thể trong một khoảng thời gian cụ thể. Đó là khẳng định về sự có mặt, không phải về tọa độ. Phần lớn công sức kỹ thuật nằm ở chính sự phân biệt đó.

Mô hình mối đe dọa. Chúng tôi không phòng thủ trước một quốc gia; trường hợp trần đó được bàn ở cuối bài. Chúng tôi phòng thủ trước kẻ tấn công điển hình với một chiếc điện thoại, một chiếc laptop và một buổi chiều. Kẻ tấn công đó có thể giả mạo GPS bằng một công cụ bán sẵn, chạy ứng dụng trong trình giả lập, và tạo một ví chỉ bằng một dòng code. Kẻ tấn công đó có thể vượt qua bất kỳ biện pháp kiểm soát đơn lẻ nào. Mục tiêu kỹ thuật là khiến chi phí vượt qua tất cả cùng lúc cao hơn phần thưởng tại điểm thả.

Bài này trình bày những gì Seek làm hôm nay, bằng ngôn ngữ đơn giản, và những gì sắp đến. Bài cố ý viết ít về tiếp thị và nhiều về cơ chế.

Lớp một, lúc bắt: xác thực thiết bị. Mỗi yêu cầu bắt đều mang theo một tuyên bố có chữ ký từ hệ điều hành. Trên iOS đó là Apple App Attest, trên Android đó là Google Play Integrity. Seek xác minh cả hai ở phía máy chủ. Xác thực nói ba điều trong một chữ ký: đây là thiết bị thật, tệp ứng dụng không bị can thiệp, và bên gọi đang giữ một khóa được tạo trên chính thiết bị này cho gói ứng dụng của chúng tôi. Điện thoại đã root thì trượt. Trình giả lập thì trượt. Một ứng dụng bị đóng gói lại để bỏ qua bước kiểm tra vị trí thì trượt. Xác thực không chứng minh điện thoại đang ở đâu; nó chứng minh điện thoại không nói dối về việc mình là một chiếc điện thoại. Đó là điều khiến các tín hiệu khác đáng để đọc.

Lớp hai, lúc bắt: khoảng cách với vùng dung sai. Ứng dụng chỉ cho bạn bấm nút bắt khi bạn ở trong bán kính thu thập của spawn. Máy chủ kiểm tra độc lập tọa độ bạn gửi so với tọa độ của spawn, và chấp nhận khoảng cách tối đa bảy mươi lăm mét. Khoảng chênh giữa bán kính của nút bấm và bán kính của máy chủ là có chủ đích. GPS trên một chiếc điện thoại dựa vào tường có thể trôi vài mét vì những lý do không phải lỗi của bạn, và việc từ chối lượt bắt trong vùng dao động đó có cảm giác tùy tiện. Vượt quá bảy mươi lăm mét, yêu cầu bị từ chối thẳng, không chấm điểm và không có quyền khiếu nại ở lớp đó.

Lớp hai, tiếp theo: giới hạn tần suất và giới hạn mỗi spawn. Hai yêu cầu thu thập cách nhau dưới năm giây sẽ nhận mã 429 từ một cổng chạy trên Postgres, tồn tại xuyên suốt các isolate serverless. Mỗi spawn chấp nhận tối đa hai lần thử từ cùng một tài khoản, và lần thử thứ hai có giá trị bằng 65 phần trăm lần đầu. Những giới hạn này không nhằm phát hiện gian lận; chúng tồn tại để một con bot đã vượt qua các lớp khác không thể khai thác endpoint nhanh hơn một người chơi thật.

Lớp ba, lúc bắt: tín hiệu môi trường, được ghi lại nhưng không áp dụng. Mỗi lượt bắt còn mang theo các cờ: yêu cầu có đến từ trình mô phỏng hay không, Android có báo vị trí đến từ nhà cung cấp vị trí giả hay không, và độ chính xác GPS được báo cáo tính bằng mét. Những thông tin này được ghi lại và không bao giờ được dùng để từ chối chính lượt bắt. Một ứng dụng nói dối về chúng chính là ứng dụng mà bạn không muốn để nó ra quyết định, nên quyết định được đưa ra ở nơi khác. Chúng có ý nghĩa ở lớp bốn.

Lớp bốn, lúc rút tiền: cổng chống gian lận. Các lệnh rút đi qua một hàm máy chủ đọc chín mươi ngày lượt bắt gần nhất của tài khoản. Nếu bất kỳ lượt bắt nào đến từ trình mô phỏng, hoặc Android báo có nhà cung cấp vị trí giả, hoặc tài khoản có hai lượt bắt thành công cách nhau dưới mười giây, hoặc tài khoản di chuyển giữa hai tọa độ bắt nhanh hơn tốc độ một con người có thể đi, hoặc một tài khoản khác đã rút tiền từ cùng dấu vân tay thiết bị, thì lệnh rút được chuyển sang cho người xem xét thay vì được duyệt tự động. Người dùng không được biết sợi dây nào đã bị vấp, và tài khoản của họ vẫn chơi bình thường. Phát hiện là một quyết định kinh doanh về việc chi trả, không phải một hình phạt.

Lý do tách lượt bắt và lượt rút là vì chúng bảo vệ những thứ khác nhau. Lớp bắt bảo vệ trò chơi. Nếu lượt bắt là gian lận, nó biến thành tiền trong game không bao giờ rời khỏi ứng dụng, và chẳng tốn gì cả. Lớp rút tiền bảo vệ tiền thật. Mỗi đô la rời khỏi hệ thống đều đi qua đợt xem xét chín mươi ngày về những gì đã tạo nên số dư, và chỉ một tín hiệu đáng ngờ trong khoảng đó cũng đủ để giao quyết định cho con người. Hai lớp kết hợp có nghĩa là người chơi chân chính không bao giờ gặp trở ngại vào lúc bắt, còn kẻ tấn công đã lọt được một lượt bắt gian lận thì không bao giờ thấy được tiền.

Lớp năm, lúc bắt: dấu vết chuyển động. Mỗi điện thoại đều có gia tốc kế và con quay hồi chuyển trên cùng con chip giao tiếp với GPS. Seek giờ ghi lại một khoảng chuyển động ngắn trong những giây trước một lượt bắt, tính một nhóm nhỏ các chỉ số thống kê (phương sai độ lớn, mức độ xoay, số khung hình đứng yên), và gửi bản tóm tắt đó cùng yêu cầu thu thập. Một chiếc điện thoại đã đi bộ tới spawn có dấu hiệu chuyển động khác với một chiếc nằm trên bàn đang chạy trình mô phỏng GPS. Hiện dấu hiệu này không được áp dụng ở lớp bắt, cùng lý do với các cờ môi trường: một ứng dụng bị chỉnh sửa có thể nói dối. Nó đi vào cổng chống gian lận chín mươi ngày, bên cạnh các tín hiệu trình mô phỏng và nhà cung cấp vị trí giả, và một dấu vết chuyển động phẳng lặng trong hồ sơ là thêm một sợi dây chuyển lệnh rút sang cho người xem xét.

Một ví dụ cụ thể. Một người thử nghiệm chạy phần mềm giả mạo GPS, đặt tọa độ tới một điểm thả của Seek bên kia thành phố, rồi bấm bắt. Kiểm tra khoảng cách đạt vì tọa độ giả khớp. Xác thực đạt vì ứng dụng không bị chỉnh sửa. Lượt bắt được ghi nhận. Hai giờ sau, cùng người thử nghiệm đó bắt thêm ba lần, một lần từ một tọa độ khác cách mười cây số. Dấu vết chuyển động của cả bốn lượt đều phẳng lặng (điện thoại chưa từng di chuyển), và kiểm tra di chuyển bất khả thi kích hoạt với hai tọa độ không thể đi bộ tới trong hai giờ. Tài khoản vẫn chơi, vẫn thu thập, và không hề biết có gì không ổn. Khi người thử nghiệm yêu cầu rút tiền, yêu cầu đó rơi vào bàn xem xét của con người, kèm cờ di chuyển bất khả thi và dấu vết chuyển động phẳng lặng. Người xem xét từ chối. Bốn mươi đô la số dư mà người thử nghiệm thu thập được không bao giờ có giá trị gì bên ngoài ứng dụng.

Khung kinh tế. Điều quan trọng không phải là việc giả mạo chính lượt bắt là bất khả thi; mà là cổng rút tiền đọc ngược lại mọi thứ tài khoản đã làm để có được số dư. Một điểm thả trị giá hai euro được bảo vệ bằng xác thực và khoảng cách thì rẻ để tấn công một lần và vô nghĩa để tấn công lặp lại, vì bước kiểm tra rút tiền bắt được khuôn mẫu trước khi khuôn mẫu biến thành tiền. Một điểm thả trị giá mười nghìn euro cần một khung mạnh hơn ở lớp bắt, và đó là điều lộ trình dưới đây hướng tới.

Những gì nằm trong lộ trình. Beacon dự phòng cho các điểm thả trong nhà là biện pháp kiểm soát tiếp theo sẽ ra mắt. Với một spawn đặt bên trong tòa nhà, nơi GPS vô nghĩa, một beacon Bluetooth nhỏ được đăng ký cho điểm thả cho phép ứng dụng chứng minh sự có mặt mà hoàn toàn không phụ thuộc vào vị trí vệ tinh. Áp dụng bắt buộc xác thực là hướng thứ hai: hiện các yêu cầu không được xác thực vẫn được ghi lại nhưng vẫn được chấp nhận, để chúng tôi đo được tỉ lệ từ chối nhầm với thiết bị chân chính trước khi bật công tắc và từ chối thẳng. Cả hai đều đến dưới dạng những bổ sung nhỏ, nhàm chán, kiểm chứng được cho cùng khuôn mẫu bắt và rút đang được dùng.

Những gì vẫn chưa hoạt động tốt. GPS trong nhà lệch mười đến mười lăm mét trong trung tâm thương mại, và không sự khéo léo nào ở phía máy chủ sửa được điều đó; beacon mới là câu trả lời thật sự, vì thế nó nằm trong lộ trình. Độ trễ dưới một giây chưa có và có lẽ sẽ không có, vì cổng chống gian lận đọc lịch sử chứ không phải một yêu cầu đơn lẻ. Thiết bị đeo có ít cảm biến hơn điện thoại, nên một thiết kế proof of location tối ưu cho điện thoại không chuyển gọn gàng sang kính. Và một quốc gia với cả xe tải thiết bị sóng vô tuyến có thể đánh bại bất kỳ bộ xác minh trên điện thoại nào hiện nay; bất kỳ giao thức nào nói khác đi là đang không thành thật với bạn. Chúng tôi thì không.

Nguyên tắc thiết kế đáng nói thẳng ra. Một bộ xác minh nên thành thật về những gì nó có thể và không thể chứng minh. Trình bày một điểm số xác suất như một câu trả lời có hoặc không tuyệt đối còn tệ hơn đưa ra câu trả lời có hoặc không tuyệt đối từ các quy tắc nghiêm ngặt, vì điểm số tạo ra một thanh trượt, và thanh trượt nào cũng bị đẩy về phía chấp nhận nhiều khẳng định hơn khi chỉ tiêu tương tác bị chậm. Lớp bắt của chúng tôi không có thanh trượt. Hoặc là đạt các bước kiểm tra, hoặc là không. Lớp chống gian lận có thanh trượt, và thanh trượt đó nằm trong tay con người, không nằm trong code.

Đây là thành phần bên dưới Seek khiến tài sản được neo và airdrop xác minh bằng vị trí trở nên đáng làm. Một nhà phát hành đặt một token có giá trị thật tại một tọa độ vì người cuối cùng nhận được nó đã có mặt tại tọa độ đó trên một thiết bị đã được xác thực, và vì cổng rút tiền sẽ đọc lại lịch sử của tài khoản trước khi tiền được chuyển. Whitepaper có đặc tả đầy đủ. Bài này là phiên bản ngôn ngữ đơn giản về những gì diễn ra bên trong ứng dụng.

Tóm lại. Sự có mặt không phải là một tọa độ. Một tín hiệu đơn lẻ không chứng minh được sự có mặt. Seek xác minh sự có mặt theo hai lớp: xác thực, khoảng cách và dấu vết chuyển động vào lúc bắt, và một cổng chống gian lận chín mươi ngày vào lúc rút tiền. Hạng mục còn mở, beacon dự phòng cho điểm thả trong nhà, sẽ khép lại trường hợp tọa độ cuối cùng mà riêng GPS không xử lý được. Đó là proof of location thật sự bên trong Seek hôm nay, và là lý do lớp này quan trọng hơn mọi thứ hào nhoáng mà nó giúp hiện thực hóa.