شروع با Trust Tokens

Trust Tokens یک API جدید است که به وب‌سایت امکان می‌دهد تا مقدار محدودی از اطلاعات را از یک زمینه مرور به دیگری (به عنوان مثال، در سراسر سایت‌ها) برای کمک به مبارزه با تقلب، بدون ردیابی غیرفعال، منتقل کند.



خلاصه

توکن‌های اعتماد یک منبع را قادر می‌سازد تا توکن‌های رمزنگاری را برای کاربری مورد اعتماد خود صادر کند. توکن ها توسط مرورگر کاربر ذخیره می شوند. سپس مرورگر می تواند از نشانه ها در زمینه های دیگر برای ارزیابی اعتبار کاربر استفاده کند.

Trust Token API اعتماد یک کاربر در یک زمینه را قادر می‌سازد تا بدون شناسایی کاربر یا پیوند دادن دو هویت، به یک زمینه دیگر منتقل شود.

می‌توانید API را با نسخه‌ی نمایشی ما امتحان کنید و نشانه‌ها را در برگه‌های « شبکه ابزارهای توسعه‌دهنده Chrome» و «برنامه» بررسی کنید.

اسکرین شات نشان‌های Trust Tokens را در برگه Chrome DevTools Network نشان می‌دهد.
در برگه Chrome DevTools Network به توکن‌ها اعتماد کنید.
اسکرین شات نشان‌های Trust Tokens را در برگه Chrome DevTools Application نشان می‌دهد.
به توکن‌ها در برگه Chrome DevTools Application اعتماد کنید.

چرا به توکن های اعتماد نیاز داریم؟

وب به راه‌هایی برای ایجاد سیگنال‌های اعتماد نیاز دارد که نشان دهد کاربر همان چیزی است که می‌گوید، و نه رباتی که تظاهر به یک انسان کند، یا شخص ثالث مخربی که از یک شخص یا سرویس واقعی کلاهبرداری می‌کند. حفاظت از تقلب به ویژه برای تبلیغ کنندگان، ارائه دهندگان تبلیغات و CDN ها مهم است.

متأسفانه، بسیاری از مکانیسم‌های موجود برای سنجش و انتشار قابلیت اعتماد - برای اینکه مشخص شود تعامل با یک سایت از طرف یک انسان واقعی است یا نه - از تکنیک‌هایی استفاده می‌کنند که می‌توانند برای انگشت نگاری نیز استفاده شوند.

API باید حریم خصوصی را حفظ کند و امکان انتشار اعتماد در سایت‌ها را بدون ردیابی فردی کاربر فراهم کند.

در پیشنهاد Trust Tokens چیست؟

وب برای شناسایی کلاهبرداری و ارسال هرزنامه به ایجاد سیگنال های اعتماد متکی است. یکی از راه‌های انجام این کار، ردیابی مرور با شناسه‌های جهانی و بین سایتی برای هر کاربر است. برای API حفظ حریم خصوصی، این قابل قبول نیست.

از توضیح دهنده پیشنهاد:

این API یک منطقه ذخیره‌سازی برای هر منبع جدیدی را برای توکن‌های رمزنگاری سبک «Privacy Pass» پیشنهاد می‌کند که در زمینه‌های شخص ثالث قابل دسترسی هستند. این توکن ها شخصی نیستند و نمی توان از آنها برای ردیابی کاربران استفاده کرد، اما به صورت رمزنگاری امضا شده اند بنابراین نمی توان آنها را جعل کرد.

هنگامی که یک مبدأ در زمینه‌ای است که کاربر به آن اعتماد دارد، می‌تواند دسته‌ای از نشانه‌ها را برای مرورگر صادر کند، که می‌تواند در زمان دیگری در زمینه‌ای که کاربر در غیر این صورت ناشناخته یا کمتر مورد اعتماد باشد، «خرج» شود. نکته مهم این است که توکن ها از یکدیگر قابل تشخیص نیستند و از ردیابی وب سایت ها از طریق آنها جلوگیری می کنند.

ما علاوه بر این، مکانیسمی را برای مرورگر پیشنهاد می‌کنیم تا درخواست‌های خروجی را با کلیدهایی که به بازخرید توکن خاصی متصل هستند، امضا کند.

نمونه استفاده از API

موارد زیر از کد نمونه در توضیح دهنده API اقتباس شده است.

تصور کنید که کاربر از یک وب سایت خبری ( publisher.example ) بازدید می کند که تبلیغات را از یک شبکه تبلیغاتی شخص ثالث ( foo.example ) درج می کند. کاربر قبلاً از یک سایت رسانه اجتماعی استفاده کرده است که نشانه های اعتماد را صادر می کند ( issuer.example ).

