เหตุผลที่ไอเดียคริปโตตามตำแหน่งส่วนใหญ่ในปี 2020 ค่อยๆ ตายไป คือมันเชื่อ GPS GPS เป็นสัญญาณกระจายที่เครื่องรับใดก็ฟังได้ และเครื่องรับก็ถูกสั่งให้โกหกเรื่องที่ได้ยินได้ เครื่องมือทำแบบนั้นราคาราวสามสิบดอลลาร์บน Amazon มาตั้งแต่ปี 2015 โปรโตคอลใดที่จ่ายเงินให้กระเป๋าเพราะไปยืนที่พิกัด และยืนยันด้วย GPS อย่างเดียว จะเสียเงินให้กระเป๋าปลอมที่นอนอยู่บนโซฟา มันไม่ใช่การโจมตีที่ยากหรือฉลาดเลย
Proof of location คือเลเยอร์ที่แก้ปัญหานี้ วลีนี้ถูกใช้บ่อยกว่าถูกนิยาม เรามาเริ่มจากนิยามกัน Proof of location คือข้อยืนยันที่ผู้ที่ไม่ได้อยู่ในเหตุการณ์ตรวจสอบได้ ว่าอุปกรณ์หนึ่งอยู่ที่พิกัดหนึ่งภายในช่วงเวลาหนึ่ง มันคือข้อยืนยันเรื่องการอยู่ ณ ที่นั้น ไม่ใช่เรื่องพิกัด ความต่างนี้คือที่ที่งานวิศวกรรมส่วนใหญ่อยู่
แบบจำลองภัยคุกคาม เราไม่ได้ป้องกันรัฐ กรณีสุดขั้วนั้นจะพูดถึงตอนท้าย เราป้องกันผู้โจมตีทั่วไปที่มีโทรศัพท์ แล็ปท็อป และเวลาหนึ่งบ่าย ผู้โจมตีแบบนั้นปลอม GPS ด้วยเครื่องมือสำเร็จรูป รันแอปในอีมูเลเตอร์ และสร้างกระเป๋าด้วยโค้ดบรรทัดเดียวได้ การควบคุมแต่ละอย่างถูกผู้โจมตีนั้นเอาชนะได้ เป้าหมายทางวิศวกรรมคือทำให้ต้นทุนการเอาชนะทั้งหมดพร้อมกันสูงกว่ารางวัลที่ดรอป
บทความนี้อธิบายสิ่งที่ Seek ทำวันนี้ด้วยภาษาง่ายๆ และสิ่งที่กำลังจะมา ตั้งใจให้ส่วนการตลาดสั้น และส่วนกลไกยาว
เลเยอร์ที่หนึ่ง ตอนจับ: การรับรองอุปกรณ์ ทุกคำขอจับมีคำรับรองที่ลงนามโดยระบบปฏิบัติการ บน iOS คือ Apple App Attest บน Android คือ Google Play Integrity Seek ตรวจสอบทั้งสองฝั่งเซิร์ฟเวอร์ การรับรองบอกสามอย่างในลายเซ็นเดียว: นี่คืออุปกรณ์จริง ไบนารีของแอปไม่ถูกดัดแปลง และผู้เรียกถือคีย์ที่สร้างบนอุปกรณ์นี้สำหรับแพ็กเกจของเรา โทรศัพท์ที่รูทไม่ผ่าน อีมูเลเตอร์ไม่ผ่าน แอปที่แพ็กใหม่แล้วข้ามการตรวจตำแหน่งไม่ผ่าน การรับรองไม่ได้พิสูจน์ว่าโทรศัพท์อยู่ที่ไหน แต่พิสูจน์ว่าโทรศัพท์ไม่ได้โกหกว่าเป็นโทรศัพท์ นั่นทำให้สัญญาณอื่นมีค่าพอให้อ่าน
เลเยอร์ที่สอง ตอนจับ: ระยะทางพร้อมช่วงผ่อนผัน ไคลเอนต์ให้คุณแตะปุ่มจับได้เฉพาะเมื่ออยู่ในรัศมีเก็บของสปอน เซิร์ฟเวอร์ตรวจพิกัดที่คุณส่งมาเทียบกับพิกัดสปอนแยกต่างหาก และยอมรับระยะห่างได้ถึงเจ็ดสิบห้าเมตร ช่องว่างระหว่างรัศมีปุ่มกับรัศมีเซิร์ฟเวอร์ตั้งใจไว้ GPS ของโทรศัพท์ที่พิงผนังอาจคลาดไปไม่กี่เมตรด้วยเหตุผลที่ไม่ใช่ความผิดของคุณ และการปฏิเสธการจับในช่วงคลาดเคลื่อนนั้นรู้สึกไม่ยุติธรรม เกินเจ็ดสิบห้าเมตร คำขอจะถูกปฏิเสธทันที ไม่มีการให้คะแนนและไม่มีการอุทธรณ์ในเลเยอร์นั้น
เลเยอร์ที่สอง ต่อ: ขีดจำกัดอัตราและเพดานต่อสปอน คำขอเก็บสองครั้งที่ห่างกันไม่ถึงห้าวินาทีจะได้ 429 จากด่านที่ใช้ Postgres ซึ่งคงอยู่ข้าม isolate แบบ serverless สปอนหนึ่งรับได้สูงสุดสองครั้งจากบัญชีเดียวกัน โดยครั้งที่สองมีค่า 65 เปอร์เซ็นต์ของครั้งแรก เพดานเหล่านี้ไม่ได้มีไว้ตรวจจับการโกง แต่มีไว้เพื่อไม่ให้บอทที่ผ่านเลเยอร์อื่นมาแล้วขุด endpoint ได้เร็วกว่าที่คนเล่นได้
เลเยอร์ที่สาม ตอนจับ: สัญญาณสภาพแวดล้อม บันทึกไว้แต่ไม่บังคับใช้ ทุกการจับมีแฟล็กด้วย: คำขอมาจากซิมูเลเตอร์หรือไม่ Android รายงานว่าพิกัดมาจากผู้ให้บริการตำแหน่งจำลองหรือไม่ และความแม่นยำ GPS ที่รายงานเป็นเมตร ข้อมูลเหล่านี้ถูกบันทึก และไม่เคยใช้ปฏิเสธการจับโดยตรง ไคลเอนต์ที่โกหกเรื่องเหล่านี้คือไคลเอนต์ที่คุณไม่อยากให้เป็นผู้ตัดสิน การตัดสินจึงเกิดที่อื่น มันมีความหมายในเลเยอร์ที่สี่
เลเยอร์ที่สี่ ตอนจ่ายเงิน: ด่านป้องกันการโกง การถอนผ่านฟังก์ชันฝั่งเซิร์ฟเวอร์ที่อ่านการจับเก้าสิบวันล่าสุดของบัญชี หากการจับใดมาจากซิมูเลเตอร์ หรือ Android รายงานผู้ให้บริการตำแหน่งจำลอง หรือบัญชีจับสำเร็จสองครั้งห่างกันไม่ถึงสิบวินาที หรือบัญชีเคลื่อนที่ระหว่างสองพิกัดจับเร็วกว่าที่คนเดินทางได้ หรือมีบัญชีอื่นถอนจากลายนิ้วมืออุปกรณ์เดียวกัน การถอนจะถูกส่งให้คนตรวจสอบแทนการอนุมัติอัตโนมัติ ผู้ใช้ไม่ได้รับแจ้งว่าเงื่อนไขไหนทำงาน และบัญชียังเล่นได้ตามปกติ การตรวจพบเป็นการตัดสินใจทางธุรกิจเรื่องการจ่ายเงิน ไม่ใช่การลงโทษ
เหตุผลที่แยกการจับกับการจ่ายเงินคือทั้งสองป้องกันคนละสิ่ง เลเยอร์การจับป้องกันเกม ถ้าการจับเป็นการโกง มันกลายเป็นสกุลเงินในเกมที่ไม่เคยออกจากแอป ซึ่งไม่มีต้นทุน เลเยอร์การจ่ายเงินป้องกันเงินจริง ทุกดอลลาร์ที่ออกจากระบบผ่านการตรวจเก้าสิบวันของสิ่งที่นำไปสู่ยอดเงิน และสัญญาณน่าสงสัยเพียงหนึ่งเดียวในช่วงนั้นก็พอให้ส่งการตัดสินใจไปให้คน สองเลเยอร์รวมกันหมายความว่าผู้เล่นสุจริตไม่เคยเจออุปสรรคตอนจับ และผู้โจมตีที่หลุดการจับปลอมผ่านมาได้ก็ไม่เคยเห็นเงิน
เลเยอร์ที่ห้า ตอนจับ: เส้นทางการเคลื่อนไหว โทรศัพท์ทุกเครื่องมีเซนเซอร์วัดความเร่งและไจโรสโคปบนชิปเดียวกับที่คุยกับ GPS ตอนนี้ Seek บันทึกช่วงสั้นๆ ของการเคลื่อนไหวในไม่กี่วินาทีก่อนการจับ คำนวณสถิติชุดเล็กๆ (ความแปรปรวนของขนาด กิจกรรมการหมุน จำนวนเฟรมที่นิ่ง) และส่งสรุปไปพร้อมคำขอเก็บ โทรศัพท์ที่เดินไปหาสปอนมีลายเซ็นการเคลื่อนไหวต่างจากโทรศัพท์ที่วางบนโต๊ะพร้อมซิมูเลเตอร์ GPS ลายเซ็นนี้ยังไม่ถูกบังคับใช้ในเลเยอร์การจับวันนี้ ด้วยเหตุผลเดียวกับแฟล็กสภาพแวดล้อม: ไคลเอนต์ที่ถูกแพตช์โกหกได้ มันเข้าไปในด่านป้องกันการโกงเก้าสิบวันร่วมกับสัญญาณซิมูเลเตอร์และผู้ให้บริการตำแหน่งจำลอง และเส้นทางการเคลื่อนไหวที่แบนราบในบันทึกก็เป็นอีกเงื่อนไขที่ส่งการถอนให้คนตรวจสอบ
ตัวอย่างจริง ผู้ทดสอบเปิดโปรแกรมปลอม GPS ตั้งพิกัดไปที่ดรอป Seek อีกฟากเมือง แล้วแตะจับ การตรวจระยะทางผ่านเพราะพิกัดปลอมตรงกัน การรับรองผ่านเพราะแอปไม่ได้ถูกดัดแปลง การจับถูกบันทึก สองชั่วโมงต่อมา ผู้ทดสอบคนเดิมจับอีกสามครั้ง หนึ่งในนั้นจากพิกัดที่ห่างออกไปสิบกิโลเมตร เส้นทางการเคลื่อนไหวของทั้งสี่ครั้งแบนราบ (โทรศัพท์ไม่เคยขยับ) และการตรวจการเคลื่อนที่ที่เป็นไปไม่ได้ทำงานกับสองพิกัดที่เดินไปถึงไม่ได้ในสองชั่วโมง บัญชียังเล่นต่อ เก็บต่อ และไม่รู้ว่ามีอะไรผิด เมื่อผู้ทดสอบขอถอนเงิน คำขอไปอยู่บนโต๊ะตรวจสอบของคนพร้อมแฟล็กการเคลื่อนที่ที่เป็นไปไม่ได้และเส้นทางการเคลื่อนไหวที่แบนราบ ผู้ตรวจปฏิเสธ ยอดสะสมสี่สิบดอลลาร์ของผู้ทดสอบไม่เคยมีค่าอะไรนอกแอป
กรอบทางเศรษฐศาสตร์ สิ่งที่สำคัญไม่ใช่ว่าการปลอมการจับเป็นไปไม่ได้ แต่คือด่านการจ่ายเงินอ่านย้อนไปทุกอย่างที่บัญชีทำเพื่อให้ได้ยอดนั้น ดรอปมูลค่าสองยูโรที่ป้องกันด้วยการรับรองและระยะทางโจมตีครั้งเดียวได้ถูก และไร้ประโยชน์ที่จะโจมตีซ้ำ เพราะการตรวจการถอนจับรูปแบบได้ก่อนที่รูปแบบนั้นจะกลายเป็นเงิน ดรอปมูลค่าหนึ่งหมื่นยูโรต้องมีกรอบที่แข็งแรงกว่าในเลเยอร์การจับ ซึ่งคือเรื่องของโรดแมปด้านล่าง
สิ่งที่อยู่ในโรดแมป บีคอนสำรองสำหรับดรอปในอาคารคือการควบคุมตัวถัดไปที่จะมา สำหรับสปอนที่วางในอาคารที่ GPS ไร้ความหมาย บีคอน Bluetooth ขนาดเล็กที่ลงทะเบียนกับดรอปช่วยให้แอปพิสูจน์การอยู่ได้โดยไม่ต้องพึ่งพิกัดดาวเทียมเลย การบังคับใช้การรับรองคืออีกแนวทาง: วันนี้คำขอที่ไม่มีการรับรองถูกบันทึกแต่ยังยอมรับ เพื่อให้เราวัดอัตราการปฏิเสธผิดพลาดกับอุปกรณ์สุจริตก่อนเปิดสวิตช์ปฏิเสธทันที ทั้งสองจะมาเป็นส่วนเพิ่มเล็กๆ น่าเบื่อ และตรวจสอบได้ บนรูปแบบการจับและการจ่ายเงินเดียวกับที่ใช้อยู่
สิ่งที่ยังทำงานได้ไม่ดี GPS ในอาคารคลาดเคลื่อนสิบถึงสิบห้าเมตรในห้าง และความฉลาดฝั่งเซิร์ฟเวอร์เท่าไรก็แก้ไม่ได้ บีคอนคือคำตอบจริง จึงอยู่ในโรดแมป ความหน่วงต่ำกว่าหนึ่งวินาทียังไม่มี และคงจะไม่มี เพราะด่านป้องกันการโกงอ่านประวัติ ไม่ใช่คำขอเดียว อุปกรณ์สวมใส่มีเซนเซอร์น้อยกว่าโทรศัพท์ การออกแบบ proof of location ที่ปรับมาสำหรับโทรศัพท์จึงย้ายไปใช้กับแว่นได้ไม่ราบรื่น และรัฐที่มีรถบรรทุกอุปกรณ์ RF เอาชนะตัวยืนยันบนโทรศัพท์มือถือใดก็ได้ในวันนี้ โปรโตคอลที่อ้างเป็นอย่างอื่นไม่ได้ซื่อตรงกับคุณ ของเราจะไม่ทำแบบนั้น
หลักการออกแบบที่ควรพูดออกมาดังๆ ตัวยืนยันควรซื่อตรงว่ามันพิสูจน์อะไรได้และไม่ได้ การนำเสนอคะแนนความน่าจะเป็นราวกับเป็นใช่หรือไม่ใช่แบบเด็ดขาด แย่กว่าการนำเสนอใช่หรือไม่ใช่จากกฎที่เข้มงวด เพราะคะแนนสร้างแถบเลื่อน และแถบเลื่อนใดก็ถูกดันไปทางยอมรับข้อยืนยันมากขึ้นเมื่อเป้าการมีส่วนร่วมตามหลัง เลเยอร์การจับของเราไม่มีแถบเลื่อน ผ่านการตรวจหรือไม่ผ่านเท่านั้น เลเยอร์ป้องกันการโกงมีแถบเลื่อน และแถบเลื่อนนั้นอยู่กับคน ไม่ใช่ในโค้ด
นี่คือส่วนเบื้องหลัง Seek ที่ทำให้สินทรัพย์ที่ยึดพิกัดและ airdrop ที่ยืนยันตำแหน่งคุ้มค่าที่จะทำ ผู้เผยแพร่วางโทเคนมูลค่าเงินจริงไว้ที่พิกัด เพราะคนที่ได้มันไปอยู่ที่พิกัดนั้นจริงด้วยอุปกรณ์ที่ผ่านการรับรอง และเพราะด่านการจ่ายเงินจะอ่านย้อนประวัติของบัญชีก่อนเงินจะเคลื่อน whitepaper มีข้อกำหนดฉบับเต็ม บทความนี้คือเวอร์ชันภาษาง่ายของสิ่งที่เกิดขึ้นในแอป
สรุปสั้นๆ การอยู่ที่จุดนั้นไม่ใช่พิกัด สัญญาณเดียวพิสูจน์การอยู่ไม่ได้ Seek ยืนยันการอยู่เป็นสองเลเยอร์: การรับรองอุปกรณ์ ระยะทาง และเส้นทางการเคลื่อนไหว ณ ขณะที่จับ และด่านป้องกันการโกงเก้าสิบวัน ณ ขณะที่จ่ายเงิน สิ่งที่ยังเปิดอยู่ คือบีคอนสำรองสำหรับดรอปในอาคาร จะปิดกรณีพิกัดสุดท้ายที่ GPS อย่างเดียวทำไม่ได้ นั่นคือ proof of location จริงๆ ใน Seek วันนี้ และเป็นเหตุผลที่เลเยอร์นี้สำคัญกว่าสิ่งหวือหวาใดๆ ที่มันทำให้เกิดขึ้น


