امنیت و معماری

قول حریم خصوصی واقعاً چطور ساخته شده.

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

آخرین بررسی در برابر کد: ۲۹ اوت ۲۰۲۶ دامنه: اپ iOS و watchOS، و سروری که پشتش است. نوشته‌شده از روی کدِ هر دو، نه از روی نقشهٔ راه.

ادعا، دقیق بیان‌شده

ضربان، تغییرپذیری ضربان، خواب و حرکتت روی آیفون خودت از Apple Health خوانده می‌شوند، روی همان آیفون در برابر حالت عادی خودت سنجیده می‌شوند و به یک جمله تبدیل می‌شوند. آن جمله تنها چیزی است که سفر می‌کند. هیچ اندازه‌گیری، هیچ امتیاز، هیچ نمودار و هیچ تاریخچه‌ای به سرورهای ما نمی‌رسد، چون اصلاً مسیری در کد وجود ندارد که چنین چیزی را بفرستد.

این قولی باریک‌تر از «ما خصوصی هستیم» است، و همان است که ارزش بررسی دارد. باقی این صفحه همان بررسی است.

چهار چیزی که از آن نتیجه می‌شود

  • نمی‌توانیم تاریخچهٔ سلامت خودت را در یک داشبورد وب نشانت بدهیم، چون نداریمش.
  • اگر کلید و همهٔ دستگاه‌هایت را از دست بدهی نمی‌توانیم گفت‌وگویت را برگردانیم، چون کلید هرگز مال ما نبود.
  • نمی‌توانیم قابلیت ابری روی محتوایت بسازیم، چون سرورهای ما نمی‌توانند بخوانندش.
  • یک حکم قضایی به ما، یک شناسهٔ بی‌نام و یک توکن اعلان تحویل می‌دهد. چیز دیگری برای دادن نیست.

مسیری که یک روز طی می‌کند

چهار گام، و فقط چهارمی از دستگاه بیرون می‌رود.

مرز نقطه‌چین دستگاه توست. هیچ‌چیز داخل آن به هیچ‌جا فرستاده نمی‌شود. آیفون تو security.flow.node_1 security.flow.node_2 security.flow.node_3 هرگز فرستاده نمی‌شود ضربان · HRV · خواب · حرکت · چرخه یک جمله iCloud تو همراهت سرور ما اعلان بی‌محتوا
مرز نقطه‌چین دستگاه توست. هیچ‌چیز داخل آن به هیچ‌جا فرستاده نمی‌شود.
  1. ۰۱

    اندازه‌گیری

    اپل واچ تو، یا بند WHOOP وصل‌شده، اندازه‌گیری‌ها را در Apple Health روی آیفونت می‌نویسد. Apple Health یک پایگاه داده روی گوشی توست، نه سرویسی از ما.

  2. ۰۲

    خواندن، با اجازه

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

  3. ۰۳

    تفسیر روی دستگاه

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

  4. ۰۴

    یک جمله رد می‌شود

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

هر تکه داده، و جایی که می‌نشیند

سه فهرست، چون داده دقیقاً سه جا می‌تواند باشد: دستگاه تو، فضایی که با همراهت شریکی، و سرور ما. جای چهارمی وجود ندارد.

روی دستگاه تو، و هیچ‌جای دیگر

در Keychain آیفون، خواندنی فقط بعد از اینکه گوشی از زمان روشن شدن یک بار باز شده باشد، و آگاهانه بیرون از پشتیبان iCloud تو.

  • ضربان، ضربان استراحت، HRV، خواب، قدم، دقیقهٔ تمرین و ایستادن، نرخ تنفس، اکسیژن خون، جلسه‌های تمرکز

    از Apple Health خوانده می‌شود. یک تاریخچهٔ ۹۰ روزهٔ چرخشی روی گوشی می‌ماند تا بخش روندها بتواند نمودار بکشد.

  • دادهٔ چرخهٔ قاعدگی

    فقط اگر «حواس به ریتم» را روشن کنی، که پیش‌فرض خاموش است. هم‌رسانی با iCloud برای آن در کد غیرفعال است، پس هرگز همگام نمی‌شود و نام فاز از دستگاه بیرون نمی‌رود.

  • بازه‌های نشانهٔ غیرعادی قلبی

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

  • کلید خصوصی هویت گفت‌وگوی تو

    روی دستگاه خودت ساخته می‌شود و در iCloud Keychain تو می‌ماند تا دستگاه‌های دیگر خودت هم بتوانند از آن استفاده کنند. هرگز به ما آپلود نمی‌شود.

  • توکن‌های دسترسی و تازه‌سازی WHOOP

    فقط اگر بندی وصل کنی. در keychain اپ، با نشان «فقط همین دستگاه» تا هرگز همگام نشود، و هنگام قطع اتصال سمت WHOOP هم باطل می‌شود.

  • سند رضایت تو، و فهرست اعلان‌های خود اپ

    سندی نسخه‌دار و زمان‌دار از آنچه پذیرفته‌ای، که هر وقت بخواهی پس می‌گیری. پس گرفتنش بلافاصله هر پردازش سلامتی را متوقف می‌کند.