دنباله زیر نحوه عملکرد توکن های اعتماد را نشان می دهد.

1. کاربر از issuer.example بازدید می کند و اقداماتی را انجام می دهد که باعث می شود سایت به این باور برسد که یک انسان واقعی است، مانند فعالیت حساب یا عبور از چالش CAPTCHA.

2. issuer.example تأیید می‌کند که کاربر یک انسان است و جاوا اسکریپت زیر را برای صدور یک رمز اعتماد برای مرورگر کاربر اجرا می‌کند:

fetch('https://issuer.example/trust-token', {
  trustToken: {
    type: 'token-request',
    issuer: 'https://issuer.example'
  }
}).then(...)

3. مرورگر کاربر رمز اعتماد را ذخیره می کند و آن را با issuer.example مرتبط می کند.

4. مدتی بعد، کاربر از publisher.example بازدید می کند.

5. publisher.example می خواهد بداند آیا کاربر یک انسان واقعی است یا خیر. publisher.example به issuer.example اعتماد دارد، بنابراین بررسی می‌کند که آیا مرورگر کاربر دارای نشانه‌های معتبری از آن مبدا است یا خیر:

document.hasTrustToken('https://issuer.example');

6. اگر این یک وعده را بازگرداند که به true مشخص می‌شود، به این معنی است که کاربر دارای نشانه‌هایی از issuer.example است، بنابراین publisher.example می‌تواند سعی کند یک توکن را پس‌خرید کند:

fetch('https://issuer.example/trust-token', {
trustToken: {
  type: 'token-redemption',
  issuer: 'https://issuer.example',
  refreshPolicy: {none, refresh}
}
}).then(...)

با این کد:

  1. Redeemer publisher.example درخواست بازخرید می کند.
  2. اگر بازخرید موفقیت آمیز باشد، صادرکننده issuer.example یک سابقه بازخرید را برمی‌گرداند که نشان می‌دهد در نقطه‌ای یک توکن معتبر برای این مرورگر صادر کرده است.

    7. هنگامی که وعده بازگشتی توسط fetch() حل شد، رکورد بازخرید می‌تواند در درخواست‌های منابع بعدی استفاده شود:

fetch('https://foo.example/get-content', {
  trustToken: {
    type: 'send-redemption-record',
    issuers: ['https://issuer.example', ...]
  }
});

با این کد:

  1. رکوردهای بازخرید به عنوان هدر درخواست Sec-Redemption-Record گنجانده شده است.
  2. foo.example رکورد بازخرید را دریافت می‌کند و می‌تواند رکورد را تجزیه کند تا تعیین کند که issuer.example فکر می‌کند این کاربر یک انسان است یا خیر.
  3. foo.example بر این اساس پاسخ می دهد.
چگونه یک وب سایت می تواند به شما اعتماد کند یا خیر؟

ممکن است سابقه خرید با یک سایت تجارت الکترونیکی، ثبت نام در یک پلت فرم مکان یا سابقه حساب در یک بانک داشته باشید. صادرکنندگان همچنین ممکن است به عوامل دیگری مانند مدت زمان داشتن حساب یا سایر تعاملات (مانند CAPTCHA یا ارسال فرم) که اعتماد صادرکننده را در احتمال اینکه شما یک انسان واقعی هستید، افزایش دهد، نگاه کنند.

صدور توکن اعتماد

اگر توسط یک صادرکننده نماد اعتماد، مانند issuer.example ، کاربر قابل اعتماد تشخیص داده شود، صادرکننده می‌تواند با درخواست fetch() با پارامتر trustToken ، توکن‌های اعتماد را برای کاربر واکشی کند:

fetch('issuer.example/trust-token', {
  trustToken: {
    type: 'token-request'
  }
}).then(...)

این یک فرمت پروتکل صدور مجوز Privacy Pass را با استفاده از یک رمزنگاری بدوی جدید فراخوانی می کند:

  1. مجموعه ای از اعداد شبه تصادفی به نام nonces را ایجاد کنید.

  2. nonces را کور کنید (آنها را رمزگذاری کنید تا صادرکننده نتواند محتویات آنها را مشاهده کند) و آنها را به درخواست در سرآیند Sec-Trust-Token پیوست کنید.

  3. یک درخواست POST به نقطه پایانی ارائه شده ارسال کنید.

