دلیل اینکه بیشتر ایدههای کریپتویی مبتنی بر مکان از 2020 بیسروصدا مردند این بود که به GPS اعتماد کردند. GPS سیگنالی پخششونده است که هر گیرندهای میتواند به آن گوش دهد، و میشود به گیرنده گفت درباره آنچه شنیده دروغ بگوید. ابزار این کار حدود سی دلار در Amazon قیمت دارد و از 2015 همینطور بوده. هر پروتکلی که به یک کیف پول برای ایستادن در یک مختصات پول بدهد و ایستادن را فقط با GPS تأیید کند، پولش را به کیف پولهای جعلیای میبازد که روی مبل ایستادهاند. این نه حملهای سخت است و نه زیرکانه.
اثبات مکان لایهای است که این را درست میکند. این عبارت بیشتر از آنکه تعریف شود به کار میرود، پس با یک تعریف شروع کنیم. اثبات مکان ادعایی است، قابل تأیید توسط طرفی که حاضر نبوده، که یک دستگاه مشخص در یک بازه زمانی مشخص در یک مختصات مشخص بوده است. ادعایی درباره حضور است، نه درباره مختصات. بیشتر کار مهندسی در همین تمایز است.
مدل تهدید. ما در برابر یک دولت دفاع نمیکنیم؛ آن حالت حداکثری در پایان میآید. در برابر مهاجم متوسطی دفاع میکنیم که یک گوشی، یک لپتاپ و یک بعدازظهر وقت دارد. این مهاجم میتواند با ابزاری آماده GPS را جعل کند، اپلیکیشن را در شبیهساز اجرا کند و با یک خط کد کیف پول بسازد. این مهاجم هر کنترل منفردی را میتواند شکست دهد. هدف مهندسی این است که هزینه شکست دادن همه آنها با هم بیشتر از جایزه دراپ باشد.
این نوشته به زبان ساده آنچه Seek امروز انجام میدهد و آنچه در راه است را پوشش میدهد. عمداً در بخش بازاریابی کوتاهتر و در سازوکارها طولانیتر است.
لایه اول، در لحظه گرفتن: گواهی دستگاه. هر درخواست گرفتن یک بیانیه امضاشده از سیستمعامل دارد. روی iOS این Apple App Attest است و روی Android، Google Play Integrity. Seek هر دو را سمت سرور تأیید میکند. گواهی سه چیز را در یک امضا میگوید: این یک دستگاه واقعی است، فایل اجرایی اپلیکیشن دستکاری نشده، و فراخواننده کلیدی دارد که روی همین دستگاه برای بسته ما ساخته شده. گوشی روتشده رد میشود. شبیهساز رد میشود. اپلیکیشن بازبستهبندیشدهای که بررسی مکان را دور زده رد میشود. گواهی ثابت نمیکند گوشی کجاست؛ ثابت میکند گوشی درباره گوشی بودنش دروغ نمیگوید. همین است که سیگنالهای دیگر را ارزشمند میکند.
لایه دوم، در لحظه گرفتن: فاصله با حاشیه اطمینان. کلاینت فقط وقتی اجازه زدن دکمه گرفتن را میدهد که داخل شعاع جمعآوری اسپان باشی. سرور بهطور مستقل مختصاتی را که فرستادهای با مختصات اسپان مقایسه میکند و تا هفتاد و پنج متر فاصله را میپذیرد. فاصله بین شعاع دکمه و شعاع سرور عمدی است. نوسان GPS در گوشیای که به دیوار تکیه داده میتواند به دلایلی که تقصیر تو نیست چند متر جابهجا شود و رد کردن گرفتنها در این محدوده نوسان دلبخواهی به نظر میرسد. فراتر از هفتاد و پنج متر، درخواست مستقیماً رد میشود، بدون امتیازدهی و بدون امکان اعتراض در آن لایه.
لایه دوم، ادامه: محدودیت نرخ و سقف برای هر اسپان. دو درخواست جمعآوری با فاصله کمتر از پنج ثانیه از یک دروازه مبتنی بر Postgres که بین نمونههای بدون سرور پایدار میماند پاسخ 429 میگیرند. یک اسپان حداکثر دو تلاش از یک حساب را میپذیرد و تلاش دوم 65 درصد تلاش اول ارزش دارد. این سقفها برای تشخیص تقلب نیستند؛ هستند تا رباتی که از لایههای دیگر گذشته نتواند نقطه دسترسی را سریعتر از بازی یک انسان استخراج کند.
لایه سوم، در لحظه گرفتن: سیگنالهای محیطی، ثبتشده اما اجرانشده. هر گرفتن پرچمهایی هم دارد: اینکه آیا درخواست از شبیهساز آمده، اینکه آیا Android گزارش داده موقعیت از یک ارائهدهنده موقعیت ساختگی آمده، و دقت گزارششده GPS به متر. اینها ثبت میشوند و هرگز برای رد خود گرفتن استفاده نمیشوند. کلاینتی که درباره آنها دروغ میگوید دقیقاً همان کلاینتی است که نمیخواهی تصمیم را بگیرد، پس تصمیم جای دیگری گرفته میشود. اهمیتشان در لایه چهارم است.
لایه چهارم، در لحظه پرداخت: دروازه تقلب. برداشتها از تابعی سمت سرور میگذرند که گرفتنهای نود روز گذشته حساب را میخواند. اگر هر کدام از آن گرفتنها از شبیهساز آمده باشد، یا Android یک ارائهدهنده ساختگی گزارش کرده باشد، یا حساب دو گرفتن موفق با فاصله کمتر از ده ثانیه داشته باشد، یا حساب بین دو مختصات گرفتن سریعتر از توان جابهجایی یک انسان حرکت کرده باشد، یا حساب دیگری از همان اثرانگشت دستگاه برداشت کرده باشد، برداشت به جای تأیید خودکار به بررسی انسانی فرستاده میشود. به کاربر گفته نمیشود کدام زنگ خطر به صدا درآمد و حسابش بهطور عادی به بازی ادامه میدهد. تشخیص یک تصمیم تجاری درباره پرداخت است، نه یک مجازات.
دلیل جدا کردن گرفتن و پرداخت این است که از چیزهای متفاوتی دفاع میکنند. لایه گرفتن از بازی دفاع میکند. اگر گرفتن تقلبی بوده باشد، به ارز بازیای تبدیل میشود که هرگز از اپلیکیشن بیرون نمیرود و هزینهای ندارد. لایه پرداخت از پول واقعی دفاع میکند. هر دلاری که از سیستم خارج میشود از بررسی نودروزه آنچه به موجودی منجر شده میگذرد و یک سیگنال مشکوک در آن بازه کافی است تا تصمیم به یک انسان سپرده شود. این دو لایه با هم یعنی بازیکن مشروع در لحظه گرفتن هرگز اصطکاکی نمیبیند و مهاجمی که یک گرفتن بد را رد کرده هرگز پول را نمیبیند.
لایه پنجم، در لحظه گرفتن: رد حرکت. هر گوشی یک شتابسنج و یک ژیروسکوپ روی همان تراشهای دارد که با GPS در ارتباط است. Seek حالا پنجره کوتاهی از حرکت را برای ثانیههای منتهی به گرفتن ثبت میکند، مجموعه کوچکی از آمارهها (واریانس بزرگی، فعالیت چرخشی، تعداد فریمهای ساکن) را محاسبه میکند و این خلاصه را همراه درخواست جمعآوری میفرستد. گوشیای که تا یک اسپان راه رفته امضای حرکتی متفاوتی از گوشیای دارد که روی میز با یک شبیهساز GPS در حال اجرا افتاده. این امضا امروز در لایه گرفتن اجرا نمیشود، به همان دلیلی که پرچمهای محیطی نمیشوند: یک کلاینت وصلهشده میتواند دروغ بگوید. وارد دروازه تقلب نودروزه میشود، کنار سیگنالهای شبیهساز و ارائهدهنده ساختگی، و یک رد حرکت صاف در سابقه زنگ خطر دیگری است که یک برداشت را به بررسی انسانی میسپارد.
یک مثال کاربردی. یک آزمایشگر جعلکننده GPS را اجرا میکند، مختصات را روی یک دراپ Seek در آن سر شهر میگذارد و گرفتن را میزند. بررسی فاصله رد نمیشود چون مختصات جعلی مطابق است. گواهی رد نمیشود چون اپلیکیشن تغییر نکرده. گرفتن ثبت میشود. دو ساعت بعد همان آزمایشگر سه گرفتن دیگر انجام میدهد، یکی از آنها از مختصاتی ده کیلومتر دورتر. رد حرکت در هر چهار صاف است (گوشی هرگز تکان نخورد) و بررسی جابهجایی ناممکن روی دو مختصاتی که در دو ساعت با پای پیاده قابل دسترسی نبودند فعال میشود. حساب به بازی ادامه میدهد، به جمع کردن ادامه میدهد و نمیداند مشکلی هست. وقتی آزمایشگر درخواست پرداخت میدهد، با پرچم جابهجایی ناممکن و رد حرکت صاف پیوستشده روی میز بررسی انسانی مینشیند. بررسیکننده ردش میکند. موجودی چهل دلاری جمعشده آزمایشگر هرگز بیرون از اپلیکیشن ارزشی پیدا نمیکند.
چارچوب اقتصادی. آنچه مهم است ناممکن بودن جعل خود گرفتن نیست؛ این است که دروازه پرداخت همه کارهایی را که حساب برای رسیدن به موجودی انجام داده دوباره میخواند. دراپی به ارزش دو یورو که با گواهی و فاصله محافظت میشود برای یک بار حمله ارزان و برای حملههای مکرر بیفایده است، چون بررسی برداشت الگو را پیش از تبدیل شدنش به پول میگیرد. دراپی به ارزش ده هزار یورو در لایه گرفتن چارچوب قویتری لازم دارد، که نقشه راه زیر درباره همان است.
آنچه در نقشه راه است. جایگزین بیکن برای دراپهای فضای بسته کنترل بعدی است که میرسد. برای اسپانی که داخل ساختمانی گذاشته شده که GPS در آن بیمعناست، یک بیکن کوچک Bluetooth که برای دراپ ثبت شده به اپلیکیشن اجازه میدهد بدون وابستگی به موقعیت ماهوارهای حضور را ثابت کند. اجرای گواهی مسیر دوم است: امروز درخواستهای بدون گواهی ثبت میشوند اما همچنان پذیرفته میشوند، تا پیش از زدن کلید و رد مستقیم آنها، نرخ رد اشتباه دستگاههای مشروع را اندازه بگیریم. هر دو بهعنوان افزودههایی کوچک، خستهکننده و قابل تأیید به همان الگوی گرفتن و پرداختی که در حال استفاده است میرسند.
آنچه هنوز خوب کار نمیکند. GPS در یک مرکز خرید ده تا پانزده متر خطا دارد و هیچ مقدار زیرکی سمت سرور درستش نمیکند؛ بیکن پاسخ واقعی است و برای همین در نقشه راه است. تأخیر زیر یک ثانیه وجود ندارد و احتمالاً نخواهد داشت، چون دروازه تقلب تاریخچه را میخواند نه یک درخواست منفرد را. ابزارهای پوشیدنی حسگرهای کمتری از گوشی دارند، پس طراحی اثبات مکانی که برای گوشی تنظیم شده بهراحتی به عینک منتقل نمیشود. و دولتی با یک کامیون تجهیزات RF امروز میتواند هر تأییدکننده موبایلی را شکست دهد؛ هر پروتکلی که خلاف این را ادعا کند با تو صادق نیست. پروتکل ما این ادعا را نمیکند.
اصل طراحیای که ارزش دارد بلند گفته شود. یک تأییدکننده باید درباره آنچه میتواند و نمیتواند ثابت کند صادق باشد. ارائه یک امتیاز احتمالاتی بهعنوان بله یا نه مطلق بدتر از ارائه بله یا نه مطلق از قوانین سختگیرانه است، چون امتیاز یک اسلایدر میسازد و هر اسلایدری وقتی اهداف تعامل عقب بیفتند به سمت پذیرش دریافتهای بیشتر هل داده میشود. لایه گرفتن ما اسلایدر ندارد. یا از بررسیها رد میشود یا نه. لایه تقلب اسلایدر دارد و آن اسلایدر در دست یک انسان است، نه در کد.
این همان قطعه زیر Seek است که داراییهای لنگرانداخته و ایردراپهای با مکان تأییدشده را ارزشمند میکند. ناشر توکنی به ارزش پول واقعی را در یک مختصات میگذارد، چون کسی که در نهایت صاحبش میشود با دستگاهی گواهیشده در آن مختصات بوده، و چون دروازه پرداخت پیش از جابهجا شدن پول تاریخچه حساب را دوباره میخواند. وایتپیپر مشخصات کامل را دارد. این نوشته نسخه زبان ساده آن چیزی است که درون اپلیکیشن رخ میدهد.
خلاصهاش. حضور یک مختصات نیست. یک سیگنال منفرد حضور را ثابت نمیکند. Seek حضور را در دو لایه تأیید میکند: گواهی، فاصله و رد حرکت در لحظه گرفتن، و یک دروازه تقلب نودروزه در لحظه پرداخت. تنها مورد باقیمانده، جایگزین بیکن برای دراپهای فضای بسته، آخرین حالت مختصاتی را میبندد که GPS بهتنهایی نمیتواند. اثبات مکان امروز درون Seek واقعاً همین است، و به همین دلیل این لایه از هر کدام از چیزهای پرزرقوبرقتری که ممکن میکند مهمتر است.