چه چیزی به همراهت می‌رسد

از راه iCloud خودت، در فضایی خصوصی که با یک نفرِ نام‌برده به اشتراک گذاشته شده. آن فضا عمومی نیست: لینکش برای کسی که هویت iCloud او در فهرست شرکت‌کنندگان نباشد به هیچ درد نمی‌خورد.

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

هر چه روی سرور ما هست

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

رکورد چرا هست تا کِی می‌ماند
یک شناسهٔ بی‌نام iCloud، یک توکن اعلان، پلتفرم، و سه کلید روشن/خاموش اعلان تا اعلان به گوشی درست برسد. تا وقتی حسابت را در اپ پاک کنی، یا اپل توکن را مرده اعلام کند.
پیام فرم تماس: نام، ایمیل، کشور (اختیاری) و آنچه نوشته‌ای تا یک آدم بتواند جوابت را بدهد. تا پایان گفت‌وگو. با ایمیل به صندوق ما می‌رود؛ فقط موضوعش لاگ می‌شود.
کوکی نشست وب‌سایت و توکن CSRF تا سایت کار کند. کاملاً ضروری؛ هیچ کوکی تحلیلی یا تبلیغاتی وجود ندارد. تا پایان نشست مرورگر.
حساب‌های مدیریتی همین وب‌سایت تا بتوانیم همین صفحه‌ها را منتشر کنیم. بی‌ربط به اپ، که اصلاً ورود ندارد. تا وقتی حساب پاک شود.

آنچه آگاهانه غایب است: هر مقدار سلامت، هر متن پیام، هر نامی از اپ، هر موقعیت مکانی، هر شناسهٔ تبلیغاتی.

مدل رمزنگاری

نام‌برده، نه اشاره‌شده، تا بشود سرش بحث کرد.

توافق کلید
Curve25519، از راه CryptoKit اپل. هر طرف یک جفت‌کلید هویت روی دستگاه خودش می‌سازد و دو طرف مستقیم روی یک راز مشترک توافق می‌کنند. در هیچ نقطه‌ای مادهٔ کلید از سرورهای ما رد نمی‌شود.
رمزنگاری پیام
AES-GCM، از راه CryptoKit، که علاوه بر رمز کردن، اصالت را هم بررسی می‌کند: متن رمزشدهٔ دست‌کاری‌شده باز نمی‌شود، به جای اینکه به چیز دیگری باز شود.
کلیدها کجا زندگی می‌کنند
کلید خصوصی تو در iCloud Keychain خودت است، گره‌خورده به Apple ID تو و در دسترس دستگاه‌های خودت. ما نه کپی داریم و نه راهی برای درخواستش. خوانده‌های سلامتِ محلیِ ذخیره‌شده در keychain دستگاه‌اند، زیر ردهٔ «فقط همین دستگاه»، که آن‌ها را بیرون از پشتیبان iCloud نگه می‌دارد.
انتقال
بسته‌های رمزشده از CloudKit اپل عبور می‌کنند. تا وقتی هر دو گفت‌وگو را باز دارید، همان بایت‌های ازپیش‌رمزشده می‌توانند مسیر سریع‌تری از رلهٔ زمان‌واقعی خود ما هم بگیرند. آن رله امضا و عبور می‌دهد و چیزی ذخیره نمی‌کند.
اعلان‌ها
اعلان‌ها آگاهانه بی‌محتوا هستند: یک عنوان و متن ثابت به‌علاوهٔ یک رشتهٔ نوع، هرگز خود پیام. درخواست چیزی خصوصی هیچ‌وقت روی صفحهٔ قفل نوشته نمی‌شود، جایی که کسی کنارت ایستاده می‌تواند بخواندش.
ورود به WHOOP
گوشی تو مستقیم با WHOOP حرف می‌زند. سرور ما فقط تبادل توکن را انجام می‌دهد، چون WHOOP یک کلید محرمانه می‌خواهد و کلیدی که داخل یک اپ iOS بفرستی برای هر کسی که اپ را دانلود کند خواندنی است. از آن تبادل هیچ‌چیز ذخیره نمی‌شود: نه توکن، نه شناسهٔ کاربر WHOOP، نه یک ردیف. بازگشت روی دامنه‌ای می‌نشیند که این اپ از راه Associated Domains آن را از آنِ خود کرده، پس کد مجوز را اپ دیگری روی دستگاه نمی‌تواند برباید.