نقطه پایانی با توکن‌های کور پاسخ می‌دهد (امضا روی nonces کور)، سپس توکن‌ها کور شده و به‌صورت داخلی همراه با nonces مرتبط توسط مرورگر به عنوان نشانه‌های اعتماد ذخیره می‌شوند.

به بازخرید توکن اعتماد کنید

یک سایت ناشر (مانند publisher.example در مثال بالا) می تواند بررسی کند که آیا توکن های اعتماد برای کاربر موجود است یا خیر:

const userHasTokens = await document.hasTrustToken('issuer.example/trust-token');

اگر نشانه‌هایی در دسترس باشد، سایت ناشر می‌تواند آن‌ها را برای دریافت سابقه بازخرید بازخرید کند:

fetch('issuer.example/trust-token', {
  ...
  trustToken: {
    type: 'token-redemption',
    refreshPolicy: 'none'
  }
  ...
}).then(...)

ناشر می‌تواند سوابق بازخرید را در درخواست‌هایی که به نشانه اعتماد نیاز دارند - مانند ارسال نظر، لایک کردن یک صفحه یا رأی دادن در نظرسنجی - با استفاده از فراخوانی fetch() مانند موارد زیر اضافه کند:

fetch('https://foo.example/post-comment', {
  ...
  trustToken: {
    type: 'send-redemption-record',
    issuers: ['issuer.example/trust-token', ...]
  }
  ...
}).then(...);

سوابق بازخرید به عنوان سرصفحه درخواست Sec-Redemption-Record گنجانده شده است.

ملاحظات حریم خصوصی

توکن‌ها طوری طراحی شده‌اند که «غیرقابل پیوند» باشند. یک صادرکننده می‌تواند اطلاعات کلی درباره سایت‌هایی را که کاربرانش بازدید می‌کنند، بیاموزد، اما نمی‌تواند صدور را با بازخرید پیوند دهد: وقتی کاربر یک توکن را بازخرید می‌کند، صادرکننده نمی‌تواند توکن را از سایر نشانه‌هایی که ایجاد کرده است تشخیص دهد. با این حال، توکن‌های اعتماد در حال حاضر در خلأ وجود ندارند: راه‌های دیگری وجود دارد که صادرکننده می‌تواند در حال حاضر - در تئوری - به هویت کاربر در سراسر سایت‌ها بپیوندد، مانند کوکی‌های شخص ثالث و تکنیک‌های ردیابی مخفی. برای سایت‌ها مهم است که این انتقال اکوسیستم را هنگام برنامه‌ریزی پشتیبانی خود درک کنند. این یک جنبه کلی از انتقال برای بسیاری از APIهای Privacy Sandbox است، بنابراین در اینجا بیشتر مورد بحث قرار نگرفته است.

ملاحظات امنیتی

کاسته شدن توکن اعتماد: یک سایت مخرب می‌تواند عمداً ذخیره توکن‌های کاربر را از یک صادرکننده خاص کاهش دهد. چندین روش کاهش دهنده در برابر این نوع حمله وجود دارد، مانند اینکه صادرکنندگان را قادر می‌سازد تا توکن‌های زیادی را در یک زمان ارائه دهند، بنابراین کاربران از منابع کافی اطمینان حاصل می‌کنند که مرورگرها تنها یک توکن را در هر نمایش صفحه سطح بالا بازخرید می‌کنند.

پیشگیری از دوبار خرج کردن: بدافزار ممکن است سعی کند به تمام نشانه‌های اعتماد کاربر دسترسی پیدا کند. با این حال، توکن‌ها به مرور زمان تمام می‌شوند، زیرا هر بازخریدی به همان صادرکننده توکن ارسال می‌شود، که می‌تواند تأیید کند که هر توکن فقط یک بار استفاده شده است. برای کاهش ریسک، ناشران همچنین می توانند توکن های کمتری را امضا کنند.

مکانیزم های درخواست

ممکن است امکان ارسال رکوردهای بازخرید خارج از fetch() فراهم شود، به عنوان مثال با درخواست های ناوبری. سایت‌ها همچنین ممکن است بتوانند داده‌های صادرکننده را در سرصفحه‌های پاسخ HTTP برای فعال کردن بازخرید توکن به موازات بارگیری صفحه قرار دهند.

برای تکرار: این پیشنهاد به بازخورد شما نیاز دارد! اگر نظری دارید، لطفاً در مخزن توضیح دهنده Trust Token مشکلی ایجاد کنید .

اطلاعات بیشتر


با تشکر از همه کسانی که در نوشتن و بررسی این پست کمک کردند.

عکس ZSun Fu در Unsplash .