چه کسان دیگری چیزی دریافت می‌کنند

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

گیرنده چه چیزی می‌گیرد کِی
اپل بسته‌های رمزشده و جمله‌ها، داخل iCloud خودت، و تحویل اعلان. همیشه. فضای مشترک شما همان‌جاست.
گوگل (Firebase Cloud Messaging) یک توکن اعلان و عنوان و متن و نوعِ بی‌محتوا. تحلیل و تبلیغات Firebase در بیلد خاموش‌اند؛ فقط هستهٔ آن و بخش پیام‌رسانی لینک شده‌اند. وقتی اعلانی برایت فرستاده می‌شود.
GIPHY عبارت‌های جست‌وجوی گیف تو. خود گیفی که می‌فرستی مثل هر پیام دیگری رمزنگاری سرتاسری سفر می‌کند. فقط تا وقتی جست‌وجوی گیف باز است. هیچ‌وقت بازش نکنی، هیچ‌چیز نمی‌رود.
WHOOP ورود خودت و اندازه‌گیری‌های خودت، که گوشی‌ات مستقیم از WHOOP می‌خواند. فقط اگر بندی وصل کنی.
Fastmail پیام تماسی که برایمان نوشته‌ای. فقط اگر برایمان بنویسی.

در هر دو کدپایه نبودنش بررسی شده

  • هیچ SDK تحلیلی، از هیچ نوعی
  • هیچ SDK تبلیغاتی یا انتساب
  • هیچ شناسهٔ تبلیغاتی و هیچ درخواست اجازهٔ ردیابی، چون چیزی برای ردیابی نیست
  • هیچ گزارشگر کرش بیرونی؛ تشخیص فقط با فریم‌ورک روی‌دستگاهی اپل
  • هیچ پردازشگر پرداخت یا اشتراک
  • هیچ مدل زبانی، نه در اپ و نه روی سرور
  • هیچ ردیابی میان‌اپی، و هیچ دامنهٔ ردیابی در مانیفست حریم خصوصی

این از چه چیزی محافظتت نمی‌کند

بخشی که بیشتر صفحه‌ها جا می‌اندازند. هیچ‌کدام گزارش باگ نیست؛ همه یا معامله‌ای آگاهانه‌اند یا محدودیتی شناخته‌شده که ترجیح می‌دهیم از زبان ما بشنوی.

  • ما فراداده را می‌بینیم و رمزنگاری آن را از بین نمی‌برد

    می‌بینیم حسابی وجود دارد، دو حساب به هم وصل‌اند، پیامی با اندازه‌ای مشخص در زمانی مشخص بینشان جابه‌جا شده، و توکنی که اپل برای تحویل لازم دارد. تا جای ممکن کمش را نگه می‌داریم و هیچ‌کدامش را نمی‌فروشیم، اما «نمی‌توانیم پیام‌هایتان را بخوانیم» و «هیچ‌چیز دربارهٔ شما نمی‌دانیم» دو جملهٔ متفاوت‌اند و فقط اولی دربارهٔ هیچ‌کس دروغ نیست.

  • پرسش روزانه رمزنگاری سرتاسری ندارد

    پاسخ تو و همراهت مثل جملهٔ روز داخل فضای مشترک iCloud شما سفر می‌کنند، نه اینکه مثل گفت‌وگو جداگانه رمز شوند. ظرف ۴۸ ساعت از فضای مشترک منقضی می‌شوند و حداکثر هفت روز روی هر دستگاه می‌مانند. این را صریح می‌گوییم چون تنها ویژگی‌ای است که خواننده به‌درستی خلافش را فرض می‌کند.

  • بعضی ورودی‌های مشترک عمداً ساده‌اند

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

  • وصل شدن ردی کوتاه و عمومی باقی می‌گذارد

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

  • نقطهٔ پایانی اعلان با کلیدی محافظت می‌شود که داخل اپ می‌آید

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

  • دستگاه‌های خودت، و آدم‌های نزدیکشان

    هر کس بتواند گوشی‌ات را باز کند می‌تواند پیام‌هایت را بخواند، و این دربارهٔ هر اپ پیام‌رسانی صادق است. اگر برایت مهم است، قفل Face ID داخل اپ را روشن کن. به همین ترتیب، رمزنگاری سرتاسری از سیم محافظت می‌کند، نه از آدمی که خودت انتخاب کردی چیزی برایش بفرستی.

  • هنوز هیچ بازرسی مستقلی نشده

    بررسی‌ای که این صفحه از رویش ساخته شده را خودمان انجام داده‌ایم، در برابر کد خودمان، در تاریخ‌هایی که پایین آمده. این بیشتر از یک نیت است و کمتر از یک آدیت بیرونی، و هر اسم دیگری رویش بگذاریم اولین جملهٔ نادرست این صفحه خواهد بود. می‌خواهیم بررسی مستقلی سفارش بدهیم و هر وقت شد، تاریخش همین‌جا می‌آید.

چطور خودت این را بررسی کنی

نباید مجبور باشی حرف ما را قبول کنی، و روی iOS تا حد زیادی مجبور هم نیستی.

  1. ۰۱

    گزارش حریم خصوصی اپ را روشن کن

    در تنظیمات iOS، زیر Privacy & Security، گزارش حریم خصوصی اپ ثبت می‌کند هر اپ با چه دامنه‌هایی تماس می‌گیرد و چه حسگرهایی را لمس می‌کند. یک هفته از پالس استفاده کن و بخوان چه فهرست می‌کند. دنبال نبودِ دامنه‌های تحلیلی و تبلیغاتی بگرد.

  2. ۰۲

    صفحهٔ اجازه‌های Health را بخوان

    تنظیمات، بعد Health، بعد Data Access & Devices، بعد Pulse. هر نوعی که اپ می‌تواند بخواند و بنویسد آنجا نوشته شده. یکی را پس بگیر و ببین اپ با کمتر ادامه می‌دهد.

  3. ۰۳

    برچسب حریم خصوصی در App Store را ببین

    اپل می‌خواهد برچسب با کد بخواند، و برچسب ما یک نام، یک شناسهٔ بی‌نام کاربر و یک توکن دستگاه را اعلام می‌کند؛ همه با نشان «کارکرد اپ»، هیچ‌کدام با نشان ردیابی.

  4. ۰۴

    ترافیک را خودت تماشا کن

    اگر از آن آدم‌هایی هستی که پروکسی دارند، یکی را روی اپ بگیر. چیزی که می‌بینی iCloud است، نقطهٔ پایانی اعلان ما، و اگر بندی وصل کرده باشی WHOOP. چیزی که نمی‌بینی یک اندازه‌گیری است.

  5. ۰۵

    یک چیز مشخص از ما بپرس

    پرسش‌های مبهم دربارهٔ حریم خصوصی همه‌جا جواب مبهم می‌گیرند. پرسش مشخص دربارهٔ یک جریان مشخص از ما جواب مشخص می‌گیرد، و اگر جواب ناخوشایند باشد باز هم داده می‌شود.

آخرین بار کِی بررسی شد

هر مدخل یک بررسی کدِ منتشرشده در برابر ادعای سایت و سند حریم خصوصی است، با آنچه پیدا و اصلاح شد.

  1. ۲ ژوئیهٔ ۲۰۲۶

    بررسی کامل هر دو مخزن. پیدا و اصلاح شد: فهرست ناقص گیرندگان، ادعای «ما چیزی ذخیره نمی‌کنیم» که دربارهٔ رکورد اعلان درست نبود، و حذف حسابی که آن رکورد را پاک نمی‌کرد. برچسب حریم خصوصی App Store هم در همان دور اصلاح شد.

  2. ۲۴ ژوئیهٔ ۲۰۲۶

    بررسی رلهٔ زمان‌واقعی و دو قابلیت تازه. رله به‌عنوان یک مسیر انتقال اضافه افشا شد، و صریح نوشته شد که پرسش روزانه مثل گفت‌وگو رمزنگاری سرتاسری ندارد.

  3. ۲۹ اوت ۲۰۲۶

    بررسی فهرست تماشای مشترک و ورود WHOOP. ‏WHOOP به‌عنوان گیرندهٔ نام‌برده برای کسانی که بند وصل می‌کنند اضافه شد، و مستند شد که پیش‌نمایش لینک و کاور فقط توسط دستگاه فرستنده گرفته می‌شوند.

چیزی پیدا کردی؟

افشای مسئولانه خوش‌آمد است و نامت ذکر می‌شود. به [email protected] بنویس، با جزئیات کافی برای بازتولید، و پیش از انتشار فرصت معقولی به ما بده. جایزهٔ باگ پولی نداریم، برای آنکه صادقانه باشد خیلی کوچکیم، اما وکیل هم سراغت نمی‌فرستیم.

تماس امنیتی [email protected] نسخهٔ ماشین‌خوان در /.well-known/security.txt

باقی‌اش را بخوان.

سند حریم خصوصی نسخهٔ حقوقی همهٔ چیزهای بالا را دارد، شامل حق‌های تو و راه استفاده از آن‌ها.